galadrim-feedback 0.0.59 → 0.0.61
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.cjs +2 -2
- package/dist/index.es +2 -2
- package/dist/styles.css +19 -4
- package/package.json +1 -1
- package/src/components/atoms/modals/Modal.tsx +1 -1
- package/src/index.css +19 -4
package/dist/index.cjs
CHANGED
|
@@ -8677,7 +8677,7 @@ const Modal = ({ isVisible, closeModal, limitWidth = true, children, }) => {
|
|
|
8677
8677
|
return null;
|
|
8678
8678
|
}
|
|
8679
8679
|
const width = limitWidth ? "w-[400px]" : "";
|
|
8680
|
-
return (jsxRuntime.jsx("div", { className: "modal", onMouseDown: (e) => {
|
|
8680
|
+
return (jsxRuntime.jsx("div", { className: "gf-modal", onMouseDown: (e) => {
|
|
8681
8681
|
const target = e.target;
|
|
8682
8682
|
if (target.tagName === "TEXTAREA") {
|
|
8683
8683
|
resizing.current = true;
|
|
@@ -8720,4 +8720,4 @@ function FeedbackRoot(props) {
|
|
|
8720
8720
|
}
|
|
8721
8721
|
|
|
8722
8722
|
module.exports = FeedbackRoot;
|
|
8723
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3N1YnNjcmliYWJsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yb2xsdXAtcGx1Z2luLW5vZGUtcG9seWZpbGxzL3BvbHlmaWxscy9nbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcm9sbHVwLXBsdWdpbi1ub2RlLXBvbHlmaWxscy9wb2x5ZmlsbHMvcHJvY2Vzcy1lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3V0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9mb2N1c01hbmFnZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL29ubGluZU1hbmFnZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3RoZW5hYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9yZXRyeWVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9ub3RpZnlNYW5hZ2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9yZW1vdmFibGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3F1ZXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9xdWVyeUNhY2hlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9tdXRhdGlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vbXV0YXRpb25DYWNoZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vaW5maW5pdGVRdWVyeUJlaGF2aW9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9xdWVyeUNsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vcXVlcnlPYnNlcnZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vbXV0YXRpb25PYnNlcnZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9pc1Jlc3RvcmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9idWlsZC9tb2Rlcm4vdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9lcnJvckJvdW5kYXJ5VXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9zdXNwZW5zZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL3VzZUJhc2VRdWVyeS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL3VzZVF1ZXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9idWlsZC9tb2Rlcm4vdXNlTXV0YXRpb24uanMiLCIuLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50L2Jhc2UudHMiLCIuLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50L2NvbW1vbi50cyIsIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnQvYXBpLnRzIiwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudC9jb25maWd1cmF0aW9uLnRzIiwiLi4vLi4vc3JjL3NlcnZpY2VzL2FwaS50cyIsIi4uLy4uL3NyYy9zZXJ2aWNlcy9mZWVkYmFjay50cyIsIi4uLy4uL3NyYy9zZXJ2aWNlcy91c2VyLnRzIiwiLi4vLi4vc3JjL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9idXR0b25zL0J1dHRvbi50c3giLCIuLi9zcmMvYXNzZXRzL2ljb25zL2VkaXQtMDQuc3ZnIiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvYnV0dG9ucy9PcGVuRmVlZGJhY2tCdXR0b24udHN4IiwiLi4vLi4vc3JjL3V0aWxzL2dldEluaXRpYWxzLnRzIiwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2l0ZW0vRmVlZGJhY2tJdGVtSG92ZXJlZC50c3giLCIuLi9zcmMvYXNzZXRzL2ljb25zL2Nsb3NlLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2J1dHRvbnMvQ2xvc2VCdXR0b24udHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL3JlcGxpZXMvUmVwbHlJdGVtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3Mvc2hhcmVkL0ZlZWRiYWNrVGV4dEFyZWEudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9tZW51L01lbnVJdGVtLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvZG90cy1ob3Jpem9udGFsLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvbWVudS9NZW51QnV0dG9uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvaXRlbS9GZWVkYmFja0l0ZW1TZWxlY3RlZC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL3NoYXJlZC9GZWVkYmFja1Bvc2l0aW9uZXIudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9pdGVtL0ZlZWRiYWNrUGluLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvZ3JvdXAvRmVlZGJhY2tQaW5zLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2ljb25zL0NvbW1lbnRJY29uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvaXRlbS9GZWVkYmFja0lucHV0LnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvY2hldnJvbi1sZWZ0LnN2ZyIsIi4uL3NyYy9hc3NldHMvaWNvbnMvY2hldnJvbi1yaWdodC5zdmciLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9idXR0b25zL0NvbGxhcHNlQnV0dG9uLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvbG9nLW91dC0wMi5zdmciLCIuLi8uLi9zcmMvc2VydmljZXMvYXV0aC50cyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9Db25uZWN0ZWRVc2VyLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvc2VhcmNoLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2lucHV0cy9TZWFyY2hJbnB1dC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2l0ZW0vRmVlZGJhY2tMaXN0SXRlbS50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2dyb3VwL0ZlZWRiYWNrTGlzdC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQ29ubmVjdGVkUGFuZWwudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvaW5wdXRzL0lucHV0LnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvbG9nby1mZWVkYmFjay1kYXJrLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mb3Jtcy9TaWduVXBGb3JtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mb3Jtcy9TaWduSW5Gb3JtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9Db25uZWN0aW9uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL21vZGFscy9Nb2RhbC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9tb2RhbHMvQ29ubmVjdGlvbk1vZGFsLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9Db25uZWN0aW9uUGFuZWwudHN4IiwiLi4vc3JjL2Fzc2V0cy9pY29ucy9sb2dvLWZlZWRiYWNrLWxpZ2h0LnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9TaWRlQmFyLnRzeCIsIi4uLy4uL3NyYy9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL3N1YnNjcmliYWJsZS50c1xudmFyIFN1YnNjcmliYWJsZSA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuc3Vic2NyaWJlID0gdGhpcy5zdWJzY3JpYmUuYmluZCh0aGlzKTtcbiAgfVxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIHRoaXMub25TdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMub25VbnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH1cbiAgaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zaXplID4gMDtcbiAgfVxuICBvblN1YnNjcmliZSgpIHtcbiAgfVxuICBvblVuc3Vic2NyaWJlKCkge1xuICB9XG59O1xuZXhwb3J0IHtcbiAgU3Vic2NyaWJhYmxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NyaWJhYmxlLmpzLm1hcCIsImV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDpcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbi8vIGJhc2VkIG9mZiBodHRwczovL2dpdGh1Yi5jb20vZGVmdW5jdHpvbWJpZS9ub2RlLXByb2Nlc3MvYmxvYi9tYXN0ZXIvYnJvd3Nlci5qc1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbnZhciBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuaWYgKHR5cGVvZiBnbG9iYWwuc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xufVxuaWYgKHR5cGVvZiBnbG9iYWwuY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xufVxuXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5mdW5jdGlvbiBuZXh0VGljayhmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufVxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnZhciB0aXRsZSA9ICdicm93c2VyJztcbnZhciBwbGF0Zm9ybSA9ICdicm93c2VyJztcbnZhciBicm93c2VyID0gdHJ1ZTtcbnZhciBlbnYgPSB7fTtcbnZhciBhcmd2ID0gW107XG52YXIgdmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xudmFyIHZlcnNpb25zID0ge307XG52YXIgcmVsZWFzZSA9IHt9O1xudmFyIGNvbmZpZyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIG9uID0gbm9vcDtcbnZhciBhZGRMaXN0ZW5lciA9IG5vb3A7XG52YXIgb25jZSA9IG5vb3A7XG52YXIgb2ZmID0gbm9vcDtcbnZhciByZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG52YXIgcmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnZhciBlbWl0ID0gbm9vcDtcblxuZnVuY3Rpb24gYmluZGluZyhuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufVxuXG5mdW5jdGlvbiBjd2QgKCkgeyByZXR1cm4gJy8nIH1cbmZ1bmN0aW9uIGNoZGlyIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufWZ1bmN0aW9uIHVtYXNrKCkgeyByZXR1cm4gMDsgfVxuXG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9rdW1hdmlzL2Jyb3dzZXItcHJvY2Vzcy1ocnRpbWUvYmxvYi9tYXN0ZXIvaW5kZXguanNcbnZhciBwZXJmb3JtYW5jZSA9IGdsb2JhbC5wZXJmb3JtYW5jZSB8fCB7fTtcbnZhciBwZXJmb3JtYW5jZU5vdyA9XG4gIHBlcmZvcm1hbmNlLm5vdyAgICAgICAgfHxcbiAgcGVyZm9ybWFuY2UubW96Tm93ICAgICB8fFxuICBwZXJmb3JtYW5jZS5tc05vdyAgICAgIHx8XG4gIHBlcmZvcm1hbmNlLm9Ob3cgICAgICAgfHxcbiAgcGVyZm9ybWFuY2Uud2Via2l0Tm93ICB8fFxuICBmdW5jdGlvbigpeyByZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSB9O1xuXG4vLyBnZW5lcmF0ZSB0aW1lc3RhbXAgb3IgZGVsdGFcbi8vIHNlZSBodHRwOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19ocnRpbWVcbmZ1bmN0aW9uIGhydGltZShwcmV2aW91c1RpbWVzdGFtcCl7XG4gIHZhciBjbG9ja3RpbWUgPSBwZXJmb3JtYW5jZU5vdy5jYWxsKHBlcmZvcm1hbmNlKSoxZS0zO1xuICB2YXIgc2Vjb25kcyA9IE1hdGguZmxvb3IoY2xvY2t0aW1lKTtcbiAgdmFyIG5hbm9zZWNvbmRzID0gTWF0aC5mbG9vcigoY2xvY2t0aW1lJTEpKjFlOSk7XG4gIGlmIChwcmV2aW91c1RpbWVzdGFtcCkge1xuICAgIHNlY29uZHMgPSBzZWNvbmRzIC0gcHJldmlvdXNUaW1lc3RhbXBbMF07XG4gICAgbmFub3NlY29uZHMgPSBuYW5vc2Vjb25kcyAtIHByZXZpb3VzVGltZXN0YW1wWzFdO1xuICAgIGlmIChuYW5vc2Vjb25kczwwKSB7XG4gICAgICBzZWNvbmRzLS07XG4gICAgICBuYW5vc2Vjb25kcyArPSAxZTk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbc2Vjb25kcyxuYW5vc2Vjb25kc11cbn1cblxudmFyIHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5mdW5jdGlvbiB1cHRpbWUoKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCk7XG4gIHZhciBkaWYgPSBjdXJyZW50VGltZSAtIHN0YXJ0VGltZTtcbiAgcmV0dXJuIGRpZiAvIDEwMDA7XG59XG5cbnZhciBicm93c2VyJDEgPSB7XG4gIG5leHRUaWNrOiBuZXh0VGljayxcbiAgdGl0bGU6IHRpdGxlLFxuICBicm93c2VyOiBicm93c2VyLFxuICBlbnY6IGVudixcbiAgYXJndjogYXJndixcbiAgdmVyc2lvbjogdmVyc2lvbixcbiAgdmVyc2lvbnM6IHZlcnNpb25zLFxuICBvbjogb24sXG4gIGFkZExpc3RlbmVyOiBhZGRMaXN0ZW5lcixcbiAgb25jZTogb25jZSxcbiAgb2ZmOiBvZmYsXG4gIHJlbW92ZUxpc3RlbmVyOiByZW1vdmVMaXN0ZW5lcixcbiAgcmVtb3ZlQWxsTGlzdGVuZXJzOiByZW1vdmVBbGxMaXN0ZW5lcnMsXG4gIGVtaXQ6IGVtaXQsXG4gIGJpbmRpbmc6IGJpbmRpbmcsXG4gIGN3ZDogY3dkLFxuICBjaGRpcjogY2hkaXIsXG4gIHVtYXNrOiB1bWFzayxcbiAgaHJ0aW1lOiBocnRpbWUsXG4gIHBsYXRmb3JtOiBwbGF0Zm9ybSxcbiAgcmVsZWFzZTogcmVsZWFzZSxcbiAgY29uZmlnOiBjb25maWcsXG4gIHVwdGltZTogdXB0aW1lXG59O1xuXG5leHBvcnQgZGVmYXVsdCBicm93c2VyJDE7XG5leHBvcnQgeyBhZGRMaXN0ZW5lciwgYXJndiwgYmluZGluZywgYnJvd3NlciwgY2hkaXIsIGNvbmZpZywgY3dkLCBlbWl0LCBlbnYsIGhydGltZSwgbmV4dFRpY2ssIG9mZiwgb24sIG9uY2UsIHBsYXRmb3JtLCByZWxlYXNlLCByZW1vdmVBbGxMaXN0ZW5lcnMsIHJlbW92ZUxpc3RlbmVyLCB0aXRsZSwgdW1hc2ssIHVwdGltZSwgdmVyc2lvbiwgdmVyc2lvbnMgfTtcbiIsIi8vIHNyYy91dGlscy50c1xudmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCBcIkRlbm9cIiBpbiBnbG9iYWxUaGlzO1xuZnVuY3Rpb24gbm9vcCgpIHtcbn1cbmZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cGRhdGVyID09PSBcImZ1bmN0aW9uXCIgPyB1cGRhdGVyKGlucHV0KSA6IHVwZGF0ZXI7XG59XG5mdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5O1xufVxuZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVTdGFsZVRpbWUoc3RhbGVUaW1lLCBxdWVyeSkge1xuICByZXR1cm4gdHlwZW9mIHN0YWxlVGltZSA9PT0gXCJmdW5jdGlvblwiID8gc3RhbGVUaW1lKHF1ZXJ5KSA6IHN0YWxlVGltZTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVFbmFibGVkKGVuYWJsZWQsIHF1ZXJ5KSB7XG4gIHJldHVybiB0eXBlb2YgZW5hYmxlZCA9PT0gXCJmdW5jdGlvblwiID8gZW5hYmxlZChxdWVyeSkgOiBlbmFibGVkO1xufVxuZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICBjb25zdCB7XG4gICAgdHlwZSA9IFwiYWxsXCIsXG4gICAgZXhhY3QsXG4gICAgZmV0Y2hTdGF0dXMsXG4gICAgcHJlZGljYXRlLFxuICAgIHF1ZXJ5S2V5LFxuICAgIHN0YWxlXG4gIH0gPSBmaWx0ZXJzO1xuICBpZiAocXVlcnlLZXkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlICE9PSBcImFsbFwiKSB7XG4gICAgY29uc3QgaXNBY3RpdmUgPSBxdWVyeS5pc0FjdGl2ZSgpO1xuICAgIGlmICh0eXBlID09PSBcImFjdGl2ZVwiICYmICFpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gXCJpbmFjdGl2ZVwiICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2Ygc3RhbGUgPT09IFwiYm9vbGVhblwiICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZldGNoU3RhdHVzICYmIGZldGNoU3RhdHVzICE9PSBxdWVyeS5zdGF0ZS5mZXRjaFN0YXR1cykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbikge1xuICBjb25zdCB7IGV4YWN0LCBzdGF0dXMsIHByZWRpY2F0ZSwgbXV0YXRpb25LZXkgfSA9IGZpbHRlcnM7XG4gIGlmIChtdXRhdGlvbktleSkge1xuICAgIGlmICghbXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpICE9PSBoYXNoS2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXksIG11dGF0aW9uS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhdHVzICYmIG11dGF0aW9uLnN0YXRlLnN0YXR1cyAhPT0gc3RhdHVzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShtdXRhdGlvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgY29uc3QgaGFzaEZuID0gb3B0aW9ucz8ucXVlcnlLZXlIYXNoRm4gfHwgaGFzaEtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG5mdW5jdGlvbiBoYXNoS2V5KHF1ZXJ5S2V5KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBxdWVyeUtleSxcbiAgICAoXywgdmFsKSA9PiBpc1BsYWluT2JqZWN0KHZhbCkgPyBPYmplY3Qua2V5cyh2YWwpLnNvcnQoKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbFtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkgOiB2YWxcbiAgKTtcbn1cbmZ1bmN0aW9uIHBhcnRpYWxNYXRjaEtleShhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBiID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKChrZXkpID0+ICFwYXJ0aWFsTWF0Y2hLZXkoYVtrZXldLCBiW2tleV0pKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiByZXBsYWNlRXF1YWxEZWVwKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuICBjb25zdCBhcnJheSA9IGlzUGxhaW5BcnJheShhKSAmJiBpc1BsYWluQXJyYXkoYik7XG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICBjb25zdCBhSXRlbXMgPSBhcnJheSA/IGEgOiBPYmplY3Qua2V5cyhhKTtcbiAgICBjb25zdCBhU2l6ZSA9IGFJdGVtcy5sZW5ndGg7XG4gICAgY29uc3QgYkl0ZW1zID0gYXJyYXkgPyBiIDogT2JqZWN0LmtleXMoYik7XG4gICAgY29uc3QgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGNvcHkgPSBhcnJheSA/IFtdIDoge307XG4gICAgbGV0IGVxdWFsSXRlbXMgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldO1xuICAgICAgaWYgKCghYXJyYXkgJiYgYUl0ZW1zLmluY2x1ZGVzKGtleSkgfHwgYXJyYXkpICYmIGFba2V5XSA9PT0gdm9pZCAwICYmIGJba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNvcHlba2V5XSA9IHZvaWQgMDtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weVtrZXldID0gcmVwbGFjZUVxdWFsRGVlcChhW2tleV0sIGJba2V5XSk7XG4gICAgICAgIGlmIChjb3B5W2tleV0gPT09IGFba2V5XSAmJiBhW2tleV0gIT09IHZvaWQgMCkge1xuICAgICAgICAgIGVxdWFsSXRlbXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYVNpemUgPT09IGJTaXplICYmIGVxdWFsSXRlbXMgPT09IGFTaXplID8gYSA6IGNvcHk7XG4gIH1cbiAgcmV0dXJuIGI7XG59XG5mdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKCFiIHx8IE9iamVjdC5rZXlzKGEpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IGluIGEpIHtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBpc1BsYWluQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBjdG9yID0gby5jb25zdHJ1Y3RvcjtcbiAgaWYgKGN0b3IgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHByb3QgPSBjdG9yLnByb3RvdHlwZTtcbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUocHJvdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KFwiaXNQcm90b3R5cGVPZlwiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbn1cbmZ1bmN0aW9uIHNsZWVwKHRpbWVvdXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KTtcbiAgfSk7XG59XG5mdW5jdGlvbiByZXBsYWNlRGF0YShwcmV2RGF0YSwgZGF0YSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nKHByZXZEYXRhLCBkYXRhKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlRXF1YWxEZWVwKHByZXZEYXRhLCBkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFN0cnVjdHVyYWwgc2hhcmluZyByZXF1aXJlcyBkYXRhIHRvIGJlIEpTT04gc2VyaWFsaXphYmxlLiBUbyBmaXggdGhpcywgdHVybiBvZmYgc3RydWN0dXJhbFNoYXJpbmcgb3IgcmV0dXJuIEpTT04tc2VyaWFsaXphYmxlIGRhdGEgZnJvbSB5b3VyIHF1ZXJ5Rm4uIFske29wdGlvbnMucXVlcnlIYXNofV06ICR7ZXJyb3J9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBrZWVwUHJldmlvdXNEYXRhKHByZXZpb3VzRGF0YSkge1xuICByZXR1cm4gcHJldmlvdXNEYXRhO1xufVxuZnVuY3Rpb24gYWRkVG9FbmQoaXRlbXMsIGl0ZW0sIG1heCA9IDApIHtcbiAgY29uc3QgbmV3SXRlbXMgPSBbLi4uaXRlbXMsIGl0ZW1dO1xuICByZXR1cm4gbWF4ICYmIG5ld0l0ZW1zLmxlbmd0aCA+IG1heCA/IG5ld0l0ZW1zLnNsaWNlKDEpIDogbmV3SXRlbXM7XG59XG5mdW5jdGlvbiBhZGRUb1N0YXJ0KGl0ZW1zLCBpdGVtLCBtYXggPSAwKSB7XG4gIGNvbnN0IG5ld0l0ZW1zID0gW2l0ZW0sIC4uLml0ZW1zXTtcbiAgcmV0dXJuIG1heCAmJiBuZXdJdGVtcy5sZW5ndGggPiBtYXggPyBuZXdJdGVtcy5zbGljZSgwLCAtMSkgOiBuZXdJdGVtcztcbn1cbnZhciBza2lwVG9rZW4gPSBTeW1ib2woKTtcbmZ1bmN0aW9uIGVuc3VyZVF1ZXJ5Rm4ob3B0aW9ucywgZmV0Y2hPcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAob3B0aW9ucy5xdWVyeUZuID09PSBza2lwVG9rZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBBdHRlbXB0ZWQgdG8gaW52b2tlIHF1ZXJ5Rm4gd2hlbiBzZXQgdG8gc2tpcFRva2VuLiBUaGlzIGlzIGxpa2VseSBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuIFF1ZXJ5IGhhc2g6ICcke29wdGlvbnMucXVlcnlIYXNofSdgXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoIW9wdGlvbnMucXVlcnlGbiAmJiBmZXRjaE9wdGlvbnM/LmluaXRpYWxQcm9taXNlKSB7XG4gICAgcmV0dXJuICgpID0+IGZldGNoT3B0aW9ucy5pbml0aWFsUHJvbWlzZTtcbiAgfVxuICBpZiAoIW9wdGlvbnMucXVlcnlGbiB8fCBvcHRpb25zLnF1ZXJ5Rm4gPT09IHNraXBUb2tlbikge1xuICAgIHJldHVybiAoKSA9PiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYE1pc3NpbmcgcXVlcnlGbjogJyR7b3B0aW9ucy5xdWVyeUhhc2h9J2ApKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5xdWVyeUZuO1xufVxuZXhwb3J0IHtcbiAgYWRkVG9FbmQsXG4gIGFkZFRvU3RhcnQsXG4gIGVuc3VyZVF1ZXJ5Rm4sXG4gIGZ1bmN0aW9uYWxVcGRhdGUsXG4gIGhhc2hLZXksXG4gIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyxcbiAgaXNQbGFpbkFycmF5LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1NlcnZlcixcbiAgaXNWYWxpZFRpbWVvdXQsXG4gIGtlZXBQcmV2aW91c0RhdGEsXG4gIG1hdGNoTXV0YXRpb24sXG4gIG1hdGNoUXVlcnksXG4gIG5vb3AsXG4gIHBhcnRpYWxNYXRjaEtleSxcbiAgcmVwbGFjZURhdGEsXG4gIHJlcGxhY2VFcXVhbERlZXAsXG4gIHJlc29sdmVFbmFibGVkLFxuICByZXNvbHZlU3RhbGVUaW1lLFxuICBzaGFsbG93RXF1YWxPYmplY3RzLFxuICBza2lwVG9rZW4sXG4gIHNsZWVwLFxuICB0aW1lVW50aWxTdGFsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsIi8vIHNyYy9mb2N1c01hbmFnZXIudHNcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gXCIuL3N1YnNjcmliYWJsZS5qc1wiO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIEZvY3VzTWFuYWdlciA9IGNsYXNzIGV4dGVuZHMgU3Vic2NyaWJhYmxlIHtcbiAgI2ZvY3VzZWQ7XG4gICNjbGVhbnVwO1xuICAjc2V0dXA7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jc2V0dXAgPSAob25Gb2N1cykgPT4ge1xuICAgICAgaWYgKCFpc1NlcnZlciAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9ICgpID0+IG9uRm9jdXMoKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9O1xuICB9XG4gIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy4jY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuI3NldHVwKTtcbiAgICB9XG4gIH1cbiAgb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuI2NsZWFudXA/LigpO1xuICAgICAgdGhpcy4jY2xlYW51cCA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHRoaXMuI3NldHVwID0gc2V0dXA7XG4gICAgdGhpcy4jY2xlYW51cD8uKCk7XG4gICAgdGhpcy4jY2xlYW51cCA9IHNldHVwKChmb2N1c2VkKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLiNmb2N1c2VkICE9PSBmb2N1c2VkO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNmb2N1c2VkID0gZm9jdXNlZDtcbiAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgIH1cbiAgfVxuICBvbkZvY3VzKCkge1xuICAgIGNvbnN0IGlzRm9jdXNlZCA9IHRoaXMuaXNGb2N1c2VkKCk7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgIGxpc3RlbmVyKGlzRm9jdXNlZCk7XG4gICAgfSk7XG4gIH1cbiAgaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy4jZm9jdXNlZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLiNmb2N1c2VkO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5kb2N1bWVudD8udmlzaWJpbGl0eVN0YXRlICE9PSBcImhpZGRlblwiO1xuICB9XG59O1xudmFyIGZvY3VzTWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTtcbmV4cG9ydCB7XG4gIEZvY3VzTWFuYWdlcixcbiAgZm9jdXNNYW5hZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9jdXNNYW5hZ2VyLmpzLm1hcCIsIi8vIHNyYy9vbmxpbmVNYW5hZ2VyLnRzXG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBPbmxpbmVNYW5hZ2VyID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICAjb25saW5lID0gdHJ1ZTtcbiAgI2NsZWFudXA7XG4gICNzZXR1cDtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNzZXR1cCA9IChvbk9ubGluZSkgPT4ge1xuICAgICAgaWYgKCFpc1NlcnZlciAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBvbmxpbmVMaXN0ZW5lciA9ICgpID0+IG9uT25saW5lKHRydWUpO1xuICAgICAgICBjb25zdCBvZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiBvbk9ubGluZShmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIG9ubGluZUxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCBvZmZsaW5lTGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCBvbmxpbmVMaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIG9mZmxpbmVMaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfTtcbiAgfVxuICBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuI2NsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLiNzZXR1cCk7XG4gICAgfVxuICB9XG4gIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLiNjbGVhbnVwPy4oKTtcbiAgICAgIHRoaXMuI2NsZWFudXAgPSB2b2lkIDA7XG4gICAgfVxuICB9XG4gIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB0aGlzLiNzZXR1cCA9IHNldHVwO1xuICAgIHRoaXMuI2NsZWFudXA/LigpO1xuICAgIHRoaXMuI2NsZWFudXAgPSBzZXR1cCh0aGlzLnNldE9ubGluZS5iaW5kKHRoaXMpKTtcbiAgfVxuICBzZXRPbmxpbmUob25saW5lKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuI29ubGluZSAhPT0gb25saW5lO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNvbmxpbmUgPSBvbmxpbmU7XG4gICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICBsaXN0ZW5lcihvbmxpbmUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlzT25saW5lKCkge1xuICAgIHJldHVybiB0aGlzLiNvbmxpbmU7XG4gIH1cbn07XG52YXIgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKCk7XG5leHBvcnQge1xuICBPbmxpbmVNYW5hZ2VyLFxuICBvbmxpbmVNYW5hZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b25saW5lTWFuYWdlci5qcy5tYXAiLCIvLyBzcmMvdGhlbmFibGUudHNcbmZ1bmN0aW9uIHBlbmRpbmdUaGVuYWJsZSgpIHtcbiAgbGV0IHJlc29sdmU7XG4gIGxldCByZWplY3Q7XG4gIGNvbnN0IHRoZW5hYmxlID0gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgIHJlamVjdCA9IF9yZWplY3Q7XG4gIH0pO1xuICB0aGVuYWJsZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcbiAgdGhlbmFibGUuY2F0Y2goKCkgPT4ge1xuICB9KTtcbiAgZnVuY3Rpb24gZmluYWxpemUoZGF0YSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhlbmFibGUsIGRhdGEpO1xuICAgIGRlbGV0ZSB0aGVuYWJsZS5yZXNvbHZlO1xuICAgIGRlbGV0ZSB0aGVuYWJsZS5yZWplY3Q7XG4gIH1cbiAgdGhlbmFibGUucmVzb2x2ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGZpbmFsaXplKHtcbiAgICAgIHN0YXR1czogXCJmdWxmaWxsZWRcIixcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH07XG4gIHRoZW5hYmxlLnJlamVjdCA9IChyZWFzb24pID0+IHtcbiAgICBmaW5hbGl6ZSh7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIHJlYXNvblxuICAgIH0pO1xuICAgIHJlamVjdChyZWFzb24pO1xuICB9O1xuICByZXR1cm4gdGhlbmFibGU7XG59XG5leHBvcnQge1xuICBwZW5kaW5nVGhlbmFibGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aGVuYWJsZS5qcy5tYXAiLCIvLyBzcmMvcmV0cnllci50c1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSBcIi4vZm9jdXNNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSBcIi4vb25saW5lTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgcGVuZGluZ1RoZW5hYmxlIH0gZnJvbSBcIi4vdGhlbmFibGUuanNcIjtcbmltcG9ydCB7IGlzU2VydmVyLCBzbGVlcCB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5mdW5jdGlvbiBkZWZhdWx0UmV0cnlEZWxheShmYWlsdXJlQ291bnQpIHtcbiAgcmV0dXJuIE1hdGgubWluKDFlMyAqIDIgKiogZmFpbHVyZUNvdW50LCAzZTQpO1xufVxuZnVuY3Rpb24gY2FuRmV0Y2gobmV0d29ya01vZGUpIHtcbiAgcmV0dXJuIChuZXR3b3JrTW9kZSA/PyBcIm9ubGluZVwiKSA9PT0gXCJvbmxpbmVcIiA/IG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSA6IHRydWU7XG59XG52YXIgQ2FuY2VsbGVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKFwiQ2FuY2VsbGVkRXJyb3JcIik7XG4gICAgdGhpcy5yZXZlcnQgPSBvcHRpb25zPy5yZXZlcnQ7XG4gICAgdGhpcy5zaWxlbnQgPSBvcHRpb25zPy5zaWxlbnQ7XG4gIH1cbn07XG5mdW5jdGlvbiBpc0NhbmNlbGxlZEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIENhbmNlbGxlZEVycm9yO1xufVxuZnVuY3Rpb24gY3JlYXRlUmV0cnllcihjb25maWcpIHtcbiAgbGV0IGlzUmV0cnlDYW5jZWxsZWQgPSBmYWxzZTtcbiAgbGV0IGZhaWx1cmVDb3VudCA9IDA7XG4gIGxldCBpc1Jlc29sdmVkID0gZmFsc2U7XG4gIGxldCBjb250aW51ZUZuO1xuICBjb25zdCB0aGVuYWJsZSA9IHBlbmRpbmdUaGVuYWJsZSgpO1xuICBjb25zdCBjYW5jZWwgPSAoY2FuY2VsT3B0aW9ucykgPT4ge1xuICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSk7XG4gICAgICBjb25maWcuYWJvcnQ/LigpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY2FuY2VsUmV0cnkgPSAoKSA9PiB7XG4gICAgaXNSZXRyeUNhbmNlbGxlZCA9IHRydWU7XG4gIH07XG4gIGNvbnN0IGNvbnRpbnVlUmV0cnkgPSAoKSA9PiB7XG4gICAgaXNSZXRyeUNhbmNlbGxlZCA9IGZhbHNlO1xuICB9O1xuICBjb25zdCBjYW5Db250aW51ZSA9ICgpID0+IGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiAoY29uZmlnLm5ldHdvcmtNb2RlID09PSBcImFsd2F5c1wiIHx8IG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkgJiYgY29uZmlnLmNhblJ1bigpO1xuICBjb25zdCBjYW5TdGFydCA9ICgpID0+IGNhbkZldGNoKGNvbmZpZy5uZXR3b3JrTW9kZSkgJiYgY29uZmlnLmNhblJ1bigpO1xuICBjb25zdCByZXNvbHZlID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3M/Lih2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuPy4oKTtcbiAgICAgIHRoZW5hYmxlLnJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVqZWN0ID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vbkVycm9yPy4odmFsdWUpO1xuICAgICAgY29udGludWVGbj8uKCk7XG4gICAgICB0aGVuYWJsZS5yZWplY3QodmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcGF1c2UgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChjb250aW51ZVJlc29sdmUpID0+IHtcbiAgICAgIGNvbnRpbnVlRm4gPSAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGlzUmVzb2x2ZWQgfHwgY2FuQ29udGludWUoKSkge1xuICAgICAgICAgIGNvbnRpbnVlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25maWcub25QYXVzZT8uKCk7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBjb250aW51ZUZuID0gdm9pZCAwO1xuICAgICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICAgIGNvbmZpZy5vbkNvbnRpbnVlPy4oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgIGlmIChpc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBwcm9taXNlT3JWYWx1ZTtcbiAgICBjb25zdCBpbml0aWFsUHJvbWlzZSA9IGZhaWx1cmVDb3VudCA9PT0gMCA/IGNvbmZpZy5pbml0aWFsUHJvbWlzZSA6IHZvaWQgMDtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBpbml0aWFsUHJvbWlzZSA/PyBjb25maWcuZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGlmIChpc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldHJ5ID0gY29uZmlnLnJldHJ5ID8/IChpc1NlcnZlciA/IDAgOiAzKTtcbiAgICAgIGNvbnN0IHJldHJ5RGVsYXkgPSBjb25maWcucmV0cnlEZWxheSA/PyBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIGNvbnN0IGRlbGF5ID0gdHlwZW9mIHJldHJ5RGVsYXkgPT09IFwiZnVuY3Rpb25cIiA/IHJldHJ5RGVsYXkoZmFpbHVyZUNvdW50LCBlcnJvcikgOiByZXRyeURlbGF5O1xuICAgICAgY29uc3Qgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09IFwibnVtYmVyXCIgJiYgZmFpbHVyZUNvdW50IDwgcmV0cnkgfHwgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCIgJiYgcmV0cnkoZmFpbHVyZUNvdW50LCBlcnJvcik7XG4gICAgICBpZiAoaXNSZXRyeUNhbmNlbGxlZCB8fCAhc2hvdWxkUmV0cnkpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZmFpbHVyZUNvdW50Kys7XG4gICAgICBjb25maWcub25GYWlsPy4oZmFpbHVyZUNvdW50LCBlcnJvcik7XG4gICAgICBzbGVlcChkZWxheSkudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBjYW5Db250aW51ZSgpID8gdm9pZCAwIDogcGF1c2UoKTtcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoaXNSZXRyeUNhbmNlbGxlZCkge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIHByb21pc2U6IHRoZW5hYmxlLFxuICAgIGNhbmNlbCxcbiAgICBjb250aW51ZTogKCkgPT4ge1xuICAgICAgY29udGludWVGbj8uKCk7XG4gICAgICByZXR1cm4gdGhlbmFibGU7XG4gICAgfSxcbiAgICBjYW5jZWxSZXRyeSxcbiAgICBjb250aW51ZVJldHJ5LFxuICAgIGNhblN0YXJ0LFxuICAgIHN0YXJ0OiAoKSA9PiB7XG4gICAgICBpZiAoY2FuU3RhcnQoKSkge1xuICAgICAgICBydW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdXNlKCkudGhlbihydW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgfTtcbn1cbmV4cG9ydCB7XG4gIENhbmNlbGxlZEVycm9yLFxuICBjYW5GZXRjaCxcbiAgY3JlYXRlUmV0cnllcixcbiAgaXNDYW5jZWxsZWRFcnJvclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5ZXIuanMubWFwIiwiLy8gc3JjL25vdGlmeU1hbmFnZXIudHNcbmZ1bmN0aW9uIGNyZWF0ZU5vdGlmeU1hbmFnZXIoKSB7XG4gIGxldCBxdWV1ZSA9IFtdO1xuICBsZXQgdHJhbnNhY3Rpb25zID0gMDtcbiAgbGV0IG5vdGlmeUZuID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgY2FsbGJhY2soKTtcbiAgfTtcbiAgbGV0IGJhdGNoTm90aWZ5Rm4gPSAoY2FsbGJhY2spID0+IHtcbiAgICBjYWxsYmFjaygpO1xuICB9O1xuICBsZXQgc2NoZWR1bGVGbiA9IChjYikgPT4gc2V0VGltZW91dChjYiwgMCk7XG4gIGNvbnN0IHNjaGVkdWxlID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgaWYgKHRyYW5zYWN0aW9ucykge1xuICAgICAgcXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlRm4oKCkgPT4ge1xuICAgICAgICBub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUXVldWUgPSBxdWV1ZTtcbiAgICBxdWV1ZSA9IFtdO1xuICAgIGlmIChvcmlnaW5hbFF1ZXVlLmxlbmd0aCkge1xuICAgICAgc2NoZWR1bGVGbigoKSA9PiB7XG4gICAgICAgIGJhdGNoTm90aWZ5Rm4oKCkgPT4ge1xuICAgICAgICAgIG9yaWdpbmFsUXVldWUuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIG5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYmF0Y2g6IChjYWxsYmFjaykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHRyYW5zYWN0aW9ucysrO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyYW5zYWN0aW9ucy0tO1xuICAgICAgICBpZiAoIXRyYW5zYWN0aW9ucykge1xuICAgICAgICAgIGZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBBbGwgY2FsbHMgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2lsbCBiZSBiYXRjaGVkLlxuICAgICAqL1xuICAgIGJhdGNoQ2FsbHM6IChjYWxsYmFjaykgPT4ge1xuICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHNjaGVkdWxlKCgpID0+IHtcbiAgICAgICAgICBjYWxsYmFjayguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgc2NoZWR1bGUsXG4gICAgLyoqXG4gICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB3cmFwIG5vdGlmaWNhdGlvbnMgd2l0aCBgUmVhY3QuYWN0YCB3aGlsZSBydW5uaW5nIHRlc3RzLlxuICAgICAqL1xuICAgIHNldE5vdGlmeUZ1bmN0aW9uOiAoZm4pID0+IHtcbiAgICAgIG5vdGlmeUZuID0gZm47XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGJhdGNoIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0aWNrLlxuICAgICAqIEJ5IGRlZmF1bHQgUmVhY3QgUXVlcnkgd2lsbCB1c2UgdGhlIGJhdGNoIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IFJlYWN0RE9NIG9yIFJlYWN0IE5hdGl2ZS5cbiAgICAgKi9cbiAgICBzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uOiAoZm4pID0+IHtcbiAgICAgIGJhdGNoTm90aWZ5Rm4gPSBmbjtcbiAgICB9LFxuICAgIHNldFNjaGVkdWxlcjogKGZuKSA9PiB7XG4gICAgICBzY2hlZHVsZUZuID0gZm47XG4gICAgfVxuICB9O1xufVxudmFyIG5vdGlmeU1hbmFnZXIgPSBjcmVhdGVOb3RpZnlNYW5hZ2VyKCk7XG5leHBvcnQge1xuICBjcmVhdGVOb3RpZnlNYW5hZ2VyLFxuICBub3RpZnlNYW5hZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90aWZ5TWFuYWdlci5qcy5tYXAiLCIvLyBzcmMvcmVtb3ZhYmxlLnRzXG5pbXBvcnQgeyBpc1NlcnZlciwgaXNWYWxpZFRpbWVvdXQgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIFJlbW92YWJsZSA9IGNsYXNzIHtcbiAgI2djVGltZW91dDtcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gIH1cbiAgc2NoZWR1bGVHYygpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgaWYgKGlzVmFsaWRUaW1lb3V0KHRoaXMuZ2NUaW1lKSkge1xuICAgICAgdGhpcy4jZ2NUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgIH0sIHRoaXMuZ2NUaW1lKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlR2NUaW1lKG5ld0djVGltZSkge1xuICAgIHRoaXMuZ2NUaW1lID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmdjVGltZSB8fCAwLFxuICAgICAgbmV3R2NUaW1lID8/IChpc1NlcnZlciA/IEluZmluaXR5IDogNSAqIDYwICogMWUzKVxuICAgICk7XG4gIH1cbiAgY2xlYXJHY1RpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuI2djVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2djVGltZW91dCk7XG4gICAgICB0aGlzLiNnY1RpbWVvdXQgPSB2b2lkIDA7XG4gICAgfVxuICB9XG59O1xuZXhwb3J0IHtcbiAgUmVtb3ZhYmxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVtb3ZhYmxlLmpzLm1hcCIsIi8vIHNyYy9xdWVyeS50c1xuaW1wb3J0IHtcbiAgZW5zdXJlUXVlcnlGbixcbiAgbm9vcCxcbiAgcmVwbGFjZURhdGEsXG4gIHJlc29sdmVFbmFibGVkLFxuICBza2lwVG9rZW4sXG4gIHRpbWVVbnRpbFN0YWxlXG59IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSBcIi4vbm90aWZ5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgY2FuRmV0Y2gsIGNyZWF0ZVJldHJ5ZXIsIGlzQ2FuY2VsbGVkRXJyb3IgfSBmcm9tIFwiLi9yZXRyeWVyLmpzXCI7XG5pbXBvcnQgeyBSZW1vdmFibGUgfSBmcm9tIFwiLi9yZW1vdmFibGUuanNcIjtcbnZhciBRdWVyeSA9IGNsYXNzIGV4dGVuZHMgUmVtb3ZhYmxlIHtcbiAgI2luaXRpYWxTdGF0ZTtcbiAgI3JldmVydFN0YXRlO1xuICAjY2FjaGU7XG4gICNyZXRyeWVyO1xuICAjZGVmYXVsdE9wdGlvbnM7XG4gICNhYm9ydFNpZ25hbENvbnN1bWVkO1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuI2Fib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICB0aGlzLiNkZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy4jY2FjaGUgPSBjb25maWcuY2FjaGU7XG4gICAgdGhpcy5xdWVyeUtleSA9IGNvbmZpZy5xdWVyeUtleTtcbiAgICB0aGlzLnF1ZXJ5SGFzaCA9IGNvbmZpZy5xdWVyeUhhc2g7XG4gICAgdGhpcy4jaW5pdGlhbFN0YXRlID0gZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSA/PyB0aGlzLiNpbml0aWFsU3RhdGU7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gIH1cbiAgZ2V0IG1ldGEoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tZXRhO1xuICB9XG4gIGdldCBwcm9taXNlKCkge1xuICAgIHJldHVybiB0aGlzLiNyZXRyeWVyPy5wcm9taXNlO1xuICB9XG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy4jZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICB0aGlzLnVwZGF0ZUdjVGltZSh0aGlzLm9wdGlvbnMuZ2NUaW1lKTtcbiAgfVxuICBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCAmJiB0aGlzLnN0YXRlLmZldGNoU3RhdHVzID09PSBcImlkbGVcIikge1xuICAgICAgdGhpcy4jY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgIH1cbiAgfVxuICBzZXREYXRhKG5ld0RhdGEsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYXRhID0gcmVwbGFjZURhdGEodGhpcy5zdGF0ZS5kYXRhLCBuZXdEYXRhLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuI2Rpc3BhdGNoKHtcbiAgICAgIGRhdGEsXG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnM/LnVwZGF0ZWRBdCxcbiAgICAgIG1hbnVhbDogb3B0aW9ucz8ubWFudWFsXG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgc2V0U3RhdGUoc3RhdGUsIHNldFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJzZXRTdGF0ZVwiLCBzdGF0ZSwgc2V0U3RhdGVPcHRpb25zIH0pO1xuICB9XG4gIGNhbmNlbChvcHRpb25zKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuI3JldHJ5ZXI/LnByb21pc2U7XG4gICAgdGhpcy4jcmV0cnllcj8uY2FuY2VsKG9wdGlvbnMpO1xuICAgIHJldHVybiBwcm9taXNlID8gcHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jYW5jZWwoeyBzaWxlbnQ6IHRydWUgfSk7XG4gIH1cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLiNpbml0aWFsU3RhdGUpO1xuICB9XG4gIGlzQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKFxuICAgICAgKG9ic2VydmVyKSA9PiByZXNvbHZlRW5hYmxlZChvYnNlcnZlci5vcHRpb25zLmVuYWJsZWQsIHRoaXMpICE9PSBmYWxzZVxuICAgICk7XG4gIH1cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBpZiAodGhpcy5nZXRPYnNlcnZlcnNDb3VudCgpID4gMCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQWN0aXZlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucXVlcnlGbiA9PT0gc2tpcFRva2VuIHx8IHRoaXMuc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgdGhpcy5zdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID09PSAwO1xuICB9XG4gIGlzU3RhbGUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldE9ic2VydmVyc0NvdW50KCkgPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShcbiAgICAgICAgKG9ic2VydmVyKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZGF0YSA9PT0gdm9pZCAwO1xuICB9XG4gIGlzU3RhbGVCeVRpbWUoc3RhbGVUaW1lID0gMCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgdGhpcy5zdGF0ZS5kYXRhID09PSB2b2lkIDAgfHwgIXRpbWVVbnRpbFN0YWxlKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgfVxuICBvbkZvY3VzKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZCgoeCkgPT4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKSk7XG4gICAgb2JzZXJ2ZXI/LnJlZmV0Y2goeyBjYW5jZWxSZWZldGNoOiBmYWxzZSB9KTtcbiAgICB0aGlzLiNyZXRyeWVyPy5jb250aW51ZSgpO1xuICB9XG4gIG9uT25saW5lKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZCgoeCkgPT4geC5zaG91bGRGZXRjaE9uUmVjb25uZWN0KCkpO1xuICAgIG9ic2VydmVyPy5yZWZldGNoKHsgY2FuY2VsUmVmZXRjaDogZmFsc2UgfSk7XG4gICAgdGhpcy4jcmV0cnllcj8uY29udGludWUoKTtcbiAgfVxuICBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICghdGhpcy5vYnNlcnZlcnMuaW5jbHVkZXMob2JzZXJ2ZXIpKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICAgIHRoaXMuI2NhY2hlLm5vdGlmeSh7IHR5cGU6IFwib2JzZXJ2ZXJBZGRlZFwiLCBxdWVyeTogdGhpcywgb2JzZXJ2ZXIgfSk7XG4gICAgfVxuICB9XG4gIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluY2x1ZGVzKG9ic2VydmVyKSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoKHgpID0+IHggIT09IG9ic2VydmVyKTtcbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZXRyeWVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuI2Fib3J0U2lnbmFsQ29uc3VtZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI3JldHJ5ZXIuY2FuY2VsKHsgcmV2ZXJ0OiB0cnVlIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNyZXRyeWVyLmNhbmNlbFJldHJ5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgfVxuICAgICAgdGhpcy4jY2FjaGUubm90aWZ5KHsgdHlwZTogXCJvYnNlcnZlclJlbW92ZWRcIiwgcXVlcnk6IHRoaXMsIG9ic2VydmVyIH0pO1xuICAgIH1cbiAgfVxuICBnZXRPYnNlcnZlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuICB9XG4gIGludmFsaWRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJpbnZhbGlkYXRlXCIgfSk7XG4gICAgfVxuICB9XG4gIGZldGNoKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICAgIGlmICh0aGlzLnN0YXRlLmZldGNoU3RhdHVzICE9PSBcImlkbGVcIikge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YSAhPT0gdm9pZCAwICYmIGZldGNoT3B0aW9ucz8uY2FuY2VsUmVmZXRjaCkge1xuICAgICAgICB0aGlzLmNhbmNlbCh7IHNpbGVudDogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jcmV0cnllcikge1xuICAgICAgICB0aGlzLiNyZXRyeWVyLmNvbnRpbnVlUmV0cnkoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JldHJ5ZXIucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKCh4KSA9PiB4Lm9wdGlvbnMucXVlcnlGbik7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9ic2VydmVyLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLnF1ZXJ5S2V5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBBcyBvZiB2NCwgcXVlcnlLZXkgbmVlZHMgdG8gYmUgYW4gQXJyYXkuIElmIHlvdSBhcmUgdXNpbmcgYSBzdHJpbmcgbGlrZSAncmVwb0RhdGEnLCBwbGVhc2UgY2hhbmdlIGl0IHRvIGFuIEFycmF5LCBlLmcuIFsncmVwb0RhdGEnXWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IGFkZFNpZ25hbFByb3BlcnR5ID0gKG9iamVjdCkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgXCJzaWduYWxcIiwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLiNhYm9ydFNpZ25hbENvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmZXRjaEZuID0gKCkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlGbiA9IGVuc3VyZVF1ZXJ5Rm4odGhpcy5vcHRpb25zLCBmZXRjaE9wdGlvbnMpO1xuICAgICAgY29uc3QgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICAgIHF1ZXJ5S2V5OiB0aGlzLnF1ZXJ5S2V5LFxuICAgICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICAgIH07XG4gICAgICBhZGRTaWduYWxQcm9wZXJ0eShxdWVyeUZuQ29udGV4dCk7XG4gICAgICB0aGlzLiNhYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBlcnNpc3Rlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBlcnNpc3RlcihcbiAgICAgICAgICBxdWVyeUZuLFxuICAgICAgICAgIHF1ZXJ5Rm5Db250ZXh0LFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBmZXRjaE9wdGlvbnMsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBxdWVyeUtleTogdGhpcy5xdWVyeUtleSxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgZmV0Y2hGblxuICAgIH07XG4gICAgYWRkU2lnbmFsUHJvcGVydHkoY29udGV4dCk7XG4gICAgdGhpcy5vcHRpb25zLmJlaGF2aW9yPy5vbkZldGNoKFxuICAgICAgY29udGV4dCxcbiAgICAgIHRoaXNcbiAgICApO1xuICAgIHRoaXMuI3JldmVydFN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICBpZiAodGhpcy5zdGF0ZS5mZXRjaFN0YXR1cyA9PT0gXCJpZGxlXCIgfHwgdGhpcy5zdGF0ZS5mZXRjaE1ldGEgIT09IGNvbnRleHQuZmV0Y2hPcHRpb25zPy5tZXRhKSB7XG4gICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiZmV0Y2hcIiwgbWV0YTogY29udGV4dC5mZXRjaE9wdGlvbnM/Lm1ldGEgfSk7XG4gICAgfVxuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGlmICghKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnNpbGVudCkpIHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNDYW5jZWxsZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy4jY2FjaGUuY29uZmlnLm9uRXJyb3I/LihcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuI2NhY2hlLmNvbmZpZy5vblNldHRsZWQ/LihcbiAgICAgICAgICB0aGlzLnN0YXRlLmRhdGEsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgfTtcbiAgICB0aGlzLiNyZXRyeWVyID0gY3JlYXRlUmV0cnllcih7XG4gICAgICBpbml0aWFsUHJvbWlzZTogZmV0Y2hPcHRpb25zPy5pbml0aWFsUHJvbWlzZSxcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyLmFib3J0LmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBRdWVyeSBkYXRhIGNhbm5vdCBiZSB1bmRlZmluZWQuIFBsZWFzZSBtYWtlIHN1cmUgdG8gcmV0dXJuIGEgdmFsdWUgb3RoZXIgdGhhbiB1bmRlZmluZWQgZnJvbSB5b3VyIHF1ZXJ5IGZ1bmN0aW9uLiBBZmZlY3RlZCBxdWVyeSBrZXk6ICR7dGhpcy5xdWVyeUhhc2h9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb25FcnJvcihuZXcgRXJyb3IoYCR7dGhpcy5xdWVyeUhhc2h9IGRhdGEgaXMgdW5kZWZpbmVkYCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBvbkVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jY2FjaGUuY29uZmlnLm9uU3VjY2Vzcz8uKGRhdGEsIHRoaXMpO1xuICAgICAgICB0aGlzLiNjYWNoZS5jb25maWcub25TZXR0bGVkPy4oXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICB9LFxuICAgICAgb25FcnJvcixcbiAgICAgIG9uRmFpbDogKGZhaWx1cmVDb3VudCwgZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcImZhaWxlZFwiLCBmYWlsdXJlQ291bnQsIGVycm9yIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcInBhdXNlXCIgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiY29udGludWVcIiB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogY29udGV4dC5vcHRpb25zLnJldHJ5LFxuICAgICAgcmV0cnlEZWxheTogY29udGV4dC5vcHRpb25zLnJldHJ5RGVsYXksXG4gICAgICBuZXR3b3JrTW9kZTogY29udGV4dC5vcHRpb25zLm5ldHdvcmtNb2RlLFxuICAgICAgY2FuUnVuOiAoKSA9PiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuI3JldHJ5ZXIuc3RhcnQoKTtcbiAgfVxuICAjZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgY29uc3QgcmVkdWNlciA9IChzdGF0ZSkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IGFjdGlvbi5mYWlsdXJlQ291bnQsXG4gICAgICAgICAgICBmZXRjaEZhaWx1cmVSZWFzb246IGFjdGlvbi5lcnJvclxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJwYXVzZVwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGZldGNoU3RhdHVzOiBcInBhdXNlZFwiXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZmV0Y2hTdGF0dXM6IFwiZmV0Y2hpbmdcIlxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJmZXRjaFwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIC4uLmZldGNoU3RhdGUoc3RhdGUuZGF0YSwgdGhpcy5vcHRpb25zKSxcbiAgICAgICAgICAgIGZldGNoTWV0YTogYWN0aW9uLm1ldGEgPz8gbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJzdWNjZXNzXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgICBkYXRhVXBkYXRlQ291bnQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgICBkYXRhVXBkYXRlZEF0OiBhY3Rpb24uZGF0YVVwZGF0ZWRBdCA/PyBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAuLi4hYWN0aW9uLm1hbnVhbCAmJiB7XG4gICAgICAgICAgICAgIGZldGNoU3RhdHVzOiBcImlkbGVcIixcbiAgICAgICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgICAgIGZldGNoRmFpbHVyZVJlYXNvbjogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJlcnJvclwiOlxuICAgICAgICAgIGNvbnN0IGVycm9yID0gYWN0aW9uLmVycm9yO1xuICAgICAgICAgIGlmIChpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5yZXZlcnQgJiYgdGhpcy4jcmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMuI3JldmVydFN0YXRlLCBmZXRjaFN0YXR1czogXCJpZGxlXCIgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGVycm9yVXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGZldGNoRmFpbHVyZVJlYXNvbjogZXJyb3IsXG4gICAgICAgICAgICBmZXRjaFN0YXR1czogXCJpZGxlXCIsXG4gICAgICAgICAgICBzdGF0dXM6IFwiZXJyb3JcIlxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJpbnZhbGlkYXRlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgaXNJbnZhbGlkYXRlZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJzZXRTdGF0ZVwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIC4uLmFjdGlvbi5zdGF0ZVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm9uUXVlcnlVcGRhdGUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4jY2FjaGUubm90aWZ5KHsgcXVlcnk6IHRoaXMsIHR5cGU6IFwidXBkYXRlZFwiLCBhY3Rpb24gfSk7XG4gICAgfSk7XG4gIH1cbn07XG5mdW5jdGlvbiBmZXRjaFN0YXRlKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICBmZXRjaEZhaWx1cmVSZWFzb246IG51bGwsXG4gICAgZmV0Y2hTdGF0dXM6IGNhbkZldGNoKG9wdGlvbnMubmV0d29ya01vZGUpID8gXCJmZXRjaGluZ1wiIDogXCJwYXVzZWRcIixcbiAgICAuLi5kYXRhID09PSB2b2lkIDAgJiYge1xuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBzdGF0dXM6IFwicGVuZGluZ1wiXG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMpIHtcbiAgY29uc3QgZGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zLmluaXRpYWxEYXRhKCkgOiBvcHRpb25zLmluaXRpYWxEYXRhO1xuICBjb25zdCBoYXNEYXRhID0gZGF0YSAhPT0gdm9pZCAwO1xuICBjb25zdCBpbml0aWFsRGF0YVVwZGF0ZWRBdCA9IGhhc0RhdGEgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCgpIDogb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA6IDA7XG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBkYXRhVXBkYXRlQ291bnQ6IDAsXG4gICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IGluaXRpYWxEYXRhVXBkYXRlZEF0ID8/IERhdGUubm93KCkgOiAwLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGVycm9yVXBkYXRlQ291bnQ6IDAsXG4gICAgZXJyb3JVcGRhdGVkQXQ6IDAsXG4gICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgZmV0Y2hGYWlsdXJlUmVhc29uOiBudWxsLFxuICAgIGZldGNoTWV0YTogbnVsbCxcbiAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICBzdGF0dXM6IGhhc0RhdGEgPyBcInN1Y2Nlc3NcIiA6IFwicGVuZGluZ1wiLFxuICAgIGZldGNoU3RhdHVzOiBcImlkbGVcIlxuICB9O1xufVxuZXhwb3J0IHtcbiAgUXVlcnksXG4gIGZldGNoU3RhdGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1xdWVyeS5qcy5tYXAiLCIvLyBzcmMvcXVlcnlDYWNoZS50c1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zLCBtYXRjaFF1ZXJ5IH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIi4vcXVlcnkuanNcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbnZhciBRdWVyeUNhY2hlID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy4jcXVlcmllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgI3F1ZXJpZXM7XG4gIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICBjb25zdCBxdWVyeUtleSA9IG9wdGlvbnMucXVlcnlLZXk7XG4gICAgY29uc3QgcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2ggPz8gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKTtcbiAgICBsZXQgcXVlcnkgPSB0aGlzLmdldChxdWVyeUhhc2gpO1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHtcbiAgICAgICAgY2FjaGU6IHRoaXMsXG4gICAgICAgIHF1ZXJ5S2V5LFxuICAgICAgICBxdWVyeUhhc2gsXG4gICAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IGNsaWVudC5nZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZChxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuICBhZGQocXVlcnkpIHtcbiAgICBpZiAoIXRoaXMuI3F1ZXJpZXMuaGFzKHF1ZXJ5LnF1ZXJ5SGFzaCkpIHtcbiAgICAgIHRoaXMuI3F1ZXJpZXMuc2V0KHF1ZXJ5LnF1ZXJ5SGFzaCwgcXVlcnkpO1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiBcImFkZGVkXCIsXG4gICAgICAgIHF1ZXJ5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgY29uc3QgcXVlcnlJbk1hcCA9IHRoaXMuI3F1ZXJpZXMuZ2V0KHF1ZXJ5LnF1ZXJ5SGFzaCk7XG4gICAgaWYgKHF1ZXJ5SW5NYXApIHtcbiAgICAgIHF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgIGlmIChxdWVyeUluTWFwID09PSBxdWVyeSkge1xuICAgICAgICB0aGlzLiNxdWVyaWVzLmRlbGV0ZShxdWVyeS5xdWVyeUhhc2gpO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiBcInJlbW92ZWRcIiwgcXVlcnkgfSk7XG4gICAgfVxuICB9XG4gIGNsZWFyKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5nZXRBbGwoKS5mb3JFYWNoKChxdWVyeSkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBnZXQocXVlcnlIYXNoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3F1ZXJpZXMuZ2V0KHF1ZXJ5SGFzaCk7XG4gIH1cbiAgZ2V0QWxsKCkge1xuICAgIHJldHVybiBbLi4udGhpcy4jcXVlcmllcy52YWx1ZXMoKV07XG4gIH1cbiAgZmluZChmaWx0ZXJzKSB7XG4gICAgY29uc3QgZGVmYXVsdGVkRmlsdGVycyA9IHsgZXhhY3Q6IHRydWUsIC4uLmZpbHRlcnMgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGwoKS5maW5kKFxuICAgICAgKHF1ZXJ5KSA9PiBtYXRjaFF1ZXJ5KGRlZmF1bHRlZEZpbHRlcnMsIHF1ZXJ5KVxuICAgICk7XG4gIH1cbiAgZmluZEFsbChmaWx0ZXJzID0ge30pIHtcbiAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5nZXRBbGwoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlsdGVycykubGVuZ3RoID4gMCA/IHF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkpIDogcXVlcmllcztcbiAgfVxuICBub3RpZnkoZXZlbnQpIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIG9uRm9jdXMoKSB7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLmdldEFsbCgpLmZvckVhY2goKHF1ZXJ5KSA9PiB7XG4gICAgICAgIHF1ZXJ5Lm9uRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIG9uT25saW5lKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5nZXRBbGwoKS5mb3JFYWNoKChxdWVyeSkgPT4ge1xuICAgICAgICBxdWVyeS5vbk9ubGluZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5leHBvcnQge1xuICBRdWVyeUNhY2hlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnlDYWNoZS5qcy5tYXAiLCIvLyBzcmMvbXV0YXRpb24udHNcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBSZW1vdmFibGUgfSBmcm9tIFwiLi9yZW1vdmFibGUuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVJldHJ5ZXIgfSBmcm9tIFwiLi9yZXRyeWVyLmpzXCI7XG52YXIgTXV0YXRpb24gPSBjbGFzcyBleHRlbmRzIFJlbW92YWJsZSB7XG4gICNvYnNlcnZlcnM7XG4gICNtdXRhdGlvbkNhY2hlO1xuICAjcmV0cnllcjtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm11dGF0aW9uSWQgPSBjb25maWcubXV0YXRpb25JZDtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGU7XG4gICAgdGhpcy4jb2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy51cGRhdGVHY1RpbWUodGhpcy5vcHRpb25zLmdjVGltZSk7XG4gIH1cbiAgZ2V0IG1ldGEoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tZXRhO1xuICB9XG4gIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKCF0aGlzLiNvYnNlcnZlcnMuaW5jbHVkZXMob2JzZXJ2ZXIpKSB7XG4gICAgICB0aGlzLiNvYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLiNtdXRhdGlvbkNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IFwib2JzZXJ2ZXJBZGRlZFwiLFxuICAgICAgICBtdXRhdGlvbjogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMuI29ic2VydmVycyA9IHRoaXMuI29ic2VydmVycy5maWx0ZXIoKHgpID0+IHggIT09IG9ic2VydmVyKTtcbiAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlLm5vdGlmeSh7XG4gICAgICB0eXBlOiBcIm9ic2VydmVyUmVtb3ZlZFwiLFxuICAgICAgbXV0YXRpb246IHRoaXMsXG4gICAgICBvYnNlcnZlclxuICAgIH0pO1xuICB9XG4gIG9wdGlvbmFsUmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy4jb2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI211dGF0aW9uQ2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb250aW51ZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmV0cnllcj8uY29udGludWUoKSA/PyAvLyBjb250aW51aW5nIGEgbXV0YXRpb24gYXNzdW1lcyB0aGF0IHZhcmlhYmxlcyBhcmUgc2V0LCBtdXRhdGlvbiBtdXN0IGhhdmUgYmVlbiBkZWh5ZHJhdGVkIGJlZm9yZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnN0YXRlLnZhcmlhYmxlcyk7XG4gIH1cbiAgYXN5bmMgZXhlY3V0ZSh2YXJpYWJsZXMpIHtcbiAgICB0aGlzLiNyZXRyeWVyID0gY3JlYXRlUmV0cnllcih7XG4gICAgICBmbjogKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIG11dGF0aW9uRm4gZm91bmRcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMubXV0YXRpb25Gbih2YXJpYWJsZXMpO1xuICAgICAgfSxcbiAgICAgIG9uRmFpbDogKGZhaWx1cmVDb3VudCwgZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcImZhaWxlZFwiLCBmYWlsdXJlQ291bnQsIGVycm9yIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcInBhdXNlXCIgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiY29udGludWVcIiB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogdGhpcy5vcHRpb25zLnJldHJ5ID8/IDAsXG4gICAgICByZXRyeURlbGF5OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheSxcbiAgICAgIG5ldHdvcmtNb2RlOiB0aGlzLm9wdGlvbnMubmV0d29ya01vZGUsXG4gICAgICBjYW5SdW46ICgpID0+IHRoaXMuI211dGF0aW9uQ2FjaGUuY2FuUnVuKHRoaXMpXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdG9yZWQgPSB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCI7XG4gICAgY29uc3QgaXNQYXVzZWQgPSAhdGhpcy4jcmV0cnllci5jYW5TdGFydCgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXJlc3RvcmVkKSB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJwZW5kaW5nXCIsIHZhcmlhYmxlcywgaXNQYXVzZWQgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlPy4oXG4gICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMub3B0aW9ucy5vbk11dGF0ZT8uKHZhcmlhYmxlcyk7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSB0aGlzLnN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgICB0aGlzLiNkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBcInBlbmRpbmdcIixcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgICBpc1BhdXNlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jcmV0cnllci5zdGFydCgpO1xuICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzPy4oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uU2V0dGxlZD8uKFxuICAgICAgICBkYXRhLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnN0YXRlLnZhcmlhYmxlcyxcbiAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLm9uU2V0dGxlZD8uKGRhdGEsIG51bGwsIHZhcmlhYmxlcywgdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJzdWNjZXNzXCIsIGRhdGEgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcj8uKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHQsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdGlvbnMub25FcnJvcj8uKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25TZXR0bGVkPy4oXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHRoaXMuc3RhdGUudmFyaWFibGVzLFxuICAgICAgICAgIHRoaXMuc3RhdGUuY29udGV4dCxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5vblNldHRsZWQ/LihcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgIHRoaXMuc3RhdGUuY29udGV4dFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJlcnJvclwiLCBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ydW5OZXh0KHRoaXMpO1xuICAgIH1cbiAgfVxuICAjZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgY29uc3QgcmVkdWNlciA9IChzdGF0ZSkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZmFpbHVyZUNvdW50OiBhY3Rpb24uZmFpbHVyZUNvdW50LFxuICAgICAgICAgICAgZmFpbHVyZVJlYXNvbjogYWN0aW9uLmVycm9yXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcInBhdXNlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiY29udGludWVcIjpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICAgICAgZGF0YTogdm9pZCAwLFxuICAgICAgICAgICAgZmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgICAgZmFpbHVyZVJlYXNvbjogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IGFjdGlvbi5pc1BhdXNlZCxcbiAgICAgICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXMsXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdDogRGF0ZS5ub3coKVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJzdWNjZXNzXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgICBmYWlsdXJlUmVhc29uOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBzdGF0dXM6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogdm9pZCAwLFxuICAgICAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGZhaWx1cmVSZWFzb246IGFjdGlvbi5lcnJvcixcbiAgICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogXCJlcnJvclwiXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3RhdGUgPSByZWR1Y2VyKHRoaXMuc3RhdGUpO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy4jb2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm9uTXV0YXRpb25VcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ub3RpZnkoe1xuICAgICAgICBtdXRhdGlvbjogdGhpcyxcbiAgICAgICAgdHlwZTogXCJ1cGRhdGVkXCIsXG4gICAgICAgIGFjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5mdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdm9pZCAwLFxuICAgIGRhdGE6IHZvaWQgMCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgZmFpbHVyZVJlYXNvbjogbnVsbCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiBcImlkbGVcIixcbiAgICB2YXJpYWJsZXM6IHZvaWQgMCxcbiAgICBzdWJtaXR0ZWRBdDogMFxuICB9O1xufVxuZXhwb3J0IHtcbiAgTXV0YXRpb24sXG4gIGdldERlZmF1bHRTdGF0ZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11dGF0aW9uLmpzLm1hcCIsIi8vIHNyYy9tdXRhdGlvbkNhY2hlLnRzXG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSBcIi4vbm90aWZ5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tIFwiLi9tdXRhdGlvbi5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hNdXRhdGlvbiwgbm9vcCB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbnZhciBNdXRhdGlvbkNhY2hlID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy4jbXV0YXRpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLiNzY29wZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgIHRoaXMuI211dGF0aW9uSWQgPSAwO1xuICB9XG4gICNtdXRhdGlvbnM7XG4gICNzY29wZXM7XG4gICNtdXRhdGlvbklkO1xuICBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgY29uc3QgbXV0YXRpb24gPSBuZXcgTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb25DYWNoZTogdGhpcyxcbiAgICAgIG11dGF0aW9uSWQ6ICsrdGhpcy4jbXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGVcbiAgICB9KTtcbiAgICB0aGlzLmFkZChtdXRhdGlvbik7XG4gICAgcmV0dXJuIG11dGF0aW9uO1xuICB9XG4gIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMuI211dGF0aW9ucy5hZGQobXV0YXRpb24pO1xuICAgIGNvbnN0IHNjb3BlID0gc2NvcGVGb3IobXV0YXRpb24pO1xuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IHNjb3BlZE11dGF0aW9ucyA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpO1xuICAgICAgaWYgKHNjb3BlZE11dGF0aW9ucykge1xuICAgICAgICBzY29wZWRNdXRhdGlvbnMucHVzaChtdXRhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNzY29wZXMuc2V0KHNjb3BlLCBbbXV0YXRpb25dKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub3RpZnkoeyB0eXBlOiBcImFkZGVkXCIsIG11dGF0aW9uIH0pO1xuICB9XG4gIHJlbW92ZShtdXRhdGlvbikge1xuICAgIGlmICh0aGlzLiNtdXRhdGlvbnMuZGVsZXRlKG11dGF0aW9uKSkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBzY29wZUZvcihtdXRhdGlvbik7XG4gICAgICBpZiAodHlwZW9mIHNjb3BlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlZE11dGF0aW9ucyA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpO1xuICAgICAgICBpZiAoc2NvcGVkTXV0YXRpb25zKSB7XG4gICAgICAgICAgaWYgKHNjb3BlZE11dGF0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHNjb3BlZE11dGF0aW9ucy5pbmRleE9mKG11dGF0aW9uKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgc2NvcGVkTXV0YXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzY29wZWRNdXRhdGlvbnNbMF0gPT09IG11dGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLiNzY29wZXMuZGVsZXRlKHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub3RpZnkoeyB0eXBlOiBcInJlbW92ZWRcIiwgbXV0YXRpb24gfSk7XG4gIH1cbiAgY2FuUnVuKG11dGF0aW9uKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBzY29wZUZvcihtdXRhdGlvbik7XG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgbXV0YXRpb25zV2l0aFNhbWVTY29wZSA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpO1xuICAgICAgY29uc3QgZmlyc3RQZW5kaW5nTXV0YXRpb24gPSBtdXRhdGlvbnNXaXRoU2FtZVNjb3BlPy5maW5kKFxuICAgICAgICAobSkgPT4gbS5zdGF0ZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiXG4gICAgICApO1xuICAgICAgcmV0dXJuICFmaXJzdFBlbmRpbmdNdXRhdGlvbiB8fCBmaXJzdFBlbmRpbmdNdXRhdGlvbiA9PT0gbXV0YXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBydW5OZXh0KG11dGF0aW9uKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBzY29wZUZvcihtdXRhdGlvbik7XG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgZm91bmRNdXRhdGlvbiA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpPy5maW5kKChtKSA9PiBtICE9PSBtdXRhdGlvbiAmJiBtLnN0YXRlLmlzUGF1c2VkKTtcbiAgICAgIHJldHVybiBmb3VuZE11dGF0aW9uPy5jb250aW51ZSgpID8/IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICB9XG4gIGNsZWFyKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy4jbXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XG4gICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogXCJyZW1vdmVkXCIsIG11dGF0aW9uIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiNtdXRhdGlvbnMuY2xlYXIoKTtcbiAgICAgIHRoaXMuI3Njb3Blcy5jbGVhcigpO1xuICAgIH0pO1xuICB9XG4gIGdldEFsbCgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiNtdXRhdGlvbnMpO1xuICB9XG4gIGZpbmQoZmlsdGVycykge1xuICAgIGNvbnN0IGRlZmF1bHRlZEZpbHRlcnMgPSB7IGV4YWN0OiB0cnVlLCAuLi5maWx0ZXJzIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsKCkuZmluZChcbiAgICAgIChtdXRhdGlvbikgPT4gbWF0Y2hNdXRhdGlvbihkZWZhdWx0ZWRGaWx0ZXJzLCBtdXRhdGlvbilcbiAgICApO1xuICB9XG4gIGZpbmRBbGwoZmlsdGVycyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsKCkuZmlsdGVyKChtdXRhdGlvbikgPT4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbikpO1xuICB9XG4gIG5vdGlmeShldmVudCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIGNvbnN0IHBhdXNlZE11dGF0aW9ucyA9IHRoaXMuZ2V0QWxsKCkuZmlsdGVyKCh4KSA9PiB4LnN0YXRlLmlzUGF1c2VkKTtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChcbiAgICAgICgpID0+IFByb21pc2UuYWxsKFxuICAgICAgICBwYXVzZWRNdXRhdGlvbnMubWFwKChtdXRhdGlvbikgPT4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKSlcbiAgICAgIClcbiAgICApO1xuICB9XG59O1xuZnVuY3Rpb24gc2NvcGVGb3IobXV0YXRpb24pIHtcbiAgcmV0dXJuIG11dGF0aW9uLm9wdGlvbnMuc2NvcGU/LmlkO1xufVxuZXhwb3J0IHtcbiAgTXV0YXRpb25DYWNoZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11dGF0aW9uQ2FjaGUuanMubWFwIiwiLy8gc3JjL2luZmluaXRlUXVlcnlCZWhhdmlvci50c1xuaW1wb3J0IHsgYWRkVG9FbmQsIGFkZFRvU3RhcnQsIGVuc3VyZVF1ZXJ5Rm4gfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZnVuY3Rpb24gaW5maW5pdGVRdWVyeUJlaGF2aW9yKHBhZ2VzKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogKGNvbnRleHQsIHF1ZXJ5KSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zO1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gY29udGV4dC5mZXRjaE9wdGlvbnM/Lm1ldGE/LmZldGNoTW9yZT8uZGlyZWN0aW9uO1xuICAgICAgY29uc3Qgb2xkUGFnZXMgPSBjb250ZXh0LnN0YXRlLmRhdGE/LnBhZ2VzIHx8IFtdO1xuICAgICAgY29uc3Qgb2xkUGFnZVBhcmFtcyA9IGNvbnRleHQuc3RhdGUuZGF0YT8ucGFnZVBhcmFtcyB8fCBbXTtcbiAgICAgIGxldCByZXN1bHQgPSB7IHBhZ2VzOiBbXSwgcGFnZVBhcmFtczogW10gfTtcbiAgICAgIGxldCBjdXJyZW50UGFnZSA9IDA7XG4gICAgICBjb25zdCBmZXRjaEZuID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFkZFNpZ25hbFByb3BlcnR5ID0gKG9iamVjdCkgPT4ge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIFwic2lnbmFsXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnNpZ25hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcXVlcnlGbiA9IGVuc3VyZVF1ZXJ5Rm4oY29udGV4dC5vcHRpb25zLCBjb250ZXh0LmZldGNoT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGZldGNoUGFnZSA9IGFzeW5jIChkYXRhLCBwYXJhbSwgcHJldmlvdXMpID0+IHtcbiAgICAgICAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmFtID09IG51bGwgJiYgZGF0YS5wYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICAgICAgcXVlcnlLZXk6IGNvbnRleHQucXVlcnlLZXksXG4gICAgICAgICAgICBwYWdlUGFyYW06IHBhcmFtLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBwcmV2aW91cyA/IFwiYmFja3dhcmRcIiA6IFwiZm9yd2FyZFwiLFxuICAgICAgICAgICAgbWV0YTogY29udGV4dC5vcHRpb25zLm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIGFkZFNpZ25hbFByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgcXVlcnlGbihcbiAgICAgICAgICAgIHF1ZXJ5Rm5Db250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7IG1heFBhZ2VzIH0gPSBjb250ZXh0Lm9wdGlvbnM7XG4gICAgICAgICAgY29uc3QgYWRkVG8gPSBwcmV2aW91cyA/IGFkZFRvU3RhcnQgOiBhZGRUb0VuZDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZXM6IGFkZFRvKGRhdGEucGFnZXMsIHBhZ2UsIG1heFBhZ2VzKSxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IGFkZFRvKGRhdGEucGFnZVBhcmFtcywgcGFyYW0sIG1heFBhZ2VzKVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGlmIChkaXJlY3Rpb24gJiYgb2xkUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBkaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIjtcbiAgICAgICAgICBjb25zdCBwYWdlUGFyYW1GbiA9IHByZXZpb3VzID8gZ2V0UHJldmlvdXNQYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtO1xuICAgICAgICAgIGNvbnN0IG9sZERhdGEgPSB7XG4gICAgICAgICAgICBwYWdlczogb2xkUGFnZXMsXG4gICAgICAgICAgICBwYWdlUGFyYW1zOiBvbGRQYWdlUGFyYW1zXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBwYXJhbSA9IHBhZ2VQYXJhbUZuKG9wdGlvbnMsIG9sZERhdGEpO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUGFnZShvbGREYXRhLCBwYXJhbSwgcHJldmlvdXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ1BhZ2VzID0gcGFnZXMgPz8gb2xkUGFnZXMubGVuZ3RoO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gY3VycmVudFBhZ2UgPT09IDAgPyBvbGRQYWdlUGFyYW1zWzBdID8/IG9wdGlvbnMuaW5pdGlhbFBhZ2VQYXJhbSA6IGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcmVzdWx0KTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSA+IDAgJiYgcGFyYW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUGFnZShyZXN1bHQsIHBhcmFtKTtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlKys7XG4gICAgICAgICAgfSB3aGlsZSAoY3VycmVudFBhZ2UgPCByZW1haW5pbmdQYWdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgICBpZiAoY29udGV4dC5vcHRpb25zLnBlcnNpc3Rlcikge1xuICAgICAgICBjb250ZXh0LmZldGNoRm4gPSAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9ucy5wZXJzaXN0ZXI/LihcbiAgICAgICAgICAgIGZldGNoRm4sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm9wdGlvbnMubWV0YSxcbiAgICAgICAgICAgICAgc2lnbmFsOiBjb250ZXh0LnNpZ25hbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHF1ZXJ5XG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZmV0Y2hGbiA9IGZldGNoRm47XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCB7IHBhZ2VzLCBwYWdlUGFyYW1zIH0pIHtcbiAgY29uc3QgbGFzdEluZGV4ID0gcGFnZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIHBhZ2VzLmxlbmd0aCA+IDAgPyBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0oXG4gICAgcGFnZXNbbGFzdEluZGV4XSxcbiAgICBwYWdlcyxcbiAgICBwYWdlUGFyYW1zW2xhc3RJbmRleF0sXG4gICAgcGFnZVBhcmFtc1xuICApIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgeyBwYWdlcywgcGFnZVBhcmFtcyB9KSB7XG4gIHJldHVybiBwYWdlcy5sZW5ndGggPiAwID8gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbT8uKHBhZ2VzWzBdLCBwYWdlcywgcGFnZVBhcmFtc1swXSwgcGFnZVBhcmFtcykgOiB2b2lkIDA7XG59XG5mdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBkYXRhKSB7XG4gIGlmICghZGF0YSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIGRhdGEpICE9IG51bGw7XG59XG5mdW5jdGlvbiBoYXNQcmV2aW91c1BhZ2Uob3B0aW9ucywgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgIW9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0pXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgZGF0YSkgIT0gbnVsbDtcbn1cbmV4cG9ydCB7XG4gIGhhc05leHRQYWdlLFxuICBoYXNQcmV2aW91c1BhZ2UsXG4gIGluZmluaXRlUXVlcnlCZWhhdmlvclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZmluaXRlUXVlcnlCZWhhdmlvci5qcy5tYXAiLCIvLyBzcmMvcXVlcnlDbGllbnQudHNcbmltcG9ydCB7XG4gIGZ1bmN0aW9uYWxVcGRhdGUsXG4gIGhhc2hLZXksXG4gIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyxcbiAgbm9vcCxcbiAgcGFydGlhbE1hdGNoS2V5LFxuICByZXNvbHZlU3RhbGVUaW1lLFxuICBza2lwVG9rZW5cbn0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tIFwiLi9xdWVyeUNhY2hlLmpzXCI7XG5pbXBvcnQgeyBNdXRhdGlvbkNhY2hlIH0gZnJvbSBcIi4vbXV0YXRpb25DYWNoZS5qc1wiO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSBcIi4vZm9jdXNNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSBcIi4vb25saW5lTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gXCIuL25vdGlmeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IGluZmluaXRlUXVlcnlCZWhhdmlvciB9IGZyb20gXCIuL2luZmluaXRlUXVlcnlCZWhhdmlvci5qc1wiO1xudmFyIFF1ZXJ5Q2xpZW50ID0gY2xhc3Mge1xuICAjcXVlcnlDYWNoZTtcbiAgI211dGF0aW9uQ2FjaGU7XG4gICNkZWZhdWx0T3B0aW9ucztcbiAgI3F1ZXJ5RGVmYXVsdHM7XG4gICNtdXRhdGlvbkRlZmF1bHRzO1xuICAjbW91bnRDb3VudDtcbiAgI3Vuc3Vic2NyaWJlRm9jdXM7XG4gICN1bnN1YnNjcmliZU9ubGluZTtcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICB0aGlzLiNxdWVyeUNhY2hlID0gY29uZmlnLnF1ZXJ5Q2FjaGUgfHwgbmV3IFF1ZXJ5Q2FjaGUoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLiNkZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLiNxdWVyeURlZmF1bHRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkRlZmF1bHRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB0aGlzLiNtb3VudENvdW50ID0gMDtcbiAgfVxuICBtb3VudCgpIHtcbiAgICB0aGlzLiNtb3VudENvdW50Kys7XG4gICAgaWYgKHRoaXMuI21vdW50Q291bnQgIT09IDEpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVGb2N1cyA9IGZvY3VzTWFuYWdlci5zdWJzY3JpYmUoYXN5bmMgKGZvY3VzZWQpID0+IHtcbiAgICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gICAgICAgIHRoaXMuI3F1ZXJ5Q2FjaGUub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuI3Vuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoYXN5bmMgKG9ubGluZSkgPT4ge1xuICAgICAgaWYgKG9ubGluZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICAgICAgICB0aGlzLiNxdWVyeUNhY2hlLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgdW5tb3VudCgpIHtcbiAgICB0aGlzLiNtb3VudENvdW50LS07XG4gICAgaWYgKHRoaXMuI21vdW50Q291bnQgIT09IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVGb2N1cz8uKCk7XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVGb2N1cyA9IHZvaWQgMDtcbiAgICB0aGlzLiN1bnN1YnNjcmliZU9ubGluZT8uKCk7XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVPbmxpbmUgPSB2b2lkIDA7XG4gIH1cbiAgaXNGZXRjaGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuI3F1ZXJ5Q2FjaGUuZmluZEFsbCh7IC4uLmZpbHRlcnMsIGZldGNoU3RhdHVzOiBcImZldGNoaW5nXCIgfSkubGVuZ3RoO1xuICB9XG4gIGlzTXV0YXRpbmcoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLiNtdXRhdGlvbkNhY2hlLmZpbmRBbGwoeyAuLi5maWx0ZXJzLCBzdGF0dXM6IFwicGVuZGluZ1wiIH0pLmxlbmd0aDtcbiAgfVxuICBnZXRRdWVyeURhdGEocXVlcnlLZXkpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHsgcXVlcnlLZXkgfSk7XG4gICAgcmV0dXJuIHRoaXMuI3F1ZXJ5Q2FjaGUuZ2V0KG9wdGlvbnMucXVlcnlIYXNoKT8uc3RhdGUuZGF0YTtcbiAgfVxuICBlbnN1cmVRdWVyeURhdGEob3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLiNxdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBxdWVyeS5zdGF0ZS5kYXRhO1xuICAgIGlmIChjYWNoZWREYXRhID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkob3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnJldmFsaWRhdGVJZlN0YWxlICYmIHF1ZXJ5LmlzU3RhbGVCeVRpbWUocmVzb2x2ZVN0YWxlVGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSwgcXVlcnkpKSkge1xuICAgICAgdm9pZCB0aGlzLnByZWZldGNoUXVlcnkoZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2FjaGVkRGF0YSk7XG4gIH1cbiAgZ2V0UXVlcmllc0RhdGEoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKCh7IHF1ZXJ5S2V5LCBzdGF0ZSB9KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgIHJldHVybiBbcXVlcnlLZXksIGRhdGFdO1xuICAgIH0pO1xuICB9XG4gIHNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMoeyBxdWVyeUtleSB9KTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuI3F1ZXJ5Q2FjaGUuZ2V0KFxuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2hcbiAgICApO1xuICAgIGNvbnN0IHByZXZEYXRhID0gcXVlcnk/LnN0YXRlLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgcHJldkRhdGEpO1xuICAgIGlmIChkYXRhID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpLnNldERhdGEoZGF0YSwgeyAuLi5vcHRpb25zLCBtYW51YWw6IHRydWUgfSk7XG4gIH1cbiAgc2V0UXVlcmllc0RhdGEoZmlsdGVycywgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKFxuICAgICAgKCkgPT4gdGhpcy4jcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcCgoeyBxdWVyeUtleSB9KSA9PiBbXG4gICAgICAgIHF1ZXJ5S2V5LFxuICAgICAgICB0aGlzLnNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucylcbiAgICAgIF0pXG4gICAgKTtcbiAgfVxuICBnZXRRdWVyeVN0YXRlKHF1ZXJ5S2V5KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyh7IHF1ZXJ5S2V5IH0pO1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmdldChcbiAgICAgIG9wdGlvbnMucXVlcnlIYXNoXG4gICAgKT8uc3RhdGU7XG4gIH1cbiAgcmVtb3ZlUXVlcmllcyhmaWx0ZXJzKSB7XG4gICAgY29uc3QgcXVlcnlDYWNoZSA9IHRoaXMuI3F1ZXJ5Q2FjaGU7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnlDYWNoZS5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmVzZXRRdWVyaWVzKGZpbHRlcnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBxdWVyeUNhY2hlID0gdGhpcy4jcXVlcnlDYWNoZTtcbiAgICBjb25zdCByZWZldGNoRmlsdGVycyA9IHtcbiAgICAgIHR5cGU6IFwiYWN0aXZlXCIsXG4gICAgICAuLi5maWx0ZXJzXG4gICAgfTtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnkucmVzZXQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG4gIGNhbmNlbFF1ZXJpZXMoZmlsdGVycywgY2FuY2VsT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZGVmYXVsdGVkQ2FuY2VsT3B0aW9ucyA9IHsgcmV2ZXJ0OiB0cnVlLCAuLi5jYW5jZWxPcHRpb25zIH07XG4gICAgY29uc3QgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKFxuICAgICAgKCkgPT4gdGhpcy4jcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcCgocXVlcnkpID0+IHF1ZXJ5LmNhbmNlbChkZWZhdWx0ZWRDYW5jZWxPcHRpb25zKSlcbiAgICApO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfVxuICBpbnZhbGlkYXRlUXVlcmllcyhmaWx0ZXJzLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnkuaW52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmlsdGVycz8ucmVmZXRjaFR5cGUgPT09IFwibm9uZVwiKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZmV0Y2hGaWx0ZXJzID0ge1xuICAgICAgICAuLi5maWx0ZXJzLFxuICAgICAgICB0eXBlOiBmaWx0ZXJzPy5yZWZldGNoVHlwZSA/PyBmaWx0ZXJzPy50eXBlID8/IFwiYWN0aXZlXCJcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cbiAgcmVmZXRjaFF1ZXJpZXMoZmlsdGVycywgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZmV0Y2hPcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNhbmNlbFJlZmV0Y2g6IG9wdGlvbnMuY2FuY2VsUmVmZXRjaCA/PyB0cnVlXG4gICAgfTtcbiAgICBjb25zdCBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goXG4gICAgICAoKSA9PiB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZmlsdGVyKChxdWVyeSkgPT4gIXF1ZXJ5LmlzRGlzYWJsZWQoKSkubWFwKChxdWVyeSkgPT4ge1xuICAgICAgICBsZXQgcHJvbWlzZSA9IHF1ZXJ5LmZldGNoKHZvaWQgMCwgZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgaWYgKCFmZXRjaE9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5LnN0YXRlLmZldGNoU3RhdHVzID09PSBcInBhdXNlZFwiID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBwcm9taXNlO1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKTtcbiAgfVxuICBmZXRjaFF1ZXJ5KG9wdGlvbnMpIHtcbiAgICBjb25zdCBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICAgIGlmIChkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSB2b2lkIDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLiNxdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5pc1N0YWxlQnlUaW1lKFxuICAgICAgcmVzb2x2ZVN0YWxlVGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSwgcXVlcnkpXG4gICAgKSA/IHF1ZXJ5LmZldGNoKGRlZmF1bHRlZE9wdGlvbnMpIDogUHJvbWlzZS5yZXNvbHZlKHF1ZXJ5LnN0YXRlLmRhdGEpO1xuICB9XG4gIHByZWZldGNoUXVlcnkob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkob3B0aW9ucykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfVxuICBmZXRjaEluZmluaXRlUXVlcnkob3B0aW9ucykge1xuICAgIG9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3Iob3B0aW9ucy5wYWdlcyk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShvcHRpb25zKTtcbiAgfVxuICBwcmVmZXRjaEluZmluaXRlUXVlcnkob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShvcHRpb25zKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9XG4gIGVuc3VyZUluZmluaXRlUXVlcnlEYXRhKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLmJlaGF2aW9yID0gaW5maW5pdGVRdWVyeUJlaGF2aW9yKG9wdGlvbnMucGFnZXMpO1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVF1ZXJ5RGF0YShvcHRpb25zKTtcbiAgfVxuICByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgaWYgKG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuI211dGF0aW9uQ2FjaGUucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICBnZXRRdWVyeUNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlO1xuICB9XG4gIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuI211dGF0aW9uQ2FjaGU7XG4gIH1cbiAgZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2RlZmF1bHRPcHRpb25zO1xuICB9XG4gIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLiNkZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cbiAgc2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSwgb3B0aW9ucykge1xuICAgIHRoaXMuI3F1ZXJ5RGVmYXVsdHMuc2V0KGhhc2hLZXkocXVlcnlLZXkpLCB7XG4gICAgICBxdWVyeUtleSxcbiAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSkge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gWy4uLnRoaXMuI3F1ZXJ5RGVmYXVsdHMudmFsdWVzKCldO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGRlZmF1bHRzLmZvckVhY2goKHF1ZXJ5RGVmYXVsdCkgPT4ge1xuICAgICAgaWYgKHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgcXVlcnlEZWZhdWx0LnF1ZXJ5S2V5KSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgcXVlcnlEZWZhdWx0LmRlZmF1bHRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHNldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNtdXRhdGlvbkRlZmF1bHRzLnNldChoYXNoS2V5KG11dGF0aW9uS2V5KSwge1xuICAgICAgbXV0YXRpb25LZXksXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGdldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXkpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IFsuLi50aGlzLiNtdXRhdGlvbkRlZmF1bHRzLnZhbHVlcygpXTtcbiAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgZGVmYXVsdHMuZm9yRWFjaCgocXVlcnlEZWZhdWx0KSA9PiB7XG4gICAgICBpZiAocGFydGlhbE1hdGNoS2V5KG11dGF0aW9uS2V5LCBxdWVyeURlZmF1bHQubXV0YXRpb25LZXkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHsgLi4ucmVzdWx0LCAuLi5xdWVyeURlZmF1bHQuZGVmYXVsdE9wdGlvbnMgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0ZWRPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy4jZGVmYXVsdE9wdGlvbnMucXVlcmllcyxcbiAgICAgIC4uLnRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zLnF1ZXJ5S2V5KSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoIWRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhcbiAgICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSxcbiAgICAgICAgZGVmYXVsdGVkT3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMucmVmZXRjaE9uUmVjb25uZWN0ID09PSB2b2lkIDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmVmZXRjaE9uUmVjb25uZWN0ID0gZGVmYXVsdGVkT3B0aW9ucy5uZXR3b3JrTW9kZSAhPT0gXCJhbHdheXNcIjtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMudGhyb3dPbkVycm9yID09PSB2b2lkIDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMudGhyb3dPbkVycm9yID0gISFkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlO1xuICAgIH1cbiAgICBpZiAoIWRlZmF1bHRlZE9wdGlvbnMubmV0d29ya01vZGUgJiYgZGVmYXVsdGVkT3B0aW9ucy5wZXJzaXN0ZXIpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMubmV0d29ya01vZGUgPSBcIm9mZmxpbmVGaXJzdFwiO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUZuID09PSBza2lwVG9rZW4pIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfVxuICBkZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucz8uX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLiNkZWZhdWx0T3B0aW9ucy5tdXRhdGlvbnMsXG4gICAgICAuLi5vcHRpb25zPy5tdXRhdGlvbktleSAmJiB0aGlzLmdldE11dGF0aW9uRGVmYXVsdHMob3B0aW9ucy5tdXRhdGlvbktleSksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH07XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy4jcXVlcnlDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuI211dGF0aW9uQ2FjaGUuY2xlYXIoKTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIFF1ZXJ5Q2xpZW50XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnlDbGllbnQuanMubWFwIiwiLy8gc3JjL3F1ZXJ5T2JzZXJ2ZXIudHNcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gXCIuL2ZvY3VzTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gXCIuL25vdGlmeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IGZldGNoU3RhdGUgfSBmcm9tIFwiLi9xdWVyeS5qc1wiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSBcIi4vc3Vic2NyaWJhYmxlLmpzXCI7XG5pbXBvcnQgeyBwZW5kaW5nVGhlbmFibGUgfSBmcm9tIFwiLi90aGVuYWJsZS5qc1wiO1xuaW1wb3J0IHtcbiAgaXNTZXJ2ZXIsXG4gIGlzVmFsaWRUaW1lb3V0LFxuICBub29wLFxuICByZXBsYWNlRGF0YSxcbiAgcmVzb2x2ZUVuYWJsZWQsXG4gIHJlc29sdmVTdGFsZVRpbWUsXG4gIHNoYWxsb3dFcXVhbE9iamVjdHMsXG4gIHRpbWVVbnRpbFN0YWxlXG59IGZyb20gXCIuL3V0aWxzLmpzXCI7XG52YXIgUXVlcnlPYnNlcnZlciA9IGNsYXNzIGV4dGVuZHMgU3Vic2NyaWJhYmxlIHtcbiAgY29uc3RydWN0b3IoY2xpZW50LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuI2NsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLiNzZWxlY3RFcnJvciA9IG51bGw7XG4gICAgdGhpcy4jY3VycmVudFRoZW5hYmxlID0gcGVuZGluZ1RoZW5hYmxlKCk7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZXhwZXJpbWVudGFsX3ByZWZldGNoSW5SZW5kZXIpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRUaGVuYWJsZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcImV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyIGZlYXR1cmUgZmxhZyBpcyBub3QgZW5hYmxlZFwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5iaW5kTWV0aG9kcygpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuICAjY2xpZW50O1xuICAjY3VycmVudFF1ZXJ5ID0gdm9pZCAwO1xuICAjY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlID0gdm9pZCAwO1xuICAjY3VycmVudFJlc3VsdCA9IHZvaWQgMDtcbiAgI2N1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgI2N1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAjY3VycmVudFRoZW5hYmxlO1xuICAjc2VsZWN0RXJyb3I7XG4gICNzZWxlY3RGbjtcbiAgI3NlbGVjdFJlc3VsdDtcbiAgLy8gVGhpcyBwcm9wZXJ0eSBrZWVwcyB0cmFjayBvZiB0aGUgbGFzdCBxdWVyeSB3aXRoIGRlZmluZWQgZGF0YS5cbiAgLy8gSXQgd2lsbCBiZSB1c2VkIHRvIHBhc3MgdGhlIHByZXZpb3VzIGRhdGEgYW5kIHF1ZXJ5IHRvIHRoZSBwbGFjZWhvbGRlciBmdW5jdGlvbiBiZXR3ZWVuIHJlbmRlcnMuXG4gICNsYXN0UXVlcnlXaXRoRGVmaW5lZERhdGE7XG4gICNzdGFsZVRpbWVvdXRJZDtcbiAgI3JlZmV0Y2hJbnRlcnZhbElkO1xuICAjY3VycmVudFJlZmV0Y2hJbnRlcnZhbDtcbiAgI3RyYWNrZWRQcm9wcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGJpbmRNZXRob2RzKCkge1xuICAgIHRoaXMucmVmZXRjaCA9IHRoaXMucmVmZXRjaC5iaW5kKHRoaXMpO1xuICB9XG4gIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5zaXplID09PSAxKSB7XG4gICAgICB0aGlzLiNjdXJyZW50UXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG4gICAgICBpZiAoc2hvdWxkRmV0Y2hPbk1vdW50KHRoaXMuI2N1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLiNleGVjdXRlRmV0Y2goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgICB0aGlzLiN1cGRhdGVUaW1lcnMoKTtcbiAgICB9XG4gIH1cbiAgb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuICBzaG91bGRGZXRjaE9uUmVjb25uZWN0KCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKFxuICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdFxuICAgICk7XG4gIH1cbiAgc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKFxuICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zLnJlZmV0Y2hPbldpbmRvd0ZvY3VzXG4gICAgKTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLiNjbGVhclN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMuI2NsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gICAgdGhpcy4jY3VycmVudFF1ZXJ5LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICB9XG4gIHNldE9wdGlvbnMob3B0aW9ucywgbm90aWZ5T3B0aW9ucykge1xuICAgIGNvbnN0IHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHByZXZRdWVyeSA9IHRoaXMuI2N1cnJlbnRRdWVyeTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLiNjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHZvaWQgMCAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IFwiYm9vbGVhblwiICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZXNvbHZlRW5hYmxlZCh0aGlzLm9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFeHBlY3RlZCBlbmFibGVkIHRvIGJlIGEgYm9vbGVhbiBvciBhIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBhIGJvb2xlYW5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy4jdXBkYXRlUXVlcnkoKTtcbiAgICB0aGlzLiNjdXJyZW50UXVlcnkuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIGlmIChwcmV2T3B0aW9ucy5fZGVmYXVsdGVkICYmICFzaGFsbG93RXF1YWxPYmplY3RzKHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLiNjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IFwib2JzZXJ2ZXJPcHRpb25zVXBkYXRlZFwiLFxuICAgICAgICBxdWVyeTogdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgICBvYnNlcnZlcjogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpO1xuICAgIGlmIChtb3VudGVkICYmIHNob3VsZEZldGNoT3B0aW9uYWxseShcbiAgICAgIHRoaXMuI2N1cnJlbnRRdWVyeSxcbiAgICAgIHByZXZRdWVyeSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHByZXZPcHRpb25zXG4gICAgKSkge1xuICAgICAgdGhpcy4jZXhlY3V0ZUZldGNoKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpO1xuICAgIGlmIChtb3VudGVkICYmICh0aGlzLiNjdXJyZW50UXVlcnkgIT09IHByZXZRdWVyeSB8fCByZXNvbHZlRW5hYmxlZCh0aGlzLm9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSAhPT0gcmVzb2x2ZUVuYWJsZWQocHJldk9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSB8fCByZXNvbHZlU3RhbGVUaW1lKHRoaXMub3B0aW9ucy5zdGFsZVRpbWUsIHRoaXMuI2N1cnJlbnRRdWVyeSkgIT09IHJlc29sdmVTdGFsZVRpbWUocHJldk9wdGlvbnMuc3RhbGVUaW1lLCB0aGlzLiNjdXJyZW50UXVlcnkpKSkge1xuICAgICAgdGhpcy4jdXBkYXRlU3RhbGVUaW1lb3V0KCk7XG4gICAgfVxuICAgIGNvbnN0IG5leHRSZWZldGNoSW50ZXJ2YWwgPSB0aGlzLiNjb21wdXRlUmVmZXRjaEludGVydmFsKCk7XG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuI2N1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHJlc29sdmVFbmFibGVkKHRoaXMub3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpICE9PSByZXNvbHZlRW5hYmxlZChwcmV2T3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpIHx8IG5leHRSZWZldGNoSW50ZXJ2YWwgIT09IHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwpKSB7XG4gICAgICB0aGlzLiN1cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dFJlZmV0Y2hJbnRlcnZhbCk7XG4gICAgfVxuICB9XG4gIGdldE9wdGltaXN0aWNSZXN1bHQob3B0aW9ucykge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBvcHRpb25zKTtcbiAgICBpZiAoc2hvdWxkQXNzaWduT2JzZXJ2ZXJDdXJyZW50UHJvcGVydGllcyh0aGlzLCByZXN1bHQpKSB7XG4gICAgICB0aGlzLiNjdXJyZW50UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy4jY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB0aGlzLiNjdXJyZW50UmVzdWx0U3RhdGUgPSB0aGlzLiNjdXJyZW50UXVlcnkuc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0Q3VycmVudFJlc3VsdCgpIHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgfVxuICB0cmFja1Jlc3VsdChyZXN1bHQsIG9uUHJvcFRyYWNrZWQpIHtcbiAgICBjb25zdCB0cmFja2VkUmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cmFja2VkUmVzdWx0LCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy50cmFja1Byb3Aoa2V5KTtcbiAgICAgICAgICBvblByb3BUcmFja2VkPy4oa2V5KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB0cmFja2VkUmVzdWx0O1xuICB9XG4gIHRyYWNrUHJvcChrZXkpIHtcbiAgICB0aGlzLiN0cmFja2VkUHJvcHMuYWRkKGtleSk7XG4gIH1cbiAgZ2V0Q3VycmVudFF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50UXVlcnk7XG4gIH1cbiAgcmVmZXRjaCh7IC4uLm9wdGlvbnMgfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goe1xuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGZldGNoT3B0aW1pc3RpYyhvcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuI2NsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5mZXRjaCgpLnRoZW4oKCkgPT4gdGhpcy5jcmVhdGVSZXN1bHQocXVlcnksIGRlZmF1bHRlZE9wdGlvbnMpKTtcbiAgfVxuICBmZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy4jZXhlY3V0ZUZldGNoKHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIGNhbmNlbFJlZmV0Y2g6IGZldGNoT3B0aW9ucy5jYW5jZWxSZWZldGNoID8/IHRydWVcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgICByZXR1cm4gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgICB9KTtcbiAgfVxuICAjZXhlY3V0ZUZldGNoKGZldGNoT3B0aW9ucykge1xuICAgIHRoaXMuI3VwZGF0ZVF1ZXJ5KCk7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzLiNjdXJyZW50UXVlcnkuZmV0Y2goXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICBmZXRjaE9wdGlvbnNcbiAgICApO1xuICAgIGlmICghZmV0Y2hPcHRpb25zPy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuICAjdXBkYXRlU3RhbGVUaW1lb3V0KCkge1xuICAgIHRoaXMuI2NsZWFyU3RhbGVUaW1lb3V0KCk7XG4gICAgY29uc3Qgc3RhbGVUaW1lID0gcmVzb2x2ZVN0YWxlVGltZShcbiAgICAgIHRoaXMub3B0aW9ucy5zdGFsZVRpbWUsXG4gICAgICB0aGlzLiNjdXJyZW50UXVlcnlcbiAgICApO1xuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLiNjdXJyZW50UmVzdWx0LmlzU3RhbGUgfHwgIWlzVmFsaWRUaW1lb3V0KHN0YWxlVGltZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGltZSA9IHRpbWVVbnRpbFN0YWxlKHRoaXMuI2N1cnJlbnRSZXN1bHQuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGltZSArIDE7XG4gICAgdGhpcy4jc3RhbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy4jY3VycmVudFJlc3VsdC5pc1N0YWxlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCk7XG4gIH1cbiAgI2NvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCh0aGlzLiNjdXJyZW50UXVlcnkpIDogdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCkgPz8gZmFsc2U7XG4gIH1cbiAgI3VwZGF0ZVJlZmV0Y2hJbnRlcnZhbChuZXh0SW50ZXJ2YWwpIHtcbiAgICB0aGlzLiNjbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICAgIHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPSBuZXh0SW50ZXJ2YWw7XG4gICAgaWYgKGlzU2VydmVyIHx8IHJlc29sdmVFbmFibGVkKHRoaXMub3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpID09PSBmYWxzZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy4jY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkgfHwgdGhpcy4jY3VycmVudFJlZmV0Y2hJbnRlcnZhbCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsSW5CYWNrZ3JvdW5kIHx8IGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSkge1xuICAgICAgICB0aGlzLiNleGVjdXRlRmV0Y2goKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLiNjdXJyZW50UmVmZXRjaEludGVydmFsKTtcbiAgfVxuICAjdXBkYXRlVGltZXJzKCkge1xuICAgIHRoaXMuI3VwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMuI3VwZGF0ZVJlZmV0Y2hJbnRlcnZhbCh0aGlzLiNjb21wdXRlUmVmZXRjaEludGVydmFsKCkpO1xuICB9XG4gICNjbGVhclN0YWxlVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy4jc3RhbGVUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNzdGFsZVRpbWVvdXRJZCk7XG4gICAgICB0aGlzLiNzdGFsZVRpbWVvdXRJZCA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgI2NsZWFyUmVmZXRjaEludGVydmFsKCkge1xuICAgIGlmICh0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgY3JlYXRlUmVzdWx0KHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgcHJldlF1ZXJ5ID0gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICAgIGNvbnN0IHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHByZXZSZXN1bHQgPSB0aGlzLiNjdXJyZW50UmVzdWx0O1xuICAgIGNvbnN0IHByZXZSZXN1bHRTdGF0ZSA9IHRoaXMuI2N1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgICBjb25zdCBwcmV2UmVzdWx0T3B0aW9ucyA9IHRoaXMuI2N1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAgIGNvbnN0IHF1ZXJ5Q2hhbmdlID0gcXVlcnkgIT09IHByZXZRdWVyeTtcbiAgICBjb25zdCBxdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5Q2hhbmdlID8gcXVlcnkuc3RhdGUgOiB0aGlzLiNjdXJyZW50UXVlcnlJbml0aWFsU3RhdGU7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gcXVlcnk7XG4gICAgbGV0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9O1xuICAgIGxldCBpc1BsYWNlaG9sZGVyRGF0YSA9IGZhbHNlO1xuICAgIGxldCBkYXRhO1xuICAgIGlmIChvcHRpb25zLl9vcHRpbWlzdGljUmVzdWx0cykge1xuICAgICAgY29uc3QgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7XG4gICAgICBjb25zdCBmZXRjaE9uTW91bnQgPSAhbW91bnRlZCAmJiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpO1xuICAgICAgY29uc3QgZmV0Y2hPcHRpb25hbGx5ID0gbW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpO1xuICAgICAgaWYgKGZldGNoT25Nb3VudCB8fCBmZXRjaE9wdGlvbmFsbHkpIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgLi4uZmV0Y2hTdGF0ZShzdGF0ZS5kYXRhLCBxdWVyeS5vcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuX29wdGltaXN0aWNSZXN1bHRzID09PSBcImlzUmVzdG9yaW5nXCIpIHtcbiAgICAgICAgbmV3U3RhdGUuZmV0Y2hTdGF0dXMgPSBcImlkbGVcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHsgZXJyb3IsIGVycm9yVXBkYXRlZEF0LCBzdGF0dXMgfSA9IG5ld1N0YXRlO1xuICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiBuZXdTdGF0ZS5kYXRhICE9PSB2b2lkIDApIHtcbiAgICAgIGlmIChwcmV2UmVzdWx0ICYmIG5ld1N0YXRlLmRhdGEgPT09IHByZXZSZXN1bHRTdGF0ZT8uZGF0YSAmJiBvcHRpb25zLnNlbGVjdCA9PT0gdGhpcy4jc2VsZWN0Rm4pIHtcbiAgICAgICAgZGF0YSA9IHRoaXMuI3NlbGVjdFJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy4jc2VsZWN0Rm4gPSBvcHRpb25zLnNlbGVjdDtcbiAgICAgICAgICBkYXRhID0gb3B0aW9ucy5zZWxlY3QobmV3U3RhdGUuZGF0YSk7XG4gICAgICAgICAgZGF0YSA9IHJlcGxhY2VEYXRhKHByZXZSZXN1bHQ/LmRhdGEsIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICAgIHRoaXMuI3NlbGVjdFJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgIHRoaXMuI3NlbGVjdEVycm9yID0gc2VsZWN0RXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IG5ld1N0YXRlLmRhdGE7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSAhPT0gdm9pZCAwICYmIGRhdGEgPT09IHZvaWQgMCAmJiBzdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICBsZXQgcGxhY2Vob2xkZXJEYXRhO1xuICAgICAgaWYgKHByZXZSZXN1bHQ/LmlzUGxhY2Vob2xkZXJEYXRhICYmIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhID09PSBwcmV2UmVzdWx0T3B0aW9ucz8ucGxhY2Vob2xkZXJEYXRhKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHByZXZSZXN1bHQuZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEoXG4gICAgICAgICAgdGhpcy4jbGFzdFF1ZXJ5V2l0aERlZmluZWREYXRhPy5zdGF0ZS5kYXRhLFxuICAgICAgICAgIHRoaXMuI2xhc3RRdWVyeVdpdGhEZWZpbmVkRGF0YVxuICAgICAgICApIDogb3B0aW9ucy5wbGFjZWhvbGRlckRhdGE7XG4gICAgICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiBwbGFjZWhvbGRlckRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBvcHRpb25zLnNlbGVjdChwbGFjZWhvbGRlckRhdGEpO1xuICAgICAgICAgICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIH0gY2F0Y2ggKHNlbGVjdEVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLiNzZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBsYWNlaG9sZGVyRGF0YSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHN0YXR1cyA9IFwic3VjY2Vzc1wiO1xuICAgICAgICBkYXRhID0gcmVwbGFjZURhdGEoXG4gICAgICAgICAgcHJldlJlc3VsdD8uZGF0YSxcbiAgICAgICAgICBwbGFjZWhvbGRlckRhdGEsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICBpc1BsYWNlaG9sZGVyRGF0YSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLiNzZWxlY3RFcnJvcikge1xuICAgICAgZXJyb3IgPSB0aGlzLiNzZWxlY3RFcnJvcjtcbiAgICAgIGRhdGEgPSB0aGlzLiNzZWxlY3RSZXN1bHQ7XG4gICAgICBlcnJvclVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzdGF0dXMgPSBcImVycm9yXCI7XG4gICAgfVxuICAgIGNvbnN0IGlzRmV0Y2hpbmcgPSBuZXdTdGF0ZS5mZXRjaFN0YXR1cyA9PT0gXCJmZXRjaGluZ1wiO1xuICAgIGNvbnN0IGlzUGVuZGluZyA9IHN0YXR1cyA9PT0gXCJwZW5kaW5nXCI7XG4gICAgY29uc3QgaXNFcnJvciA9IHN0YXR1cyA9PT0gXCJlcnJvclwiO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzUGVuZGluZyAmJiBpc0ZldGNoaW5nO1xuICAgIGNvbnN0IGhhc0RhdGEgPSBkYXRhICE9PSB2b2lkIDA7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzLFxuICAgICAgZmV0Y2hTdGF0dXM6IG5ld1N0YXRlLmZldGNoU3RhdHVzLFxuICAgICAgaXNQZW5kaW5nLFxuICAgICAgaXNTdWNjZXNzOiBzdGF0dXMgPT09IFwic3VjY2Vzc1wiLFxuICAgICAgaXNFcnJvcixcbiAgICAgIGlzSW5pdGlhbExvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgIGlzTG9hZGluZyxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBuZXdTdGF0ZS5kYXRhVXBkYXRlZEF0LFxuICAgICAgZXJyb3IsXG4gICAgICBlcnJvclVwZGF0ZWRBdCxcbiAgICAgIGZhaWx1cmVDb3VudDogbmV3U3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQsXG4gICAgICBmYWlsdXJlUmVhc29uOiBuZXdTdGF0ZS5mZXRjaEZhaWx1cmVSZWFzb24sXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiBuZXdTdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGVkOiBuZXdTdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiAwIHx8IG5ld1N0YXRlLmVycm9yVXBkYXRlQ291bnQgPiAwLFxuICAgICAgaXNGZXRjaGVkQWZ0ZXJNb3VudDogbmV3U3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZGF0YVVwZGF0ZUNvdW50IHx8IG5ld1N0YXRlLmVycm9yVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGluZyxcbiAgICAgIGlzUmVmZXRjaGluZzogaXNGZXRjaGluZyAmJiAhaXNQZW5kaW5nLFxuICAgICAgaXNMb2FkaW5nRXJyb3I6IGlzRXJyb3IgJiYgIWhhc0RhdGEsXG4gICAgICBpc1BhdXNlZDogbmV3U3RhdGUuZmV0Y2hTdGF0dXMgPT09IFwicGF1c2VkXCIsXG4gICAgICBpc1BsYWNlaG9sZGVyRGF0YSxcbiAgICAgIGlzUmVmZXRjaEVycm9yOiBpc0Vycm9yICYmIGhhc0RhdGEsXG4gICAgICBpc1N0YWxlOiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgIHJlZmV0Y2g6IHRoaXMucmVmZXRjaCxcbiAgICAgIHByb21pc2U6IHRoaXMuI2N1cnJlbnRUaGVuYWJsZVxuICAgIH07XG4gICAgY29uc3QgbmV4dFJlc3VsdCA9IHJlc3VsdDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyKSB7XG4gICAgICBjb25zdCBmaW5hbGl6ZVRoZW5hYmxlSWZQb3NzaWJsZSA9ICh0aGVuYWJsZSkgPT4ge1xuICAgICAgICBpZiAobmV4dFJlc3VsdC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgIHRoZW5hYmxlLnJlamVjdChuZXh0UmVzdWx0LmVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXh0UmVzdWx0LmRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHRoZW5hYmxlLnJlc29sdmUobmV4dFJlc3VsdC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlY3JlYXRlVGhlbmFibGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLiNjdXJyZW50VGhlbmFibGUgPSBuZXh0UmVzdWx0LnByb21pc2UgPSBwZW5kaW5nVGhlbmFibGUoKTtcbiAgICAgICAgZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUocGVuZGluZyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJldlRoZW5hYmxlID0gdGhpcy4jY3VycmVudFRoZW5hYmxlO1xuICAgICAgc3dpdGNoIChwcmV2VGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCA9PT0gcHJldlF1ZXJ5LnF1ZXJ5SGFzaCkge1xuICAgICAgICAgICAgZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUocHJldlRoZW5hYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICBpZiAobmV4dFJlc3VsdC5zdGF0dXMgPT09IFwiZXJyb3JcIiB8fCBuZXh0UmVzdWx0LmRhdGEgIT09IHByZXZUaGVuYWJsZS52YWx1ZSkge1xuICAgICAgICAgICAgcmVjcmVhdGVUaGVuYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICAgICAgaWYgKG5leHRSZXN1bHQuc3RhdHVzICE9PSBcImVycm9yXCIgfHwgbmV4dFJlc3VsdC5lcnJvciAhPT0gcHJldlRoZW5hYmxlLnJlYXNvbikge1xuICAgICAgICAgICAgcmVjcmVhdGVUaGVuYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRSZXN1bHQ7XG4gIH1cbiAgdXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpIHtcbiAgICBjb25zdCBwcmV2UmVzdWx0ID0gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgICBjb25zdCBuZXh0UmVzdWx0ID0gdGhpcy5jcmVhdGVSZXN1bHQodGhpcy4jY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuI2N1cnJlbnRSZXN1bHRTdGF0ZSA9IHRoaXMuI2N1cnJlbnRRdWVyeS5zdGF0ZTtcbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBpZiAodGhpcy4jY3VycmVudFJlc3VsdFN0YXRlLmRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgdGhpcy4jbGFzdFF1ZXJ5V2l0aERlZmluZWREYXRhID0gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICAgIH1cbiAgICBpZiAoc2hhbGxvd0VxdWFsT2JqZWN0cyhuZXh0UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0ID0gbmV4dFJlc3VsdDtcbiAgICBjb25zdCBkZWZhdWx0Tm90aWZ5T3B0aW9ucyA9IHt9O1xuICAgIGNvbnN0IHNob3VsZE5vdGlmeUxpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIGlmICghcHJldlJlc3VsdCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgbm90aWZ5T25DaGFuZ2VQcm9wcyB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3Qgbm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlID0gdHlwZW9mIG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09IFwiZnVuY3Rpb25cIiA/IG5vdGlmeU9uQ2hhbmdlUHJvcHMoKSA6IG5vdGlmeU9uQ2hhbmdlUHJvcHM7XG4gICAgICBpZiAobm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlID09PSBcImFsbFwiIHx8ICFub3RpZnlPbkNoYW5nZVByb3BzVmFsdWUgJiYgIXRoaXMuI3RyYWNrZWRQcm9wcy5zaXplKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5jbHVkZWRQcm9wcyA9IG5ldyBTZXQoXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHNWYWx1ZSA/PyB0aGlzLiN0cmFja2VkUHJvcHNcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgICBpbmNsdWRlZFByb3BzLmFkZChcImVycm9yXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuI2N1cnJlbnRSZXN1bHQpLnNvbWUoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuI2N1cnJlbnRSZXN1bHRbdHlwZWRLZXldICE9PSBwcmV2UmVzdWx0W3R5cGVkS2V5XTtcbiAgICAgICAgcmV0dXJuIGNoYW5nZWQgJiYgaW5jbHVkZWRQcm9wcy5oYXModHlwZWRLZXkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBpZiAobm90aWZ5T3B0aW9ucz8ubGlzdGVuZXJzICE9PSBmYWxzZSAmJiBzaG91bGROb3RpZnlMaXN0ZW5lcnMoKSkge1xuICAgICAgZGVmYXVsdE5vdGlmeU9wdGlvbnMubGlzdGVuZXJzID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy4jbm90aWZ5KHsgLi4uZGVmYXVsdE5vdGlmeU9wdGlvbnMsIC4uLm5vdGlmeU9wdGlvbnMgfSk7XG4gIH1cbiAgI3VwZGF0ZVF1ZXJ5KCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIHRoaXMub3B0aW9ucyk7XG4gICAgaWYgKHF1ZXJ5ID09PSB0aGlzLiNjdXJyZW50UXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJldlF1ZXJ5ID0gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICAgIHRoaXMuI2N1cnJlbnRRdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuI2N1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICBwcmV2UXVlcnk/LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgICAgcXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG4gICAgfVxuICB9XG4gIG9uUXVlcnlVcGRhdGUoKSB7XG4gICAgdGhpcy51cGRhdGVSZXN1bHQoKTtcbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy4jdXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9XG4gICNub3RpZnkobm90aWZ5T3B0aW9ucykge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgbGlzdGVuZXIodGhpcy4jY3VycmVudFJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5ub3RpZnkoe1xuICAgICAgICBxdWVyeTogdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgICB0eXBlOiBcIm9ic2VydmVyUmVzdWx0c1VwZGF0ZWRcIlxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5mdW5jdGlvbiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcmVzb2x2ZUVuYWJsZWQob3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgIT09IGZhbHNlICYmIHF1ZXJ5LnN0YXRlLmRhdGEgPT09IHZvaWQgMCAmJiAhKHF1ZXJ5LnN0YXRlLnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIG9wdGlvbnMucmV0cnlPbk1vdW50ID09PSBmYWxzZSk7XG59XG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB8fCBxdWVyeS5zdGF0ZS5kYXRhICE9PSB2b2lkIDAgJiYgc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgb3B0aW9ucy5yZWZldGNoT25Nb3VudCk7XG59XG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBmaWVsZCkge1xuICBpZiAocmVzb2x2ZUVuYWJsZWQob3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgZmllbGQgPT09IFwiZnVuY3Rpb25cIiA/IGZpZWxkKHF1ZXJ5KSA6IGZpZWxkO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gXCJhbHdheXNcIiB8fCB2YWx1ZSAhPT0gZmFsc2UgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKSB7XG4gIHJldHVybiAocXVlcnkgIT09IHByZXZRdWVyeSB8fCByZXNvbHZlRW5hYmxlZChwcmV2T3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgPT09IGZhbHNlKSAmJiAoIW9wdGlvbnMuc3VzcGVuc2UgfHwgcXVlcnkuc3RhdGUuc3RhdHVzICE9PSBcImVycm9yXCIpICYmIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaXNTdGFsZShxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcmVzb2x2ZUVuYWJsZWQob3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgIT09IGZhbHNlICYmIHF1ZXJ5LmlzU3RhbGVCeVRpbWUocmVzb2x2ZVN0YWxlVGltZShvcHRpb25zLnN0YWxlVGltZSwgcXVlcnkpKTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFzc2lnbk9ic2VydmVyQ3VycmVudFByb3BlcnRpZXMob2JzZXJ2ZXIsIG9wdGltaXN0aWNSZXN1bHQpIHtcbiAgaWYgKCFzaGFsbG93RXF1YWxPYmplY3RzKG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSwgb3B0aW1pc3RpY1Jlc3VsdCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQge1xuICBRdWVyeU9ic2VydmVyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnlPYnNlcnZlci5qcy5tYXAiLCIvLyBzcmMvbXV0YXRpb25PYnNlcnZlci50c1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFN0YXRlIH0gZnJvbSBcIi4vbXV0YXRpb24uanNcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbmltcG9ydCB7IGhhc2hLZXksIHNoYWxsb3dFcXVhbE9iamVjdHMgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBjbGFzcyBleHRlbmRzIFN1YnNjcmliYWJsZSB7XG4gICNjbGllbnQ7XG4gICNjdXJyZW50UmVzdWx0ID0gdm9pZCAwO1xuICAjY3VycmVudE11dGF0aW9uO1xuICAjbXV0YXRlT3B0aW9ucztcbiAgY29uc3RydWN0b3IoY2xpZW50LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNjbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHRoaXMuYmluZE1ldGhvZHMoKTtcbiAgICB0aGlzLiN1cGRhdGVSZXN1bHQoKTtcbiAgfVxuICBiaW5kTWV0aG9kcygpIHtcbiAgICB0aGlzLm11dGF0ZSA9IHRoaXMubXV0YXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZXNldCA9IHRoaXMucmVzZXQuYmluZCh0aGlzKTtcbiAgfVxuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLiNjbGllbnQuZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgICBpZiAoIXNoYWxsb3dFcXVhbE9iamVjdHModGhpcy5vcHRpb25zLCBwcmV2T3B0aW9ucykpIHtcbiAgICAgIHRoaXMuI2NsaWVudC5nZXRNdXRhdGlvbkNhY2hlKCkubm90aWZ5KHtcbiAgICAgICAgdHlwZTogXCJvYnNlcnZlck9wdGlvbnNVcGRhdGVkXCIsXG4gICAgICAgIG11dGF0aW9uOiB0aGlzLiNjdXJyZW50TXV0YXRpb24sXG4gICAgICAgIG9ic2VydmVyOiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHByZXZPcHRpb25zPy5tdXRhdGlvbktleSAmJiB0aGlzLm9wdGlvbnMubXV0YXRpb25LZXkgJiYgaGFzaEtleShwcmV2T3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hLZXkodGhpcy5vcHRpb25zLm11dGF0aW9uS2V5KSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jY3VycmVudE11dGF0aW9uPy5zdGF0ZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24uc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy4jY3VycmVudE11dGF0aW9uPy5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICB9XG4gIH1cbiAgb25NdXRhdGlvblVwZGF0ZShhY3Rpb24pIHtcbiAgICB0aGlzLiN1cGRhdGVSZXN1bHQoKTtcbiAgICB0aGlzLiNub3RpZnkoYWN0aW9uKTtcbiAgfVxuICBnZXRDdXJyZW50UmVzdWx0KCkge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50UmVzdWx0O1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbj8ucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gICAgdGhpcy4jY3VycmVudE11dGF0aW9uID0gdm9pZCAwO1xuICAgIHRoaXMuI3VwZGF0ZVJlc3VsdCgpO1xuICAgIHRoaXMuI25vdGlmeSgpO1xuICB9XG4gIG11dGF0ZSh2YXJpYWJsZXMsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNtdXRhdGVPcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24/LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbiA9IHRoaXMuI2NsaWVudC5nZXRNdXRhdGlvbkNhY2hlKCkuYnVpbGQodGhpcy4jY2xpZW50LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbi5hZGRPYnNlcnZlcih0aGlzKTtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudE11dGF0aW9uLmV4ZWN1dGUodmFyaWFibGVzKTtcbiAgfVxuICAjdXBkYXRlUmVzdWx0KCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy4jY3VycmVudE11dGF0aW9uPy5zdGF0ZSA/PyBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0ID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBpc1BlbmRpbmc6IHN0YXRlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIsXG4gICAgICBpc1N1Y2Nlc3M6IHN0YXRlLnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIsXG4gICAgICBpc0Vycm9yOiBzdGF0ZS5zdGF0dXMgPT09IFwiZXJyb3JcIixcbiAgICAgIGlzSWRsZTogc3RhdGUuc3RhdHVzID09PSBcImlkbGVcIixcbiAgICAgIG11dGF0ZTogdGhpcy5tdXRhdGUsXG4gICAgICByZXNldDogdGhpcy5yZXNldFxuICAgIH07XG4gIH1cbiAgI25vdGlmeShhY3Rpb24pIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNtdXRhdGVPcHRpb25zICYmIHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy4jY3VycmVudFJlc3VsdC52YXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLiNjdXJyZW50UmVzdWx0LmNvbnRleHQ7XG4gICAgICAgIGlmIChhY3Rpb24/LnR5cGUgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgdGhpcy4jbXV0YXRlT3B0aW9ucy5vblN1Y2Nlc3M/LihhY3Rpb24uZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICAgICAgICB0aGlzLiNtdXRhdGVPcHRpb25zLm9uU2V0dGxlZD8uKGFjdGlvbi5kYXRhLCBudWxsLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbj8udHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgdGhpcy4jbXV0YXRlT3B0aW9ucy5vbkVycm9yPy4oYWN0aW9uLmVycm9yLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgICAgICAgIHRoaXMuI211dGF0ZU9wdGlvbnMub25TZXR0bGVkPy4oXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIodGhpcy4jY3VycmVudFJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIE11dGF0aW9uT2JzZXJ2ZXJcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdXRhdGlvbk9ic2VydmVyLmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvUXVlcnlDbGllbnRQcm92aWRlci50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgUXVlcnlDbGllbnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChcbiAgdm9pZCAwXG4pO1xudmFyIHVzZVF1ZXJ5Q2xpZW50ID0gKHF1ZXJ5Q2xpZW50KSA9PiB7XG4gIGNvbnN0IGNsaWVudCA9IFJlYWN0LnVzZUNvbnRleHQoUXVlcnlDbGllbnRDb250ZXh0KTtcbiAgaWYgKHF1ZXJ5Q2xpZW50KSB7XG4gICAgcmV0dXJuIHF1ZXJ5Q2xpZW50O1xuICB9XG4gIGlmICghY2xpZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lXCIpO1xuICB9XG4gIHJldHVybiBjbGllbnQ7XG59O1xudmFyIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgPSAoe1xuICBjbGllbnQsXG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2xpZW50Lm1vdW50KCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsaWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgfSwgW2NsaWVudF0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChRdWVyeUNsaWVudENvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNsaWVudCwgY2hpbGRyZW4gfSk7XG59O1xuZXhwb3J0IHtcbiAgUXVlcnlDbGllbnRDb250ZXh0LFxuICBRdWVyeUNsaWVudFByb3ZpZGVyLFxuICB1c2VRdWVyeUNsaWVudFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVF1ZXJ5Q2xpZW50UHJvdmlkZXIuanMubWFwIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9pc1Jlc3RvcmluZy50c1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG52YXIgSXNSZXN0b3JpbmdDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7XG52YXIgdXNlSXNSZXN0b3JpbmcgPSAoKSA9PiBSZWFjdC51c2VDb250ZXh0KElzUmVzdG9yaW5nQ29udGV4dCk7XG52YXIgSXNSZXN0b3JpbmdQcm92aWRlciA9IElzUmVzdG9yaW5nQ29udGV4dC5Qcm92aWRlcjtcbmV4cG9ydCB7XG4gIElzUmVzdG9yaW5nUHJvdmlkZXIsXG4gIHVzZUlzUmVzdG9yaW5nXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNSZXN0b3JpbmcuanMubWFwIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9RdWVyeUVycm9yUmVzZXRCb3VuZGFyeS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBjcmVhdGVWYWx1ZSgpIHtcbiAgbGV0IGlzUmVzZXQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjbGVhclJlc2V0OiAoKSA9PiB7XG4gICAgICBpc1Jlc2V0ID0gZmFsc2U7XG4gICAgfSxcbiAgICByZXNldDogKCkgPT4ge1xuICAgICAgaXNSZXNldCA9IHRydWU7XG4gICAgfSxcbiAgICBpc1Jlc2V0OiAoKSA9PiB7XG4gICAgICByZXR1cm4gaXNSZXNldDtcbiAgICB9XG4gIH07XG59XG52YXIgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChjcmVhdGVWYWx1ZSgpKTtcbnZhciB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9ICgpID0+IFJlYWN0LnVzZUNvbnRleHQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0KTtcbnZhciBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9ICh7XG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIGNvbnN0IFt2YWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiBjcmVhdGVWYWx1ZSgpKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlLCBjaGlsZHJlbjogdHlwZW9mIGNoaWxkcmVuID09PSBcImZ1bmN0aW9uXCIgPyBjaGlsZHJlbih2YWx1ZSkgOiBjaGlsZHJlbiB9KTtcbn07XG5leHBvcnQge1xuICBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSxcbiAgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWVyeUVycm9yUmVzZXRCb3VuZGFyeS5qcy5tYXAiLCIvLyBzcmMvdXRpbHMudHNcbmZ1bmN0aW9uIHNob3VsZFRocm93RXJyb3IodGhyb3dFcnJvciwgcGFyYW1zKSB7XG4gIGlmICh0eXBlb2YgdGhyb3dFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoLi4ucGFyYW1zKTtcbiAgfVxuICByZXR1cm4gISF0aHJvd0Vycm9yO1xufVxuZnVuY3Rpb24gbm9vcCgpIHtcbn1cbmV4cG9ydCB7XG4gIG5vb3AsXG4gIHNob3VsZFRocm93RXJyb3Jcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL2Vycm9yQm91bmRhcnlVdGlscy50c1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBzaG91bGRUaHJvd0Vycm9yIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5ID0gKG9wdGlvbnMsIGVycm9yUmVzZXRCb3VuZGFyeSkgPT4ge1xuICBpZiAob3B0aW9ucy5zdXNwZW5zZSB8fCBvcHRpb25zLnRocm93T25FcnJvciB8fCBvcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyKSB7XG4gICAgaWYgKCFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpKSB7XG4gICAgICBvcHRpb25zLnJldHJ5T25Nb3VudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcbnZhciB1c2VDbGVhclJlc2V0RXJyb3JCb3VuZGFyeSA9IChlcnJvclJlc2V0Qm91bmRhcnkpID0+IHtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICB9LCBbZXJyb3JSZXNldEJvdW5kYXJ5XSk7XG59O1xudmFyIGdldEhhc0Vycm9yID0gKHtcbiAgcmVzdWx0LFxuICBlcnJvclJlc2V0Qm91bmRhcnksXG4gIHRocm93T25FcnJvcixcbiAgcXVlcnlcbn0pID0+IHtcbiAgcmV0dXJuIHJlc3VsdC5pc0Vycm9yICYmICFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpICYmICFyZXN1bHQuaXNGZXRjaGluZyAmJiBxdWVyeSAmJiBzaG91bGRUaHJvd0Vycm9yKHRocm93T25FcnJvciwgW3Jlc3VsdC5lcnJvciwgcXVlcnldKTtcbn07XG5leHBvcnQge1xuICBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5LFxuICBnZXRIYXNFcnJvcixcbiAgdXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvckJvdW5kYXJ5VXRpbHMuanMubWFwIiwiLy8gc3JjL3N1c3BlbnNlLnRzXG52YXIgZGVmYXVsdFRocm93T25FcnJvciA9IChfZXJyb3IsIHF1ZXJ5KSA9PiBxdWVyeS5zdGF0ZS5kYXRhID09PSB2b2lkIDA7XG52YXIgZW5zdXJlU3VzcGVuc2VUaW1lcnMgPSAoZGVmYXVsdGVkT3B0aW9ucykgPT4ge1xuICBjb25zdCBvcmlnaW5hbFN0YWxlVGltZSA9IGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lO1xuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lID0gdHlwZW9mIG9yaWdpbmFsU3RhbGVUaW1lID09PSBcImZ1bmN0aW9uXCIgPyAoLi4uYXJncykgPT4gTWF0aC5tYXgob3JpZ2luYWxTdGFsZVRpbWUoLi4uYXJncyksIDFlMykgOiBNYXRoLm1heChvcmlnaW5hbFN0YWxlVGltZSA/PyAxZTMsIDFlMyk7XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLmdjVGltZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5nY1RpbWUgPSBNYXRoLm1heChkZWZhdWx0ZWRPcHRpb25zLmdjVGltZSwgMWUzKTtcbiAgICB9XG4gIH1cbn07XG52YXIgd2lsbEZldGNoID0gKHJlc3VsdCwgaXNSZXN0b3JpbmcpID0+IHJlc3VsdC5pc0xvYWRpbmcgJiYgcmVzdWx0LmlzRmV0Y2hpbmcgJiYgIWlzUmVzdG9yaW5nO1xudmFyIHNob3VsZFN1c3BlbmQgPSAoZGVmYXVsdGVkT3B0aW9ucywgcmVzdWx0KSA9PiBkZWZhdWx0ZWRPcHRpb25zPy5zdXNwZW5zZSAmJiByZXN1bHQuaXNQZW5kaW5nO1xudmFyIGZldGNoT3B0aW1pc3RpYyA9IChkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlciwgZXJyb3JSZXNldEJvdW5kYXJ5KSA9PiBvYnNlcnZlci5mZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucykuY2F0Y2goKCkgPT4ge1xuICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xufSk7XG5leHBvcnQge1xuICBkZWZhdWx0VGhyb3dPbkVycm9yLFxuICBlbnN1cmVTdXNwZW5zZVRpbWVycyxcbiAgZmV0Y2hPcHRpbWlzdGljLFxuICBzaG91bGRTdXNwZW5kLFxuICB3aWxsRmV0Y2hcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdXNwZW5zZS5qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL3VzZUJhc2VRdWVyeS50c1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBpc1NlcnZlciwgbm90aWZ5TWFuYWdlciB9IGZyb20gXCJAdGFuc3RhY2svcXVlcnktY29yZVwiO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiLi9RdWVyeUNsaWVudFByb3ZpZGVyLmpzXCI7XG5pbXBvcnQgeyB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSB9IGZyb20gXCIuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQge1xuICBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5LFxuICBnZXRIYXNFcnJvcixcbiAgdXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnlcbn0gZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVV0aWxzLmpzXCI7XG5pbXBvcnQgeyB1c2VJc1Jlc3RvcmluZyB9IGZyb20gXCIuL2lzUmVzdG9yaW5nLmpzXCI7XG5pbXBvcnQge1xuICBlbnN1cmVTdXNwZW5zZVRpbWVycyxcbiAgZmV0Y2hPcHRpbWlzdGljLFxuICBzaG91bGRTdXNwZW5kLFxuICB3aWxsRmV0Y2hcbn0gZnJvbSBcIi4vc3VzcGVuc2UuanNcIjtcbmltcG9ydCB7IG5vb3AgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZnVuY3Rpb24gdXNlQmFzZVF1ZXJ5KG9wdGlvbnMsIE9ic2VydmVyLCBxdWVyeUNsaWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0JhZCBhcmd1bWVudCB0eXBlLiBTdGFydGluZyB3aXRoIHY1LCBvbmx5IHRoZSBcIk9iamVjdFwiIGZvcm0gaXMgYWxsb3dlZCB3aGVuIGNhbGxpbmcgcXVlcnkgcmVsYXRlZCBmdW5jdGlvbnMuIFBsZWFzZSB1c2UgdGhlIGVycm9yIHN0YWNrIHRvIGZpbmQgdGhlIGN1bHByaXQgY2FsbC4gTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vdGFuc3RhY2suY29tL3F1ZXJ5L2xhdGVzdC9kb2NzL3JlYWN0L2d1aWRlcy9taWdyYXRpbmctdG8tdjUjc3VwcG9ydHMtYS1zaW5nbGUtc2lnbmF0dXJlLW9uZS1vYmplY3QnXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBjbGllbnQgPSB1c2VRdWVyeUNsaWVudChxdWVyeUNsaWVudCk7XG4gIGNvbnN0IGlzUmVzdG9yaW5nID0gdXNlSXNSZXN0b3JpbmcoKTtcbiAgY29uc3QgZXJyb3JSZXNldEJvdW5kYXJ5ID0gdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoKTtcbiAgY29uc3QgZGVmYXVsdGVkT3B0aW9ucyA9IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICBjbGllbnQuZ2V0RGVmYXVsdE9wdGlvbnMoKS5xdWVyaWVzPy5fZXhwZXJpbWVudGFsX2JlZm9yZVF1ZXJ5Py4oXG4gICAgZGVmYXVsdGVkT3B0aW9uc1xuICApO1xuICBkZWZhdWx0ZWRPcHRpb25zLl9vcHRpbWlzdGljUmVzdWx0cyA9IGlzUmVzdG9yaW5nID8gXCJpc1Jlc3RvcmluZ1wiIDogXCJvcHRpbWlzdGljXCI7XG4gIGVuc3VyZVN1c3BlbnNlVGltZXJzKGRlZmF1bHRlZE9wdGlvbnMpO1xuICBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5KGRlZmF1bHRlZE9wdGlvbnMsIGVycm9yUmVzZXRCb3VuZGFyeSk7XG4gIHVzZUNsZWFyUmVzZXRFcnJvckJvdW5kYXJ5KGVycm9yUmVzZXRCb3VuZGFyeSk7XG4gIGNvbnN0IGlzTmV3Q2FjaGVFbnRyeSA9ICFjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmdldChkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCk7XG4gIGNvbnN0IFtvYnNlcnZlcl0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAoKSA9PiBuZXcgT2JzZXJ2ZXIoXG4gICAgICBjbGllbnQsXG4gICAgICBkZWZhdWx0ZWRPcHRpb25zXG4gICAgKVxuICApO1xuICBjb25zdCByZXN1bHQgPSBvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnMpO1xuICBjb25zdCBzaG91bGRTdWJzY3JpYmUgPSAhaXNSZXN0b3JpbmcgJiYgb3B0aW9ucy5zdWJzY3JpYmVkICE9PSBmYWxzZTtcbiAgUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAob25TdG9yZUNoYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHNob3VsZFN1YnNjcmliZSA/IG9ic2VydmVyLnN1YnNjcmliZShub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMob25TdG9yZUNoYW5nZSkpIDogbm9vcDtcbiAgICAgICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KCk7XG4gICAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICAgIH0sXG4gICAgICBbb2JzZXJ2ZXIsIHNob3VsZFN1YnNjcmliZV1cbiAgICApLFxuICAgICgpID0+IG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSxcbiAgICAoKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KClcbiAgKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKGRlZmF1bHRlZE9wdGlvbnMsIHsgbGlzdGVuZXJzOiBmYWxzZSB9KTtcbiAgfSwgW2RlZmF1bHRlZE9wdGlvbnMsIG9ic2VydmVyXSk7XG4gIGlmIChzaG91bGRTdXNwZW5kKGRlZmF1bHRlZE9wdGlvbnMsIHJlc3VsdCkpIHtcbiAgICB0aHJvdyBmZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXIsIGVycm9yUmVzZXRCb3VuZGFyeSk7XG4gIH1cbiAgaWYgKGdldEhhc0Vycm9yKHtcbiAgICByZXN1bHQsXG4gICAgZXJyb3JSZXNldEJvdW5kYXJ5LFxuICAgIHRocm93T25FcnJvcjogZGVmYXVsdGVkT3B0aW9ucy50aHJvd09uRXJyb3IsXG4gICAgcXVlcnk6IGNsaWVudC5nZXRRdWVyeUNhY2hlKCkuZ2V0KGRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoKVxuICB9KSkge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICA7XG4gIGNsaWVudC5nZXREZWZhdWx0T3B0aW9ucygpLnF1ZXJpZXM/Ll9leHBlcmltZW50YWxfYWZ0ZXJRdWVyeT8uKFxuICAgIGRlZmF1bHRlZE9wdGlvbnMsXG4gICAgcmVzdWx0XG4gICk7XG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyICYmICFpc1NlcnZlciAmJiB3aWxsRmV0Y2gocmVzdWx0LCBpc1Jlc3RvcmluZykpIHtcbiAgICBjb25zdCBwcm9taXNlID0gaXNOZXdDYWNoZUVudHJ5ID8gKFxuICAgICAgLy8gRmV0Y2ggaW1tZWRpYXRlbHkgb24gcmVuZGVyIGluIG9yZGVyIHRvIGVuc3VyZSBgLnByb21pc2VgIGlzIHJlc29sdmVkIGV2ZW4gaWYgdGhlIGNvbXBvbmVudCBpcyB1bm1vdW50ZWRcbiAgICAgIGZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlciwgZXJyb3JSZXNldEJvdW5kYXJ5KVxuICAgICkgOiAoXG4gICAgICAvLyBzdWJzY3JpYmUgdG8gdGhlIFwiY2FjaGUgcHJvbWlzZVwiIHNvIHRoYXQgd2UgY2FuIGZpbmFsaXplIHRoZSBjdXJyZW50VGhlbmFibGUgb25jZSBkYXRhIGNvbWVzIGluXG4gICAgICBjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmdldChkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCk/LnByb21pc2VcbiAgICApO1xuICAgIHByb21pc2U/LmNhdGNoKG5vb3ApLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KCk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuICFkZWZhdWx0ZWRPcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMgPyBvYnNlcnZlci50cmFja1Jlc3VsdChyZXN1bHQpIDogcmVzdWx0O1xufVxuZXhwb3J0IHtcbiAgdXNlQmFzZVF1ZXJ5XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlQmFzZVF1ZXJ5LmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvdXNlUXVlcnkudHNcbmltcG9ydCB7IFF1ZXJ5T2JzZXJ2ZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3F1ZXJ5LWNvcmVcIjtcbmltcG9ydCB7IHVzZUJhc2VRdWVyeSB9IGZyb20gXCIuL3VzZUJhc2VRdWVyeS5qc1wiO1xuZnVuY3Rpb24gdXNlUXVlcnkob3B0aW9ucywgcXVlcnlDbGllbnQpIHtcbiAgcmV0dXJuIHVzZUJhc2VRdWVyeShvcHRpb25zLCBRdWVyeU9ic2VydmVyLCBxdWVyeUNsaWVudCk7XG59XG5leHBvcnQge1xuICB1c2VRdWVyeVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVF1ZXJ5LmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvdXNlTXV0YXRpb24udHNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTXV0YXRpb25PYnNlcnZlciwgbm90aWZ5TWFuYWdlciB9IGZyb20gXCJAdGFuc3RhY2svcXVlcnktY29yZVwiO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiLi9RdWVyeUNsaWVudFByb3ZpZGVyLmpzXCI7XG5pbXBvcnQgeyBub29wLCBzaG91bGRUaHJvd0Vycm9yIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmZ1bmN0aW9uIHVzZU11dGF0aW9uKG9wdGlvbnMsIHF1ZXJ5Q2xpZW50KSB7XG4gIGNvbnN0IGNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KHF1ZXJ5Q2xpZW50KTtcbiAgY29uc3QgW29ic2VydmVyXSA9IFJlYWN0LnVzZVN0YXRlKFxuICAgICgpID0+IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgY2xpZW50LFxuICAgICAgb3B0aW9uc1xuICAgIClcbiAgKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9LCBbb2JzZXJ2ZXIsIG9wdGlvbnNdKTtcbiAgY29uc3QgcmVzdWx0ID0gUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAob25TdG9yZUNoYW5nZSkgPT4gb2JzZXJ2ZXIuc3Vic2NyaWJlKG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhvblN0b3JlQ2hhbmdlKSksXG4gICAgICBbb2JzZXJ2ZXJdXG4gICAgKSxcbiAgICAoKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCksXG4gICAgKCkgPT4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpXG4gICk7XG4gIGNvbnN0IG11dGF0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpID0+IHtcbiAgICAgIG9ic2VydmVyLm11dGF0ZSh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpLmNhdGNoKG5vb3ApO1xuICAgIH0sXG4gICAgW29ic2VydmVyXVxuICApO1xuICBpZiAocmVzdWx0LmVycm9yICYmIHNob3VsZFRocm93RXJyb3Iob2JzZXJ2ZXIub3B0aW9ucy50aHJvd09uRXJyb3IsIFtyZXN1bHQuZXJyb3JdKSkge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICByZXR1cm4geyAuLi5yZXN1bHQsIG11dGF0ZSwgbXV0YXRlQXN5bmM6IHJlc3VsdC5tdXRhdGUgfTtcbn1cbmV4cG9ydCB7XG4gIHVzZU11dGF0aW9uXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlTXV0YXRpb24uanMubWFwIiwiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdhbGFkcmltIEZlZWRiYWNrIEFQSVxuICogQVBJIGZvciBHYWxhZHJpbSBGZWVkYmFjaywgYSBmZWVkYmFjayBwbGF0Zm9ybSBmb3IgR2FsYWRyaW0gcHJvamVjdHMuXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMFxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uJztcbi8vIFNvbWUgaW1wb3J0cyBub3QgdXNlZCBkZXBlbmRpbmcgb24gdGVtcGxhdGUgY29uZGl0aW9uc1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHR5cGUgeyBBeGlvc1Byb21pc2UsIEF4aW9zSW5zdGFuY2UsIFJhd0F4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBnbG9iYWxBeGlvcyBmcm9tICdheGlvcyc7XG5cbmV4cG9ydCBjb25zdCBCQVNFX1BBVEggPSBcImh0dHA6Ly9sb2NhbGhvc3RcIi5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBDT0xMRUNUSU9OX0ZPUk1BVFMgPSB7XG4gICAgY3N2OiBcIixcIixcbiAgICBzc3Y6IFwiIFwiLFxuICAgIHRzdjogXCJcXHRcIixcbiAgICBwaXBlczogXCJ8XCIsXG59O1xuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIFJlcXVlc3RBcmdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEFyZ3Mge1xuICAgIHVybDogc3RyaW5nO1xuICAgIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZztcbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIEJhc2VBUElcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VBUEkge1xuICAgIHByb3RlY3RlZCBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIHByb3RlY3RlZCBiYXNlUGF0aDogc3RyaW5nID0gQkFTRV9QQVRILCBwcm90ZWN0ZWQgYXhpb3M6IEF4aW9zSW5zdGFuY2UgPSBnbG9iYWxBeGlvcykge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBjb25maWd1cmF0aW9uLmJhc2VQYXRoID8/IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFJlcXVpcmVkRXJyb3JcbiAqIEBleHRlbmRzIHtFcnJvcn1cbiAqL1xuZXhwb3J0IGNsYXNzIFJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGZpZWxkOiBzdHJpbmcsIG1zZz86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtc2cpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJlcXVpcmVkRXJyb3JcIlxuICAgIH1cbn1cblxuaW50ZXJmYWNlIFNlcnZlck1hcCB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICB9W107XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IG9wZXJhdGlvblNlcnZlck1hcDogU2VydmVyTWFwID0ge1xufVxuIiwiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdhbGFkcmltIEZlZWRiYWNrIEFQSVxuICogQVBJIGZvciBHYWxhZHJpbSBGZWVkYmFjaywgYSBmZWVkYmFjayBwbGF0Zm9ybSBmb3IgR2FsYWRyaW0gcHJvamVjdHMuXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMFxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0QXJncyB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB0eXBlIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFJlcXVpcmVkRXJyb3IgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IERVTU1ZX0JBU0VfVVJMID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20nXG5cbi8qKlxuICpcbiAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRQYXJhbUV4aXN0cyA9IGZ1bmN0aW9uIChmdW5jdGlvbk5hbWU6IHN0cmluZywgcGFyYW1OYW1lOiBzdHJpbmcsIHBhcmFtVmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAocGFyYW1WYWx1ZSA9PT0gbnVsbCB8fCBwYXJhbVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVpcmVkRXJyb3IocGFyYW1OYW1lLCBgUmVxdWlyZWQgcGFyYW1ldGVyICR7cGFyYW1OYW1lfSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nICR7ZnVuY3Rpb25OYW1lfS5gKTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEFwaUtleVRvT2JqZWN0ID0gYXN5bmMgZnVuY3Rpb24gKG9iamVjdDogYW55LCBrZXlQYXJhbU5hbWU6IHN0cmluZywgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiAmJiBjb25maWd1cmF0aW9uLmFwaUtleSkge1xuICAgICAgICBjb25zdCBsb2NhbFZhckFwaUtleVZhbHVlID0gdHlwZW9mIGNvbmZpZ3VyYXRpb24uYXBpS2V5ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGF3YWl0IGNvbmZpZ3VyYXRpb24uYXBpS2V5KGtleVBhcmFtTmFtZSlcbiAgICAgICAgICAgIDogYXdhaXQgY29uZmlndXJhdGlvbi5hcGlLZXk7XG4gICAgICAgIG9iamVjdFtrZXlQYXJhbU5hbWVdID0gbG9jYWxWYXJBcGlLZXlWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEJhc2ljQXV0aFRvT2JqZWN0ID0gZnVuY3Rpb24gKG9iamVjdDogYW55LCBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uICYmIChjb25maWd1cmF0aW9uLnVzZXJuYW1lIHx8IGNvbmZpZ3VyYXRpb24ucGFzc3dvcmQpKSB7XG4gICAgICAgIG9iamVjdFtcImF1dGhcIl0gPSB7IHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLnVzZXJuYW1lLCBwYXNzd29yZDogY29uZmlndXJhdGlvbi5wYXNzd29yZCB9O1xuICAgIH1cbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3Qgc2V0QmVhcmVyQXV0aFRvT2JqZWN0ID0gYXN5bmMgZnVuY3Rpb24gKG9iamVjdDogYW55LCBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uICYmIGNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0eXBlb2YgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBhd2FpdCBjb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKClcbiAgICAgICAgICAgIDogYXdhaXQgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcbiAgICAgICAgb2JqZWN0W1wiQXV0aG9yaXphdGlvblwiXSA9IFwiQmVhcmVyIFwiICsgYWNjZXNzVG9rZW47XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPQXV0aFRvT2JqZWN0ID0gYXN5bmMgZnVuY3Rpb24gKG9iamVjdDogYW55LCBuYW1lOiBzdHJpbmcsIHNjb3Blczogc3RyaW5nW10sIGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24gJiYgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuICAgICAgICBjb25zdCBsb2NhbFZhckFjY2Vzc1Rva2VuVmFsdWUgPSB0eXBlb2YgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBhd2FpdCBjb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKG5hbWUsIHNjb3BlcylcbiAgICAgICAgICAgIDogYXdhaXQgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcbiAgICAgICAgb2JqZWN0W1wiQXV0aG9yaXphdGlvblwiXSA9IFwiQmVhcmVyIFwiICsgbG9jYWxWYXJBY2Nlc3NUb2tlblZhbHVlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0RmxhdHRlbmVkUXVlcnlQYXJhbXModXJsU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMsIHBhcmFtZXRlcjogYW55LCBrZXk6IHN0cmluZyA9IFwiXCIpOiB2b2lkIHtcbiAgICBpZiAocGFyYW1ldGVyID09IG51bGwpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpKSB7XG4gICAgICAgICAgICAocGFyYW1ldGVyIGFzIGFueVtdKS5mb3JFYWNoKGl0ZW0gPT4gc2V0RmxhdHRlbmVkUXVlcnlQYXJhbXModXJsU2VhcmNoUGFyYW1zLCBpdGVtLCBrZXkpKTtcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbWV0ZXIpLmZvckVhY2goY3VycmVudEtleSA9PiBcbiAgICAgICAgICAgICAgICBzZXRGbGF0dGVuZWRRdWVyeVBhcmFtcyh1cmxTZWFyY2hQYXJhbXMsIHBhcmFtZXRlcltjdXJyZW50S2V5XSwgYCR7a2V5fSR7a2V5ICE9PSAnJyA/ICcuJyA6ICcnfSR7Y3VycmVudEtleX1gKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gXG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh1cmxTZWFyY2hQYXJhbXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBwYXJhbWV0ZXIpO1xuICAgICAgICB9IFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5zZXQoa2V5LCBwYXJhbWV0ZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWFyY2hQYXJhbXMgPSBmdW5jdGlvbiAodXJsOiBVUkwsIC4uLm9iamVjdHM6IGFueVtdKSB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmwuc2VhcmNoKTtcbiAgICBzZXRGbGF0dGVuZWRRdWVyeVBhcmFtcyhzZWFyY2hQYXJhbXMsIG9iamVjdHMpO1xuICAgIHVybC5zZWFyY2ggPSBzZWFyY2hQYXJhbXMudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplRGF0YUlmTmVlZGVkID0gZnVuY3Rpb24gKHZhbHVlOiBhbnksIHJlcXVlc3RPcHRpb25zOiBhbnksIGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3Qgbm9uU3RyaW5nID0gdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJztcbiAgICBjb25zdCBuZWVkc1NlcmlhbGl6YXRpb24gPSBub25TdHJpbmcgJiYgY29uZmlndXJhdGlvbiAmJiBjb25maWd1cmF0aW9uLmlzSnNvbk1pbWVcbiAgICAgICAgPyBjb25maWd1cmF0aW9uLmlzSnNvbk1pbWUocmVxdWVzdE9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10pXG4gICAgICAgIDogbm9uU3RyaW5nO1xuICAgIHJldHVybiBuZWVkc1NlcmlhbGl6YXRpb25cbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSlcbiAgICAgICAgOiAodmFsdWUgfHwgXCJcIik7XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHRvUGF0aFN0cmluZyA9IGZ1bmN0aW9uICh1cmw6IFVSTCkge1xuICAgIHJldHVybiB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoICsgdXJsLmhhc2hcbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmVxdWVzdEZ1bmN0aW9uID0gZnVuY3Rpb24gKGF4aW9zQXJnczogUmVxdWVzdEFyZ3MsIGdsb2JhbEF4aW9zOiBBeGlvc0luc3RhbmNlLCBCQVNFX1BBVEg6IHN0cmluZywgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4gPFQgPSB1bmtub3duLCBSID0gQXhpb3NSZXNwb25zZTxUPj4oYXhpb3M6IEF4aW9zSW5zdGFuY2UgPSBnbG9iYWxBeGlvcywgYmFzZVBhdGg6IHN0cmluZyA9IEJBU0VfUEFUSCkgPT4ge1xuICAgICAgICBjb25zdCBheGlvc1JlcXVlc3RBcmdzID0gey4uLmF4aW9zQXJncy5vcHRpb25zLCB1cmw6IChheGlvcy5kZWZhdWx0cy5iYXNlVVJMID8gJycgOiBjb25maWd1cmF0aW9uPy5iYXNlUGF0aCA/PyBiYXNlUGF0aCkgKyBheGlvc0FyZ3MudXJsfTtcbiAgICAgICAgcmV0dXJuIGF4aW9zLnJlcXVlc3Q8VCwgUj4oYXhpb3NSZXF1ZXN0QXJncyk7XG4gICAgfTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLyoqXG4gKiBHYWxhZHJpbSBGZWVkYmFjayBBUElcbiAqIEFQSSBmb3IgR2FsYWRyaW0gRmVlZGJhY2ssIGEgZmVlZGJhY2sgcGxhdGZvcm0gZm9yIEdhbGFkcmltIHByb2plY3RzLlxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjBcbiAqIFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEF4aW9zUHJvbWlzZSwgQXhpb3NJbnN0YW5jZSwgUmF3QXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IGdsb2JhbEF4aW9zIGZyb20gJ2F4aW9zJztcbi8vIFNvbWUgaW1wb3J0cyBub3QgdXNlZCBkZXBlbmRpbmcgb24gdGVtcGxhdGUgY29uZGl0aW9uc1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRFVNTVlfQkFTRV9VUkwsIGFzc2VydFBhcmFtRXhpc3RzLCBzZXRBcGlLZXlUb09iamVjdCwgc2V0QmFzaWNBdXRoVG9PYmplY3QsIHNldEJlYXJlckF1dGhUb09iamVjdCwgc2V0T0F1dGhUb09iamVjdCwgc2V0U2VhcmNoUGFyYW1zLCBzZXJpYWxpemVEYXRhSWZOZWVkZWQsIHRvUGF0aFN0cmluZywgY3JlYXRlUmVxdWVzdEZ1bmN0aW9uIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0QXJncyB9IGZyb20gJy4vYmFzZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUywgQmFzZUFQSSwgUmVxdWlyZWRFcnJvciwgb3BlcmF0aW9uU2VydmVyTWFwIH0gZnJvbSAnLi9iYXNlJztcblxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgQ29sbGFib3JhdGlvbnNSZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxhYm9yYXRpb25zUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXNlcklkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncHJvamVjdElkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtQcm9qZWN0UmVzcG9uc2V9XG4gICAgICogQG1lbWJlcm9mIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncHJvamVjdCc6IFByb2plY3RSZXNwb25zZTtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3JvbGUnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBGZWVkYmFja0NyZWF0ZUR0b1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrQ3JlYXRlRHRvIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50SWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudEluZGV4JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ2VsZW1lbnRXaWR0aCc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50SGVpZ2h0JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ3gnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAneSc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdjb21tZW50Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ3BhdGgnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAncHJvamVjdElkJzogc3RyaW5nO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgRmVlZGJhY2tSZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnaWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdjcmVhdGVkQXQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICd1cGRhdGVkQXQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50SWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50SW5kZXgnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50V2lkdGgnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50SGVpZ2h0JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAneCc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3knOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnaXNSZXNvbHZlZCc6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdjb21tZW50Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncGF0aCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7QXJyYXk8UmVwbHlSZXNwb25zZT59XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncmVwbGllcyc6IEFycmF5PFJlcGx5UmVzcG9uc2U+O1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtVc2VyU3VtbWFyeVJlc3BvbnNlfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3VzZXInOiBVc2VyU3VtbWFyeVJlc3BvbnNlO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgRmVlZGJhY2tVcGRhdGVEdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja1VwZGF0ZUR0byB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudElkJz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1VwZGF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50SW5kZXgnPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ2VsZW1lbnRXaWR0aCc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudEhlaWdodCc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAneCc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAneSc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnY29tbWVudCc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAncGF0aCc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAncHJvamVjdElkJz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnaXNSZXNvbHZlZCc6IGJvb2xlYW47XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBQcm9qZWN0UmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0UmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFByb2plY3RSZXNwb25zZVxuICAgICAqL1xuICAgICdpZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQcm9qZWN0UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnbmFtZSc6IHN0cmluZztcbn1cbi8qKlxuICogXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIFJlcGx5UmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBseVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2lkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnY3JlYXRlZEF0Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXBkYXRlZEF0Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZmVlZGJhY2tJZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ3VzZXJJZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2NvbW1lbnQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge1VzZXJTdW1tYXJ5UmVzcG9uc2V9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXNlcic6IFVzZXJTdW1tYXJ5UmVzcG9uc2U7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduSW5EdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduSW5EdG8ge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNpZ25JbkR0b1xuICAgICAqL1xuICAgICdlbWFpbCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5EdG9cbiAgICAgKi9cbiAgICAncGFzc3dvcmQnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduSW5SZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JblJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5SZXNwb25zZVxuICAgICAqL1xuICAgICdhY2Nlc3NUb2tlbic6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5SZXNwb25zZVxuICAgICAqL1xuICAgICdyZWZyZXNoVG9rZW4nOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduVXBEdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduVXBEdG8ge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNpZ25VcER0b1xuICAgICAqL1xuICAgICdlbWFpbCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBEdG9cbiAgICAgKi9cbiAgICAncGFzc3dvcmQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2lnblVwRHRvXG4gICAgICovXG4gICAgJ2ZpcnN0TmFtZSc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBEdG9cbiAgICAgKi9cbiAgICAnbGFzdE5hbWUnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduVXBSZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25VcFJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBSZXNwb25zZVxuICAgICAqL1xuICAgICdhY2Nlc3NUb2tlbic6IHN0cmluZztcbn1cbi8qKlxuICogXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyU3VtbWFyeVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBVc2VyU3VtbWFyeVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2lkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZW1haWwnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdmaXJzdE5hbWUnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdsYXN0TmFtZSc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBVc2VyU3VtbWFyeVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2Z1bGxOYW1lJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnYXZhdGFyVXJsJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtBcnJheTxDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlPn1cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdjb2xsYWJvcmF0aW9ucyc6IEFycmF5PENvbGxhYm9yYXRpb25zUmVzcG9uc2U+O1xufVxuXG4vKipcbiAqIEFwcEFwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBcHBBcGlBeGlvc1BhcmFtQ3JlYXRvciA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFwcENvbnRyb2xsZXJHZXRIZWxsbzogYXN5bmMgKG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9gO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogQXBwQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IEFwcEFwaUZwID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yID0gQXBwQXBpQXhpb3NQYXJhbUNyZWF0b3IoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBhcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmFwcENvbnRyb2xsZXJHZXRIZWxsbyhvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnQXBwQXBpLmFwcENvbnRyb2xsZXJHZXRIZWxsbyddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcEFwaSAtIGZhY3RvcnkgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBcHBBcGlGYWN0b3J5ID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uLCBiYXNlUGF0aD86IHN0cmluZywgYXhpb3M/OiBBeGlvc0luc3RhbmNlKSB7XG4gICAgY29uc3QgbG9jYWxWYXJGcCA9IEFwcEFwaUZwKGNvbmZpZ3VyYXRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXBwQ29udHJvbGxlckdldEhlbGxvKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXBwQ29udHJvbGxlckdldEhlbGxvKG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5cbi8qKlxuICogQXBwQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIEFwcEFwaVxuICogQGV4dGVuZHMge0Jhc2VBUEl9XG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBBcGkgZXh0ZW5kcyBCYXNlQVBJIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEFwcEFwaVxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gQXBwQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5hcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxufVxuXG5cblxuLyoqXG4gKiBBdXRoQXBpIC0gYXhpb3MgcGFyYW1ldGVyIGNyZWF0b3JcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IEF1dGhBcGlBeGlvc1BhcmFtQ3JlYXRvciA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VXJsIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjazogYXN5bmMgKHJlZGlyZWN0VXJsOiBzdHJpbmcsIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAncmVkaXJlY3RVcmwnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2F1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2snLCAncmVkaXJlY3RVcmwnLCByZWRpcmVjdFVybClcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvYXV0aC9naXRodWIvY2FsbGJhY2tgO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG4gICAgICAgICAgICBpZiAocmVkaXJlY3RVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJbJ3JlZGlyZWN0VXJsJ10gPSByZWRpcmVjdFVybDtcbiAgICAgICAgICAgIH1cblxuXG4gICAgXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbjogYXN5bmMgKG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9hdXRoL2dpdGh1YmA7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdHRVQnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtTaWduSW5EdG99IHNpZ25JbkR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyU2lnbkluOiBhc3luYyAoc2lnbkluRHRvOiBTaWduSW5EdG8sIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnc2lnbkluRHRvJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdhdXRoQ29udHJvbGxlclNpZ25JbicsICdzaWduSW5EdG8nLCBzaWduSW5EdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2F1dGgvc2lnbmluYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BPU1QnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5kYXRhID0gc2VyaWFsaXplRGF0YUlmTmVlZGVkKHNpZ25JbkR0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtTaWduVXBEdG99IHNpZ25VcER0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyU2lnblVwOiBhc3luYyAoc2lnblVwRHRvOiBTaWduVXBEdG8sIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnc2lnblVwRHRvJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdhdXRoQ29udHJvbGxlclNpZ25VcCcsICdzaWduVXBEdG8nLCBzaWduVXBEdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2F1dGgvc2lnbnVwYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BPU1QnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5kYXRhID0gc2VyaWFsaXplRGF0YUlmTmVlZGVkKHNpZ25VcER0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBBdXRoQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IEF1dGhBcGlGcCA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvciA9IEF1dGhBcGlBeGlvc1BhcmFtQ3JlYXRvcihjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VXJsIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayhyZWRpcmVjdFVybDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayhyZWRpcmVjdFVybCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0F1dGhBcGkuYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnQXV0aEFwaS5hdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnbkluRHRvfSBzaWduSW5EdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBhdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG86IFNpZ25JbkR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxTaWduSW5SZXNwb25zZT4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5hdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG8sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydBdXRoQXBpLmF1dGhDb250cm9sbGVyU2lnbkluJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnblVwRHRvfSBzaWduVXBEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBhdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG86IFNpZ25VcER0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxTaWduVXBSZXNwb25zZT4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5hdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG8sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydBdXRoQXBpLmF1dGhDb250cm9sbGVyU2lnblVwJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogQXV0aEFwaSAtIGZhY3RvcnkgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBdXRoQXBpRmFjdG9yeSA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbiwgYmFzZVBhdGg/OiBzdHJpbmcsIGF4aW9zPzogQXhpb3NJbnN0YW5jZSkge1xuICAgIGNvbnN0IGxvY2FsVmFyRnAgPSBBdXRoQXBpRnAoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFVybCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2socmVkaXJlY3RVcmw6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5hdXRoQ29udHJvbGxlckdpdGh1YkNhbGxiYWNrKHJlZGlyZWN0VXJsLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnbkluRHRvfSBzaWduSW5EdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG86IFNpZ25JbkR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTxTaWduSW5SZXNwb25zZT4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJTaWduSW4oc2lnbkluRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnblVwRHRvfSBzaWduVXBEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG86IFNpZ25VcER0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTxTaWduVXBSZXNwb25zZT4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJTaWduVXAoc2lnblVwRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgIH07XG59O1xuXG4vKipcbiAqIEF1dGhBcGkgLSBvYmplY3Qtb3JpZW50ZWQgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgQXV0aEFwaVxuICogQGV4dGVuZHMge0Jhc2VBUEl9XG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoQXBpIGV4dGVuZHMgQmFzZUFQSSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VXJsIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgQXV0aEFwaVxuICAgICAqL1xuICAgIHB1YmxpYyBhdXRoQ29udHJvbGxlckdpdGh1YkNhbGxiYWNrKHJlZGlyZWN0VXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2socmVkaXJlY3RVcmwsIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgQXV0aEFwaVxuICAgICAqL1xuICAgIHB1YmxpYyBhdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyR2l0aHViTG9naW4ob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtTaWduSW5EdG99IHNpZ25JbkR0byBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEF1dGhBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0aENvbnRyb2xsZXJTaWduSW4oc2lnbkluRHRvOiBTaWduSW5EdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyU2lnbkluKHNpZ25JbkR0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtTaWduVXBEdG99IHNpZ25VcER0byBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEF1dGhBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0aENvbnRyb2xsZXJTaWduVXAoc2lnblVwRHRvOiBTaWduVXBEdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyU2lnblVwKHNpZ25VcER0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxufVxuXG5cblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBGZWVkYmFja0FwaUF4aW9zUGFyYW1DcmVhdG9yID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge0ZlZWRiYWNrQ3JlYXRlRHRvfSBmZWVkYmFja0NyZWF0ZUR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZTogYXN5bmMgKGZlZWRiYWNrQ3JlYXRlRHRvOiBGZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdmZWVkYmFja0NyZWF0ZUR0bycgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlJywgJ2ZlZWRiYWNrQ3JlYXRlRHRvJywgZmVlZGJhY2tDcmVhdGVEdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2ZlZWRiYWNrYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BPU1QnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5kYXRhID0gc2VyaWFsaXplRGF0YUlmTmVlZGVkKGZlZWRiYWNrQ3JlYXRlRHRvLCBsb2NhbFZhclJlcXVlc3RPcHRpb25zLCBjb25maWd1cmF0aW9uKVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5IFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHk6IGFzeW5jIChpZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnaWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2ZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5JywgJ2lkJywgaWQpXG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdib2R5JyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseScsICdib2R5JywgYm9keSlcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvZmVlZGJhY2sve2lkfS9yZXBsaWVzYFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKGB7JHtcImlkXCJ9fWAsIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaWQpKSk7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdQT1NUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChib2R5LCBsb2NhbFZhclJlcXVlc3RPcHRpb25zLCBjb25maWd1cmF0aW9uKVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJEZWxldGU6IGFzeW5jIChpZDogc3RyaW5nLCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2lkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdmZWVkYmFja0NvbnRyb2xsZXJEZWxldGUnLCAnaWQnLCBpZClcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvZmVlZGJhY2sve2lkfWBcbiAgICAgICAgICAgICAgICAucmVwbGFjZShgeyR7XCJpZFwifX1gLCBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGlkKSkpO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnREVMRVRFJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZDogYXN5bmMgKHByb2plY3RJZDogc3RyaW5nLCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ3Byb2plY3RJZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQnLCAncHJvamVjdElkJywgcHJvamVjdElkKVxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9mZWVkYmFjay97cHJvamVjdElkfWBcbiAgICAgICAgICAgICAgICAucmVwbGFjZShgeyR7XCJwcm9qZWN0SWRcIn19YCwgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhwcm9qZWN0SWQpKSk7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdHRVQnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAgICAgKiBAcGFyYW0ge0ZlZWRiYWNrVXBkYXRlRHRvfSBmZWVkYmFja1VwZGF0ZUR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZTogYXN5bmMgKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdpZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlJywgJ2lkJywgaWQpXG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdmZWVkYmFja1VwZGF0ZUR0bycgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlJywgJ2ZlZWRiYWNrVXBkYXRlRHRvJywgZmVlZGJhY2tVcGRhdGVEdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2ZlZWRiYWNrL3tpZH1gXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoYHske1wiaWRcIn19YCwgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhpZCkpKTtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BBVENIJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChmZWVkYmFja1VwZGF0ZUR0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBGZWVkYmFja0FwaUZwID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yID0gRmVlZGJhY2tBcGlBeGlvc1BhcmFtQ3JlYXRvcihjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG86IEZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnRmVlZGJhY2tBcGkuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPChheGlvcz86IEF4aW9zSW5zdGFuY2UsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiBBeGlvc1Byb21pc2U8dm9pZD4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5mZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZCwgYm9keSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0ZlZWRiYWNrQXBpLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5J10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jIGZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlKGlkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnRmVlZGJhY2tBcGkuZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQ6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxBcnJheTxGZWVkYmFja1Jlc3BvbnNlPj4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydGZWVkYmFja0FwaS5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZCddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7RmVlZGJhY2tVcGRhdGVEdG99IGZlZWRiYWNrVXBkYXRlRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZShpZCwgZmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydGZWVkYmFja0FwaS5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUnXT8uW2xvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXhdPy51cmw7XG4gICAgICAgICAgICByZXR1cm4gKGF4aW9zLCBiYXNlUGF0aCkgPT4gY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKGxvY2FsVmFyQXhpb3NBcmdzLCBnbG9iYWxBeGlvcywgQkFTRV9QQVRILCBjb25maWd1cmF0aW9uKShheGlvcywgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCB8fCBiYXNlUGF0aCk7XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIGZhY3RvcnkgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBGZWVkYmFja0FwaUZhY3RvcnkgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIGJhc2VQYXRoPzogc3RyaW5nLCBheGlvcz86IEF4aW9zSW5zdGFuY2UpIHtcbiAgICBjb25zdCBsb2NhbFZhckZwID0gRmVlZGJhY2tBcGlGcChjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG86IEZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZShmZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5IFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoaWQ6IHN0cmluZywgYm9keTogb2JqZWN0LCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5KGlkLCBib2R5LCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdElkIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQocHJvamVjdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8QXJyYXk8RmVlZGJhY2tSZXNwb25zZT4+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckZpbmRGZWVkYmFja0J5UHJvamVjdElkKHByb2plY3RJZCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7RmVlZGJhY2tVcGRhdGVEdG99IGZlZWRiYWNrVXBkYXRlRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUoaWQsIGZlZWRiYWNrVXBkYXRlRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgIH07XG59O1xuXG4vKipcbiAqIEZlZWRiYWNrQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIEZlZWRiYWNrQXBpXG4gKiBAZXh0ZW5kcyB7QmFzZUFQSX1cbiAqL1xuZXhwb3J0IGNsYXNzIEZlZWRiYWNrQXBpIGV4dGVuZHMgQmFzZUFQSSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0FwaVxuICAgICAqL1xuICAgIHB1YmxpYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG86IEZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBGZWVkYmFja0FwaUZwKHRoaXMuY29uZmlndXJhdGlvbikuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0FwaVxuICAgICAqL1xuICAgIHB1YmxpYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEZlZWRiYWNrQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5mZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZCwgYm9keSwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEZlZWRiYWNrQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5mZWVkYmFja0NvbnRyb2xsZXJEZWxldGUoaWQsIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQgXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0FwaVxuICAgICAqL1xuICAgIHB1YmxpYyBmZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQ6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gRmVlZGJhY2tBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmZlZWRiYWNrQ29udHJvbGxlckZpbmRGZWVkYmFja0J5UHJvamVjdElkKHByb2plY3RJZCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAqIEBwYXJhbSB7RmVlZGJhY2tVcGRhdGVEdG99IGZlZWRiYWNrVXBkYXRlRHRvIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gRmVlZGJhY2tBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZShpZCwgZmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cbn1cblxuXG5cbi8qKlxuICogVXNlckFwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBVc2VyQXBpQXhpb3NQYXJhbUNyZWF0b3IgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICB1c2VyQ29udHJvbGxlckdldE1lOiBhc3luYyAob3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL3VzZXIvbWVgO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG4gICAgICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiBiZWFyZXIgcmVxdWlyZWRcbiAgICAgICAgICAgIC8vIGh0dHAgYmVhcmVyIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkXG4gICAgICAgICAgICBhd2FpdCBzZXRCZWFyZXJBdXRoVG9PYmplY3QobG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIGNvbmZpZ3VyYXRpb24pXG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VyQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IFVzZXJBcGlGcCA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvciA9IFVzZXJBcGlBeGlvc1BhcmFtQ3JlYXRvcihjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jIHVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxVc2VyU3VtbWFyeVJlc3BvbnNlPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLnVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ1VzZXJBcGkudXNlckNvbnRyb2xsZXJHZXRNZSddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZXJBcGkgLSBmYWN0b3J5IGludGVyZmFjZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgVXNlckFwaUZhY3RvcnkgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIGJhc2VQYXRoPzogc3RyaW5nLCBheGlvcz86IEF4aW9zSW5zdGFuY2UpIHtcbiAgICBjb25zdCBsb2NhbFZhckZwID0gVXNlckFwaUZwKGNvbmZpZ3VyYXRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgdXNlckNvbnRyb2xsZXJHZXRNZShvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPFVzZXJTdW1tYXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLnVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcblxuLyoqXG4gKiBVc2VyQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIFVzZXJBcGlcbiAqIEBleHRlbmRzIHtCYXNlQVBJfVxuICovXG5leHBvcnQgY2xhc3MgVXNlckFwaSBleHRlbmRzIEJhc2VBUEkge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgVXNlckFwaVxuICAgICAqL1xuICAgIHB1YmxpYyB1c2VyQ29udHJvbGxlckdldE1lKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIFVzZXJBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLnVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxufVxuXG5cblxuIiwiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdhbGFkcmltIEZlZWRiYWNrIEFQSVxuICogQVBJIGZvciBHYWxhZHJpbSBGZWVkYmFjaywgYSBmZWVkYmFjayBwbGF0Zm9ybSBmb3IgR2FsYWRyaW0gcHJvamVjdHMuXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMFxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmF0aW9uUGFyYW1ldGVycyB7XG4gICAgYXBpS2V5Pzogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgKChuYW1lOiBzdHJpbmcpID0+IHN0cmluZykgfCAoKG5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+KTtcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8ICgobmFtZT86IHN0cmluZywgc2NvcGVzPzogc3RyaW5nW10pID0+IHN0cmluZykgfCAoKG5hbWU/OiBzdHJpbmcsIHNjb3Blcz86IHN0cmluZ1tdKSA9PiBQcm9taXNlPHN0cmluZz4pO1xuICAgIGJhc2VQYXRoPzogc3RyaW5nO1xuICAgIHNlcnZlckluZGV4PzogbnVtYmVyO1xuICAgIGJhc2VPcHRpb25zPzogYW55O1xuICAgIGZvcm1EYXRhQ3Rvcj86IG5ldyAoKSA9PiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uIHtcbiAgICAvKipcbiAgICAgKiBwYXJhbWV0ZXIgZm9yIGFwaUtleSBzZWN1cml0eVxuICAgICAqIEBwYXJhbSBuYW1lIHNlY3VyaXR5IG5hbWVcbiAgICAgKiBAbWVtYmVyb2YgQ29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGFwaUtleT86IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8ICgobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcpIHwgKChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPik7XG4gICAgLyoqXG4gICAgICogcGFyYW1ldGVyIGZvciBiYXNpYyBzZWN1cml0eVxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgQ29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIHBhcmFtZXRlciBmb3IgYmFzaWMgc2VjdXJpdHlcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBwYXJhbWV0ZXIgZm9yIG9hdXRoMiBzZWN1cml0eVxuICAgICAqIEBwYXJhbSBuYW1lIHNlY3VyaXR5IG5hbWVcbiAgICAgKiBAcGFyYW0gc2NvcGVzIG9hdXRoMiBzY29wZVxuICAgICAqIEBtZW1iZXJvZiBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gfCAoKG5hbWU/OiBzdHJpbmcsIHNjb3Blcz86IHN0cmluZ1tdKSA9PiBzdHJpbmcpIHwgKChuYW1lPzogc3RyaW5nLCBzY29wZXM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxzdHJpbmc+KTtcbiAgICAvKipcbiAgICAgKiBvdmVycmlkZSBiYXNlIHBhdGhcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBiYXNlUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBvdmVycmlkZSBzZXJ2ZXIgaW5kZXhcbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBzZXJ2ZXJJbmRleD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBiYXNlIG9wdGlvbnMgZm9yIGF4aW9zIGNhbGxzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7YW55fVxuICAgICAqIEBtZW1iZXJvZiBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgYmFzZU9wdGlvbnM/OiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIEZvcm1EYXRhIGNvbnN0cnVjdG9yIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSBtdWx0aXBhcnQgZm9ybSBkYXRhXG4gICAgICogcmVxdWVzdHMuIFlvdSBjYW4gaW5qZWN0IHRoaXMgaGVyZSBzbyB0aGF0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudHMgdGhhdFxuICAgICAqIGRvIG5vdCBzdXBwb3J0IHRoZSBGb3JtRGF0YSBjbGFzcyBjYW4gc3RpbGwgcnVuIHRoZSBnZW5lcmF0ZWQgY2xpZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge25ldyAoKSA9PiBGb3JtRGF0YX1cbiAgICAgKi9cbiAgICBmb3JtRGF0YUN0b3I/OiBuZXcgKCkgPT4gYW55O1xuXG4gICAgY29uc3RydWN0b3IocGFyYW06IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzID0ge30pIHtcbiAgICAgICAgdGhpcy5hcGlLZXkgPSBwYXJhbS5hcGlLZXk7XG4gICAgICAgIHRoaXMudXNlcm5hbWUgPSBwYXJhbS51c2VybmFtZTtcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhcmFtLnBhc3N3b3JkO1xuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gcGFyYW0uYWNjZXNzVG9rZW47XG4gICAgICAgIHRoaXMuYmFzZVBhdGggPSBwYXJhbS5iYXNlUGF0aDtcbiAgICAgICAgdGhpcy5zZXJ2ZXJJbmRleCA9IHBhcmFtLnNlcnZlckluZGV4O1xuICAgICAgICB0aGlzLmJhc2VPcHRpb25zID0ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtLmJhc2VPcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogXCJPcGVuQVBJLUdlbmVyYXRvci90eXBlc2NyaXB0LWF4aW9zXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5wYXJhbS5iYXNlT3B0aW9uc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZvcm1EYXRhQ3RvciA9IHBhcmFtLmZvcm1EYXRhQ3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gTUlNRSBpcyBhIEpTT04gTUlNRS5cbiAgICAgKiBKU09OIE1JTUUgZXhhbXBsZXM6XG4gICAgICogICBhcHBsaWNhdGlvbi9qc29uXG4gICAgICogICBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURjhcbiAgICAgKiAgIEFQUExJQ0FUSU9OL0pTT05cbiAgICAgKiAgIGFwcGxpY2F0aW9uL3ZuZC5jb21wYW55K2pzb25cbiAgICAgKiBAcGFyYW0gbWltZSAtIE1JTUUgKE11bHRpcHVycG9zZSBJbnRlcm5ldCBNYWlsIEV4dGVuc2lvbnMpXG4gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiBNSU1FIGlzIEpTT04sIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNKc29uTWltZShtaW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QganNvbk1pbWU6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oYXBwbGljYXRpb25cXC9qc29ufFteOy8gXFx0XStcXC9bXjsvIFxcdF0rWytdanNvbilbIFxcdF0qKDsuKik/JCcsICdpJyk7XG4gICAgICAgIHJldHVybiBtaW1lICE9PSBudWxsICYmIChqc29uTWltZS50ZXN0KG1pbWUpIHx8IG1pbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicpO1xuICAgIH1cbn1cbiIsImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7XG4gIEF1dGhBcGksXG4gIENvbmZpZ3VyYXRpb24sXG4gIEZlZWRiYWNrQXBpLFxuICBVc2VyQXBpLFxufSBmcm9tIFwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5jb25zdCBhcGlVcmwgPSBcImh0dHA6Ly9lYzItMTMtMzgtMjE0LTE5MS5ldS13ZXN0LTMuY29tcHV0ZS5hbWF6b25hd3MuY29tOjE0NzhcIjtcblxuY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHtcbiAgYmFzZVBhdGg6IGFwaVVybCxcbn0pO1xuXG5jb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgYmFzZVVSTDogYXBpVXJsLFxufSk7XG5cbmNvbnN0IGFwaSA9IHtcbiAgdXNlcjogbmV3IFVzZXJBcGkoY29uZmlndXJhdGlvbiwgYXBpVXJsLCBheGlvc0luc3RhbmNlKSxcbiAgZmVlZGJhY2s6IG5ldyBGZWVkYmFja0FwaShjb25maWd1cmF0aW9uLCBhcGlVcmwsIGF4aW9zSW5zdGFuY2UpLFxuICBhdXRoOiBuZXcgQXV0aEFwaShjb25maWd1cmF0aW9uLCBhcGlVcmwsIGF4aW9zSW5zdGFuY2UpLFxufTtcblxuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoXG4gIGFzeW5jIChjb25maWcpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZ2FsYWRyaW1GZWVkYmFja1Rva2VuXCIpO1xuICAgIGlmICh0b2tlbiAmJiBjb25maWcuaGVhZGVycykge1xuICAgICAgY29uZmlnLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgYXhpb3NJbnN0YW5jZS5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vbi5BdXRob3JpemF0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9LFxuICAoZXJyb3IpID0+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBhcGk7XG4iLCJpbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnksIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IGFwaSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7XG4gIEZlZWRiYWNrQ3JlYXRlRHRvLFxuICBGZWVkYmFja1Jlc3BvbnNlLFxuICBGZWVkYmFja1VwZGF0ZUR0byxcbn0gZnJvbSBcIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IGZldGNoRmVlZGJhY2tzID0gYXN5bmMgKHByb2plY3RJZD86IHN0cmluZykgPT4ge1xuICBpZiAoIXByb2plY3RJZCkgcmV0dXJuIFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID1cbiAgICAgIGF3YWl0IGFwaS5mZWVkYmFjay5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQpO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tDcmVhdGVEdG8pID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZmVlZGJhY2suZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVwbHkgPSBhc3luYyAoZmVlZGJhY2tJZDogc3RyaW5nLCBjb21tZW50OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZmVlZGJhY2suZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoXG4gICAgZmVlZGJhY2tJZCxcbiAgICB7XG4gICAgICBjb21tZW50LFxuICAgIH1cbiAgKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlRmVlZGJhY2sgPSBhc3luYyAoe1xuICBmZWVkYmFja0lkLFxuICBwYXlsb2FkLFxufToge1xuICBmZWVkYmFja0lkOiBzdHJpbmc7XG4gIHBheWxvYWQ6IEZlZWRiYWNrVXBkYXRlRHRvO1xufSkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5mZWVkYmFjay5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUoZmVlZGJhY2tJZCwge1xuICAgIC4uLnBheWxvYWQsXG4gIH0pO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tSZXNwb25zZSkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5mZWVkYmFjay5mZWVkYmFja0NvbnRyb2xsZXJEZWxldGUoZmVlZGJhY2suaWQpO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VGZWVkYmFja3MgPSAocHJvamVjdElkPzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSxcbiAgICBxdWVyeUZuOiAoKSA9PiBmZXRjaEZlZWRiYWNrcyhwcm9qZWN0SWQpLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VDcmVhdGVGZWVkYmFjayA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGNyZWF0ZUZlZWRiYWNrLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJGZWVkYmFjayBjcmVhdGVkXCIpO1xuXG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUNyZWF0ZVJlcGx5ID0gKGZlZWRiYWNrSWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogKGNvbW1lbnQ6IHN0cmluZykgPT4gY3JlYXRlUmVwbHkoZmVlZGJhY2tJZCwgY29tbWVudCksXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVVwZGF0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogdXBkYXRlRmVlZGJhY2ssXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZURlbGV0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogZGVsZXRlRmVlZGJhY2ssXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcbiIsImltcG9ydCB7IHVzZVF1ZXJ5IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IGFwaSBmcm9tIFwiLi9hcGlcIjtcblxuZXhwb3J0IGNvbnN0IGZldGNoTWUgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkudXNlci51c2VyQ29udHJvbGxlckdldE1lKCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXNlTWUgPSAoKSA9PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcIm1lXCJdLFxuICAgIHF1ZXJ5Rm46IGZldGNoTWUsXG4gIH0pO1xufTtcbiIsImltcG9ydCBSZWFjdCwge1xuICBjcmVhdGVDb250ZXh0LFxuICBEaXNwYXRjaCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tDcmVhdGVEdG8sIEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tzIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2ZlZWRiYWNrXCI7XG5pbXBvcnQgeyB1c2VNZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy91c2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tTdGF0ZSB7XG4gIHJvb3REaXI6IHN0cmluZztcbiAgcHJvamVjdElkOiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgZmVlZGJhY2tzPzogRmVlZGJhY2tSZXNwb25zZVtdO1xuICBuZXdGZWVkYmFjazogRmVlZGJhY2tDcmVhdGVEdG8gfCBudWxsO1xuICBuZXdGZWVkYmFja1JlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD47XG4gIHNlbGVjdGVkRmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfCBudWxsO1xuICBzZXRTZWxlY3RlZEZlZWRiYWNrOiBEaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbD4+O1xuICByZXNldEZlZWRiYWNrOiAoKSA9PiB2b2lkO1xuICBvcGVuRmVlZGJhY2tPdmVybGF5OiAoKSA9PiB2b2lkO1xuICBjbG9zZUZlZWRiYWNrT3ZlcmxheTogKCkgPT4gdm9pZDtcbiAgYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHZvaWQ7XG4gIGRlYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHZvaWQ7XG4gIG5hdmlnYXRlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vLyBDcmVhdGUgdGhlIGNvbnRleHRcbmNvbnN0IEZlZWRiYWNrQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICByb290RGlyOiBcIlwiLFxuICBwcm9qZWN0SWQ6IFwiXCIsXG4gIGlzT3BlbjogZmFsc2UsXG4gIGZlZWRiYWNrczogW10gYXMgRmVlZGJhY2tSZXNwb25zZVtdIHwgdW5kZWZpbmVkLFxuICBuZXdGZWVkYmFjazogbnVsbCBhcyBGZWVkYmFja0NyZWF0ZUR0byB8IG51bGwsXG4gIG5ld0ZlZWRiYWNrUmVmOiBSZWFjdC5jcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPigpLFxuICBzZWxlY3RlZEZlZWRiYWNrOiB7fSBhcyBGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbCxcbiAgc2V0U2VsZWN0ZWRGZWVkYmFjazoge30gYXMgRGlzcGF0Y2g8XG4gICAgUmVhY3QuU2V0U3RhdGVBY3Rpb248RmVlZGJhY2tSZXNwb25zZSB8IG51bGw+XG4gID4sXG4gIHJlc2V0RmVlZGJhY2s6ICgpID0+IHt9LFxuICBhY3RpdmF0ZUZlZWRiYWNrTW9kZTogKCkgPT4ge30sXG4gIGRlYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHt9LFxuICBvcGVuRmVlZGJhY2tPdmVybGF5OiAoKSA9PiB7fSxcbiAgY2xvc2VGZWVkYmFja092ZXJsYXk6ICgpID0+IHt9LFxuICBuYXZpZ2F0ZTogKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHZvaWQgcGF0aDtcbiAgICByZXR1cm47XG4gIH0sXG59KTtcblxuLy8gUHJvdmlkZXIgY29tcG9uZW50XG5leHBvcnQgY29uc3QgRmVlZGJhY2tQcm92aWRlciA9ICh7XG4gIHJvb3REaXIsXG4gIHByb2plY3RJZCxcbiAgbmF2aWdhdGUsXG4gIGNoaWxkcmVuLFxufToge1xuICByb290RGlyOiBzdHJpbmc7XG4gIHByb2plY3RJZDogc3RyaW5nO1xuICBuYXZpZ2F0ZTogKHBhdGg6IHN0cmluZykgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn0pID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW25ld0ZlZWRiYWNrLCBzZXROZXdGZWVkYmFja10gPSB1c2VTdGF0ZTxGZWVkYmFja0NyZWF0ZUR0byB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcbiAgY29uc3QgbmV3RmVlZGJhY2tSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3NlbGVjdGVkRmVlZGJhY2ssIHNldFNlbGVjdGVkRmVlZGJhY2tdID1cbiAgICB1c2VTdGF0ZTxGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHsgZGF0YTogZmVlZGJhY2tzIH0gPSB1c2VGZWVkYmFja3MocHJvamVjdElkKTtcbiAgY29uc3QgeyBkYXRhOiBtZSB9ID0gdXNlTWUoKTtcblxuICBjb25zdCBpc0Nvbm5lY3RlZCA9ICEhbWU7XG5cbiAgY29uc3QgaXNDb2xsYWJvcmF0b3IgPSBtZT8uY29sbGFib3JhdGlvbnMuZmluZChcbiAgICAoY29sbGFib3JhdGlvbikgPT4gY29sbGFib3JhdGlvbi5wcm9qZWN0LmlkID09PSBwcm9qZWN0SWRcbiAgKTtcblxuICBjb25zdCBvcGVuRmVlZGJhY2tPdmVybGF5ID0gKCkgPT4ge1xuICAgIHNldElzT3Blbih0cnVlKTtcbiAgfTtcblxuICBjb25zdCBjbG9zZUZlZWRiYWNrT3ZlcmxheSA9ICgpID0+IHtcbiAgICBzZXRJc09wZW4oZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0RmVlZGJhY2sgPSAoKSA9PiB7XG4gICAgc2V0TmV3RmVlZGJhY2sobnVsbCk7XG4gICAgYWN0aXZhdGVGZWVkYmFja01vZGUoKTtcbiAgfTtcblxuICBjb25zdCBjcmVhdGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IHRhcmdldD8uZGF0YXNldC5wYXRoIHx8IFwiXCI7XG4gICAgICBjb25zdCBhbGxFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgICBgW2RhdGEtcGF0aD1cIiR7ZWxlbWVudElkfVwiXWBcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGFyckFsbEVsZW1lbnRzID0gQXJyYXkuZnJvbShhbGxFbGVtZW50cyk7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRJbmRleCA9IGFyckFsbEVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KTtcblxuICAgICAgY29uc3QgeCA9IGUub2Zmc2V0WDtcbiAgICAgIGNvbnN0IHkgPSBlLm9mZnNldFk7XG4gICAgICBjb25zdCBlbGVtZW50V2lkdGggPSB0YXJnZXQ/LmNsaWVudFdpZHRoIHx8IDA7XG4gICAgICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gdGFyZ2V0Py5jbGllbnRIZWlnaHQgfHwgMDtcblxuICAgICAgc2V0TmV3RmVlZGJhY2soe1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBlbGVtZW50V2lkdGgsXG4gICAgICAgIGVsZW1lbnRIZWlnaHQsXG4gICAgICAgIGNvbW1lbnQ6IFwiXCIsXG4gICAgICAgIHBhdGg6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgZWxlbWVudElkLFxuICAgICAgICBlbGVtZW50SW5kZXgsXG4gICAgICAgIHByb2plY3RJZCxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3Byb2plY3RJZF1cbiAgKTtcblxuICBjb25zdCBpc1NpZGVCYXJPckZlZWRiYWNrSXRlbSA9IHVzZUNhbGxiYWNrKCh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmVlZGJhY2stc2lkZWJhclwiKTtcblxuICAgIGlmICghc2lkZWJhciB8fCBzaWRlYmFyLmNvbnRhaW5zKHRhcmdldCBhcyBOb2RlKSkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBmZWVkYmFja0VsZW1lbnRzID0gZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihgLmZlZWRiYWNrLWl0ZW1gKVxuICAgICAgLnZhbHVlcygpO1xuXG4gICAgZm9yIChjb25zdCBmZWVkYmFja0VsZW1lbnQgb2YgZmVlZGJhY2tFbGVtZW50cykge1xuICAgICAgaWYgKGZlZWRiYWNrRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtdKTtcblxuICBjb25zdCBzaG91bGRDcmVhdGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChuZXdGZWVkYmFja1JlZi5jdXJyZW50KSB7XG4gICAgICAgIGlmICghbmV3RmVlZGJhY2tSZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgc2V0TmV3RmVlZGJhY2sobnVsbCk7XG4gICAgICAgICAgaWYgKGlzU2lkZUJhck9yRmVlZGJhY2tJdGVtKHRhcmdldCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNTaWRlQmFyT3JGZWVkYmFja0l0ZW0odGFyZ2V0KTtcbiAgICB9LFxuICAgIFtpc1NpZGVCYXJPckZlZWRiYWNrSXRlbV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVOZXdGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIXNob3VsZENyZWF0ZUZlZWRiYWNrKGUpKSByZXR1cm47XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBzZXRTZWxlY3RlZEZlZWRiYWNrKG51bGwpO1xuICAgICAgY3JlYXRlRmVlZGJhY2soZSk7XG5cbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVOZXdGZWVkYmFjayk7XG4gICAgfSxcbiAgICBbc2hvdWxkQ3JlYXRlRmVlZGJhY2ssIGNyZWF0ZUZlZWRiYWNrXVxuICApO1xuXG4gIGNvbnN0IGFjdGl2YXRlRmVlZGJhY2tNb2RlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvbW1lbnQtY3Vyc29yXCIpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVOZXdGZWVkYmFjaywgdHJ1ZSk7XG4gIH0sIFtoYW5kbGVOZXdGZWVkYmFja10pO1xuXG4gIGNvbnN0IGRlYWN0aXZhdGVGZWVkYmFja01vZGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZU5ld0ZlZWRiYWNrLCB0cnVlKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJjb21tZW50LWN1cnNvclwiKTtcbiAgfSwgW2hhbmRsZU5ld0ZlZWRiYWNrXSk7XG5cbiAgY29uc3QgaGFuZGxlRXNjYXBlUHJlc3MgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgaWYgKG5ld0ZlZWRiYWNrKSB7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZU5ld0ZlZWRiYWNrKTtcbiAgICAgICAgICBzZXROZXdGZWVkYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlKCk7XG4gICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW25ld0ZlZWRiYWNrLCBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlLCBoYW5kbGVOZXdGZWVkYmFja11cbiAgKTtcbiAgY29uc3QgcmVtb3ZlUXVlcnlQYXJhbSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgcGFyYW1zLmRlbGV0ZShuYW1lKTtcbiAgICBjb25zdCBuZXdVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9JHtcbiAgICAgIHBhcmFtcy50b1N0cmluZygpID8gXCI/XCIgOiBcIlwiXG4gICAgfSR7cGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgXCJcIiwgbmV3VXJsKTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVFc2NhcGVQcmVzcyk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVFc2NhcGVQcmVzcyk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUVzY2FwZVByZXNzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgY29uc3QgZ2FsYWRyaW1GZWVkYmFja1Rva2VuID0gcGFyYW1zLmdldChcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbiAgICBpZiAoZ2FsYWRyaW1GZWVkYmFja1Rva2VuKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiLCBnYWxhZHJpbUZlZWRiYWNrVG9rZW4pO1xuICAgICAgcmVtb3ZlUXVlcnlQYXJhbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbiAgICB9XG4gIH0sIFtmZWVkYmFja3MsIGFjdGl2YXRlRmVlZGJhY2tNb2RlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmIGlzQ29ubmVjdGVkICYmIGlzQ29sbGFib3JhdG9yKSBhY3RpdmF0ZUZlZWRiYWNrTW9kZSgpO1xuICAgIGVsc2UgZGVhY3RpdmF0ZUZlZWRiYWNrTW9kZSgpO1xuICB9LCBbXG4gICAgaXNPcGVuLFxuICAgIGlzQ29ubmVjdGVkLFxuICAgIGlzQ29sbGFib3JhdG9yLFxuICAgIGFjdGl2YXRlRmVlZGJhY2tNb2RlLFxuICAgIGRlYWN0aXZhdGVGZWVkYmFja01vZGUsXG4gIF0pO1xuXG4gIGNvbnN0IHZhbHVlID0ge1xuICAgIHJvb3REaXIsXG4gICAgcHJvamVjdElkLFxuICAgIGlzT3BlbixcbiAgICBmZWVkYmFja3MsXG4gICAgbmV3RmVlZGJhY2ssXG4gICAgbmV3RmVlZGJhY2tSZWYsXG4gICAgc2VsZWN0ZWRGZWVkYmFjayxcbiAgICBzZXRTZWxlY3RlZEZlZWRiYWNrLFxuICAgIHJlc2V0RmVlZGJhY2ssXG4gICAgYWN0aXZhdGVGZWVkYmFja01vZGUsXG4gICAgZGVhY3RpdmF0ZUZlZWRiYWNrTW9kZSxcbiAgICBvcGVuRmVlZGJhY2tPdmVybGF5LFxuICAgIGNsb3NlRmVlZGJhY2tPdmVybGF5LFxuICAgIG5hdmlnYXRlLFxuICB9O1xuICByZXR1cm4gKFxuICAgIDxGZWVkYmFja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0ZlZWRiYWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VGZWVkYmFja0NvbnRleHQgPSAoKSA9PiB1c2VDb250ZXh0KEZlZWRiYWNrQ29udGV4dCk7XG4iLCJleHBvcnQgY29uc3QgQnV0dG9uID0gKHtcbiAgdGV4dCxcbiAgb25DbGljayxcbiAgaWNvblBhdGgsXG4gIHNpemUsXG59OiB7XG4gIG9uQ2xpY2s6IChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgdGV4dD86IHN0cmluZztcbiAgaWNvblBhdGg/OiBzdHJpbmc7XG4gIHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiO1xufSkgPT4ge1xuICBjb25zdCBwYWRkaW5nID0gZ2V0UGFkZGluZyhzaXplKTtcbiAgY29uc3QgZm9udFNpemUgPSBzaXplID09PSBcInNtYWxsXCIgPyBcInRleHQteHNcIiA6IFwidGV4dC1zbVwiO1xuICBjb25zdCBib3JkZXJSYWRpdXMgPSBzaXplID09PSBcInNtYWxsXCIgPyBcInJvdW5kZWQtbGdcIiA6IFwicm91bmRlZC1bMTJweF1cIjtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgY2xhc3NOYW1lPXtgZmxleC1zaHJpbmstMCBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciAgZ2FwLTIgJHtwYWRkaW5nfSAke2JvcmRlclJhZGl1c30gYmctYmx1ZS01MDAgaG92ZXI6Ymctb3BhY2l0eS04MGB9XG4gICAgPlxuICAgICAge2ljb25QYXRoICYmIDxpbWcgc3JjPXtpY29uUGF0aH0gY2xhc3NOYW1lPVwidy02IGgtNlwiIC8+fVxuICAgICAge3RleHQgJiYgPHNwYW4gY2xhc3NOYW1lPXtgJHtmb250U2l6ZX0gZm9udC1zZW1pYm9sZGB9Pnt0ZXh0fTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuXG5jb25zdCBnZXRQYWRkaW5nID0gKHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiKSA9PiB7XG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgXCJzbWFsbFwiOlxuICAgICAgcmV0dXJuIFwicHgtMyBweS0yXCI7XG4gICAgY2FzZSBcIm1lZGl1bVwiOlxuICAgICAgcmV0dXJuIFwicC0zXCI7XG4gICAgY2FzZSBcImxhcmdlXCI6XG4gICAgICByZXR1cm4gXCJwLTNcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwicC0zXCI7XG4gIH1cbn07XG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDIwIDIwJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4LjA2MjMgMTQuMzg0OUMxOC40MDIgMTQuNjk1NSAxOC40MjU2IDE1LjIyMjYgMTguMTE1MSAxNS41NjIzTDE3LjI4MTcgMTYuNDc0QzE2LjY5MDQgMTcuMTIwNiAxNS44NzE1IDE3LjUgMTUuMDAwMSAxNy41QzE0LjEyOTEgMTcuNSAxMy4zMTA1IDE3LjEyMSAxMi43MTkyIDE2LjQ3NDZDMTIuNDI2IDE2LjE1NTIgMTIuMDQ1NyAxNS45OTE3IDExLjY2NjkgMTUuOTkxN0MxMS4yODc4IDE1Ljk5MTcgMTAuOTA3NCAxNi4xNTU0IDEwLjYxNDEgMTYuNDc1MUMxMC4zMDI5IDE2LjgxNDIgOS43NzU3NyAxNi44MzY5IDkuNDM2NjQgMTYuNTI1N0M5LjA5NzUyIDE2LjIxNDYgOS4wNzQ4NCAxNS42ODc0IDkuMzg1OTggMTUuMzQ4M0M5Ljk3NzkyIDE0LjcwMzEgMTAuNzk2MiAxNC4zMjUgMTEuNjY2OSAxNC4zMjVDMTIuNTM3NSAxNC4zMjUgMTMuMzU1OCAxNC43MDMxIDEzLjk0NzcgMTUuMzQ4M0wxMy45NDg3IDE1LjM0OTRDMTQuMjQxNCAxNS42Njk1IDE0LjYyMTUgMTUuODMzMyAxNS4wMDAxIDE1LjgzMzNDMTUuMzc4OCAxNS44MzMzIDE1Ljc1ODggMTUuNjY5NSAxNi4wNTE1IDE1LjM0OTRWMTUuMzQ5NEwxNi44ODUgMTQuNDM3N0MxNy4xOTU1IDE0LjA5OCAxNy43MjI2IDE0LjA3NDQgMTguMDYyMyAxNC4zODQ5WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy4xNjA4IDIuMzI3NEMxNC4xNzY2IDEuMzExNiAxNS44MjM1IDEuMzExNiAxNi44MzkzIDIuMzI3NEMxNy44NTUxIDMuMzQzMTkgMTcuODU1MSA0Ljk5MDExIDE2LjgzOTMgNi4wMDU5MUw2LjM3MDM3IDE2LjQ3NDlDNi4zNTM4NyAxNi40OTE0IDYuMzM3NTMgMTYuNTA3NyA2LjMyMTMxIDE2LjUyNEM2LjA4MTc3IDE2Ljc2NCA1Ljg3MDU3IDE2Ljk3NTYgNS42MTU5NiAxNy4xMzE2QzUuMzkyMjggMTcuMjY4NyA1LjE0ODQxIDE3LjM2OTcgNC44OTMzMiAxNy40MzA5QzQuNjAyOTUgMTcuNTAwNiA0LjMwMzk5IDE3LjUwMDMgMy45NjQ5MSAxNy41QzMuOTQxOTYgMTcuNSAzLjkxODgzIDE3LjUgMy44OTU1IDE3LjVIMi41MDAwNEMyLjAzOTgxIDE3LjUgMS42NjY3MSAxNy4xMjY5IDEuNjY2NzEgMTYuNjY2N1YxNS4yNzEyQzEuNjY2NzEgMTUuMjQ3OSAxLjY2NjY5IDE1LjIyNDggMS42NjY2NyAxNS4yMDE4QzEuNjY2MzUgMTQuODYyNyAxLjY2NjA3IDE0LjU2MzggMS43MzU3OSAxNC4yNzM0QzEuNzk3MDMgMTQuMDE4MyAxLjg5ODA0IDEzLjc3NDQgMi4wMzUxMSAxMy41NTA4QzIuMTkxMTQgMTMuMjk2MSAyLjQwMjczIDEzLjA4NDkgMi42NDI3MiAxMi44NDU0QzIuNjU4OTcgMTIuODI5MiAyLjY3NTM0IDEyLjgxMjggMi42OTE4NCAxMi43OTYzTDEzLjE2MDggMi4zMjc0WicgZmlsbD0nd2hpdGUnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCB7IHVzZUZlZWRiYWNrQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xuaW1wb3J0IEVkaXQgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9pY29ucy9lZGl0LTA0LnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgT3BlbkZlZWRiYWNrQnV0dG9uID0gKCkgPT4ge1xuICBjb25zdCB7IGlzT3Blbiwgb3BlbkZlZWRiYWNrT3ZlcmxheSB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgaWYgKGlzT3BlbikgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICB0b3A6IFwiY2FsYygxMDB2aCAtIDcycHgpXCIsXG4gICAgICAgIGxlZnQ6IFwiY2FsYygxMDB2dyAtIDcycHgpXCIsXG4gICAgICAgIHpJbmRleDogMTAwMDAwMCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEJ1dHRvbiBpY29uUGF0aD17RWRpdH0gb25DbGljaz17b3BlbkZlZWRiYWNrT3ZlcmxheX0gc2l6ZT1cIm1lZGl1bVwiIC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IGdldEluaXRpYWxzID0gKHVzZXI6IHtcbiAgZnVsbE5hbWU/OiBzdHJpbmc7XG4gIGZpcnN0TmFtZT86IHN0cmluZztcbiAgbGFzdE5hbWU/OiBzdHJpbmc7XG59KSA9PiB7XG4gIGlmICh1c2VyLmZ1bGxOYW1lKSB7XG4gICAgY29uc3QgZnVsbE5hbWUgPSB1c2VyLmZ1bGxOYW1lLnNwbGl0KFwiIFwiKTtcbiAgICByZXR1cm4gZnVsbE5hbWVbMF0uY2hhckF0KDApICsgZnVsbE5hbWVbMV0uY2hhckF0KDApO1xuICB9XG4gIGlmICghdXNlci5maXJzdE5hbWUgfHwgIXVzZXIubGFzdE5hbWUpIHJldHVybiBcIlwiO1xuICBjb25zdCBmaXJzdE5hbWUgPSB1c2VyLmZpcnN0TmFtZS5jaGFyQXQoMCk7XG4gIGNvbnN0IGxhc3ROYW1lID0gdXNlci5sYXN0TmFtZS5jaGFyQXQoMCk7XG5cbiAgcmV0dXJuIGAke2ZpcnN0TmFtZS50b1VwcGVyQ2FzZSgpfSR7bGFzdE5hbWUudG9VcHBlckNhc2UoKX1gO1xufTtcbiIsIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tJdGVtSG92ZXJlZCA9ICh7XG4gIGZlZWRiYWNrLFxufToge1xuICBmZWVkYmFjazogRmVlZGJhY2tSZXNwb25zZTtcbn0pID0+IHtcbiAgY29uc3QgeyB1c2VyLCBjcmVhdGVkQXQsIGNvbW1lbnQgfSA9IGZlZWRiYWNrO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJwLTNcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiB6LTEwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLW1lZGl1bSB0ZXh0LXNtIHRleHQtZ3JheS1mZWVkYmFjay0yMDAgd2hpdGVzcGFjZS1ub3dyYXAgei0xMFwiPlxuICAgICAgICAgIHt1c2VyPy5mdWxsTmFtZSB8fCBgJHt1c2VyPy5maXJzdE5hbWV9ICR7dXNlcj8ubGFzdE5hbWV9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEycHhdIHRleHQtZ3JheS1mZWVkYmFjay0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICB7bW9tZW50KGNyZWF0ZWRBdCkuZnJvbU5vdygpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBvdmVyZmxvdy1oaWRkZW4gdy1bMjQwcHhdXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC1bMTZweF0gbGVhZGluZy01IHRleHQtd2hpdGUgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAge2NvbW1lbnR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzI0JyBoZWlnaHQ9JzI1JyB2aWV3Qm94PScwIDAgMjQgMjUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J00xOC43MDcxIDcuMjA3MTFDMTkuMDk3NiA2LjgxNjU4IDE5LjA5NzYgNi4xODM0MiAxOC43MDcxIDUuNzkyODlDMTguMzE2NiA1LjQwMjM3IDE3LjY4MzQgNS40MDIzNyAxNy4yOTI5IDUuNzkyODlMMTIgMTEuMDg1OEw2LjcwNzExIDUuNzkyODlDNi4zMTY1OCA1LjQwMjM3IDUuNjgzNDIgNS40MDIzNyA1LjI5Mjg5IDUuNzkyODlDNC45MDIzNyA2LjE4MzQyIDQuOTAyMzcgNi44MTY1OCA1LjI5Mjg5IDcuMjA3MTFMMTAuNTg1OCAxMi41TDUuMjkyODkgMTcuNzkyOUM0LjkwMjM3IDE4LjE4MzQgNC45MDIzNyAxOC44MTY2IDUuMjkyODkgMTkuMjA3MUM1LjY4MzQyIDE5LjU5NzYgNi4zMTY1OCAxOS41OTc2IDYuNzA3MTEgMTkuMjA3MUwxMiAxMy45MTQyTDE3LjI5MjkgMTkuMjA3MUMxNy42ODM0IDE5LjU5NzYgMTguMzE2NiAxOS41OTc2IDE4LjcwNzEgMTkuMjA3MUMxOS4wOTc2IDE4LjgxNjYgMTkuMDk3NiAxOC4xODM0IDE4LjcwNzEgMTcuNzkyOUwxMy40MTQyIDEyLjVMMTguNzA3MSA3LjIwNzExWicgZmlsbD0nd2hpdGUnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCBDbG9zZSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2Nsb3NlLnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgQ2xvc2VCdXR0b24gPSAoe1xuICBzaXplLFxuICBvbkNsaWNrLFxufToge1xuICBzaXplOiBcInNtYWxsXCIgfCBcImxhcmdlXCI7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNpemVDbGFzcyA9IHNpemUgPT09IFwic21hbGxcIiA/IFwidy01IGgtNVwiIDogXCJ3LTYgaC02XCI7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBvbkNsaWNrKCk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxpbWcgc3JjPXtDbG9zZX0gY2xhc3NOYW1lPXtzaXplQ2xhc3N9IC8+XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuIiwiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQge1xuICBGZWVkYmFja1Jlc3BvbnNlLFxuICBSZXBseVJlc3BvbnNlLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3QgUmVwbHlJdGVtID0gKHtcbiAgcmVwbHksXG59OiB7XG4gIHJlcGx5OiBSZXBseVJlc3BvbnNlIHwgRmVlZGJhY2tSZXNwb25zZTtcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZmxleC1iYXNlbGluZSBnYXAtMlwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1tZWRpdW0gdGV4dC1zbSB0ZXh0LWdyYXktZmVlZGJhY2stMjAwIHdoaXRlc3BhY2Utbm93cmFwIHotMTBcIj5cbiAgICAgICAgICB7cmVwbHkudXNlci5maXJzdE5hbWV9IHtyZXBseS51c2VyLmxhc3ROYW1lfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC1bMTBweF0gbGVhZGluZy1bMTJweF0gdGV4dC1ncmF5LWZlZWRiYWNrLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgIHttb21lbnQocmVwbHkuY3JlYXRlZEF0KS5mcm9tTm93KCl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtcmVndWxhciB0ZXh0LVsxNHB4XSBsZWFkaW5nLTUgdGV4dC13aGl0ZVwiPlxuICAgICAgICB7cmVwbHkuY29tbWVudH1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBDaGFuZ2VFdmVudCwgS2V5Ym9hcmRFdmVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBGZWVkYmFja1RleHRBcmVhID0gKHtcbiAgdmFsdWUsXG4gIHNldFZhbHVlLFxuICBvblN1Ym1pdCxcbiAgaGFuZGxlUmVzaXplLFxuICBpc0FuaW1hdGVkLFxuICBpc0RhcmssXG59OiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHNldFZhbHVlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25TdWJtaXQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBoYW5kbGVSZXNpemU/OiAoKSA9PiB2b2lkO1xuICBpc0FuaW1hdGVkPzogYm9vbGVhbjtcbiAgaXNEYXJrPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgdGV4dGFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgW2lzT3BlbmluZywgc2V0SXNPcGVuaW5nXSA9IHVzZVN0YXRlKGlzQW5pbWF0ZWQpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQW5pbWF0ZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0ZXh0YXJlYVJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgICBzZXRJc09wZW5pbmcoZmFsc2UpO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH0sIFtpc0FuaW1hdGVkXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIHNldFZhbHVlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cbiAgICBpZiAodGV4dGFyZWFSZWYuY3VycmVudCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7IC8vIFJlc2V0IGhlaWdodCB0byBjYWxjdWxhdGUgc2Nyb2xsSGVpZ2h0XG4gICAgICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGV4dGFyZWFSZWYuY3VycmVudC5zY3JvbGxIZWlnaHR9cHhgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dGFyZWFSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBcIjI5cHhcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhbmRsZVJlc2l6ZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZVJlc2l6ZSgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBoYW5kbGVTdWJtaXQoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XG4gICAgb25TdWJtaXQodmFsdWUpO1xuICAgIHNldFZhbHVlKFwiXCIpO1xuICAgIGlmICghdGV4dGFyZWFSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gXCIyOXB4XCI7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2BcbiAgICAgICAgJHtcbiAgICAgICAgICB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IFwiY29tbWVudC1pbnB1dC1jb250YWluZXJcIlxuICAgICAgICAgICAgOiBcImNvbW1lbnQtaW5wdXQtY29udGFpbmVyLWVtcHR5XCJcbiAgICAgICAgfSAgJHtpc09wZW5pbmcgPyBcImNvbW1lbnQtaW5wdXQtY29udGFpbmVyLW9wZW5pbmdcIiA6IFwiXCJ9ICAke1xuICAgICAgICBpc0RhcmsgPyBcImJnLWdyYXktZmVlZGJhY2stNzUwXCIgOiBcImJnLWdyYXktZmVlZGJhY2stNzAwXCJcbiAgICAgIH1gfVxuICAgID5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICByZWY9e3RleHRhcmVhUmVmfVxuICAgICAgICBjbGFzc05hbWU9e2Bjb21tZW50LWlucHV0ICR7XG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMCA/IFwiY29tbWVudC1pbnB1dC1maWxsZWRcIiA6IFwiXCJcbiAgICAgICAgfWB9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICBwbGFjZWhvbGRlcj1cIkFqb3V0ZXIgdW4gY29tbWVudGFpcmVcIlxuICAgICAgICByb3dzPXsxfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt2YWx1ZS5sZW5ndGggPiAwID8gXCJidXR0b25zLWNvbnRhaW5lclwiIDogXCJcIn1gfT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidXR0b24tc2VuZFwiIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgZmlsbD17dmFsdWUubGVuZ3RoID4gMCA/IFwiIzAwODVGRlwiIDogXCIjZmZmXCJ9XG4gICAgICAgICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICB3aWR0aD1cIjE2XCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNS45NjQuNjg2YS41LjUgMCAwIDAtLjY1LS42NUwuNzY3IDUuODU1SC43NjZsLS40NTIuMThhLjUuNSAwIDAgMC0uMDgyLjg4N2wuNDEuMjYuMDAxLjAwMiA0Ljk5NSAzLjE3OCAzLjE3OCA0Ljk5NS4wMDIuMDAyLjI2LjQxYS41LjUgMCAwIDAgLjg4Ni0uMDgzbDYtMTVabS0xLjgzMyAxLjg5TDYuNjM3IDEwLjA3bC0uMjE1LS4zMzhhLjUuNSAwIDAgMC0uMTU0LS4xNTRsLS4zMzgtLjIxNSA3LjQ5NC03LjQ5NCAxLjE3OC0uNDcxLS40NyAxLjE3OFpcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImV4cG9ydCBjb25zdCBNZW51SXRlbSA9ICh7XG4gIGxhYmVsLFxuICBvbkNsaWNrLFxufToge1xuICBsYWJlbDogc3RyaW5nO1xuICBvbkNsaWNrOiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT1cInotMSBtLTEgcHgtMiBweS0xIGhvdmVyOmJnLXByaW1hcnktZmVlZGJhY2stNDAwIGhvdmVyOm9wYWNpdHktMTAwIHJvdW5kZWQtbGdcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtc20gdGV4dC13aGl0ZVwiPntsYWJlbH08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjUnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNSAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMC4zMzM1IDEyQzEwLjMzMzUgMTAuODk1NCAxMS4yMjg5IDEwIDEyLjMzMzUgMTBDMTMuNDM4MSAxMCAxNC4zMzM1IDEwLjg5NTQgMTQuMzMzNSAxMkMxNC4zMzM1IDEzLjEwNDYgMTMuNDM4MSAxNCAxMi4zMzM1IDE0QzExLjIyODkgMTQgMTAuMzMzNSAxMy4xMDQ2IDEwLjMzMzUgMTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE3LjMzMzUgMTJDMTcuMzMzNSAxMC44OTU0IDE4LjIyODkgMTAgMTkuMzMzNSAxMEMyMC40MzgxIDEwIDIxLjMzMzUgMTAuODk1NCAyMS4zMzM1IDEyQzIxLjMzMzUgMTMuMTA0NiAyMC40MzgxIDE0IDE5LjMzMzUgMTRDMTguMjI4OSAxNCAxNy4zMzM1IDEzLjEwNDYgMTcuMzMzNSAxMlonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMy4zMzM1IDEyQzMuMzMzNSAxMC44OTU0IDQuMjI4OTMgMTAgNS4zMzM1IDEwQzYuNDM4MDcgMTAgNy4zMzM1IDEwLjg5NTQgNy4zMzM1IDEyQzcuMzMzNSAxMy4xMDQ2IDYuNDM4MDcgMTQgNS4zMzM1IDE0QzQuMjI4OTMgMTQgMy4zMzM1IDEzLjEwNDYgMy4zMzM1IDEyWicgZmlsbD0nd2hpdGUnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gXCIuL01lbnVJdGVtXCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQge1xuICB1c2VEZWxldGVGZWVkYmFjayxcbiAgdXNlVXBkYXRlRmVlZGJhY2ssXG59IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50XCI7XG5pbXBvcnQgRG90c0hvcml6b250YWwgZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9pY29ucy9kb3RzLWhvcml6b250YWwuc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBNZW51QnV0dG9uID0gKHtcbiAgZmVlZGJhY2ssXG4gIHNldElzSG92ZXJlZCxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG4gIHNldElzSG92ZXJlZDogKGlzSG92ZXJlZDogYm9vbGVhbikgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgeyByb290RGlyLCBzZXRTZWxlY3RlZEZlZWRiYWNrIH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcbiAgY29uc3QgeyBtdXRhdGU6IGRlbGV0ZUZlZWRiYWNrIH0gPSB1c2VEZWxldGVGZWVkYmFjaygpO1xuICBjb25zdCB7IG11dGF0ZTogdXBkYXRlRmVlZGJhY2sgfSA9IHVzZVVwZGF0ZUZlZWRiYWNrKCk7XG5cbiAgY29uc3QgcGF0aCA9IGB2c2NvZGU6Ly9maWxlJHtyb290RGlyICsgZmVlZGJhY2suZWxlbWVudElkfWA7XG5cbiAgY29uc3QgaGFuZGxlUmVzb2x2ZUZlZWRiYWNrID0gKCkgPT4ge1xuICAgIHVwZGF0ZUZlZWRiYWNrKFxuICAgICAge1xuICAgICAgICBmZWVkYmFja0lkOiBmZWVkYmFjay5pZCxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIGlzUmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBzZXRJc09wZW4oZmFsc2UpO1xuICAgICAgICAgIHNldElzSG92ZXJlZChmYWxzZSk7XG4gICAgICAgICAgc2V0U2VsZWN0ZWRGZWVkYmFjayhudWxsKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxpbWdcbiAgICAgICAgc3JjPXtEb3RzSG9yaXpvbnRhbH1cbiAgICAgICAgY2xhc3NOYW1lPVwidy00IGgtNFwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzT3BlbigobykgPT4gIW8pfVxuICAgICAgLz5cbiAgICAgIHtpc09wZW4gJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC04IHJpZ2h0LTIgei0xMSBmbGV4IGZsZXgtY29sICAgYmctZ3JheS1mZWVkYmFjay04MDAgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgbGFiZWw9XCJPdXZyaXIgZGFucyBWU2NvZGVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICB3aW5kb3cub3BlbihwYXRoLCBcIl9ibGFua1wiKTtcbiAgICAgICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8TWVudUl0ZW0gbGFiZWw9XCJSw6lzb2x1XCIgb25DbGljaz17aGFuZGxlUmVzb2x2ZUZlZWRiYWNrfSAvPlxuICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgbGFiZWw9XCJTdXBwcmltZXJcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBkZWxldGVGZWVkYmFjayhmZWVkYmFjaywge1xuICAgICAgICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlQ3JlYXRlUmVwbHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2tcIjtcbmltcG9ydCB7IENsb3NlQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uL2F0b21zL2J1dHRvbnMvQ2xvc2VCdXR0b25cIjtcbmltcG9ydCB7IFJlcGx5SXRlbSB9IGZyb20gXCIuLi8uLi9yZXBsaWVzL1JlcGx5SXRlbVwiO1xuaW1wb3J0IHsgRmVlZGJhY2tUZXh0QXJlYSB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tUZXh0QXJlYVwiO1xuaW1wb3J0IHsgTWVudUJ1dHRvbiB9IGZyb20gXCIuLi9tZW51L01lbnVCdXR0b25cIjtcbmltcG9ydCB7IEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tJdGVtU2VsZWN0ZWQgPSAoe1xuICBmZWVkYmFjayxcbiAgc2V0RmVlZGJhY2tIZWlnaHQsXG4gIHNldElzSG92ZXJlZCxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG4gIHNldEZlZWRiYWNrSGVpZ2h0OiAoaGVpZ2h0OiBudW1iZXIpID0+IHZvaWQ7XG4gIHNldElzSG92ZXJlZDogKGlzSG92ZXJlZDogYm9vbGVhbikgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgW3JlcGx5LCBzZXRSZXBseV0gPSB1c2VTdGF0ZShcIlwiKTtcblxuICBjb25zdCBmZWVkYmFja1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IHsgbXV0YXRlOiBjcmVhdGVSZXBseSB9ID0gdXNlQ3JlYXRlUmVwbHkoZmVlZGJhY2suaWQpO1xuICBjb25zdCB7IHNldFNlbGVjdGVkRmVlZGJhY2sgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuXG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICBpZiAoIWZlZWRiYWNrUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBzZXRGZWVkYmFja0hlaWdodChmZWVkYmFja1JlZi5jdXJyZW50LmNsaWVudEhlaWdodCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICAgIGNyZWF0ZVJlcGx5KHJlcGx5KTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmZWVkYmFja1JlZi5jdXJyZW50KSB7XG4gICAgICBzZXRGZWVkYmFja0hlaWdodChmZWVkYmFja1JlZi5jdXJyZW50LmNsaWVudEhlaWdodCk7XG4gICAgfVxuICB9LCBbZmVlZGJhY2ssIHNldEZlZWRiYWNrSGVpZ2h0XSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XG4gICAgc2V0SXNIb3ZlcmVkKGZhbHNlKTtcbiAgICBzZXRTZWxlY3RlZEZlZWRiYWNrKG51bGwpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2ZlZWRiYWNrUmVmfSBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHAtMyAgcmVsYXRpdmUgei0yMFwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1tZWRpdW0gdGV4dC1zbSB0ZXh0LXdoaXRlXCI+Q29tbWVudGFpcmU8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMSBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8TWVudUJ1dHRvbiBmZWVkYmFjaz17ZmVlZGJhY2t9IHNldElzSG92ZXJlZD17c2V0SXNIb3ZlcmVkfSAvPlxuICAgICAgICAgIDxDbG9zZUJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBvdmVyZmxvdy15LWF1dG8gb3ZlcmZsb3cteC1oaWRkZW4gbWF4LWgtWzIyMHB4XSBzY3JvbGxiYXItZGFyayBnYXAtMiBwLTNcIj5cbiAgICAgICAgICB7W2ZlZWRiYWNrLCAuLi5mZWVkYmFjay5yZXBsaWVzXS5tYXAoKHJlcGx5KSA9PiAoXG4gICAgICAgICAgICA8UmVwbHlJdGVtIGtleT17cmVwbHkuaWR9IHJlcGx5PXtyZXBseX0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibS0zXCI+XG4gICAgICAgICAgPEZlZWRiYWNrVGV4dEFyZWFcbiAgICAgICAgICAgIHZhbHVlPXtyZXBseX1cbiAgICAgICAgICAgIHNldFZhbHVlPXtzZXRSZXBseX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICBoYW5kbGVSZXNpemU9e2hhbmRsZVJlc2l6ZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCB7IGZvcndhcmRSZWYsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtcbiAgRmVlZGJhY2tDcmVhdGVEdG8sXG4gIEZlZWRiYWNrUmVzcG9uc2UsXG59IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50XCI7XG5cbmNvbnN0IEZFRURCQUNLX0lOUFVUX1dJRFRIID0gMzQ4O1xuY29uc3QgRkVFREJBQ0tfSVRFTV9XSURUSCA9IDI1NDtcbmNvbnN0IE1BUkdJTiA9IDI0O1xuY29uc3QgSUNPTl9XSURUSCA9IDQ4O1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tQb3NpdGlvbmVyID0gZm9yd2FyZFJlZjxcbiAgSFRNTERpdkVsZW1lbnQgfCBudWxsLFxuICB7XG4gICAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfCBGZWVkYmFja0NyZWF0ZUR0bztcbiAgICBpc0VkaXRpbmc/OiBib29sZWFuO1xuICAgIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIGlzSG92ZXJlZD86IGJvb2xlYW47XG4gICAgZmVlZGJhY2tIZWlnaHQ/OiBudW1iZXI7XG4gICAgc2V0U2hvdWxkUmV2ZXJzZT86IChzaG91bGRSZXZlcnNlOiBib29sZWFuKSA9PiB2b2lkO1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIH1cbj4oXG4gIChcbiAgICB7XG4gICAgICBmZWVkYmFjayxcbiAgICAgIGZlZWRiYWNrSGVpZ2h0ID0gMCxcbiAgICAgIGlzRWRpdGluZyxcbiAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICBpc0hvdmVyZWQsXG4gICAgICBzZXRTaG91bGRSZXZlcnNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgfSxcbiAgICByZWZcbiAgKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICAgIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlU3RhdGUoe1xuICAgICAgYm90dG9tOiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICBsZWZ0OiAwLFxuICAgIH0pO1xuICAgIGNvbnN0IFtpc0luaXRpYWxpemVkLCBzZXRJc0luaXRpYWxpemVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0YXJnZXRFbGVtZW50LmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgeyBib3R0b20sIGxlZnQsIGlzT3ZlcmZsb3dpbmdYIH0gPSBnZXRQb3NpdGlvbkluZm9zKHtcbiAgICAgICAgICBmZWVkYmFjayxcbiAgICAgICAgICBmZWVkYmFja0hlaWdodCxcbiAgICAgICAgICBpc1NlbGVjdGVkLFxuICAgICAgICAgIGlzSG92ZXJlZCxcbiAgICAgICAgICBpc0VkaXRpbmcsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2V0UG9zaXRpb24oe1xuICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc2V0U2hvdWxkUmV2ZXJzZSkgc2V0U2hvdWxkUmV2ZXJzZShpc092ZXJmbG93aW5nWCk7XG4gICAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgICBgW2RhdGEtcGF0aD1cIiR7ZmVlZGJhY2suZWxlbWVudElkfVwiXWBcbiAgICAgICk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbZmVlZGJhY2suZWxlbWVudEluZGV4XTtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGFyZ2V0RWxlbWVudC5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgICAgaGFuZGxlUmVzaXplKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICB9O1xuICAgIH0sIFtcbiAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICBpc0VkaXRpbmcsXG4gICAgICBpc0hvdmVyZWQsXG4gICAgICBmZWVkYmFjayxcbiAgICAgIHNldFNob3VsZFJldmVyc2UsXG4gICAgICBmZWVkYmFja0hlaWdodCxcbiAgICBdKTtcblxuICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50IHx8ICFpc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIGJvdHRvbTogcG9zaXRpb24uYm90dG9tLFxuICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uLmxlZnQsXG4gICAgICAgICAgdHJhbnNpdGlvbjogXCJhbGwgMC4yNXMgZWFzZS1pbi1vdXRcIixcbiAgICAgICAgICB6SW5kZXg6IGlzU2VsZWN0ZWQgfHwgaXNIb3ZlcmVkID8gMTAwMDAwMSA6IDEwMDAwMDAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PixcbiAgICAgIGRvY3VtZW50LmJvZHlcbiAgICApO1xuICB9XG4pO1xuXG5jb25zdCBnZXRQb3NpdGlvbkluZm9zID0gKHtcbiAgZmVlZGJhY2ssXG4gIGRpbWVuc2lvbnMsXG4gIGZlZWRiYWNrSGVpZ2h0LFxuICBpc1NlbGVjdGVkLFxuICBpc0hvdmVyZWQsXG4gIGlzRWRpdGluZyxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfCBGZWVkYmFja0NyZWF0ZUR0bztcbiAgZGltZW5zaW9uczogRE9NUmVjdDtcbiAgZmVlZGJhY2tIZWlnaHQ6IG51bWJlcjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIGlzSG92ZXJlZD86IGJvb2xlYW47XG4gIGlzRWRpdGluZz86IGJvb2xlYW47XG59KSA9PiB7XG4gIGNvbnN0IHRhcmdldFdpZHRoID0gZGltZW5zaW9ucy53aWR0aCB8fCAwO1xuICBjb25zdCB0YXJnZXRIZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodCB8fCAwO1xuXG4gIGNvbnN0IHdpZHRoUmF0aW8gPSBmZWVkYmFjay5lbGVtZW50V2lkdGhcbiAgICA/IGZlZWRiYWNrLmVsZW1lbnRXaWR0aCAvIHRhcmdldFdpZHRoXG4gICAgOiAxO1xuICBjb25zdCBoZWlnaHRSYXRpbyA9IGZlZWRiYWNrLmVsZW1lbnRIZWlnaHRcbiAgICA/IGZlZWRiYWNrLmVsZW1lbnRIZWlnaHQgLyB0YXJnZXRIZWlnaHRcbiAgICA6IDE7XG5cbiAgY29uc3QgcmVmZXJlbmNlUG9zaXRpb25MZWZ0ID1cbiAgICBmZWVkYmFjay54IC8gd2lkdGhSYXRpbyArIGRpbWVuc2lvbnMubGVmdCArIHdpbmRvdy5zY3JvbGxYO1xuICBjb25zdCByZWZlcmVuY2VQb3NpdGlvbkJvdHRvbSA9XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAtXG4gICAgKGZlZWRiYWNrLnkgLyBoZWlnaHRSYXRpbyArIGRpbWVuc2lvbnMudG9wICsgd2luZG93LnNjcm9sbFkpO1xuXG4gIGNvbnN0IGZlZWRiYWNrV2lkdGggPSBpc0VkaXRpbmcgPyBGRUVEQkFDS19JTlBVVF9XSURUSCA6IEZFRURCQUNLX0lURU1fV0lEVEg7XG5cbiAgY29uc3QgaXNPdmVyZmxvd2luZ1ggPVxuICAgIHJlZmVyZW5jZVBvc2l0aW9uTGVmdCArIGZlZWRiYWNrV2lkdGggKyBNQVJHSU4gPlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcblxuICBjb25zdCBpc092ZXJmbG93aW5nWSA9XG4gICAgcmVmZXJlbmNlUG9zaXRpb25Cb3R0b20gKyBmZWVkYmFja0hlaWdodCA+XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICBjb25zdCBvZmZzZXRFZGl0aW5nID0gaXNFZGl0aW5nID8gRkVFREJBQ0tfSU5QVVRfV0lEVEggLSBJQ09OX1dJRFRIIDogMDtcbiAgY29uc3Qgb2Zmc2V0QWN0aXZlID1cbiAgICBpc0hvdmVyZWQgfHwgaXNTZWxlY3RlZCA/IEZFRURCQUNLX0lURU1fV0lEVEggLSBJQ09OX1dJRFRIIDogMDtcblxuICBjb25zdCBwb3NpdGlvbkJvdHRvbSA9XG4gICAgaXNPdmVyZmxvd2luZ1kgJiYgaXNTZWxlY3RlZFxuICAgICAgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IC0gZmVlZGJhY2tIZWlnaHQgLSBNQVJHSU5cbiAgICAgIDogcmVmZXJlbmNlUG9zaXRpb25Cb3R0b207XG5cbiAgY29uc3QgcG9zaXRpb25MZWZ0ID0gaXNPdmVyZmxvd2luZ1hcbiAgICA/IHJlZmVyZW5jZVBvc2l0aW9uTGVmdCAtIG9mZnNldEVkaXRpbmcgLSBvZmZzZXRBY3RpdmVcbiAgICA6IHJlZmVyZW5jZVBvc2l0aW9uTGVmdDtcblxuICByZXR1cm4ge1xuICAgIGJvdHRvbTogcG9zaXRpb25Cb3R0b20sXG4gICAgbGVmdDogcG9zaXRpb25MZWZ0LFxuICAgIGlzT3ZlcmZsb3dpbmdYLFxuICB9O1xufTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyBnZXRJbml0aWFscyB9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlscy9nZXRJbml0aWFsc1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tJdGVtSG92ZXJlZCB9IGZyb20gXCIuL0ZlZWRiYWNrSXRlbUhvdmVyZWRcIjtcbmltcG9ydCB7IEZlZWRiYWNrSXRlbVNlbGVjdGVkIH0gZnJvbSBcIi4vRmVlZGJhY2tJdGVtU2VsZWN0ZWRcIjtcbmltcG9ydCB7IEZlZWRiYWNrUG9zaXRpb25lciB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tQb3NpdGlvbmVyXCI7XG5pbXBvcnQgeyBGZWVkYmFja1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrUGluID0gKHsgZmVlZGJhY2sgfTogeyBmZWVkYmFjazogRmVlZGJhY2tSZXNwb25zZSB9KSA9PiB7XG4gIGNvbnN0IFtpc0hvdmVyZWQsIHNldElzSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmZWVkYmFja0hlaWdodCwgc2V0RmVlZGJhY2tIZWlnaHRdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IHsgc2VsZWN0ZWRGZWVkYmFjaywgc2V0U2VsZWN0ZWRGZWVkYmFjayB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgY29uc3QgaW5pdGlhbHMgPSBnZXRJbml0aWFscyhmZWVkYmFjay51c2VyKTtcblxuICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRGZWVkYmFjayAmJiBmZWVkYmFjay5pZCA9PT0gc2VsZWN0ZWRGZWVkYmFjay5pZDtcblxuICByZXR1cm4gKFxuICAgIDxGZWVkYmFja1Bvc2l0aW9uZXJcbiAgICAgIGZlZWRiYWNrPXtmZWVkYmFja31cbiAgICAgIGlzU2VsZWN0ZWQ9eyEhaXNTZWxlY3RlZH1cbiAgICAgIGlzSG92ZXJlZD17aXNIb3ZlcmVkfVxuICAgICAgZmVlZGJhY2tIZWlnaHQ9e2lzSG92ZXJlZCAmJiAhaXNTZWxlY3RlZCA/IDk2IDogZmVlZGJhY2tIZWlnaHR9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldElzSG92ZXJlZCh0cnVlKX1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRJc0hvdmVyZWQoZmFsc2UpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZEZlZWRiYWNrKGZlZWRiYWNrKX1cbiAgICAgICAgY2xhc3NOYW1lPXtgZmVlZGJhY2staXRlbSAke2lzU2VsZWN0ZWQgJiYgXCJzZWxlY3RlZFwifSAke1xuICAgICAgICAgIGZlZWRiYWNrLmlzUmVzb2x2ZWQgJiYgIWlzSG92ZXJlZCAmJiAhaXNTZWxlY3RlZCAmJiBcIm9wYWNpdHktNTBcIlxuICAgICAgICB9YH1cbiAgICAgID5cbiAgICAgICAge2lzU2VsZWN0ZWQgPyAoXG4gICAgICAgICAgPEZlZWRiYWNrSXRlbVNlbGVjdGVkXG4gICAgICAgICAgICBmZWVkYmFjaz17ZmVlZGJhY2t9XG4gICAgICAgICAgICBzZXRGZWVkYmFja0hlaWdodD17c2V0RmVlZGJhY2tIZWlnaHR9XG4gICAgICAgICAgICBzZXRJc0hvdmVyZWQ9e3NldElzSG92ZXJlZH1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogaXNIb3ZlcmVkID8gKFxuICAgICAgICAgIDxGZWVkYmFja0l0ZW1Ib3ZlcmVkIGZlZWRiYWNrPXtmZWVkYmFja30gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1zaHJpbmstMCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdy02IGgtNiBtLTNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgZm9udC1tZWRpdW1cIj57aW5pdGlhbHN9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9GZWVkYmFja1Bvc2l0aW9uZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tQaW4gfSBmcm9tIFwiLi4vaXRlbS9GZWVkYmFja1BpblwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tQaW5zID0gKCkgPT4ge1xuICBjb25zdCB7IGlzT3BlbiwgZmVlZGJhY2tzIH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBpZiAoIWlzT3BlbiB8fCAhZmVlZGJhY2tzKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gZmVlZGJhY2tzXG4gICAgLmZpbHRlcigoZmVlZGJhY2spID0+IGZlZWRiYWNrLnBhdGggPT09IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgICAubWFwKChmZWVkYmFjaykgPT4gPEZlZWRiYWNrUGluIGtleT17ZmVlZGJhY2suaWR9IGZlZWRiYWNrPXtmZWVkYmFja30gLz4pO1xufTtcbiIsImV4cG9ydCBjb25zdCBDb21tZW50SWNvbiA9ICgpID0+IHtcbiAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtgY29tbWVudC1pY29uYH0+PC9kaXY+O1xufTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VDcmVhdGVGZWVkYmFjayB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuaW1wb3J0IHsgQ29tbWVudEljb24gfSBmcm9tIFwiLi4vLi4vLi4vYXRvbXMvaWNvbnMvQ29tbWVudEljb25cIjtcbmltcG9ydCB7IEZlZWRiYWNrUG9zaXRpb25lciB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tQb3NpdGlvbmVyXCI7XG5pbXBvcnQgeyBGZWVkYmFja1RleHRBcmVhIH0gZnJvbSBcIi4uL3NoYXJlZC9GZWVkYmFja1RleHRBcmVhXCI7XG5cbmV4cG9ydCBjb25zdCBGZWVkYmFja0lucHV0ID0gKCkgPT4ge1xuICBjb25zdCB7IG5ld0ZlZWRiYWNrLCByZXNldEZlZWRiYWNrLCBuZXdGZWVkYmFja1JlZiB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG4gIGNvbnN0IFtjb21tZW50LCBzZXRDb21tZW50XSA9IHVzZVN0YXRlKG5ld0ZlZWRiYWNrPy5jb21tZW50IHx8IFwiXCIpO1xuICBjb25zdCBbc2hvdWxkUmV2ZXJzZSwgc2V0U2hvdWxkUmV2ZXJzZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgeyBtdXRhdGU6IGNyZWF0ZUZlZWRiYWNrIH0gPSB1c2VDcmVhdGVGZWVkYmFjaygpO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICgpID0+IHtcbiAgICBpZiAoIW5ld0ZlZWRiYWNrKSByZXR1cm47XG4gICAgY3JlYXRlRmVlZGJhY2soe1xuICAgICAgLi4ubmV3RmVlZGJhY2ssXG4gICAgICB4OiBuZXdGZWVkYmFjay54LFxuICAgICAgeTogbmV3RmVlZGJhY2sueSxcbiAgICAgIGNvbW1lbnQsXG4gICAgfSk7XG4gICAgcmVzZXRGZWVkYmFjaygpO1xuICB9O1xuXG4gIGlmICghbmV3RmVlZGJhY2spIHJldHVybiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPEZlZWRiYWNrUG9zaXRpb25lclxuICAgICAgcmVmPXtuZXdGZWVkYmFja1JlZn1cbiAgICAgIGZlZWRiYWNrPXtuZXdGZWVkYmFja31cbiAgICAgIHNldFNob3VsZFJldmVyc2U9e3NldFNob3VsZFJldmVyc2V9XG4gICAgICBpc0VkaXRpbmc9e3RydWV9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJjb21tZW50LWNvbnRhaW5lclwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZmxleERpcmVjdGlvbjogc2hvdWxkUmV2ZXJzZSA/IFwicm93LXJldmVyc2VcIiA6IFwicm93XCIsXG4gICAgICAgICAgYWxpZ25JdGVtczogY29tbWVudC5sZW5ndGggPiAwID8gXCJmbGV4LXN0YXJ0XCIgOiBcImZsZXgtZW5kXCIsXG4gICAgICAgICAgdG9wOiBjb21tZW50Lmxlbmd0aCA+IDAgPyBcIjUxcHhcIiA6IFwiMHB4XCIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxDb21tZW50SWNvbiAvPlxuICAgICAgICA8RmVlZGJhY2tUZXh0QXJlYVxuICAgICAgICAgIHZhbHVlPXtjb21tZW50fVxuICAgICAgICAgIHNldFZhbHVlPXtzZXRDb21tZW50fVxuICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgaXNBbmltYXRlZFxuICAgICAgICAgIGlzRGFya1xuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9GZWVkYmFja1Bvc2l0aW9uZXI+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTE1IDE4TDkgMTJMMTUgNicgc3Ryb2tlPSclMjNFNkYyRkYnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNOSAxOEwxNSAxMkw5IDYnIHN0cm9rZT0nJTIzRTZGMkZGJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNlJTNjL3N2ZyUzZVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiaW1wb3J0IENoZXZyb25MZWZ0IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvY2hldnJvbi1sZWZ0LnN2Z1wiO1xuaW1wb3J0IENoZXZyb25SaWdodCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBDb2xsYXBzZUJ1dHRvbiA9ICh7XG4gIGlzQ29sbGFwc2VkLFxuICBzZXRJc0NvbGxhcHNlZCxcbn06IHtcbiAgaXNDb2xsYXBzZWQ6IGJvb2xlYW47XG4gIHNldElzQ29sbGFwc2VkOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj47XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgc2V0SXNDb2xsYXBzZWQoKGMpID0+ICFjKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9XCJoLTE2IHctMTYgcm91bmRlZC1mdWxsIGFic29sdXRlIGxlZnQtWy0zMnB4XSBib3R0b20tWzJweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcHItNiBiZy1ncmF5LWZlZWRiYWNrLTgwMFwiXG4gICAgPlxuICAgICAgPGltZyBzcmM9e2lzQ29sbGFwc2VkID8gQ2hldnJvbkxlZnQgOiBDaGV2cm9uUmlnaHR9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTE2IDE3TDIxIDEyTTIxIDEyTDE2IDdNMjEgMTJIOU0xMiAxN0MxMiAxNy45MyAxMiAxOC4zOTUgMTEuODk3OCAxOC43NzY1QzExLjYyMDQgMTkuODExNyAxMC44MTE3IDIwLjYyMDQgOS43NzY0NiAyMC44OTc4QzkuMzk0OTYgMjEgOC45Mjk5NyAyMSA4IDIxSDcuNUM2LjEwMjE4IDIxIDUuNDAzMjYgMjEgNC44NTE5NSAyMC43NzE2QzQuMTE2ODcgMjAuNDY3MiAzLjUzMjg0IDE5Ljg4MzEgMy4yMjgzNiAxOS4xNDgxQzMgMTguNTk2NyAzIDE3Ljg5NzggMyAxNi41VjcuNUMzIDYuMTAyMTcgMyA1LjQwMzI2IDMuMjI4MzYgNC44NTE5NUMzLjUzMjg0IDQuMTE2ODcgNC4xMTY4NyAzLjUzMjg0IDQuODUxOTUgMy4yMjgzNkM1LjQwMzI2IDMgNi4xMDIxOCAzIDcuNSAzSDhDOC45Mjk5NyAzIDkuMzk0OTYgMyA5Ljc3NjQ2IDMuMTAyMjJDMTAuODExNyAzLjM3OTYyIDExLjYyMDQgNC4xODgyNyAxMS44OTc4IDUuMjIzNTRDMTIgNS42MDUwNCAxMiA2LjA3MDAzIDEyIDcnIHN0cm9rZT0nd2hpdGUnIHN0cm9rZS13aWR0aD0nMScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgYXBpIGZyb20gXCIuL2FwaVwiO1xuaW1wb3J0IHsgU2lnbkluRHRvLCBTaWduVXBEdG8gfSBmcm9tIFwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3Qgc2lnbkluID0gYXN5bmMgKHBheWxvYWQ6IFNpZ25JbkR0bykgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5hdXRoLmF1dGhDb250cm9sbGVyU2lnbkluKHBheWxvYWQpO1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiLCByZXNwb25zZS5kYXRhLmFjY2Vzc1Rva2VuKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnblVwID0gYXN5bmMgKHBheWxvYWQ6IFNpZ25VcER0bykgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5hdXRoLmF1dGhDb250cm9sbGVyU2lnblVwKHBheWxvYWQpO1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiLCByZXNwb25zZS5kYXRhLmFjY2Vzc1Rva2VuKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgbG9nb3V0ID0gYXN5bmMgKCkgPT4ge1xuICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTaWduSW4gPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBzaWduSW4sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTaWduVXAgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBzaWduVXAsXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VMb2dvdXQgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBsb2dvdXQsXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoKTtcbiAgICB9LFxuICB9KTtcbn07XG4iLCJpbXBvcnQgTG9nb3V0SWNvbiBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb25zL2xvZy1vdXQtMDIuc3ZnXCI7XG5pbXBvcnQgeyB1c2VMb2dvdXQgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aFwiO1xuaW1wb3J0IHsgdXNlTWUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdXNlclwiO1xuXG5leHBvcnQgY29uc3QgQ29ubmVjdGVkVXNlciA9ICgpID0+IHtcbiAgY29uc3QgeyBkYXRhOiBtZSB9ID0gdXNlTWUoKTtcbiAgY29uc3QgeyBtdXRhdGU6IGxvZ291dCB9ID0gdXNlTG9nb3V0KCk7XG5cbiAgY29uc3QgaGFuZGxlTG9nb3V0ID0gKCkgPT4ge1xuICAgIGxvZ291dCgpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHRleHQtZ3JheS1mZWVkYmFjay0yMDAgei0xMCBwLTIgcHQtNFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTMwMFwiPlxuICAgICAgICAgIHttZT8uZnVsbE5hbWUgfHwgYCR7bWU/LmZpcnN0TmFtZX0gJHttZT8ubGFzdE5hbWV9YH1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQteHMgbGVhZGluZy1bMTJweF0gdGV4dC1ncmF5LWZlZWRiYWNrLTMwMFwiPlxuICAgICAgICAgIHttZT8uZW1haWx9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGltZyBvbkNsaWNrPXtoYW5kbGVMb2dvdXR9IHNyYz17TG9nb3V0SWNvbn0gY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXJcIiAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J00xNy41IDE3LjVMMTMuODc1IDEzLjg3NU0xNS44MzMzIDkuMTY2NjdDMTUuODMzMyAxMi44NDg2IDEyLjg0ODYgMTUuODMzMyA5LjE2NjY3IDE1LjgzMzNDNS40ODQ3NyAxNS44MzMzIDIuNSAxMi44NDg2IDIuNSA5LjE2NjY3QzIuNSA1LjQ4NDc3IDUuNDg0NzcgMi41IDkuMTY2NjcgMi41QzEyLjg0ODYgMi41IDE1LjgzMzMgNS40ODQ3NyAxNS44MzMzIDkuMTY2NjdaJyBzdHJva2U9J3doaXRlJyBzdHJva2Utd2lkdGg9JzEuNjY2NjcnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNlJTNjL3N2ZyUzZVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL3NlYXJjaC5zdmdcIjtcblxuZXhwb3J0IGNvbnN0IFNlYXJjaElucHV0ID0gKHtcbiAgdmFsdWUsXG4gIHNldFZhbHVlLFxufToge1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZXRWYWx1ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctZ3JheS1mZWVkYmFjay03MDAgYm9yZGVyLWdyYXktZmVlZGJhY2stNTAwIHJvdW5kZWQtbGcgcHgtMyBweS0yIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8aW1nIHNyYz17U2VhcmNofSBjbGFzc05hbWU9XCJ3LTYgaC02XCIgLz5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPXtcInRleHRcIn1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLWdyYXktZmVlZGJhY2stNzAwIG91dGxpbmUtbm9uZSBib3JkZXItbm9uZSB0ZXh0LXdoaXRlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyBGZWVkYmFja1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrTGlzdEl0ZW0gPSAoe1xuICBmZWVkYmFjayxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG59KSA9PiB7XG4gIGNvbnN0IHsgdXNlciwgY3JlYXRlZEF0LCBjb21tZW50LCBwYXRoLCByZXBsaWVzLCBpc1Jlc29sdmVkIH0gPSBmZWVkYmFjaztcbiAgY29uc3QgeyBzZWxlY3RlZEZlZWRiYWNrLCBzZXRTZWxlY3RlZEZlZWRiYWNrLCBuYXZpZ2F0ZSB9ID1cbiAgICB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRTZWxlY3RlZEZlZWRiYWNrKGZlZWRiYWNrKTtcbiAgICBuYXZpZ2F0ZShmZWVkYmFjay5wYXRoKTtcbiAgfTtcblxuICBjb25zdCByZXBsaWVzQ291bnQgPSByZXBsaWVzLmxlbmd0aDtcblxuICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRGZWVkYmFjayAmJiBmZWVkYmFjay5pZCA9PT0gc2VsZWN0ZWRGZWVkYmFjay5pZDtcblxuICBjb25zdCBpc1NlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgPyBcImJnLXByaW1hcnktZmVlZGJhY2stNjAwXCJcbiAgICA6IFwiIGhvdmVyOmJnLWdyYXktZmVlZGJhY2stNzAwXCI7XG5cbiAgY29uc3QgdGV4dENvbG9yQ2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgPyBcInRleHQtd2hpdGVcIlxuICAgIDogXCJ0ZXh0LXByaW1hcnktZmVlZGJhY2stNDAwXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2BmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IHJvdW5kZWQtbGcgJHtpc1NlbGVjdGVkQ2xhc3N9IHAtMiAke1xuICAgICAgICBpc1Jlc29sdmVkID8gXCJvcGFjaXR5LTYwXCIgOiBcIlwiXG4gICAgICB9YH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTIwMFwiPlxuICAgICAgICAgIHt1c2VyPy5mdWxsTmFtZSB8fCBgJHt1c2VyPy5maXJzdE5hbWV9ICR7dXNlcj8ubGFzdE5hbWV9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEycHhdIHRleHQtZ3JheS1mZWVkYmFjay0zMDBcIj5cbiAgICAgICAgICB7bW9tZW50KGNyZWF0ZWRBdCkuZnJvbU5vdygpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC14cyB0ZXh0LXdoaXRlXCI+e3BhdGh9PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXQtMiBrdW1iaC1yZWd1bGFyIHRleHQtYmFzZSB0ZXh0LXdoaXRlXCI+e2NvbW1lbnR9PC9zcGFuPlxuICAgICAge3JlcGxpZXNDb3VudCA+IDAgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BtdC0yIGt1bWJoLXJlZ3VsYXIgdGV4dC14cyAke3RleHRDb2xvckNsYXNzfWB9PlxuICAgICAgICAgIHtyZXBsaWVzQ291bnR9IHLDqXBvbnNle3JlcGxpZXNDb3VudCA+IDEgPyBcInNcIiA6IFwiXCJ9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUZlZWRiYWNrQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSBcIi4uLy4uLy4uL2F0b21zL2lucHV0cy9TZWFyY2hJbnB1dFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tMaXN0SXRlbSB9IGZyb20gXCIuLi9pdGVtL0ZlZWRiYWNrTGlzdEl0ZW1cIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrTGlzdCA9ICgpID0+IHtcbiAgY29uc3QgeyBmZWVkYmFja3MgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuICBjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoXCJcIik7XG5cbiAgY29uc3QgZmlsdGVyZWRGZWVkYmFja3MgPSBmZWVkYmFja3M/LmZpbHRlcihcbiAgICAoZmVlZGJhY2spID0+XG4gICAgICAhc2VhcmNoIHx8XG4gICAgICBmZWVkYmFjay5wYXRoLmluY2x1ZGVzKHNlYXJjaCkgfHxcbiAgICAgIGZlZWRiYWNrLmNvbW1lbnQuaW5jbHVkZXMoc2VhcmNoKVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgIGZsZXggZmxleC1jb2wgIHB0LTggb3ZlcmZsb3ctaGlkZGVuIHotMTBcIj5cbiAgICAgIDxTZWFyY2hJbnB1dCB2YWx1ZT17c2VhcmNofSBzZXRWYWx1ZT17c2V0U2VhcmNofSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCIgZmxleCBmbGV4LWNvbCBnYXAtNCBtdC00IG92ZXJmbG93LXktYXV0byBzY3JvbGxiYXItaGlkZVwiPlxuICAgICAgICB7ZmlsdGVyZWRGZWVkYmFja3MgJiZcbiAgICAgICAgICBmaWx0ZXJlZEZlZWRiYWNrcy5tYXAoKGZlZWRiYWNrKSA9PiAoXG4gICAgICAgICAgICA8RmVlZGJhY2tMaXN0SXRlbSBrZXk9e2ZlZWRiYWNrLmlkfSBmZWVkYmFjaz17ZmVlZGJhY2t9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VNZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy91c2VyXCI7XG5pbXBvcnQgeyBDb25uZWN0ZWRVc2VyIH0gZnJvbSBcIi4uL21vbGVjdWxlcy9Db25uZWN0ZWRVc2VyXCI7XG5pbXBvcnQgeyBGZWVkYmFja0xpc3QgfSBmcm9tIFwiLi4vbW9sZWN1bGVzL2ZlZWRiYWNrcy9ncm91cC9GZWVkYmFja0xpc3RcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3RlZFBhbmVsID0gKCkgPT4ge1xuICBjb25zdCB7IGRhdGE6IG1lIH0gPSB1c2VNZSgpO1xuICBjb25zdCB7IHByb2plY3RJZCB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgY29uc3QgaXNDb2xsYWJvcmF0b3IgPSBtZT8uY29sbGFib3JhdGlvbnMuZmluZChcbiAgICAoY29sbGFib3JhdGlvbikgPT4gY29sbGFib3JhdGlvbi5wcm9qZWN0LmlkID09PSBwcm9qZWN0SWRcbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBmbGV4LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1zdHJldGNoIGp1c3RpZnktYmV0d2VlbiBtYXgtaC1bY2FsYygxMDB2aC03MnB4KV1cIj5cbiAgICAgIHtpc0NvbGxhYm9yYXRvciA/IChcbiAgICAgICAgPEZlZWRiYWNrTGlzdCAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciB0ZXh0LWdyYXktZmVlZGJhY2stMjAwIHRleHQtc21cIj5cbiAgICAgICAgICAgIFZvdXMgbidhdmV6IGFjdHVlbGxlbWVudCBwYXMgbGVzIGRyb2l0cyBzdXIgY2UgcHJvamV0LCB2ZXVpbGxlelxuICAgICAgICAgICAgY29udGFjdGVyIHZvdHJlIHByb2R1Y3QgbWFuYWdlclxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPENvbm5lY3RlZFVzZXIgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJleHBvcnQgY29uc3QgSW5wdXQgPSAoe1xuICBsYWJlbCxcbiAgcGxhY2Vob2xkZXIsXG4gIHR5cGUsXG4gIHZhbHVlLFxuICBzZXRWYWx1ZSxcbn06IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZXRWYWx1ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTQwMCBtYi1bNnB4XVwiPlxuICAgICAgICB7bGFiZWx9XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQgdGV4dC1ibGFjayBib3JkZXIgYm9yZGVyLWdyYXktZmVlZGJhY2stNDAwIHB5LTIgcHgtMyBtYi00IHBsYWNlaG9sZGVyOnRleHQtZ3JheS1mZWVkYmFjay0zMDBcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxMjcnIGhlaWdodD0nNDMnIHZpZXdCb3g9JzAgMCAxMjcgNDMnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J003LjQ4NjczIDguMDc3NjdDOC40OTExMSA4LjA3NzY3IDkuNDE4NjIgOC4yNTM3MiAxMC4yNjkzIDguNjA1ODJDMTEuMTMwMiA4Ljk0NzU3IDExLjg4MzQgOS40MzQzIDEyLjUyOTEgMTAuMDY2TDEyLjYzNjcgOC4zODgzNUgxNi44MTgyVjIyLjEwNDlDMTYuODE4MiAyNC4wOTMyIDE2LjQ0NDEgMjUuODI3OCAxNS42OTYgMjcuMzA4N0MxNC45NTgxIDI4Ljc4OTYgMTMuOTE3OCAyOS45MzkyIDEyLjU3NTIgMzAuNzU3M0MxMS4yNDI5IDMxLjU4NTggOS42NzQ4NCAzMiA3Ljg3MTA1IDMyQzYuODc2OTIgMzIgNS44MjEzIDMxLjg2MDIgNC43MDQxOSAzMS41ODA2QzMuNTg3MDcgMzEuMzAxIDIuNDQ0MzMgMzAuODY2IDEuMjc1OTcgMzAuMjc1N0wyLjYxMzQ0IDI2LjU2MzFDMy4xMjU4NyAyNi45OTgxIDMuODQzMjkgMjcuMzY1NyA0Ljc2NTY4IDI3LjY2NkM1LjY4ODA3IDI3Ljk3NjcgNi41NzQ1OSAyOC4xMzIgNy40MjUyMyAyOC4xMzJDOC45NTIzIDI4LjEzMiAxMC4xNjE3IDI3LjYxNDIgMTEuMDUzMyAyNi41Nzg2QzExLjk0NDkgMjUuNTUzNCAxMi4zOTA4IDI0LjE2NTcgMTIuMzkwOCAyMi40MTU1VjIyLjM4NDVDMTEuNzQ1MSAyMi45NjQ0IDExLjAwNzIgMjMuNDIwMSAxMC4xNzcgMjMuNzUxNUM5LjM0Njg4IDI0LjA3MjUgOC40NTAxMSAyNC4yMzMgNy40ODY3MyAyNC4yMzNDNi4wNTE5IDI0LjIzMyA0Ljc2NTY4IDIzLjg4NjEgMy42MjgwNiAyMy4xOTIyQzIuNTAwNyAyMi40ODggMS42MTQxOCAyMS41MzAxIDAuOTY4NTA5IDIwLjMxODRDMC4zMjI4MzYgMTkuMDk2NCAwIDE3LjcwODcgMCAxNi4xNTUzQzAgMTQuNjAxOSAwLjMyMjgzNiAxMy4yMTk0IDAuOTY4NTA5IDEyLjAwNzhDMS42MTQxOCAxMC43ODU4IDIuNTAwNyA5LjgyNzgzIDMuNjI4MDYgOS4xMzM5OEM0Ljc2NTY4IDguNDI5NzcgNi4wNTE5IDguMDc3NjcgNy40ODY3MyA4LjA3NzY3Wk04LjQ4NTk4IDIwLjM0OTVDOS42MTMzNSAyMC4zNDk1IDEwLjU0NiAxOS45NTA4IDExLjI4MzkgMTkuMTUzNEMxMi4wMjE4IDE4LjM1NiAxMi4zOTA4IDE3LjM1NjYgMTIuMzkwOCAxNi4xNTUzQzEyLjM5MDggMTQuOTU0IDEyLjAyMTggMTMuOTU0NyAxMS4yODM5IDEzLjE1NzNDMTAuNTQ2IDEyLjM1OTkgOS42MTMzNSAxMS45NjEyIDguNDg1OTggMTEuOTYxMkM3LjM1ODYyIDExLjk2MTIgNi40MjU5OCAxMi4zNTk5IDUuNjg4MDcgMTMuMTU3M0M0Ljk1MDE2IDEzLjk1NDcgNC41ODEyIDE0Ljk1NCA0LjU4MTIgMTYuMTU1M0M0LjU4MTIgMTcuMzU2NiA0Ljk1MDE2IDE4LjM1NiA1LjY4ODA3IDE5LjE1MzRDNi40MjU5OCAxOS45NTA4IDcuMzU4NjIgMjAuMzQ5NSA4LjQ4NTk4IDIwLjM0OTVaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTE4LjkxOTEgMTkuNjUwNUMxOC45MTkxIDE4LjYxNDkgMTkuMjExMiAxNy42ODggMTkuNzk1NCAxNi44Njk5QzIwLjM4OTggMTYuMDUxOCAyMS4yMDQ2IDE1LjQwNDUgMjIuMjM5NyAxNC45MjgyQzIzLjI3NDggMTQuNDUxOCAyNC40NTg2IDE0LjIxMzYgMjUuNzkwOSAxNC4yMTM2QzI2LjIxMTEgMTQuMjEzNiAyNi42NTE4IDE0LjIzOTUgMjcuMTEzIDE0LjI5MTNDMjcuNTg0NCAxNC4zNDMgMjguMDU1OSAxNC40MTA0IDI4LjUyNzMgMTQuNDkzMkMyOC4xODkxIDEyLjgwNTIgMjYuOTc0NiAxMS45NjEyIDI0Ljg4MzkgMTEuOTYxMkMyMy42NDM4IDExLjk2MTIgMjIuMzk4NiAxMi40MzI0IDIxLjE0ODIgMTMuMzc0OEwxOS42MjYzIDkuNkMyMC42OTIxIDkuMDgyMiAyMS43NDI2IDguNjk5MDMgMjIuNzc3OCA4LjQ1MDQ5QzIzLjgxMjkgOC4yMDE5NCAyNC43OTY4IDguMDc3NjcgMjUuNzI5NCA4LjA3NzY3QzI3LjIxNTUgOC4wNzc2NyAyOC41MDE3IDguMzYyNDYgMjkuNTg4MSA4LjkzMjA0QzMwLjY4NDcgOS40OTEyNiAzMS41MzUzIDEwLjI4ODcgMzIuMTQgMTEuMzI0M0MzMi43NDQ3IDEyLjM0OTUgMzMuMDQ3IDEzLjU1NiAzMy4wNDcgMTQuOTQzN1YyMy45MjIzSDI5LjMyNjdMMjkuMDM0NiAyMi4yNjAyQzI4LjQ2MDcgMjIuODcxMiAyNy43NTg3IDIzLjM1MjcgMjYuOTI4NSAyMy43MDQ5QzI2LjEwODYgMjQuMDU3IDI1LjIwNjcgMjQuMjMzIDI0LjIyMjkgMjQuMjMzQzIyLjY2NSAyNC4yMzMgMjEuMzg5MSAyMy44MDg0IDIwLjM5NDkgMjIuOTU5MkMxOS40MTExIDIyLjExIDE4LjkxOTEgMjEuMDA3MSAxOC45MTkxIDE5LjY1MDVaTTIzLjM0NjYgMTguNjI1MkMyMy4zNDY2IDE5LjE0MyAyMy41NDEzIDE5LjU2MjUgMjMuOTMwOCAxOS44ODM1QzI0LjMzMDUgMjAuMTk0MiAyNC44NTMxIDIwLjM0OTUgMjUuNDk4OCAyMC4zNDk1QzI2LjM4MDIgMjAuMzQ5NSAyNy4xMTgxIDIwLjA4MDMgMjcuNzEyNiAxOS41NDE3QzI4LjMxNzIgMTkuMDAzMiAyOC42MTk2IDE4LjM0MDUgMjguNjE5NiAxNy41NTM0VjE3LjI0MjdDMjguMjQwNCAxNy4xMTg0IDI3LjgzMDQgMTcuMDIwMSAyNy4zODk3IDE2Ljk0NzZDMjYuOTU5MyAxNi44NzUxIDI2LjUzMzkgMTYuODM4OCAyNi4xMTM3IDE2LjgzODhDMjUuMjQyNiAxNi44Mzg4IDI0LjU2MTEgMTYuOTk0MiAyNC4wNjkxIDE3LjMwNDlDMjMuNTg3NCAxNy42MTU1IDIzLjM0NjYgMTguMDU1NyAyMy4zNDY2IDE4LjYyNTJaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTM5Ljc3NTIgMFYyMy45MjIzSDM1LjM0NzhWMEgzOS43NzUyWicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J000MS44NzYxIDE5LjY1MDVDNDEuODc2MSAxOC42MTQ5IDQyLjE2ODIgMTcuNjg4IDQyLjc1MjQgMTYuODY5OUM0My4zNDY4IDE2LjA1MTggNDQuMTYxNiAxNS40MDQ1IDQ1LjE5NjcgMTQuOTI4MkM0Ni4yMzE5IDE0LjQ1MTggNDcuNDE1NiAxNC4yMTM2IDQ4Ljc0NzkgMTQuMjEzNkM0OS4xNjgxIDE0LjIxMzYgNDkuNjA4OCAxNC4yMzk1IDUwLjA3IDE0LjI5MTNDNTAuNTQxNSAxNC4zNDMgNTEuMDEyOSAxNC40MTA0IDUxLjQ4NDMgMTQuNDkzMkM1MS4xNDYxIDEyLjgwNTIgNDkuOTMxNyAxMS45NjEyIDQ3Ljg0MDkgMTEuOTYxMkM0Ni42MDA4IDExLjk2MTIgNDUuMzU1NiAxMi40MzI0IDQ0LjEwNTIgMTMuMzc0OEw0Mi41ODMzIDkuNkM0My42NDkyIDkuMDgyMiA0NC42OTk3IDguNjk5MDMgNDUuNzM0OCA4LjQ1MDQ5QzQ2Ljc2OTkgOC4yMDE5NCA0Ny43NTM4IDguMDc3NjcgNDguNjg2NCA4LjA3NzY3QzUwLjE3MjUgOC4wNzc2NyA1MS40NTg3IDguMzYyNDYgNTIuNTQ1MSA4LjkzMjA0QzUzLjY0MTcgOS40OTEyNiA1NC40OTI0IDEwLjI4ODcgNTUuMDk3IDExLjMyNDNDNTUuNzAxNyAxMi4zNDk1IDU2LjAwNDEgMTMuNTU2IDU2LjAwNDEgMTQuOTQzN1YyMy45MjIzSDUyLjI4MzhMNTEuOTkxNyAyMi4yNjAyQzUxLjQxNzcgMjIuODcxMiA1MC43MTU3IDIzLjM1MjcgNDkuODg1NSAyMy43MDQ5QzQ5LjA2NTYgMjQuMDU3IDQ4LjE2MzcgMjQuMjMzIDQ3LjE3OTkgMjQuMjMzQzQ1LjYyMjEgMjQuMjMzIDQ0LjM0NjEgMjMuODA4NCA0My4zNTE5IDIyLjk1OTJDNDIuMzY4MSAyMi4xMSA0MS44NzYxIDIxLjAwNzEgNDEuODc2MSAxOS42NTA1Wk00Ni4zMDM2IDE4LjYyNTJDNDYuMzAzNiAxOS4xNDMgNDYuNDk4MyAxOS41NjI1IDQ2Ljg4NzggMTkuODgzNUM0Ny4yODc1IDIwLjE5NDIgNDcuODEwMiAyMC4zNDk1IDQ4LjQ1NTggMjAuMzQ5NUM0OS4zMzcyIDIwLjM0OTUgNTAuMDc1MSAyMC4wODAzIDUwLjY2OTYgMTkuNTQxN0M1MS4yNzQyIDE5LjAwMzIgNTEuNTc2NiAxOC4zNDA1IDUxLjU3NjYgMTcuNTUzNFYxNy4yNDI3QzUxLjE5NzQgMTcuMTE4NCA1MC43ODc0IDE3LjAyMDEgNTAuMzQ2NyAxNi45NDc2QzQ5LjkxNjMgMTYuODc1MSA0OS40OTEgMTYuODM4OCA0OS4wNzA4IDE2LjgzODhDNDguMTk5NiAxNi44Mzg4IDQ3LjUxODEgMTYuOTk0MiA0Ny4wMjYxIDE3LjMwNDlDNDYuNTQ0NCAxNy42MTU1IDQ2LjMwMzYgMTguMDU1NyA0Ni4zMDM2IDE4LjYyNTJaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTU3LjIyODcgMTYuMTU1M0M1Ny4yMjg3IDE0LjYwMTkgNTcuNTUxNSAxMy4yMTk0IDU4LjE5NzIgMTIuMDA3OEM1OC44NDI4IDEwLjc4NTggNTkuNzI5NCA5LjgyNzgzIDYwLjg1NjcgOS4xMzM5OEM2MS45OTQzIDguNDI5NzcgNjMuMjgwNiA4LjA3NzY3IDY0LjcxNTQgOC4wNzc2N0M2NS42Nzg4IDguMDc3NjcgNjYuNTc1NSA4LjI0MzM3IDY3LjQwNTcgOC41NzQ3NkM2OC4yMzU4IDguODk1NzkgNjguOTczOCA5LjM0NjI4IDY5LjYxOTQgOS45MjYyMVYwLjYyMTM1OUg3NC4wNDY5VjIzLjkyMjNINjkuODY1NEw2OS43NTc4IDIyLjI0NDdDNjkuMTEyMSAyMi44NzY0IDY4LjM1ODggMjMuMzY4MyA2Ny40OTc5IDIzLjcyMDRDNjYuNjQ3MyAyNC4wNjIxIDY1LjcxOTggMjQuMjMzIDY0LjcxNTQgMjQuMjMzQzYzLjI4MDYgMjQuMjMzIDYxLjk5NDMgMjMuODg2MSA2MC44NTY3IDIzLjE5MjJDNTkuNzI5NCAyMi40ODggNTguODQyOCAyMS41MzAxIDU4LjE5NzIgMjAuMzE4NEM1Ny41NTE1IDE5LjA5NjQgNTcuMjI4NyAxNy43MDg3IDU3LjIyODcgMTYuMTU1M1pNNjEuODA5OSAxNi4xNTUzQzYxLjgwOTkgMTcuMzU2NiA2Mi4xNzg4IDE4LjM1NiA2Mi45MTY3IDE5LjE1MzRDNjMuNjU0NiAxOS45NTA4IDY0LjU4NzMgMjAuMzQ5NSA2NS43MTQ2IDIwLjM0OTVDNjYuODQyIDIwLjM0OTUgNjcuNzc0NiAxOS45NTA4IDY4LjUxMjYgMTkuMTUzNEM2OS4yNTA1IDE4LjM1NiA2OS42MTk0IDE3LjM1NjYgNjkuNjE5NCAxNi4xNTUzQzY5LjYxOTQgMTQuOTU0IDY5LjI1MDUgMTMuOTU0NyA2OC41MTI2IDEzLjE1NzNDNjcuNzc0NiAxMi4zNTk5IDY2Ljg0MiAxMS45NjEyIDY1LjcxNDYgMTEuOTYxMkM2NC41ODczIDExLjk2MTIgNjMuNjU0NiAxMi4zNTk5IDYyLjkxNjcgMTMuMTU3M0M2Mi4xNzg4IDEzLjk1NDcgNjEuODA5OSAxNC45NTQgNjEuODA5OSAxNi4xNTUzWicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J003Ni42Mzk3IDIzLjkyMjNWOC4zODgzNUg4MC41MTM4TDgwLjcyOSAxMC42MDk3QzgxLjg0NjEgOC45MjE2OCA4My4zODM0IDguMDc3NjcgODUuMzQwOSA4LjA3NzY3Qzg2LjAwNzEgOC4wNzc2NyA4Ni42OTM4IDguMTgxMjMgODcuNDAwOSA4LjM4ODM1TDg2Ljc4NiAxMi4yNTYzQzg2LjE5MTYgMTIuMDU5NSA4NS42MDc0IDExLjk2MTIgODUuMDMzNSAxMS45NjEyQzgzLjg0NDYgMTEuOTYxMiA4Mi44ODYzIDEyLjQwNjUgODIuMTU4NyAxMy4yOTcxQzgxLjQzMSAxNC4xNzczIDgxLjA2NzIgMTUuNDM1NiA4MS4wNjcyIDE3LjA3MThWMjMuOTIyM0g3Ni42Mzk3WicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J004Ny4xOTU4IDMuMTA2OEM4Ny4xOTU4IDIuMzYxMTYgODcuNDIxMyAxLjc2MDUyIDg3Ljg3MjMgMS4zMDQ4NUM4OC4zMjMyIDAuODQ5MTkxIDg4LjkxNzYgMC42MjEzNTkgODkuNjU1NSAwLjYyMTM1OUM5MC4zOTM1IDAuNjIxMzU5IDkwLjk4NzkgMC44NDkxOTEgOTEuNDM4OCAxLjMwNDg1QzkxLjg4OTggMS43NjA1MiA5Mi4xMTUyIDIuMzYxMTYgOTIuMTE1MiAzLjEwNjhDOTIuMTE1MiAzLjg1MjQzIDkxLjg4OTggNC40NTMwNyA5MS40Mzg4IDQuOTA4NzRDOTAuOTg3OSA1LjM2NDQgOTAuMzkzNSA1LjU5MjIzIDg5LjY1NTUgNS41OTIyM0M4OC45MTc2IDUuNTkyMjMgODguMzIzMiA1LjM2NDQgODcuODcyMyA0LjkwODc0Qzg3LjQyMTMgNC40NTMwNyA4Ny4xOTU4IDMuODUyNDMgODcuMTk1OCAzLjEwNjhaTTg3LjQ0MTggMjMuOTIyM1Y4LjM4ODM1SDkxLjg2OTNWMjMuOTIyM0g4Ny40NDE4WicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J005OC42NDM2IDIzLjkyMjNIOTQuMjE2MVY4LjM4ODM1SDk4LjM5NzZMOTguNTA1MiAxMC4wMzVDOTkuNTkxNiA4LjczMDEgMTAxLjA2MiA4LjA3NzY3IDEwMi45MTcgOC4wNzc2N0MxMDUuMjg1IDguMDc3NjcgMTA2Ljk2IDkuMDk3NzMgMTA3Ljk0NCAxMS4xMzc5QzEwOC40NTcgMTAuMTU0IDEwOS4xNDkgOS4zOTgwNiAxMTAuMDIgOC44Njk5QzExMC44OTEgOC4zNDE3NSAxMTEuOTE2IDguMDc3NjcgMTEzLjA5NCA4LjA3NzY3QzExNC45NiA4LjA3NzY3IDExNi40MSA4Ljc0MDQ1IDExNy40NDUgMTAuMDY2QzExOC40OCAxMS4zODEyIDExOC45OTggMTMuMjE0MiAxMTguOTk4IDE1LjU2NVYyMy45MjIzSDExNC41N1YxNS41NjVDMTE0LjU3IDE0LjM2MzggMTE0LjI4OCAxMy40NjI4IDExMy43MjUgMTIuODYyMUMxMTMuMTcxIDEyLjI2MTUgMTEyLjUgMTEuOTYxMiAxMTEuNzExIDExLjk2MTJDMTEwLjkxMSAxMS45NjEyIDExMC4yMyAxMi4yNzE4IDEwOS42NjYgMTIuODkzMkMxMDkuMTAyIDEzLjUxNDYgMTA4LjgyMSAxNC40NDE0IDEwOC44MjEgMTUuNjczOFYyMy45MjIzSDEwNC4zOTNWMTUuNTY1QzEwNC4zOTMgMTQuMzYzOCAxMDQuMTExIDEzLjQ2MjggMTAzLjU0OCAxMi44NjIxQzEwMi45OTQgMTIuMjYxNSAxMDIuMzIzIDExLjk2MTIgMTAxLjUzNCAxMS45NjEyQzEwMC43MzQgMTEuOTYxMiAxMDAuMDUzIDEyLjI3MTggOTkuNDg5MSAxMi44OTMyQzk4LjkyNTQgMTMuNTE0NiA5OC42NDM2IDE0LjQ0MTQgOTguNjQzNiAxNS42NzM4VjIzLjkyMjNaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTEyMS4yODMgMjEuNzQ3NkMxMjEuMjgzIDIxLjAwMTkgMTIxLjUwOCAyMC40MDEzIDEyMS45NTkgMTkuOTQ1NkMxMjIuNDEgMTkuNDkgMTIzLjAwNSAxOS4yNjIxIDEyMy43NDMgMTkuMjYyMUMxMjQuNDgxIDE5LjI2MjEgMTI1LjA3NSAxOS40OSAxMjUuNTI2IDE5Ljk0NTZDMTI1Ljk3NyAyMC40MDEzIDEyNi4yMDIgMjEuMDAxOSAxMjYuMjAyIDIxLjc0NzZDMTI2LjIwMiAyMi40OTMyIDEyNS45NzcgMjMuMDkzOSAxMjUuNTI2IDIzLjU0OTVDMTI1LjA3NSAyNC4wMDUyIDEyNC40ODEgMjQuMjMzIDEyMy43NDMgMjQuMjMzQzEyMy4wMDUgMjQuMjMzIDEyMi40MSAyNC4wMDUyIDEyMS45NTkgMjMuNTQ5NUMxMjEuNTA4IDIzLjA5MzkgMTIxLjI4MyAyMi40OTMyIDEyMS4yODMgMjEuNzQ3NlonIGZpbGw9JyUyMzAxMEMxRScvJTNlJTNjcGF0aCBkPSdNNDguODM0IDQwVjI5Ljc0NjFINTUuMjQ2MVYzMS41ODVINTAuOTM5NVYzMy45MTZINTQuOTY1OFYzNS43NjE3SDUwLjkzOTVWNDBINDguODM0Wk02My4xNDE2IDM5LjIzNDRDNjIuMjkzOSAzOS44MzU5IDYxLjM2NjUgNDAuMTM2NyA2MC4zNTk0IDQwLjEzNjdDNTkuNjEyIDQwLjEzNjcgNTguOTM5OCAzOS45NzcyIDU4LjM0MjggMzkuNjU4MkM1Ny43NTAzIDM5LjMzNDYgNTcuMjgwOSAzOC44OTcxIDU2LjkzNDYgMzguMzQ1N0M1Ni41OTI4IDM3Ljc5NDMgNTYuNDIxOSAzNy4xNzIyIDU2LjQyMTkgMzYuNDc5NUM1Ni40MjE5IDM1LjgxODcgNTYuNTc2OCAzNS4yMjg1IDU2Ljg4NjcgMzQuNzA5QzU3LjIwMTIgMzQuMTg5NSA1Ny42MjczIDMzLjc3OTMgNTguMTY1IDMzLjQ3ODVDNTguNzAyOCAzMy4xNzc3IDU5LjMxMzUgMzMuMDI3MyA1OS45OTcxIDMzLjAyNzNDNjAuNzAzNSAzMy4wMjczIDYxLjMyNTUgMzMuMTkzNyA2MS44NjMzIDMzLjUyNjRDNjIuNDAxIDMzLjg1NDUgNjIuODIwMyAzNC4zMTQ4IDYzLjEyMTEgMzQuOTA3MkM2My40MjE5IDM1LjQ5NTEgNjMuNTcyMyAzNi4xNzY0IDYzLjU3MjMgMzYuOTUxMlYzNy4xNjk5SDU4LjUzNDJDNTguNjE2MiAzNy40Mzg4IDU4Ljc0ODQgMzcuNjc1OCA1OC45MzA3IDM3Ljg4MDlDNTkuMTE3NSAzOC4wODE0IDU5LjM0OTkgMzguMjQwOSA1OS42Mjc5IDM4LjM1OTRDNTkuOTEwNSAzOC40Nzc5IDYwLjIzMTggMzguNTM3MSA2MC41OTE4IDM4LjUzNzFDNjEuMjg5MSAzOC41MzcxIDYxLjkzODUgMzguMzExNSA2Mi41NCAzNy44NjA0TDYzLjE0MTYgMzkuMjM0NFpNNTguNDQ1MyAzNi4xNzE5SDYxLjc2MDdDNjEuNzI0MyAzNS44NzU3IDYxLjYzMDkgMzUuNjE1OSA2MS40ODA1IDM1LjM5MjZDNjEuMzM0NiAzNS4xNjQ3IDYxLjE0MSAzNC45ODcgNjAuODk5NCAzNC44NTk0QzYwLjY2MjQgMzQuNzMxOCA2MC4zOTU4IDM0LjY2OCA2MC4wOTk2IDM0LjY2OEM1OS43OTg4IDM0LjY2OCA1OS41Mjk5IDM0LjczNCA1OS4yOTMgMzQuODY2MkM1OS4wNjA1IDM0Ljk5ODQgNTguODcxNCAzNS4xNzYxIDU4LjcyNTYgMzUuMzk5NEM1OC41Nzk4IDM1LjYyMjcgNTguNDg2MyAzNS44ODAyIDU4LjQ0NTMgMzYuMTcxOVpNNzEuMTEyMyAzOS4yMzQ0QzcwLjI2NDYgMzkuODM1OSA2OS4zMzcyIDQwLjEzNjcgNjguMzMwMSA0MC4xMzY3QzY3LjU4MjcgNDAuMTM2NyA2Ni45MTA1IDM5Ljk3NzIgNjYuMzEzNSAzOS42NTgyQzY1LjcyMSAzOS4zMzQ2IDY1LjI1MTYgMzguODk3MSA2NC45MDUzIDM4LjM0NTdDNjQuNTYzNSAzNy43OTQzIDY0LjM5MjYgMzcuMTcyMiA2NC4zOTI2IDM2LjQ3OTVDNjQuMzkyNiAzNS44MTg3IDY0LjU0NzUgMzUuMjI4NSA2NC44NTc0IDM0LjcwOUM2NS4xNzE5IDM0LjE4OTUgNjUuNTk4IDMzLjc3OTMgNjYuMTM1NyAzMy40Nzg1QzY2LjY3MzUgMzMuMTc3NyA2Ny4yODQyIDMzLjAyNzMgNjcuOTY3OCAzMy4wMjczQzY4LjY3NDIgMzMuMDI3MyA2OS4yOTYyIDMzLjE5MzcgNjkuODM0IDMzLjUyNjRDNzAuMzcxNyAzMy44NTQ1IDcwLjc5MSAzNC4zMTQ4IDcxLjA5MTggMzQuOTA3MkM3MS4zOTI2IDM1LjQ5NTEgNzEuNTQzIDM2LjE3NjQgNzEuNTQzIDM2Ljk1MTJWMzcuMTY5OUg2Ni41MDQ5QzY2LjU4NjkgMzcuNDM4OCA2Ni43MTkxIDM3LjY3NTggNjYuOTAxNCAzNy44ODA5QzY3LjA4ODIgMzguMDgxNCA2Ny4zMjA2IDM4LjI0MDkgNjcuNTk4NiAzOC4zNTk0QzY3Ljg4MTIgMzguNDc3OSA2OC4yMDI1IDM4LjUzNzEgNjguNTYyNSAzOC41MzcxQzY5LjI1OTggMzguNTM3MSA2OS45MDkyIDM4LjMxMTUgNzAuNTEwNyAzNy44NjA0TDcxLjExMjMgMzkuMjM0NFpNNjYuNDE2IDM2LjE3MTlINjkuNzMxNEM2OS42OTUgMzUuODc1NyA2OS42MDE2IDM1LjYxNTkgNjkuNDUxMiAzNS4zOTI2QzY5LjMwNTMgMzUuMTY0NyA2OS4xMTE3IDM0Ljk4NyA2OC44NzAxIDM0Ljg1OTRDNjguNjMzMSAzNC43MzE4IDY4LjM2NjUgMzQuNjY4IDY4LjA3MDMgMzQuNjY4QzY3Ljc2OTUgMzQuNjY4IDY3LjUwMDcgMzQuNzM0IDY3LjI2MzcgMzQuODY2MkM2Ny4wMzEyIDM0Ljk5ODQgNjYuODQyMSAzNS4xNzYxIDY2LjY5NjMgMzUuMzk5NEM2Ni41NTA1IDM1LjYyMjcgNjYuNDU3IDM1Ljg4MDIgNjYuNDE2IDM2LjE3MTlaTTc5LjgyODEgNDBINzguMTA1NUw3OC4wMDI5IDM5LjA3MDNDNzcuNzExMyAzOS4zOTg0IDc3LjM2MDQgMzkuNjU4MiA3Ni45NTAyIDM5Ljg0OTZDNzYuNTQ0NiA0MC4wNDEgNzYuMTAwMyA0MC4xMzY3IDc1LjYxNzIgNDAuMTM2N0M3NC45OTI4IDQwLjEzNjcgNzQuNDM0NiAzOS45ODQgNzMuOTQyNCAzOS42Nzg3QzczLjQ1NDggMzkuMzY4OCA3My4wNjk3IDM4Ljk0NSA3Mi43ODcxIDM4LjQwNzJDNzIuNTA0NiAzNy44Njk1IDcyLjM2MzMgMzcuMjYxMSA3Mi4zNjMzIDM2LjU4MkM3Mi4zNjMzIDM1Ljg5ODQgNzIuNTA0NiAzNS4yOSA3Mi43ODcxIDM0Ljc1NjhDNzMuMDY5NyAzNC4yMTkxIDczLjQ1NDggMzMuNzk3NSA3My45NDI0IDMzLjQ5MjJDNzQuNDM0NiAzMy4xODIzIDc0Ljk5MjggMzMuMDI3MyA3NS42MTcyIDMzLjAyNzNDNzYuMDYzOCAzMy4wMjczIDc2LjQ3ODUgMzMuMTA5NCA3Ni44NjEzIDMzLjI3MzRDNzcuMjQ4NyAzMy40MzI5IDc3LjU4MzcgMzMuNjU2MiA3Ny44NjYyIDMzLjk0MzRWMjkuNzQ2MUg3OS44MjgxVjQwWk03Ni4xMjMgMzguMzc5OUM3Ni40NDY2IDM4LjM3OTkgNzYuNzM4MyAzOC4zMDcgNzYuOTk4IDM4LjE2MTFDNzcuMjYyNCAzOC4wMTUzIDc3LjQ3MiAzNy44MTcxIDc3LjYyNyAzNy41NjY0Qzc3Ljc4NjUgMzcuMzExMiA3Ny44NjYyIDM3LjAyMTggNzcuODY2MiAzNi42OTgyVjM2LjQ1MjFDNzcuODY2MiAzNi4xMjg2IDc3Ljc4NjUgMzUuODQxNSA3Ny42MjcgMzUuNTkwOEM3Ny40NzIgMzUuMzQwMiA3Ny4yNjI0IDM1LjE0NDIgNzYuOTk4IDM1LjAwMjlDNzYuNzM4MyAzNC44NTcxIDc2LjQ0NjYgMzQuNzg0MiA3Ni4xMjMgMzQuNzg0MkM3NS43OTA0IDM0Ljc4NDIgNzUuNDkxOSAzNC44NjE3IDc1LjIyNzUgMzUuMDE2NkM3NC45NjMyIDM1LjE3MTUgNzQuNzUzNiAzNS4zODU3IDc0LjU5ODYgMzUuNjU5MkM3NC40NDgyIDM1LjkyODEgNzQuMzczIDM2LjIzNTcgNzQuMzczIDM2LjU4MkM3NC4zNzMgMzYuOTIzOCA3NC40NDgyIDM3LjIzMTQgNzQuNTk4NiAzNy41MDQ5Qzc0Ljc1MzYgMzcuNzczOCA3NC45NjMyIDM3Ljk4OCA3NS4yMjc1IDM4LjE0NzVDNzUuNDkxOSAzOC4zMDI0IDc1Ljc5MDQgMzguMzc5OSA3Ni4xMjMgMzguMzc5OVpNODMuMjE4OCA0MEg4MS40OTYxVjI5Ljc0NjFIODMuNDU4VjMzLjk0MzRDODMuNzQ1MSAzMy42NTYyIDg0LjA3NzggMzMuNDMyOSA4NC40NTYxIDMzLjI3MzRDODQuODM4OSAzMy4xMDk0IDg1LjI1MzYgMzMuMDI3MyA4NS43MDAyIDMzLjAyNzNDODYuMzI5MSAzMy4wMjczIDg2Ljg4NzQgMzMuMTgyMyA4Ny4zNzUgMzMuNDkyMkM4Ny44NjI2IDMzLjc5NzUgODguMjQ3NyAzNC4yMTkxIDg4LjUzMDMgMzQuNzU2OEM4OC44MTI4IDM1LjI5IDg4Ljk1NDEgMzUuODk4NCA4OC45NTQxIDM2LjU4MkM4OC45NTQxIDM3LjI2MTEgODguODEyOCAzNy44Njk1IDg4LjUzMDMgMzguNDA3MkM4OC4yNDc3IDM4Ljk0NSA4Ny44NjI2IDM5LjM2ODggODcuMzc1IDM5LjY3ODdDODYuODg3NCAzOS45ODQgODYuMzI5MSA0MC4xMzY3IDg1LjcwMDIgNDAuMTM2N0M4NS4yMTcxIDQwLjEzNjcgODQuNzcwNSA0MC4wNDMzIDg0LjM2MDQgMzkuODU2NEM4My45NTQ4IDM5LjY2NSA4My42MDYxIDM5LjQwMyA4My4zMTQ1IDM5LjA3MDNMODMuMjE4OCA0MFpNODUuMjAxMiAzOC4zNzk5Qzg1LjUzMzkgMzguMzc5OSA4NS44MzAxIDM4LjMwMjQgODYuMDg5OCAzOC4xNDc1Qzg2LjM1NDIgMzcuOTkyNSA4Ni41NjE1IDM3Ljc3ODMgODYuNzExOSAzNy41MDQ5Qzg2Ljg2NjkgMzcuMjMxNCA4Ni45NDQzIDM2LjkyMTUgODYuOTQ0MyAzNi41NzUyQzg2Ljk0NDMgMzYuMjMzNCA4Ni44NjY5IDM1LjkyODEgODYuNzExOSAzNS42NTkyQzg2LjU2MTUgMzUuMzg1NyA4Ni4zNTQyIDM1LjE3MTUgODYuMDg5OCAzNS4wMTY2Qzg1LjgzMDEgMzQuODYxNyA4NS41MzM5IDM0Ljc4NDIgODUuMjAxMiAzNC43ODQyQzg0Ljg4NjcgMzQuNzg0MiA4NC41OTk2IDM0Ljg1NDggODQuMzM5OCAzNC45OTYxQzg0LjA4NDYgMzUuMTM3NCA4My44Nzk2IDM1LjMzMTEgODMuNzI0NiAzNS41NzcxQzgzLjU2OTcgMzUuODIzMiA4My40ODA4IDM2LjEwNTggODMuNDU4IDM2LjQyNDhWMzYuNzI1NkM4My40ODA4IDM3LjA0NDYgODMuNTY5NyAzNy4zMjk0IDgzLjcyNDYgMzcuNTgwMUM4My44Nzk2IDM3LjgyNjIgODQuMDg0NiAzOC4wMjIxIDg0LjMzOTggMzguMTY4Qzg0LjU5NTEgMzguMzA5MiA4NC44ODIyIDM4LjM3OTkgODUuMjAxMiAzOC4zNzk5Wk05Ni4zMDI3IDQwSDk0LjU5MzhMOTQuNDkxMiAzOS4xODY1Qzk0LjI0MDYgMzkuNDg3MyA5My45MzA3IDM5LjcyMiA5My41NjE1IDM5Ljg5MDZDOTMuMTkyNCA0MC4wNTQ3IDkyLjc4NjggNDAuMTM2NyA5Mi4zNDQ3IDQwLjEzNjdDOTEuODY2MiA0MC4xMzY3IDkxLjQ0MDEgNDAuMDQ1NiA5MS4wNjY0IDM5Ljg2MzNDOTAuNjkyNyAzOS42NzY0IDkwLjM5ODggMzkuNDIxMiA5MC4xODQ2IDM5LjA5NzdDODkuOTcwNCAzOC43Njk1IDg5Ljg2MzMgMzguMzk4MSA4OS44NjMzIDM3Ljk4MzRDODkuODYzMyAzNy41NDU5IDg5Ljk3OTUgMzcuMTYwOCA5MC4yMTE5IDM2LjgyODFDOTAuNDQ0MyAzNi40OTU0IDkwLjc2MzMgMzYuMjM1NyA5MS4xNjg5IDM2LjA0ODhDOTEuNTc5MSAzNS44NTc0IDkyLjA0MzkgMzUuNzYxNyA5Mi41NjM1IDM1Ljc2MTdDOTIuODY4OCAzNS43NjE3IDkzLjE3NDIgMzUuNzk1OSA5My40Nzk1IDM1Ljg2NDNDOTMuNzg5NCAzNS45MzI2IDk0LjA3NjUgMzYuMDI4MyA5NC4zNDA4IDM2LjE1MTRWMzUuOTczNkM5NC4zNDA4IDM1LjcwMDIgOTQuMjYzMyAzNS40NjU1IDk0LjEwODQgMzUuMjY5NUM5My45NTggMzUuMDY5IDkzLjc0ODQgMzQuOTE0MSA5My40Nzk1IDM0LjgwNDdDOTMuMjE1MiAzNC42OTUzIDkyLjkxODkgMzQuNjQwNiA5Mi41OTA4IDM0LjY0MDZDOTIuMjc2NCAzNC42NDA2IDkxLjk2NDIgMzQuNjkwOCA5MS42NTQzIDM0Ljc5MUM5MS4zNDkgMzQuODkxMyA5MS4wNjY0IDM1LjA0MTcgOTAuODA2NiAzNS4yNDIyTDkwLjI3MzQgMzMuNzQ1MUM5MC43MzM3IDMzLjUwODEgOTEuMTk4NiAzMy4zMzA0IDkxLjY2OCAzMy4yMTE5QzkyLjE0MTkgMzMuMDg4OSA5Mi41OTk5IDMzLjAyNzMgOTMuMDQyIDMzLjAyNzNDOTMuNzA3NCAzMy4wMjczIDk0LjI4MzkgMzMuMTU5NSA5NC43NzE1IDMzLjQyMzhDOTUuMjU5MSAzMy42ODM2IDk1LjYzNTEgMzQuMDUyNyA5NS44OTk0IDM0LjUzMTJDOTYuMTY4MyAzNS4wMDUyIDk2LjMwMjcgMzUuNTY4IDk2LjMwMjcgMzYuMjE5N1Y0MFpNOTIuNzc1NCAzOC42MjZDOTMuMDM1MiAzOC42MjYgOTMuMjgzNSAzOC41NjkgOTMuNTIwNSAzOC40NTUxQzkzLjc1NzUgMzguMzQxMSA5My45NDg5IDM4LjE4NjIgOTQuMDk0NyAzNy45OTAyQzk0LjI0NTEgMzcuNzk0MyA5NC4zMjQ5IDM3LjU3NzggOTQuMzM0IDM3LjM0MDhWMzcuMjkzQzk0LjEzMzUgMzcuMTU2MiA5My45MTAyIDM3LjA1MTQgOTMuNjY0MSAzNi45Nzg1QzkzLjQyMjUgMzYuOTAxIDkzLjE3NjQgMzYuODYyMyA5Mi45MjU4IDM2Ljg2MjNDOTIuNTUyMSAzNi44NjIzIDkyLjI0NjcgMzYuOTQ0MyA5Mi4wMDk4IDM3LjEwODRDOTEuNzcyOCAzNy4yNzI1IDkxLjY1NDMgMzcuNDg0NCA5MS42NTQzIDM3Ljc0NDFDOTEuNjU0MyAzNy45MTI4IDkxLjcwMjEgMzguMDY1NCA5MS43OTc5IDM4LjIwMjFDOTEuODk4MSAzOC4zMzQzIDkyLjAzMjYgMzguNDM5MSA5Mi4yMDEyIDM4LjUxNjZDOTIuMzY5OCAzOC41ODk1IDkyLjU2MTIgMzguNjI2IDkyLjc3NTQgMzguNjI2Wk0xMDMuODkxIDM4LjkxMzFDMTAzLjU1OCAzOS4yOTU5IDEwMy4xNSAzOS41OTY3IDEwMi42NjcgMzkuODE1NEMxMDIuMTg0IDQwLjAyOTYgMTAxLjY1MyA0MC4xMzY3IDEwMS4wNzQgNDAuMTM2N0MxMDAuMzcyIDQwLjEzNjcgOTkuNzQzNSAzOS45ODQgOTkuMTg3NSAzOS42Nzg3Qzk4LjYzNjEgMzkuMzY4OCA5OC4yMDA4IDM4Ljk0NSA5Ny44ODE4IDM4LjQwNzJDOTcuNTY3NCAzNy44Njk1IDk3LjQxMDIgMzcuMjYxMSA5Ny40MTAyIDM2LjU4MkM5Ny40MTAyIDM1Ljg5ODQgOTcuNTY3NCAzNS4yOSA5Ny44ODE4IDM0Ljc1NjhDOTguMjAwOCAzNC4yMTkxIDk4LjYzNjEgMzMuNzk3NSA5OS4xODc1IDMzLjQ5MjJDOTkuNzQzNSAzMy4xODIzIDEwMC4zNzIgMzMuMDI3MyAxMDEuMDc0IDMzLjAyNzNDMTAxLjY0OCAzMy4wMjczIDEwMi4xNzcgMzMuMTM0NCAxMDIuNjYgMzMuMzQ4NkMxMDMuMTQzIDMzLjU2MjggMTAzLjU1MSAzMy44NTkgMTAzLjg4NCAzNC4yMzczTDEwMi43MjkgMzUuNDQ3M0MxMDIuNTUxIDM1LjI0MjIgMTAyLjMyNSAzNS4wODI3IDEwMi4wNTIgMzQuOTY4OEMxMDEuNzgzIDM0Ljg1MDMgMTAxLjUgMzQuNzkxIDEwMS4yMDQgMzQuNzkxQzEwMC44NjIgMzQuNzkxIDEwMC41NTcgMzQuODY4NSAxMDAuMjg4IDM1LjAyMzRDMTAwLjAxOSAzNS4xNzM4IDk5LjgwNzMgMzUuMzgzNSA5OS42NTIzIDM1LjY1MjNDOTkuNDk3NCAzNS45MTY3IDk5LjQxOTkgMzYuMjIyIDk5LjQxOTkgMzYuNTY4NEM5OS40MTk5IDM2LjkxOTMgOTkuNDk3NCAzNy4yMzE0IDk5LjY1MjMgMzcuNTA0OUM5OS44MDczIDM3Ljc3ODMgMTAwLjAxOSAzNy45OTI1IDEwMC4yODggMzguMTQ3NUMxMDAuNTU3IDM4LjI5NzkgMTAwLjg2MiAzOC4zNzMgMTAxLjIwNCAzOC4zNzNDMTAxLjUgMzguMzczIDEwMS43ODUgMzguMzE2MSAxMDIuMDU5IDM4LjIwMjFDMTAyLjMzMiAzOC4wODM3IDEwMi41NTUgMzcuOTIxOSAxMDIuNzI5IDM3LjcxNjhMMTAzLjg5MSAzOC45MTMxWk0xMDcuMDU2IDQwSDEwNS4wOTRWMjkuNzQ2MUgxMDcuMDU2VjM2LjA0ODhMMTA3LjcyNiAzNS4yNDIyTDEwOS42OTQgMzMuMTY0MUgxMTIuMTQ4TDEwOS4yNTcgMzYuMjA2MUwxMTIuNDkgNDBIMTA5Ljk1NEwxMDcuOTEgMzcuNDM2NUwxMDcuMDU2IDM4LjIxNThWNDBaJyBmaWxsPSclMjMwMDg1RkYnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTaWduVXAgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYXV0aFwiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiLi4vLi4vYXRvbXMvaW5wdXRzL0lucHV0XCI7XG5pbXBvcnQgTG9nb0ZlZWRiYWNrRGFyayBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2xvZ28tZmVlZGJhY2stZGFyay5zdmdcIjtcblxuZXhwb3J0IGNvbnN0IFNpZ25VcEZvcm0gPSAoe1xuICBjbG9zZU1vZGFsLFxuICBzZXRJc1NpZ25pbmdVcCxcbn06IHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZDtcbiAgc2V0SXNTaWduaW5nVXA6IChpc1NpZ25pbmdVcDogYm9vbGVhbikgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgW2ZpcnN0TmFtZSwgc2V0Rmlyc3ROYW1lXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbbGFzdE5hbWUsIHNldExhc3ROYW1lXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbZW1haWwsIHNldEVtYWlsXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IHVzZVN0YXRlKFwiXCIpO1xuXG4gIGNvbnN0IHsgbXV0YXRlOiBzaWduVXAgfSA9IHVzZVNpZ25VcCgpO1xuXG4gIGNvbnN0IGhhbmRsZVNpZ25VcCA9ICgpID0+IHtcbiAgICBzaWduVXAoXG4gICAgICB7IGZpcnN0TmFtZSwgbGFzdE5hbWUsIGVtYWlsLCBwYXNzd29yZCB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBjbG9zZU1vZGFsKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCB6LTEwIGZsZXggZmxleC1jb2wganVzdGlmeS1zdGFydFwiPlxuICAgICAgPGltZyBzcmM9e0xvZ29GZWVkYmFja0Rhcmt9IGNsYXNzTmFtZT1cIm1iLTEyIGgtWzQzcHhdIHctbWluXCIgLz5cbiAgICAgIDxoMSBjbGFzc05hbWU9XCJrdW1iaC1zZW1pYm9sZCB0ZXh0LTN4bCB0ZXh0LWdyYXktZmVlZGJhY2stOTAwIG1iLTNcIj5cbiAgICAgICAgSW5zY3JpcHRpb25cbiAgICAgIDwvaDE+XG5cbiAgICAgIDxJbnB1dFxuICAgICAgICBsYWJlbD1cIlByw6lub21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlByw6lub21cIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHZhbHVlPXtmaXJzdE5hbWV9XG4gICAgICAgIHNldFZhbHVlPXtzZXRGaXJzdE5hbWV9XG4gICAgICAvPlxuICAgICAgPElucHV0XG4gICAgICAgIGxhYmVsPVwiTm9tXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJOb21cIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHZhbHVlPXtsYXN0TmFtZX1cbiAgICAgICAgc2V0VmFsdWU9e3NldExhc3ROYW1lfVxuICAgICAgLz5cbiAgICAgIDxJbnB1dFxuICAgICAgICBsYWJlbD1cIkUtbWFpbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRS1tYWlsXCJcbiAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgdmFsdWU9e2VtYWlsfVxuICAgICAgICBzZXRWYWx1ZT17c2V0RW1haWx9XG4gICAgICAvPlxuICAgICAgPElucHV0XG4gICAgICAgIGxhYmVsPVwiTW90IGRlIHBhc3NlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJNb3QgZGUgcGFzc2VcIlxuICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICB2YWx1ZT17cGFzc3dvcmR9XG4gICAgICAgIHNldFZhbHVlPXtzZXRQYXNzd29yZH1cbiAgICAgIC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNpZ25VcH1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTQgcHktMiBiZy1ibHVlLTUwMCBrdW1iaC1tZWRpdW0gdGV4dC13aGl0ZSByb3VuZGVkLWxnIG10LTIgIGRpc2FibGVkOmJnLWJsdWUtMTAwIGRpc2FibGVkOnRleHQtYmx1ZS0zMDBcIlxuICAgICAgPlxuICAgICAgICBTJ2luc2NyaXJlXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNTaWduaW5nVXAoZmFsc2UpfVxuICAgICAgICBjbGFzc05hbWU9XCJmb250LWJvbGQgdGV4dC1jZW50ZXIgdGV4dC1ibGFjayB0ZXh0LXNtIG10LTJcIlxuICAgICAgPlxuICAgICAgICBTZSBjb25uZWN0ZXJcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNpZ25JbiB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoXCI7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCIuLi8uLi9hdG9tcy9pbnB1dHMvSW5wdXRcIjtcbmltcG9ydCBMb2dvRmVlZGJhY2tEYXJrIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvbG9nby1mZWVkYmFjay1kYXJrLnN2Z1wiO1xuXG5jb25zdCBTaWduSW5Gb3JtID0gKHtcbiAgc2V0SXNTaWduaW5nVXAsXG4gIGNsb3NlTW9kYWwsXG59OiB7XG4gIHNldElzU2lnbmluZ1VwOiAoaXNTaWduaW5nVXA6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGNsb3NlTW9kYWw6ICgpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IFtlbWFpbCwgc2V0RW1haWxdID0gUmVhY3QudXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFtwYXNzd29yZCwgc2V0UGFzc3dvcmRdID0gUmVhY3QudXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3QudXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IHsgbXV0YXRlOiBzaWduSW4gfSA9IHVzZVNpZ25JbigpO1xuXG4gIGNvbnN0IGhhbmRsZUxvZ2luID0gKCkgPT4ge1xuICAgIHNpZ25JbihcbiAgICAgIHsgZW1haWwsIHBhc3N3b3JkIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIGNsb3NlTW9kYWwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSA9PT0gXCJOZXR3b3JrIEVycm9yXCIpIHtcbiAgICAgICAgICAgIHNldEVycm9yKFwiVW5lIGVycmV1ciByw6lzZWF1IGVzdCBzdXJ2ZW51ZVwiKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UgPT09IFwiSW52YWxpZCBjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgICAgICBzZXRFcnJvcihcIkVtYWlsIG91IG1vdCBkZSBwYXNzZSBpbnZhbGlkZVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0RXJyb3IoXCJVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICAvLyBjb25zdCBoYW5kbGVHaXRodWJMb2dpbiA9ICgpID0+IHtcbiAgLy8gICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIC8vICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgaHR0cDovL2xvY2FsaG9zdDozMDAwL2F1dGgvZ2l0aHViP3JlZGlyZWN0VXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAvLyAgICAgY3VycmVudFVybFxuICAvLyAgICl9YDtcbiAgLy8gfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIHotMTAgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LXN0YXJ0XCI+XG4gICAgICA8aW1nIHNyYz17TG9nb0ZlZWRiYWNrRGFya30gY2xhc3NOYW1lPVwibWItMTIgaC1bNDNweF0gdy1taW5cIiAvPlxuICAgICAgPGgxIGNsYXNzTmFtZT1cImt1bWJoLXNlbWlib2xkIHRleHQtM3hsIHRleHQtZ3JheS1mZWVkYmFjay05MDAgbWItM1wiPlxuICAgICAgICBDb25uZXhpb25cbiAgICAgIDwvaDE+XG4gICAgICA8SW5wdXRcbiAgICAgICAgbGFiZWw9XCJFbWFpbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRW1haWxcIlxuICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICB2YWx1ZT17ZW1haWx9XG4gICAgICAgIHNldFZhbHVlPXtzZXRFbWFpbH1cbiAgICAgIC8+XG4gICAgICA8SW5wdXRcbiAgICAgICAgbGFiZWw9XCJNb3QgZGUgcGFzc2VcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIk1vdCBkZSBwYXNzZVwiXG4gICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgIHZhbHVlPXtwYXNzd29yZH1cbiAgICAgICAgc2V0VmFsdWU9e3NldFBhc3N3b3JkfVxuICAgICAgLz5cbiAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCB0ZXh0LXhzIGgtNCB0ZXh0LWNlbnRlclwiPntlcnJvcn08L3A+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgb25DbGljaz17aGFuZGxlTG9naW59XG4gICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC00IHB5LTIgYmctYmx1ZS01MDAga3VtYmgtbWVkaXVtIHRleHQtd2hpdGUgcm91bmRlZC1sZyBtdC0yICBkaXNhYmxlZDpiZy1ibHVlLTEwMCBkaXNhYmxlZDp0ZXh0LWJsdWUtMzAwXCJcbiAgICAgID5cbiAgICAgICAgU2UgY29ubmVjdGVyXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNTaWduaW5nVXAodHJ1ZSl9XG4gICAgICAgIGNsYXNzTmFtZT1cImZvbnQtYm9sZCB0ZXh0LWNlbnRlciB0ZXh0LWJsYWNrIHRleHQtc20gbXQtMlwiXG4gICAgICA+XG4gICAgICAgIFMnaW5zY3JpcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2lnbkluRm9ybTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTaWduVXBGb3JtIH0gZnJvbSBcIi4uL21vbGVjdWxlcy9mb3Jtcy9TaWduVXBGb3JtXCI7XG5pbXBvcnQgU2lnbkluRm9ybSBmcm9tIFwiLi4vbW9sZWN1bGVzL2Zvcm1zL1NpZ25JbkZvcm1cIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb24gPSAoeyBjbG9zZU1vZGFsIH06IHsgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCB9KSA9PiB7XG4gIGNvbnN0IFtpc1NpZ25pbmdVcCwgc2V0SXNTaWduaW5nVXBdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJwLThcIj5cbiAgICAgIHtpc1NpZ25pbmdVcCA/IChcbiAgICAgICAgPFNpZ25VcEZvcm0gY2xvc2VNb2RhbD17Y2xvc2VNb2RhbH0gc2V0SXNTaWduaW5nVXA9e3NldElzU2lnbmluZ1VwfSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNpZ25JbkZvcm0gc2V0SXNTaWduaW5nVXA9e3NldElzU2lnbmluZ1VwfSBjbG9zZU1vZGFsPXtjbG9zZU1vZGFsfSAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGNvbnN0IE1vZGFsID0gKHtcbiAgaXNWaXNpYmxlLFxuICBjbG9zZU1vZGFsLFxuICBsaW1pdFdpZHRoID0gdHJ1ZSxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgY2xvc2VNb2RhbD86ICgpID0+IHZvaWQ7XG4gIGxpbWl0V2lkdGg/OiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufSkgPT4ge1xuICBjb25zdCByZXNpemluZyA9IHVzZVJlZihmYWxzZSk7XG5cbiAgaWYgKCFpc1Zpc2libGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB3aWR0aCA9IGxpbWl0V2lkdGggPyBcInctWzQwMHB4XVwiIDogXCJcIjtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJtb2RhbFwiXG4gICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICAgICAgcmVzaXppbmcuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbk1vdXNlVXA9eygpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzaXppbmcuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfX1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGlmIChjbG9zZU1vZGFsICYmIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgJiYgIXJlc2l6aW5nLmN1cnJlbnQpIHtcbiAgICAgICAgICBjbG9zZU1vZGFsKCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3dpZHRofSBiZy13aGl0ZSByb3VuZGVkLWxnYH0+e2NoaWxkcmVufTwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCB7IENvbm5lY3Rpb24gfSBmcm9tIFwiLi4vLi4vb3JnYW5pc21zL0Nvbm5lY3Rpb25cIjtcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb25Nb2RhbCA9ICh7XG4gIGlzVmlzaWJsZSxcbiAgY2xvc2VNb2RhbCxcbn06IHtcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbCBpc1Zpc2libGU9e2lzVmlzaWJsZX0gY2xvc2VNb2RhbD17Y2xvc2VNb2RhbH0+XG4gICAgICA8Q29ubmVjdGlvbiBjbG9zZU1vZGFsPXtjbG9zZU1vZGFsfSAvPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9hdG9tcy9idXR0b25zL0J1dHRvblwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGFsIH0gZnJvbSBcIi4uL2F0b21zL21vZGFscy9Db25uZWN0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb25QYW5lbCA9ICgpID0+IHtcbiAgY29uc3QgW2Nvbm5lY3Rpb25Nb2RhbE9wZW4sIHNldENvbm5lY3Rpb25Nb2RhbE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00XCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHRleHQtZ3JheS1mZWVkYmFjay0yMDAgdGV4dC1zbVwiPlxuICAgICAgICAgIENvbm5lY3RleiB2b3VzIHBvdXIgYWNjw6lkZXIgYXV4IGNvbW1lbnRhaXJlc1xuICAgICAgICA8L3A+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB0ZXh0PVwiU2UgY29ubmVjdGVyXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRDb25uZWN0aW9uTW9kYWxPcGVuKHRydWUpfVxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxDb25uZWN0aW9uTW9kYWxcbiAgICAgICAgaXNWaXNpYmxlPXtjb25uZWN0aW9uTW9kYWxPcGVufVxuICAgICAgICBjbG9zZU1vZGFsPXsoKSA9PiBzZXRDb25uZWN0aW9uTW9kYWxPcGVuKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTI3JyBoZWlnaHQ9JzQzJyB2aWV3Qm94PScwIDAgMTI3IDQzJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNNy40ODY3MyA4LjA3NzY3QzguNDkxMTEgOC4wNzc2NyA5LjQxODYyIDguMjUzNzIgMTAuMjY5MyA4LjYwNTgyQzExLjEzMDIgOC45NDc1NyAxMS44ODM0IDkuNDM0MyAxMi41MjkxIDEwLjA2NkwxMi42MzY3IDguMzg4MzVIMTYuODE4MlYyMi4xMDQ5QzE2LjgxODIgMjQuMDkzMiAxNi40NDQxIDI1LjgyNzggMTUuNjk2IDI3LjMwODdDMTQuOTU4MSAyOC43ODk2IDEzLjkxNzggMjkuOTM5MiAxMi41NzUyIDMwLjc1NzNDMTEuMjQyOSAzMS41ODU4IDkuNjc0ODQgMzIgNy44NzEwNSAzMkM2Ljg3NjkyIDMyIDUuODIxMyAzMS44NjAyIDQuNzA0MTkgMzEuNTgwNkMzLjU4NzA3IDMxLjMwMSAyLjQ0NDMzIDMwLjg2NiAxLjI3NTk3IDMwLjI3NTdMMi42MTM0NCAyNi41NjMxQzMuMTI1ODcgMjYuOTk4MSAzLjg0MzI5IDI3LjM2NTcgNC43NjU2OCAyNy42NjZDNS42ODgwNyAyNy45NzY3IDYuNTc0NTkgMjguMTMyIDcuNDI1MjMgMjguMTMyQzguOTUyMyAyOC4xMzIgMTAuMTYxNyAyNy42MTQyIDExLjA1MzMgMjYuNTc4NkMxMS45NDQ5IDI1LjU1MzQgMTIuMzkwOCAyNC4xNjU3IDEyLjM5MDggMjIuNDE1NVYyMi4zODQ1QzExLjc0NTEgMjIuOTY0NCAxMS4wMDcyIDIzLjQyMDEgMTAuMTc3IDIzLjc1MTVDOS4zNDY4OCAyNC4wNzI1IDguNDUwMTEgMjQuMjMzIDcuNDg2NzMgMjQuMjMzQzYuMDUxOSAyNC4yMzMgNC43NjU2OCAyMy44ODYxIDMuNjI4MDYgMjMuMTkyMkMyLjUwMDcgMjIuNDg4IDEuNjE0MTggMjEuNTMwMSAwLjk2ODUwOSAyMC4zMTg0QzAuMzIyODM2IDE5LjA5NjQgMCAxNy43MDg3IDAgMTYuMTU1M0MwIDE0LjYwMTkgMC4zMjI4MzYgMTMuMjE5NCAwLjk2ODUwOSAxMi4wMDc4QzEuNjE0MTggMTAuNzg1OCAyLjUwMDcgOS44Mjc4MyAzLjYyODA2IDkuMTMzOThDNC43NjU2OCA4LjQyOTc3IDYuMDUxOSA4LjA3NzY3IDcuNDg2NzMgOC4wNzc2N1pNOC40ODU5OCAyMC4zNDk1QzkuNjEzMzUgMjAuMzQ5NSAxMC41NDYgMTkuOTUwOCAxMS4yODM5IDE5LjE1MzRDMTIuMDIxOCAxOC4zNTYgMTIuMzkwOCAxNy4zNTY2IDEyLjM5MDggMTYuMTU1M0MxMi4zOTA4IDE0Ljk1NCAxMi4wMjE4IDEzLjk1NDcgMTEuMjgzOSAxMy4xNTczQzEwLjU0NiAxMi4zNTk5IDkuNjEzMzUgMTEuOTYxMiA4LjQ4NTk4IDExLjk2MTJDNy4zNTg2MiAxMS45NjEyIDYuNDI1OTggMTIuMzU5OSA1LjY4ODA3IDEzLjE1NzNDNC45NTAxNiAxMy45NTQ3IDQuNTgxMiAxNC45NTQgNC41ODEyIDE2LjE1NTNDNC41ODEyIDE3LjM1NjYgNC45NTAxNiAxOC4zNTYgNS42ODgwNyAxOS4xNTM0QzYuNDI1OTggMTkuOTUwOCA3LjM1ODYyIDIwLjM0OTUgOC40ODU5OCAyMC4zNDk1WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTE4LjkxOTEgMTkuNjUwNUMxOC45MTkxIDE4LjYxNDkgMTkuMjExMiAxNy42ODggMTkuNzk1NCAxNi44Njk5QzIwLjM4OTggMTYuMDUxOCAyMS4yMDQ2IDE1LjQwNDUgMjIuMjM5NyAxNC45MjgyQzIzLjI3NDggMTQuNDUxOCAyNC40NTg2IDE0LjIxMzYgMjUuNzkwOSAxNC4yMTM2QzI2LjIxMTEgMTQuMjEzNiAyNi42NTE4IDE0LjIzOTUgMjcuMTEzIDE0LjI5MTNDMjcuNTg0NCAxNC4zNDMgMjguMDU1OSAxNC40MTA0IDI4LjUyNzMgMTQuNDkzMkMyOC4xODkxIDEyLjgwNTIgMjYuOTc0NiAxMS45NjEyIDI0Ljg4MzkgMTEuOTYxMkMyMy42NDM4IDExLjk2MTIgMjIuMzk4NiAxMi40MzI0IDIxLjE0ODIgMTMuMzc0OEwxOS42MjYzIDkuNkMyMC42OTIxIDkuMDgyMiAyMS43NDI2IDguNjk5MDMgMjIuNzc3OCA4LjQ1MDQ5QzIzLjgxMjkgOC4yMDE5NCAyNC43OTY4IDguMDc3NjcgMjUuNzI5NCA4LjA3NzY3QzI3LjIxNTUgOC4wNzc2NyAyOC41MDE3IDguMzYyNDYgMjkuNTg4MSA4LjkzMjA0QzMwLjY4NDcgOS40OTEyNiAzMS41MzUzIDEwLjI4ODcgMzIuMTQgMTEuMzI0M0MzMi43NDQ3IDEyLjM0OTUgMzMuMDQ3IDEzLjU1NiAzMy4wNDcgMTQuOTQzN1YyMy45MjIzSDI5LjMyNjdMMjkuMDM0NiAyMi4yNjAyQzI4LjQ2MDcgMjIuODcxMiAyNy43NTg3IDIzLjM1MjcgMjYuOTI4NSAyMy43MDQ5QzI2LjEwODYgMjQuMDU3IDI1LjIwNjcgMjQuMjMzIDI0LjIyMjkgMjQuMjMzQzIyLjY2NSAyNC4yMzMgMjEuMzg5MSAyMy44MDg0IDIwLjM5NDkgMjIuOTU5MkMxOS40MTExIDIyLjExIDE4LjkxOTEgMjEuMDA3MSAxOC45MTkxIDE5LjY1MDVaTTIzLjM0NjYgMTguNjI1MkMyMy4zNDY2IDE5LjE0MyAyMy41NDEzIDE5LjU2MjUgMjMuOTMwOCAxOS44ODM1QzI0LjMzMDUgMjAuMTk0MiAyNC44NTMxIDIwLjM0OTUgMjUuNDk4OCAyMC4zNDk1QzI2LjM4MDIgMjAuMzQ5NSAyNy4xMTgxIDIwLjA4MDMgMjcuNzEyNiAxOS41NDE3QzI4LjMxNzIgMTkuMDAzMiAyOC42MTk2IDE4LjM0MDUgMjguNjE5NiAxNy41NTM0VjE3LjI0MjdDMjguMjQwNCAxNy4xMTg0IDI3LjgzMDQgMTcuMDIwMSAyNy4zODk3IDE2Ljk0NzZDMjYuOTU5MyAxNi44NzUxIDI2LjUzMzkgMTYuODM4OCAyNi4xMTM3IDE2LjgzODhDMjUuMjQyNiAxNi44Mzg4IDI0LjU2MTEgMTYuOTk0MiAyNC4wNjkxIDE3LjMwNDlDMjMuNTg3NCAxNy42MTU1IDIzLjM0NjYgMTguMDU1NyAyMy4zNDY2IDE4LjYyNTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNMzkuNzc1MiAwVjIzLjkyMjNIMzUuMzQ3OFYwSDM5Ljc3NTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNNDEuODc2MSAxOS42NTA1QzQxLjg3NjEgMTguNjE0OSA0Mi4xNjgyIDE3LjY4OCA0Mi43NTI0IDE2Ljg2OTlDNDMuMzQ2OCAxNi4wNTE4IDQ0LjE2MTYgMTUuNDA0NSA0NS4xOTY3IDE0LjkyODJDNDYuMjMxOSAxNC40NTE4IDQ3LjQxNTYgMTQuMjEzNiA0OC43NDc5IDE0LjIxMzZDNDkuMTY4MSAxNC4yMTM2IDQ5LjYwODggMTQuMjM5NSA1MC4wNyAxNC4yOTEzQzUwLjU0MTUgMTQuMzQzIDUxLjAxMjkgMTQuNDEwNCA1MS40ODQzIDE0LjQ5MzJDNTEuMTQ2MSAxMi44MDUyIDQ5LjkzMTcgMTEuOTYxMiA0Ny44NDA5IDExLjk2MTJDNDYuNjAwOCAxMS45NjEyIDQ1LjM1NTYgMTIuNDMyNCA0NC4xMDUyIDEzLjM3NDhMNDIuNTgzMyA5LjZDNDMuNjQ5MiA5LjA4MjIgNDQuNjk5NyA4LjY5OTAzIDQ1LjczNDggOC40NTA0OUM0Ni43Njk5IDguMjAxOTQgNDcuNzUzOCA4LjA3NzY3IDQ4LjY4NjQgOC4wNzc2N0M1MC4xNzI1IDguMDc3NjcgNTEuNDU4NyA4LjM2MjQ2IDUyLjU0NTEgOC45MzIwNEM1My42NDE3IDkuNDkxMjYgNTQuNDkyNCAxMC4yODg3IDU1LjA5NyAxMS4zMjQzQzU1LjcwMTcgMTIuMzQ5NSA1Ni4wMDQxIDEzLjU1NiA1Ni4wMDQxIDE0Ljk0MzdWMjMuOTIyM0g1Mi4yODM4TDUxLjk5MTcgMjIuMjYwMkM1MS40MTc3IDIyLjg3MTIgNTAuNzE1NyAyMy4zNTI3IDQ5Ljg4NTUgMjMuNzA0OUM0OS4wNjU2IDI0LjA1NyA0OC4xNjM3IDI0LjIzMyA0Ny4xNzk5IDI0LjIzM0M0NS42MjIxIDI0LjIzMyA0NC4zNDYxIDIzLjgwODQgNDMuMzUxOSAyMi45NTkyQzQyLjM2ODEgMjIuMTEgNDEuODc2MSAyMS4wMDcxIDQxLjg3NjEgMTkuNjUwNVpNNDYuMzAzNiAxOC42MjUyQzQ2LjMwMzYgMTkuMTQzIDQ2LjQ5ODMgMTkuNTYyNSA0Ni44ODc4IDE5Ljg4MzVDNDcuMjg3NSAyMC4xOTQyIDQ3LjgxMDIgMjAuMzQ5NSA0OC40NTU4IDIwLjM0OTVDNDkuMzM3MiAyMC4zNDk1IDUwLjA3NTEgMjAuMDgwMyA1MC42Njk2IDE5LjU0MTdDNTEuMjc0MiAxOS4wMDMyIDUxLjU3NjYgMTguMzQwNSA1MS41NzY2IDE3LjU1MzRWMTcuMjQyN0M1MS4xOTc0IDE3LjExODQgNTAuNzg3NCAxNy4wMjAxIDUwLjM0NjcgMTYuOTQ3NkM0OS45MTYzIDE2Ljg3NTEgNDkuNDkxIDE2LjgzODggNDkuMDcwOCAxNi44Mzg4QzQ4LjE5OTYgMTYuODM4OCA0Ny41MTgxIDE2Ljk5NDIgNDcuMDI2MSAxNy4zMDQ5QzQ2LjU0NDQgMTcuNjE1NSA0Ni4zMDM2IDE4LjA1NTcgNDYuMzAzNiAxOC42MjUyWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTU3LjIyODcgMTYuMTU1M0M1Ny4yMjg3IDE0LjYwMTkgNTcuNTUxNSAxMy4yMTk0IDU4LjE5NzIgMTIuMDA3OEM1OC44NDI4IDEwLjc4NTggNTkuNzI5NCA5LjgyNzgzIDYwLjg1NjcgOS4xMzM5OEM2MS45OTQzIDguNDI5NzcgNjMuMjgwNiA4LjA3NzY3IDY0LjcxNTQgOC4wNzc2N0M2NS42Nzg4IDguMDc3NjcgNjYuNTc1NSA4LjI0MzM3IDY3LjQwNTcgOC41NzQ3NkM2OC4yMzU4IDguODk1NzkgNjguOTczOCA5LjM0NjI4IDY5LjYxOTQgOS45MjYyMVYwLjYyMTM1OUg3NC4wNDY5VjIzLjkyMjNINjkuODY1NEw2OS43NTc4IDIyLjI0NDdDNjkuMTEyMSAyMi44NzY0IDY4LjM1ODggMjMuMzY4MyA2Ny40OTc5IDIzLjcyMDRDNjYuNjQ3MyAyNC4wNjIxIDY1LjcxOTggMjQuMjMzIDY0LjcxNTQgMjQuMjMzQzYzLjI4MDYgMjQuMjMzIDYxLjk5NDMgMjMuODg2MSA2MC44NTY3IDIzLjE5MjJDNTkuNzI5NCAyMi40ODggNTguODQyOCAyMS41MzAxIDU4LjE5NzIgMjAuMzE4NEM1Ny41NTE1IDE5LjA5NjQgNTcuMjI4NyAxNy43MDg3IDU3LjIyODcgMTYuMTU1M1pNNjEuODA5OSAxNi4xNTUzQzYxLjgwOTkgMTcuMzU2NiA2Mi4xNzg4IDE4LjM1NiA2Mi45MTY3IDE5LjE1MzRDNjMuNjU0NiAxOS45NTA4IDY0LjU4NzMgMjAuMzQ5NSA2NS43MTQ2IDIwLjM0OTVDNjYuODQyIDIwLjM0OTUgNjcuNzc0NiAxOS45NTA4IDY4LjUxMjYgMTkuMTUzNEM2OS4yNTA1IDE4LjM1NiA2OS42MTk0IDE3LjM1NjYgNjkuNjE5NCAxNi4xNTUzQzY5LjYxOTQgMTQuOTU0IDY5LjI1MDUgMTMuOTU0NyA2OC41MTI2IDEzLjE1NzNDNjcuNzc0NiAxMi4zNTk5IDY2Ljg0MiAxMS45NjEyIDY1LjcxNDYgMTEuOTYxMkM2NC41ODczIDExLjk2MTIgNjMuNjU0NiAxMi4zNTk5IDYyLjkxNjcgMTMuMTU3M0M2Mi4xNzg4IDEzLjk1NDcgNjEuODA5OSAxNC45NTQgNjEuODA5OSAxNi4xNTUzWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTc2LjYzOTcgMjMuOTIyM1Y4LjM4ODM1SDgwLjUxMzhMODAuNzI5IDEwLjYwOTdDODEuODQ2MSA4LjkyMTY4IDgzLjM4MzQgOC4wNzc2NyA4NS4zNDA5IDguMDc3NjdDODYuMDA3MSA4LjA3NzY3IDg2LjY5MzggOC4xODEyMyA4Ny40MDA5IDguMzg4MzVMODYuNzg2IDEyLjI1NjNDODYuMTkxNiAxMi4wNTk1IDg1LjYwNzQgMTEuOTYxMiA4NS4wMzM1IDExLjk2MTJDODMuODQ0NiAxMS45NjEyIDgyLjg4NjMgMTIuNDA2NSA4Mi4xNTg3IDEzLjI5NzFDODEuNDMxIDE0LjE3NzMgODEuMDY3MiAxNS40MzU2IDgxLjA2NzIgMTcuMDcxOFYyMy45MjIzSDc2LjYzOTdaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNODcuMTk1OCAzLjEwNjhDODcuMTk1OCAyLjM2MTE2IDg3LjQyMTMgMS43NjA1MiA4Ny44NzIzIDEuMzA0ODVDODguMzIzMiAwLjg0OTE5MSA4OC45MTc2IDAuNjIxMzU5IDg5LjY1NTUgMC42MjEzNTlDOTAuMzkzNSAwLjYyMTM1OSA5MC45ODc5IDAuODQ5MTkxIDkxLjQzODggMS4zMDQ4NUM5MS44ODk4IDEuNzYwNTIgOTIuMTE1MiAyLjM2MTE2IDkyLjExNTIgMy4xMDY4QzkyLjExNTIgMy44NTI0MyA5MS44ODk4IDQuNDUzMDcgOTEuNDM4OCA0LjkwODc0QzkwLjk4NzkgNS4zNjQ0IDkwLjM5MzUgNS41OTIyMyA4OS42NTU1IDUuNTkyMjNDODguOTE3NiA1LjU5MjIzIDg4LjMyMzIgNS4zNjQ0IDg3Ljg3MjMgNC45MDg3NEM4Ny40MjEzIDQuNDUzMDcgODcuMTk1OCAzLjg1MjQzIDg3LjE5NTggMy4xMDY4Wk04Ny40NDE4IDIzLjkyMjNWOC4zODgzNUg5MS44NjkzVjIzLjkyMjNIODcuNDQxOFonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGQ9J005OC42NDM2IDIzLjkyMjNIOTQuMjE2MVY4LjM4ODM1SDk4LjM5NzZMOTguNTA1MiAxMC4wMzVDOTkuNTkxNiA4LjczMDEgMTAxLjA2MiA4LjA3NzY3IDEwMi45MTcgOC4wNzc2N0MxMDUuMjg1IDguMDc3NjcgMTA2Ljk2IDkuMDk3NzMgMTA3Ljk0NCAxMS4xMzc5QzEwOC40NTcgMTAuMTU0IDEwOS4xNDkgOS4zOTgwNiAxMTAuMDIgOC44Njk5QzExMC44OTEgOC4zNDE3NSAxMTEuOTE2IDguMDc3NjcgMTEzLjA5NCA4LjA3NzY3QzExNC45NiA4LjA3NzY3IDExNi40MSA4Ljc0MDQ1IDExNy40NDUgMTAuMDY2QzExOC40OCAxMS4zODEyIDExOC45OTggMTMuMjE0MiAxMTguOTk4IDE1LjU2NVYyMy45MjIzSDExNC41N1YxNS41NjVDMTE0LjU3IDE0LjM2MzggMTE0LjI4OCAxMy40NjI4IDExMy43MjUgMTIuODYyMUMxMTMuMTcxIDEyLjI2MTUgMTEyLjUgMTEuOTYxMiAxMTEuNzExIDExLjk2MTJDMTEwLjkxMSAxMS45NjEyIDExMC4yMyAxMi4yNzE4IDEwOS42NjYgMTIuODkzMkMxMDkuMTAyIDEzLjUxNDYgMTA4LjgyMSAxNC40NDE0IDEwOC44MjEgMTUuNjczOFYyMy45MjIzSDEwNC4zOTNWMTUuNTY1QzEwNC4zOTMgMTQuMzYzOCAxMDQuMTExIDEzLjQ2MjggMTAzLjU0OCAxMi44NjIxQzEwMi45OTQgMTIuMjYxNSAxMDIuMzIzIDExLjk2MTIgMTAxLjUzNCAxMS45NjEyQzEwMC43MzQgMTEuOTYxMiAxMDAuMDUzIDEyLjI3MTggOTkuNDg5MSAxMi44OTMyQzk4LjkyNTQgMTMuNTE0NiA5OC42NDM2IDE0LjQ0MTQgOTguNjQzNiAxNS42NzM4VjIzLjkyMjNaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNMTIxLjI4MyAyMS43NDc2QzEyMS4yODMgMjEuMDAxOSAxMjEuNTA4IDIwLjQwMTMgMTIxLjk1OSAxOS45NDU2QzEyMi40MSAxOS40OSAxMjMuMDA1IDE5LjI2MjEgMTIzLjc0MyAxOS4yNjIxQzEyNC40ODEgMTkuMjYyMSAxMjUuMDc1IDE5LjQ5IDEyNS41MjYgMTkuOTQ1NkMxMjUuOTc3IDIwLjQwMTMgMTI2LjIwMiAyMS4wMDE5IDEyNi4yMDIgMjEuNzQ3NkMxMjYuMjAyIDIyLjQ5MzIgMTI1Ljk3NyAyMy4wOTM5IDEyNS41MjYgMjMuNTQ5NUMxMjUuMDc1IDI0LjAwNTIgMTI0LjQ4MSAyNC4yMzMgMTIzLjc0MyAyNC4yMzNDMTIzLjAwNSAyNC4yMzMgMTIyLjQxIDI0LjAwNTIgMTIxLjk1OSAyMy41NDk1QzEyMS41MDggMjMuMDkzOSAxMjEuMjgzIDIyLjQ5MzIgMTIxLjI4MyAyMS43NDc2WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTQ4LjgzNCA0MFYyOS43NDYxSDU1LjI0NjFWMzEuNTg1SDUwLjkzOTVWMzMuOTE2SDU0Ljk2NThWMzUuNzYxN0g1MC45Mzk1VjQwSDQ4LjgzNFpNNjMuMTQxNiAzOS4yMzQ0QzYyLjI5MzkgMzkuODM1OSA2MS4zNjY1IDQwLjEzNjcgNjAuMzU5NCA0MC4xMzY3QzU5LjYxMiA0MC4xMzY3IDU4LjkzOTggMzkuOTc3MiA1OC4zNDI4IDM5LjY1ODJDNTcuNzUwMyAzOS4zMzQ2IDU3LjI4MDkgMzguODk3MSA1Ni45MzQ2IDM4LjM0NTdDNTYuNTkyOCAzNy43OTQzIDU2LjQyMTkgMzcuMTcyMiA1Ni40MjE5IDM2LjQ3OTVDNTYuNDIxOSAzNS44MTg3IDU2LjU3NjggMzUuMjI4NSA1Ni44ODY3IDM0LjcwOUM1Ny4yMDEyIDM0LjE4OTUgNTcuNjI3MyAzMy43NzkzIDU4LjE2NSAzMy40Nzg1QzU4LjcwMjggMzMuMTc3NyA1OS4zMTM1IDMzLjAyNzMgNTkuOTk3MSAzMy4wMjczQzYwLjcwMzUgMzMuMDI3MyA2MS4zMjU1IDMzLjE5MzcgNjEuODYzMyAzMy41MjY0QzYyLjQwMSAzMy44NTQ1IDYyLjgyMDMgMzQuMzE0OCA2My4xMjExIDM0LjkwNzJDNjMuNDIxOSAzNS40OTUxIDYzLjU3MjMgMzYuMTc2NCA2My41NzIzIDM2Ljk1MTJWMzcuMTY5OUg1OC41MzQyQzU4LjYxNjIgMzcuNDM4OCA1OC43NDg0IDM3LjY3NTggNTguOTMwNyAzNy44ODA5QzU5LjExNzUgMzguMDgxNCA1OS4zNDk5IDM4LjI0MDkgNTkuNjI3OSAzOC4zNTk0QzU5LjkxMDUgMzguNDc3OSA2MC4yMzE4IDM4LjUzNzEgNjAuNTkxOCAzOC41MzcxQzYxLjI4OTEgMzguNTM3MSA2MS45Mzg1IDM4LjMxMTUgNjIuNTQgMzcuODYwNEw2My4xNDE2IDM5LjIzNDRaTTU4LjQ0NTMgMzYuMTcxOUg2MS43NjA3QzYxLjcyNDMgMzUuODc1NyA2MS42MzA5IDM1LjYxNTkgNjEuNDgwNSAzNS4zOTI2QzYxLjMzNDYgMzUuMTY0NyA2MS4xNDEgMzQuOTg3IDYwLjg5OTQgMzQuODU5NEM2MC42NjI0IDM0LjczMTggNjAuMzk1OCAzNC42NjggNjAuMDk5NiAzNC42NjhDNTkuNzk4OCAzNC42NjggNTkuNTI5OSAzNC43MzQgNTkuMjkzIDM0Ljg2NjJDNTkuMDYwNSAzNC45OTg0IDU4Ljg3MTQgMzUuMTc2MSA1OC43MjU2IDM1LjM5OTRDNTguNTc5OCAzNS42MjI3IDU4LjQ4NjMgMzUuODgwMiA1OC40NDUzIDM2LjE3MTlaTTcxLjExMjMgMzkuMjM0NEM3MC4yNjQ2IDM5LjgzNTkgNjkuMzM3MiA0MC4xMzY3IDY4LjMzMDEgNDAuMTM2N0M2Ny41ODI3IDQwLjEzNjcgNjYuOTEwNSAzOS45NzcyIDY2LjMxMzUgMzkuNjU4MkM2NS43MjEgMzkuMzM0NiA2NS4yNTE2IDM4Ljg5NzEgNjQuOTA1MyAzOC4zNDU3QzY0LjU2MzUgMzcuNzk0MyA2NC4zOTI2IDM3LjE3MjIgNjQuMzkyNiAzNi40Nzk1QzY0LjM5MjYgMzUuODE4NyA2NC41NDc1IDM1LjIyODUgNjQuODU3NCAzNC43MDlDNjUuMTcxOSAzNC4xODk1IDY1LjU5OCAzMy43NzkzIDY2LjEzNTcgMzMuNDc4NUM2Ni42NzM1IDMzLjE3NzcgNjcuMjg0MiAzMy4wMjczIDY3Ljk2NzggMzMuMDI3M0M2OC42NzQyIDMzLjAyNzMgNjkuMjk2MiAzMy4xOTM3IDY5LjgzNCAzMy41MjY0QzcwLjM3MTcgMzMuODU0NSA3MC43OTEgMzQuMzE0OCA3MS4wOTE4IDM0LjkwNzJDNzEuMzkyNiAzNS40OTUxIDcxLjU0MyAzNi4xNzY0IDcxLjU0MyAzNi45NTEyVjM3LjE2OTlINjYuNTA0OUM2Ni41ODY5IDM3LjQzODggNjYuNzE5MSAzNy42NzU4IDY2LjkwMTQgMzcuODgwOUM2Ny4wODgyIDM4LjA4MTQgNjcuMzIwNiAzOC4yNDA5IDY3LjU5ODYgMzguMzU5NEM2Ny44ODEyIDM4LjQ3NzkgNjguMjAyNSAzOC41MzcxIDY4LjU2MjUgMzguNTM3MUM2OS4yNTk4IDM4LjUzNzEgNjkuOTA5MiAzOC4zMTE1IDcwLjUxMDcgMzcuODYwNEw3MS4xMTIzIDM5LjIzNDRaTTY2LjQxNiAzNi4xNzE5SDY5LjczMTRDNjkuNjk1IDM1Ljg3NTcgNjkuNjAxNiAzNS42MTU5IDY5LjQ1MTIgMzUuMzkyNkM2OS4zMDUzIDM1LjE2NDcgNjkuMTExNyAzNC45ODcgNjguODcwMSAzNC44NTk0QzY4LjYzMzEgMzQuNzMxOCA2OC4zNjY1IDM0LjY2OCA2OC4wNzAzIDM0LjY2OEM2Ny43Njk1IDM0LjY2OCA2Ny41MDA3IDM0LjczNCA2Ny4yNjM3IDM0Ljg2NjJDNjcuMDMxMiAzNC45OTg0IDY2Ljg0MjEgMzUuMTc2MSA2Ni42OTYzIDM1LjM5OTRDNjYuNTUwNSAzNS42MjI3IDY2LjQ1NyAzNS44ODAyIDY2LjQxNiAzNi4xNzE5Wk03OS44MjgxIDQwSDc4LjEwNTVMNzguMDAyOSAzOS4wNzAzQzc3LjcxMTMgMzkuMzk4NCA3Ny4zNjA0IDM5LjY1ODIgNzYuOTUwMiAzOS44NDk2Qzc2LjU0NDYgNDAuMDQxIDc2LjEwMDMgNDAuMTM2NyA3NS42MTcyIDQwLjEzNjdDNzQuOTkyOCA0MC4xMzY3IDc0LjQzNDYgMzkuOTg0IDczLjk0MjQgMzkuNjc4N0M3My40NTQ4IDM5LjM2ODggNzMuMDY5NyAzOC45NDUgNzIuNzg3MSAzOC40MDcyQzcyLjUwNDYgMzcuODY5NSA3Mi4zNjMzIDM3LjI2MTEgNzIuMzYzMyAzNi41ODJDNzIuMzYzMyAzNS44OTg0IDcyLjUwNDYgMzUuMjkgNzIuNzg3MSAzNC43NTY4QzczLjA2OTcgMzQuMjE5MSA3My40NTQ4IDMzLjc5NzUgNzMuOTQyNCAzMy40OTIyQzc0LjQzNDYgMzMuMTgyMyA3NC45OTI4IDMzLjAyNzMgNzUuNjE3MiAzMy4wMjczQzc2LjA2MzggMzMuMDI3MyA3Ni40Nzg1IDMzLjEwOTQgNzYuODYxMyAzMy4yNzM0Qzc3LjI0ODcgMzMuNDMyOSA3Ny41ODM3IDMzLjY1NjIgNzcuODY2MiAzMy45NDM0VjI5Ljc0NjFINzkuODI4MVY0MFpNNzYuMTIzIDM4LjM3OTlDNzYuNDQ2NiAzOC4zNzk5IDc2LjczODMgMzguMzA3IDc2Ljk5OCAzOC4xNjExQzc3LjI2MjQgMzguMDE1MyA3Ny40NzIgMzcuODE3MSA3Ny42MjcgMzcuNTY2NEM3Ny43ODY1IDM3LjMxMTIgNzcuODY2MiAzNy4wMjE4IDc3Ljg2NjIgMzYuNjk4MlYzNi40NTIxQzc3Ljg2NjIgMzYuMTI4NiA3Ny43ODY1IDM1Ljg0MTUgNzcuNjI3IDM1LjU5MDhDNzcuNDcyIDM1LjM0MDIgNzcuMjYyNCAzNS4xNDQyIDc2Ljk5OCAzNS4wMDI5Qzc2LjczODMgMzQuODU3MSA3Ni40NDY2IDM0Ljc4NDIgNzYuMTIzIDM0Ljc4NDJDNzUuNzkwNCAzNC43ODQyIDc1LjQ5MTkgMzQuODYxNyA3NS4yMjc1IDM1LjAxNjZDNzQuOTYzMiAzNS4xNzE1IDc0Ljc1MzYgMzUuMzg1NyA3NC41OTg2IDM1LjY1OTJDNzQuNDQ4MiAzNS45MjgxIDc0LjM3MyAzNi4yMzU3IDc0LjM3MyAzNi41ODJDNzQuMzczIDM2LjkyMzggNzQuNDQ4MiAzNy4yMzE0IDc0LjU5ODYgMzcuNTA0OUM3NC43NTM2IDM3Ljc3MzggNzQuOTYzMiAzNy45ODggNzUuMjI3NSAzOC4xNDc1Qzc1LjQ5MTkgMzguMzAyNCA3NS43OTA0IDM4LjM3OTkgNzYuMTIzIDM4LjM3OTlaTTgzLjIxODggNDBIODEuNDk2MVYyOS43NDYxSDgzLjQ1OFYzMy45NDM0QzgzLjc0NTEgMzMuNjU2MiA4NC4wNzc4IDMzLjQzMjkgODQuNDU2MSAzMy4yNzM0Qzg0LjgzODkgMzMuMTA5NCA4NS4yNTM2IDMzLjAyNzMgODUuNzAwMiAzMy4wMjczQzg2LjMyOTEgMzMuMDI3MyA4Ni44ODc0IDMzLjE4MjMgODcuMzc1IDMzLjQ5MjJDODcuODYyNiAzMy43OTc1IDg4LjI0NzcgMzQuMjE5MSA4OC41MzAzIDM0Ljc1NjhDODguODEyOCAzNS4yOSA4OC45NTQxIDM1Ljg5ODQgODguOTU0MSAzNi41ODJDODguOTU0MSAzNy4yNjExIDg4LjgxMjggMzcuODY5NSA4OC41MzAzIDM4LjQwNzJDODguMjQ3NyAzOC45NDUgODcuODYyNiAzOS4zNjg4IDg3LjM3NSAzOS42Nzg3Qzg2Ljg4NzQgMzkuOTg0IDg2LjMyOTEgNDAuMTM2NyA4NS43MDAyIDQwLjEzNjdDODUuMjE3MSA0MC4xMzY3IDg0Ljc3MDUgNDAuMDQzMyA4NC4zNjA0IDM5Ljg1NjRDODMuOTU0OCAzOS42NjUgODMuNjA2MSAzOS40MDMgODMuMzE0NSAzOS4wNzAzTDgzLjIxODggNDBaTTg1LjIwMTIgMzguMzc5OUM4NS41MzM5IDM4LjM3OTkgODUuODMwMSAzOC4zMDI0IDg2LjA4OTggMzguMTQ3NUM4Ni4zNTQyIDM3Ljk5MjUgODYuNTYxNSAzNy43NzgzIDg2LjcxMTkgMzcuNTA0OUM4Ni44NjY5IDM3LjIzMTQgODYuOTQ0MyAzNi45MjE1IDg2Ljk0NDMgMzYuNTc1MkM4Ni45NDQzIDM2LjIzMzQgODYuODY2OSAzNS45MjgxIDg2LjcxMTkgMzUuNjU5MkM4Ni41NjE1IDM1LjM4NTcgODYuMzU0MiAzNS4xNzE1IDg2LjA4OTggMzUuMDE2NkM4NS44MzAxIDM0Ljg2MTcgODUuNTMzOSAzNC43ODQyIDg1LjIwMTIgMzQuNzg0MkM4NC44ODY3IDM0Ljc4NDIgODQuNTk5NiAzNC44NTQ4IDg0LjMzOTggMzQuOTk2MUM4NC4wODQ2IDM1LjEzNzQgODMuODc5NiAzNS4zMzExIDgzLjcyNDYgMzUuNTc3MUM4My41Njk3IDM1LjgyMzIgODMuNDgwOCAzNi4xMDU4IDgzLjQ1OCAzNi40MjQ4VjM2LjcyNTZDODMuNDgwOCAzNy4wNDQ2IDgzLjU2OTcgMzcuMzI5NCA4My43MjQ2IDM3LjU4MDFDODMuODc5NiAzNy44MjYyIDg0LjA4NDYgMzguMDIyMSA4NC4zMzk4IDM4LjE2OEM4NC41OTUxIDM4LjMwOTIgODQuODgyMiAzOC4zNzk5IDg1LjIwMTIgMzguMzc5OVpNOTYuMzAyNyA0MEg5NC41OTM4TDk0LjQ5MTIgMzkuMTg2NUM5NC4yNDA2IDM5LjQ4NzMgOTMuOTMwNyAzOS43MjIgOTMuNTYxNSAzOS44OTA2QzkzLjE5MjQgNDAuMDU0NyA5Mi43ODY4IDQwLjEzNjcgOTIuMzQ0NyA0MC4xMzY3QzkxLjg2NjIgNDAuMTM2NyA5MS40NDAxIDQwLjA0NTYgOTEuMDY2NCAzOS44NjMzQzkwLjY5MjcgMzkuNjc2NCA5MC4zOTg4IDM5LjQyMTIgOTAuMTg0NiAzOS4wOTc3Qzg5Ljk3MDQgMzguNzY5NSA4OS44NjMzIDM4LjM5ODEgODkuODYzMyAzNy45ODM0Qzg5Ljg2MzMgMzcuNTQ1OSA4OS45Nzk1IDM3LjE2MDggOTAuMjExOSAzNi44MjgxQzkwLjQ0NDMgMzYuNDk1NCA5MC43NjMzIDM2LjIzNTcgOTEuMTY4OSAzNi4wNDg4QzkxLjU3OTEgMzUuODU3NCA5Mi4wNDM5IDM1Ljc2MTcgOTIuNTYzNSAzNS43NjE3QzkyLjg2ODggMzUuNzYxNyA5My4xNzQyIDM1Ljc5NTkgOTMuNDc5NSAzNS44NjQzQzkzLjc4OTQgMzUuOTMyNiA5NC4wNzY1IDM2LjAyODMgOTQuMzQwOCAzNi4xNTE0VjM1Ljk3MzZDOTQuMzQwOCAzNS43MDAyIDk0LjI2MzMgMzUuNDY1NSA5NC4xMDg0IDM1LjI2OTVDOTMuOTU4IDM1LjA2OSA5My43NDg0IDM0LjkxNDEgOTMuNDc5NSAzNC44MDQ3QzkzLjIxNTIgMzQuNjk1MyA5Mi45MTg5IDM0LjY0MDYgOTIuNTkwOCAzNC42NDA2QzkyLjI3NjQgMzQuNjQwNiA5MS45NjQyIDM0LjY5MDggOTEuNjU0MyAzNC43OTFDOTEuMzQ5IDM0Ljg5MTMgOTEuMDY2NCAzNS4wNDE3IDkwLjgwNjYgMzUuMjQyMkw5MC4yNzM0IDMzLjc0NTFDOTAuNzMzNyAzMy41MDgxIDkxLjE5ODYgMzMuMzMwNCA5MS42NjggMzMuMjExOUM5Mi4xNDE5IDMzLjA4ODkgOTIuNTk5OSAzMy4wMjczIDkzLjA0MiAzMy4wMjczQzkzLjcwNzQgMzMuMDI3MyA5NC4yODM5IDMzLjE1OTUgOTQuNzcxNSAzMy40MjM4Qzk1LjI1OTEgMzMuNjgzNiA5NS42MzUxIDM0LjA1MjcgOTUuODk5NCAzNC41MzEyQzk2LjE2ODMgMzUuMDA1MiA5Ni4zMDI3IDM1LjU2OCA5Ni4zMDI3IDM2LjIxOTdWNDBaTTkyLjc3NTQgMzguNjI2QzkzLjAzNTIgMzguNjI2IDkzLjI4MzUgMzguNTY5IDkzLjUyMDUgMzguNDU1MUM5My43NTc1IDM4LjM0MTEgOTMuOTQ4OSAzOC4xODYyIDk0LjA5NDcgMzcuOTkwMkM5NC4yNDUxIDM3Ljc5NDMgOTQuMzI0OSAzNy41Nzc4IDk0LjMzNCAzNy4zNDA4VjM3LjI5M0M5NC4xMzM1IDM3LjE1NjIgOTMuOTEwMiAzNy4wNTE0IDkzLjY2NDEgMzYuOTc4NUM5My40MjI1IDM2LjkwMSA5My4xNzY0IDM2Ljg2MjMgOTIuOTI1OCAzNi44NjIzQzkyLjU1MjEgMzYuODYyMyA5Mi4yNDY3IDM2Ljk0NDMgOTIuMDA5OCAzNy4xMDg0QzkxLjc3MjggMzcuMjcyNSA5MS42NTQzIDM3LjQ4NDQgOTEuNjU0MyAzNy43NDQxQzkxLjY1NDMgMzcuOTEyOCA5MS43MDIxIDM4LjA2NTQgOTEuNzk3OSAzOC4yMDIxQzkxLjg5ODEgMzguMzM0MyA5Mi4wMzI2IDM4LjQzOTEgOTIuMjAxMiAzOC41MTY2QzkyLjM2OTggMzguNTg5NSA5Mi41NjEyIDM4LjYyNiA5Mi43NzU0IDM4LjYyNlpNMTAzLjg5MSAzOC45MTMxQzEwMy41NTggMzkuMjk1OSAxMDMuMTUgMzkuNTk2NyAxMDIuNjY3IDM5LjgxNTRDMTAyLjE4NCA0MC4wMjk2IDEwMS42NTMgNDAuMTM2NyAxMDEuMDc0IDQwLjEzNjdDMTAwLjM3MiA0MC4xMzY3IDk5Ljc0MzUgMzkuOTg0IDk5LjE4NzUgMzkuNjc4N0M5OC42MzYxIDM5LjM2ODggOTguMjAwOCAzOC45NDUgOTcuODgxOCAzOC40MDcyQzk3LjU2NzQgMzcuODY5NSA5Ny40MTAyIDM3LjI2MTEgOTcuNDEwMiAzNi41ODJDOTcuNDEwMiAzNS44OTg0IDk3LjU2NzQgMzUuMjkgOTcuODgxOCAzNC43NTY4Qzk4LjIwMDggMzQuMjE5MSA5OC42MzYxIDMzLjc5NzUgOTkuMTg3NSAzMy40OTIyQzk5Ljc0MzUgMzMuMTgyMyAxMDAuMzcyIDMzLjAyNzMgMTAxLjA3NCAzMy4wMjczQzEwMS42NDggMzMuMDI3MyAxMDIuMTc3IDMzLjEzNDQgMTAyLjY2IDMzLjM0ODZDMTAzLjE0MyAzMy41NjI4IDEwMy41NTEgMzMuODU5IDEwMy44ODQgMzQuMjM3M0wxMDIuNzI5IDM1LjQ0NzNDMTAyLjU1MSAzNS4yNDIyIDEwMi4zMjUgMzUuMDgyNyAxMDIuMDUyIDM0Ljk2ODhDMTAxLjc4MyAzNC44NTAzIDEwMS41IDM0Ljc5MSAxMDEuMjA0IDM0Ljc5MUMxMDAuODYyIDM0Ljc5MSAxMDAuNTU3IDM0Ljg2ODUgMTAwLjI4OCAzNS4wMjM0QzEwMC4wMTkgMzUuMTczOCA5OS44MDczIDM1LjM4MzUgOTkuNjUyMyAzNS42NTIzQzk5LjQ5NzQgMzUuOTE2NyA5OS40MTk5IDM2LjIyMiA5OS40MTk5IDM2LjU2ODRDOTkuNDE5OSAzNi45MTkzIDk5LjQ5NzQgMzcuMjMxNCA5OS42NTIzIDM3LjUwNDlDOTkuODA3MyAzNy43NzgzIDEwMC4wMTkgMzcuOTkyNSAxMDAuMjg4IDM4LjE0NzVDMTAwLjU1NyAzOC4yOTc5IDEwMC44NjIgMzguMzczIDEwMS4yMDQgMzguMzczQzEwMS41IDM4LjM3MyAxMDEuNzg1IDM4LjMxNjEgMTAyLjA1OSAzOC4yMDIxQzEwMi4zMzIgMzguMDgzNyAxMDIuNTU1IDM3LjkyMTkgMTAyLjcyOSAzNy43MTY4TDEwMy44OTEgMzguOTEzMVpNMTA3LjA1NiA0MEgxMDUuMDk0VjI5Ljc0NjFIMTA3LjA1NlYzNi4wNDg4TDEwNy43MjYgMzUuMjQyMkwxMDkuNjk0IDMzLjE2NDFIMTEyLjE0OEwxMDkuMjU3IDM2LjIwNjFMMTEyLjQ5IDQwSDEwOS45NTRMMTA3LjkxIDM3LjQzNjVMMTA3LjA1NiAzOC4yMTU4VjQwWicgZmlsbD0nJTIzMDA4NUZGJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlTWUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdXNlclwiO1xuaW1wb3J0IHsgQ2xvc2VCdXR0b24gfSBmcm9tIFwiLi4vYXRvbXMvYnV0dG9ucy9DbG9zZUJ1dHRvblwiO1xuaW1wb3J0IHsgQ29sbGFwc2VCdXR0b24gfSBmcm9tIFwiLi4vYXRvbXMvYnV0dG9ucy9Db2xsYXBzZUJ1dHRvblwiO1xuaW1wb3J0IHsgQ29ubmVjdGVkUGFuZWwgfSBmcm9tIFwiLi9Db25uZWN0ZWRQYW5lbFwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvblBhbmVsIH0gZnJvbSBcIi4vQ29ubmVjdGlvblBhbmVsXCI7XG5pbXBvcnQgTG9nb0ZlZWRiYWNrTGlnaHQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29ucy9sb2dvLWZlZWRiYWNrLWxpZ2h0LnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgU2lkZUJhciA9ICgpID0+IHtcbiAgY29uc3QgW2lzQ29sbGFwc2VkLCBzZXRJc0NvbGxhcHNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgZGF0YTogbWUgfSA9IHVzZU1lKCk7XG5cbiAgY29uc3QgeyBpc09wZW4sIGNsb3NlRmVlZGJhY2tPdmVybGF5IH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBjb25zdCBpc0Nvbm5lY3RlZCA9ICEhbWU7XG5cbiAgaWYgKCFpc09wZW4pIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgaWQ9XCJmZWVkYmFjay1zaWRlYmFyXCJcbiAgICAgIGNsYXNzTmFtZT17YGZpeGVkIHRvcC0wIHRyYW5zaXRpb24tYWxsIHctWzMyMHB4XSBoLXNjcmVlbiB6LVsxMDAwMDAwMF0gYmctZ3JheS1mZWVkYmFjay04MDAgdGV4dC13aGl0ZSBweC0zIHB5LTQgJHtcbiAgICAgICAgaXNDb2xsYXBzZWQgPyBcInJpZ2h0LVstMzIwcHhdXCIgOiBcInJpZ2h0LTBcIlxuICAgICAgfWB9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCB3LWZ1bGwgIGl0ZW1zLWNlbnRlciBmbGV4LWNvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8aW1nIHNyYz17TG9nb0ZlZWRiYWNrTGlnaHR9IGNsYXNzTmFtZT1cInotMTBcIiAvPlxuICAgICAgICAgIDxDbG9zZUJ1dHRvbiBvbkNsaWNrPXtjbG9zZUZlZWRiYWNrT3ZlcmxheX0gc2l6ZT1cImxhcmdlXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtpc0Nvbm5lY3RlZCA/IDxDb25uZWN0ZWRQYW5lbCAvPiA6IDxDb25uZWN0aW9uUGFuZWwgLz59XG4gICAgICAgIDxDb2xsYXBzZUJ1dHRvblxuICAgICAgICAgIGlzQ29sbGFwc2VkPXtpc0NvbGxhcHNlZH1cbiAgICAgICAgICBzZXRJc0NvbGxhcHNlZD17c2V0SXNDb2xsYXBzZWR9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4sXG4gICAgZG9jdW1lbnQuYm9keVxuICApO1xufTtcbiIsImltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT3BlbkZlZWRiYWNrQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hdG9tcy9idXR0b25zL09wZW5GZWVkYmFja0J1dHRvblwiO1xuaW1wb3J0IHsgRmVlZGJhY2tQaW5zIH0gZnJvbSBcIi4vY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2dyb3VwL0ZlZWRiYWNrUGluc1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tJbnB1dCB9IGZyb20gXCIuL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9pdGVtL0ZlZWRiYWNrSW5wdXRcIjtcbmltcG9ydCB7IFNpZGVCYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL29yZ2FuaXNtcy9TaWRlQmFyXCI7XG5pbXBvcnQgeyBGZWVkYmFja1Byb3ZpZGVyIH0gZnJvbSBcIi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgXCIuL2luZGV4LmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWVkYmFja1Jvb3RQcm9wcyB9IGZyb20gXCIuLi9pbmRleC5kLnRzXCI7XG5cbmNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbmZ1bmN0aW9uIEZlZWRiYWNrUm9vdChwcm9wczogRmVlZGJhY2tSb290UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxGZWVkYmFja1Byb3ZpZGVyIHsuLi5wcm9wc30+XG4gICAgICAgICAgPEZlZWRiYWNrSW5wdXQgLz5cbiAgICAgICAgICA8U2lkZUJhciAvPlxuICAgICAgICAgIDxPcGVuRmVlZGJhY2tCdXR0b24gLz5cbiAgICAgICAgICA8RmVlZGJhY2tQaW5zIC8+XG4gICAgICAgIDwvRmVlZGJhY2tQcm92aWRlcj5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmVlZGJhY2tSb290O1xuIl0sIm5hbWVzIjpbIlN1YnNjcmliYWJsZSIsImNvbnN0cnVjdG9yIiwibGlzdGVuZXJzIiwiU2V0Iiwic3Vic2NyaWJlIiwiYmluZCIsImxpc3RlbmVyIiwiYWRkIiwib25TdWJzY3JpYmUiLCJkZWxldGUiLCJvblVuc3Vic2NyaWJlIiwiaGFzTGlzdGVuZXJzIiwic2l6ZSIsImdsb2JhbCIsInNlbGYiLCJ3aW5kb3ciLCJlbnYiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIm1vek5vdyIsIm1zTm93Iiwib05vdyIsIndlYmtpdE5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiYnJvd3NlciQxIiwibmV4dFRpY2siLCJpc1NlcnZlciIsImdsb2JhbFRoaXMiLCJub29wIiwiZnVuY3Rpb25hbFVwZGF0ZSIsInVwZGF0ZXIiLCJpbnB1dCIsImlzVmFsaWRUaW1lb3V0IiwidmFsdWUiLCJJbmZpbml0eSIsInRpbWVVbnRpbFN0YWxlIiwidXBkYXRlZEF0Iiwic3RhbGVUaW1lIiwiTWF0aCIsIm1heCIsInJlc29sdmVTdGFsZVRpbWUiLCJxdWVyeSIsInJlc29sdmVFbmFibGVkIiwiZW5hYmxlZCIsIm1hdGNoUXVlcnkiLCJmaWx0ZXJzIiwidHlwZSIsImV4YWN0IiwiZmV0Y2hTdGF0dXMiLCJwcmVkaWNhdGUiLCJxdWVyeUtleSIsInN0YWxlIiwicXVlcnlIYXNoIiwiaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIiwib3B0aW9ucyIsInBhcnRpYWxNYXRjaEtleSIsImlzQWN0aXZlIiwiaXNTdGFsZSIsInN0YXRlIiwibWF0Y2hNdXRhdGlvbiIsIm11dGF0aW9uIiwic3RhdHVzIiwibXV0YXRpb25LZXkiLCJoYXNoS2V5IiwiaGFzaEZuIiwicXVlcnlLZXlIYXNoRm4iLCJKU09OIiwic3RyaW5naWZ5IiwiXyIsInZhbCIsImlzUGxhaW5PYmplY3QiLCJPYmplY3QiLCJrZXlzIiwic29ydCIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsImEiLCJiIiwic29tZSIsInJlcGxhY2VFcXVhbERlZXAiLCJhcnJheSIsImlzUGxhaW5BcnJheSIsImFJdGVtcyIsImFTaXplIiwibGVuZ3RoIiwiYkl0ZW1zIiwiYlNpemUiLCJjb3B5IiwiZXF1YWxJdGVtcyIsImkiLCJpbmNsdWRlcyIsInNoYWxsb3dFcXVhbE9iamVjdHMiLCJBcnJheSIsImlzQXJyYXkiLCJvIiwiaGFzT2JqZWN0UHJvdG90eXBlIiwiY3RvciIsInByb3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmciLCJjYWxsIiwic2xlZXAiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVwbGFjZURhdGEiLCJwcmV2RGF0YSIsImRhdGEiLCJzdHJ1Y3R1cmFsU2hhcmluZyIsInByb2Nlc3MiLCJOT0RFX0VOViIsImVycm9yIiwiY29uc29sZSIsImFkZFRvRW5kIiwiaXRlbXMiLCJpdGVtIiwibmV3SXRlbXMiLCJzbGljZSIsImFkZFRvU3RhcnQiLCJza2lwVG9rZW4iLCJTeW1ib2wiLCJlbnN1cmVRdWVyeUZuIiwiZmV0Y2hPcHRpb25zIiwicXVlcnlGbiIsImluaXRpYWxQcm9taXNlIiwicmVqZWN0IiwiRXJyb3IiLCJGb2N1c01hbmFnZXIiLCJvbkZvY3VzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzZXRFdmVudExpc3RlbmVyIiwic2V0dXAiLCJmb2N1c2VkIiwic2V0Rm9jdXNlZCIsImNoYW5nZWQiLCJpc0ZvY3VzZWQiLCJmb3JFYWNoIiwiZG9jdW1lbnQiLCJ2aXNpYmlsaXR5U3RhdGUiLCJmb2N1c01hbmFnZXIiLCJPbmxpbmVNYW5hZ2VyIiwib25PbmxpbmUiLCJvbmxpbmVMaXN0ZW5lciIsIm9mZmxpbmVMaXN0ZW5lciIsInNldE9ubGluZSIsIm9ubGluZSIsImlzT25saW5lIiwib25saW5lTWFuYWdlciIsInBlbmRpbmdUaGVuYWJsZSIsInRoZW5hYmxlIiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwiY2F0Y2giLCJmaW5hbGl6ZSIsImFzc2lnbiIsInJlYXNvbiIsImRlZmF1bHRSZXRyeURlbGF5IiwiZmFpbHVyZUNvdW50IiwibWluIiwiY2FuRmV0Y2giLCJuZXR3b3JrTW9kZSIsIkNhbmNlbGxlZEVycm9yIiwicmV2ZXJ0Iiwic2lsZW50IiwiaXNDYW5jZWxsZWRFcnJvciIsImNyZWF0ZVJldHJ5ZXIiLCJjb25maWciLCJpc1JldHJ5Q2FuY2VsbGVkIiwiaXNSZXNvbHZlZCIsImNvbnRpbnVlRm4iLCJjYW5jZWwiLCJjYW5jZWxPcHRpb25zIiwiYWJvcnQiLCJjYW5jZWxSZXRyeSIsImNvbnRpbnVlUmV0cnkiLCJjYW5Db250aW51ZSIsImNhblJ1biIsImNhblN0YXJ0Iiwib25TdWNjZXNzIiwib25FcnJvciIsInBhdXNlIiwiY29udGludWVSZXNvbHZlIiwib25QYXVzZSIsInRoZW4iLCJvbkNvbnRpbnVlIiwicnVuIiwicHJvbWlzZU9yVmFsdWUiLCJmbiIsInJldHJ5IiwicmV0cnlEZWxheSIsImRlbGF5Iiwic2hvdWxkUmV0cnkiLCJvbkZhaWwiLCJwcm9taXNlIiwiY29udGludWUiLCJzdGFydCIsImNyZWF0ZU5vdGlmeU1hbmFnZXIiLCJxdWV1ZSIsInRyYW5zYWN0aW9ucyIsIm5vdGlmeUZuIiwiY2FsbGJhY2siLCJiYXRjaE5vdGlmeUZuIiwic2NoZWR1bGVGbiIsImNiIiwic2NoZWR1bGUiLCJwdXNoIiwiZmx1c2giLCJvcmlnaW5hbFF1ZXVlIiwiYmF0Y2giLCJiYXRjaENhbGxzIiwiYXJncyIsInNldE5vdGlmeUZ1bmN0aW9uIiwic2V0QmF0Y2hOb3RpZnlGdW5jdGlvbiIsInNldFNjaGVkdWxlciIsIm5vdGlmeU1hbmFnZXIiLCJSZW1vdmFibGUiLCJkZXN0cm95IiwiY2xlYXJHY1RpbWVvdXQiLCJzY2hlZHVsZUdjIiwiZ2NUaW1lIiwib3B0aW9uYWxSZW1vdmUiLCJ1cGRhdGVHY1RpbWUiLCJuZXdHY1RpbWUiLCJjbGVhclRpbWVvdXQiLCJRdWVyeSIsImRlZmF1bHRPcHRpb25zIiwic2V0T3B0aW9ucyIsIm9ic2VydmVycyIsImNhY2hlIiwiZ2V0RGVmYXVsdFN0YXRlIiwibWV0YSIsInJlbW92ZSIsInNldERhdGEiLCJuZXdEYXRhIiwiZGF0YVVwZGF0ZWRBdCIsIm1hbnVhbCIsInNldFN0YXRlIiwic2V0U3RhdGVPcHRpb25zIiwicmVzZXQiLCJvYnNlcnZlciIsImlzRGlzYWJsZWQiLCJnZXRPYnNlcnZlcnNDb3VudCIsImRhdGFVcGRhdGVDb3VudCIsImVycm9yVXBkYXRlQ291bnQiLCJpc0ludmFsaWRhdGVkIiwiZ2V0Q3VycmVudFJlc3VsdCIsImlzU3RhbGVCeVRpbWUiLCJmaW5kIiwieCIsInNob3VsZEZldGNoT25XaW5kb3dGb2N1cyIsInJlZmV0Y2giLCJjYW5jZWxSZWZldGNoIiwic2hvdWxkRmV0Y2hPblJlY29ubmVjdCIsImFkZE9ic2VydmVyIiwibm90aWZ5IiwicmVtb3ZlT2JzZXJ2ZXIiLCJmaWx0ZXIiLCJpbnZhbGlkYXRlIiwiZmV0Y2giLCJhYm9ydENvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJhZGRTaWduYWxQcm9wZXJ0eSIsIm9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInNpZ25hbCIsImZldGNoRm4iLCJxdWVyeUZuQ29udGV4dCIsInBlcnNpc3RlciIsImNvbnRleHQiLCJiZWhhdmlvciIsIm9uRmV0Y2giLCJmZXRjaE1ldGEiLCJvblNldHRsZWQiLCIjZGlzcGF0Y2giLCJhY3Rpb24iLCJyZWR1Y2VyIiwiZmV0Y2hGYWlsdXJlQ291bnQiLCJmZXRjaEZhaWx1cmVSZWFzb24iLCJmZXRjaFN0YXRlIiwiZXJyb3JVcGRhdGVkQXQiLCJvblF1ZXJ5VXBkYXRlIiwiaW5pdGlhbERhdGEiLCJoYXNEYXRhIiwiaW5pdGlhbERhdGFVcGRhdGVkQXQiLCJRdWVyeUNhY2hlIiwiTWFwIiwiYnVpbGQiLCJjbGllbnQiLCJkZWZhdWx0UXVlcnlPcHRpb25zIiwiZ2V0UXVlcnlEZWZhdWx0cyIsImhhcyIsInNldCIsInF1ZXJ5SW5NYXAiLCJjbGVhciIsImdldEFsbCIsInZhbHVlcyIsImRlZmF1bHRlZEZpbHRlcnMiLCJmaW5kQWxsIiwicXVlcmllcyIsImV2ZW50IiwiTXV0YXRpb24iLCJtdXRhdGlvbklkIiwibXV0YXRpb25DYWNoZSIsImV4ZWN1dGUiLCJ2YXJpYWJsZXMiLCJtdXRhdGlvbkZuIiwicmVzdG9yZWQiLCJpc1BhdXNlZCIsIm9uTXV0YXRlIiwicnVuTmV4dCIsImZhaWx1cmVSZWFzb24iLCJzdWJtaXR0ZWRBdCIsIm9uTXV0YXRpb25VcGRhdGUiLCJNdXRhdGlvbkNhY2hlIiwiZGVmYXVsdE11dGF0aW9uT3B0aW9ucyIsInNjb3BlIiwic2NvcGVGb3IiLCJzY29wZWRNdXRhdGlvbnMiLCJpbmRleCIsImluZGV4T2YiLCJzcGxpY2UiLCJtdXRhdGlvbnNXaXRoU2FtZVNjb3BlIiwiZmlyc3RQZW5kaW5nTXV0YXRpb24iLCJtIiwiZm91bmRNdXRhdGlvbiIsImZyb20iLCJyZXN1bWVQYXVzZWRNdXRhdGlvbnMiLCJwYXVzZWRNdXRhdGlvbnMiLCJhbGwiLCJtYXAiLCJpZCIsImluZmluaXRlUXVlcnlCZWhhdmlvciIsInBhZ2VzIiwiZGlyZWN0aW9uIiwiZmV0Y2hNb3JlIiwib2xkUGFnZXMiLCJvbGRQYWdlUGFyYW1zIiwicGFnZVBhcmFtcyIsImN1cnJlbnRQYWdlIiwiY2FuY2VsbGVkIiwiYWJvcnRlZCIsImZldGNoUGFnZSIsInBhcmFtIiwicHJldmlvdXMiLCJwYWdlUGFyYW0iLCJwYWdlIiwibWF4UGFnZXMiLCJhZGRUbyIsInBhZ2VQYXJhbUZuIiwiZ2V0UHJldmlvdXNQYWdlUGFyYW0iLCJnZXROZXh0UGFnZVBhcmFtIiwib2xkRGF0YSIsInJlbWFpbmluZ1BhZ2VzIiwiaW5pdGlhbFBhZ2VQYXJhbSIsImxhc3RJbmRleCIsIlF1ZXJ5Q2xpZW50IiwicXVlcnlDYWNoZSIsIm1vdW50IiwidW5tb3VudCIsImlzRmV0Y2hpbmciLCJpc011dGF0aW5nIiwiZ2V0UXVlcnlEYXRhIiwiZW5zdXJlUXVlcnlEYXRhIiwiZGVmYXVsdGVkT3B0aW9ucyIsImNhY2hlZERhdGEiLCJmZXRjaFF1ZXJ5IiwicmV2YWxpZGF0ZUlmU3RhbGUiLCJwcmVmZXRjaFF1ZXJ5IiwiZ2V0UXVlcmllc0RhdGEiLCJzZXRRdWVyeURhdGEiLCJzZXRRdWVyaWVzRGF0YSIsImdldFF1ZXJ5U3RhdGUiLCJyZW1vdmVRdWVyaWVzIiwicmVzZXRRdWVyaWVzIiwicmVmZXRjaEZpbHRlcnMiLCJyZWZldGNoUXVlcmllcyIsImNhbmNlbFF1ZXJpZXMiLCJkZWZhdWx0ZWRDYW5jZWxPcHRpb25zIiwicHJvbWlzZXMiLCJpbnZhbGlkYXRlUXVlcmllcyIsInJlZmV0Y2hUeXBlIiwidGhyb3dPbkVycm9yIiwiZmV0Y2hJbmZpbml0ZVF1ZXJ5IiwicHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5IiwiZW5zdXJlSW5maW5pdGVRdWVyeURhdGEiLCJnZXRRdWVyeUNhY2hlIiwiZ2V0TXV0YXRpb25DYWNoZSIsImdldERlZmF1bHRPcHRpb25zIiwic2V0RGVmYXVsdE9wdGlvbnMiLCJzZXRRdWVyeURlZmF1bHRzIiwiZGVmYXVsdHMiLCJxdWVyeURlZmF1bHQiLCJzZXRNdXRhdGlvbkRlZmF1bHRzIiwiZ2V0TXV0YXRpb25EZWZhdWx0cyIsIl9kZWZhdWx0ZWQiLCJyZWZldGNoT25SZWNvbm5lY3QiLCJzdXNwZW5zZSIsIm11dGF0aW9ucyIsIlF1ZXJ5T2JzZXJ2ZXIiLCJleHBlcmltZW50YWxfcHJlZmV0Y2hJblJlbmRlciIsImJpbmRNZXRob2RzIiwic2hvdWxkRmV0Y2hPbk1vdW50IiwidXBkYXRlUmVzdWx0Iiwic2hvdWxkRmV0Y2hPbiIsInJlZmV0Y2hPbldpbmRvd0ZvY3VzIiwibm90aWZ5T3B0aW9ucyIsInByZXZPcHRpb25zIiwicHJldlF1ZXJ5IiwibW91bnRlZCIsInNob3VsZEZldGNoT3B0aW9uYWxseSIsIm5leHRSZWZldGNoSW50ZXJ2YWwiLCJnZXRPcHRpbWlzdGljUmVzdWx0IiwiY3JlYXRlUmVzdWx0Iiwic2hvdWxkQXNzaWduT2JzZXJ2ZXJDdXJyZW50UHJvcGVydGllcyIsInRyYWNrUmVzdWx0Iiwib25Qcm9wVHJhY2tlZCIsInRyYWNrZWRSZXN1bHQiLCJjb25maWd1cmFibGUiLCJ0cmFja1Byb3AiLCJnZXRDdXJyZW50UXVlcnkiLCJmZXRjaE9wdGltaXN0aWMiLCIjZXhlY3V0ZUZldGNoIiwiI3VwZGF0ZVN0YWxlVGltZW91dCIsInRpbWUiLCIjY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCIsInJlZmV0Y2hJbnRlcnZhbCIsIiN1cGRhdGVSZWZldGNoSW50ZXJ2YWwiLCJuZXh0SW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsInJlZmV0Y2hJbnRlcnZhbEluQmFja2dyb3VuZCIsIiN1cGRhdGVUaW1lcnMiLCIjY2xlYXJTdGFsZVRpbWVvdXQiLCIjY2xlYXJSZWZldGNoSW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwicHJldlJlc3VsdCIsInByZXZSZXN1bHRTdGF0ZSIsInByZXZSZXN1bHRPcHRpb25zIiwicXVlcnlDaGFuZ2UiLCJxdWVyeUluaXRpYWxTdGF0ZSIsIm5ld1N0YXRlIiwiaXNQbGFjZWhvbGRlckRhdGEiLCJfb3B0aW1pc3RpY1Jlc3VsdHMiLCJmZXRjaE9uTW91bnQiLCJmZXRjaE9wdGlvbmFsbHkiLCJzZWxlY3QiLCJzZWxlY3RFcnJvciIsInBsYWNlaG9sZGVyRGF0YSIsImlzUGVuZGluZyIsImlzRXJyb3IiLCJpc0xvYWRpbmciLCJpc1N1Y2Nlc3MiLCJpc0luaXRpYWxMb2FkaW5nIiwiaXNGZXRjaGVkIiwiaXNGZXRjaGVkQWZ0ZXJNb3VudCIsImlzUmVmZXRjaGluZyIsImlzTG9hZGluZ0Vycm9yIiwiaXNSZWZldGNoRXJyb3IiLCJuZXh0UmVzdWx0IiwiZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUiLCJyZWNyZWF0ZVRoZW5hYmxlIiwicGVuZGluZyIsInByZXZUaGVuYWJsZSIsImRlZmF1bHROb3RpZnlPcHRpb25zIiwic2hvdWxkTm90aWZ5TGlzdGVuZXJzIiwibm90aWZ5T25DaGFuZ2VQcm9wcyIsIm5vdGlmeU9uQ2hhbmdlUHJvcHNWYWx1ZSIsImluY2x1ZGVkUHJvcHMiLCJ0eXBlZEtleSIsIiN1cGRhdGVRdWVyeSIsIiNub3RpZnkiLCJzaG91bGRMb2FkT25Nb3VudCIsInJldHJ5T25Nb3VudCIsInJlZmV0Y2hPbk1vdW50IiwiZmllbGQiLCJvcHRpbWlzdGljUmVzdWx0IiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0ZSIsIiN1cGRhdGVSZXN1bHQiLCJpc0lkbGUiLCJRdWVyeUNsaWVudENvbnRleHQiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VRdWVyeUNsaWVudCIsInF1ZXJ5Q2xpZW50IiwidXNlQ29udGV4dCIsIlF1ZXJ5Q2xpZW50UHJvdmlkZXIiLCJjaGlsZHJlbiIsInVzZUVmZmVjdCIsImpzeCIsIlByb3ZpZGVyIiwiSXNSZXN0b3JpbmdDb250ZXh0IiwidXNlSXNSZXN0b3JpbmciLCJjcmVhdGVWYWx1ZSIsImlzUmVzZXQiLCJjbGVhclJlc2V0IiwiUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0IiwidXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkiLCJzaG91bGRUaHJvd0Vycm9yIiwidGhyb3dFcnJvciIsInBhcmFtcyIsImVuc3VyZVByZXZlbnRFcnJvckJvdW5kYXJ5UmV0cnkiLCJlcnJvclJlc2V0Qm91bmRhcnkiLCJ1c2VDbGVhclJlc2V0RXJyb3JCb3VuZGFyeSIsImdldEhhc0Vycm9yIiwiZW5zdXJlU3VzcGVuc2VUaW1lcnMiLCJvcmlnaW5hbFN0YWxlVGltZSIsIndpbGxGZXRjaCIsImlzUmVzdG9yaW5nIiwic2hvdWxkU3VzcGVuZCIsInVzZUJhc2VRdWVyeSIsIk9ic2VydmVyIiwiX2V4cGVyaW1lbnRhbF9iZWZvcmVRdWVyeSIsImlzTmV3Q2FjaGVFbnRyeSIsInVzZVN0YXRlIiwic2hvdWxkU3Vic2NyaWJlIiwic3Vic2NyaWJlZCIsInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwidXNlQ2FsbGJhY2siLCJvblN0b3JlQ2hhbmdlIiwidW5zdWJzY3JpYmUiLCJfZXhwZXJpbWVudGFsX2FmdGVyUXVlcnkiLCJmaW5hbGx5IiwidXNlUXVlcnkiLCJ1c2VNdXRhdGlvbiIsIm11dGF0ZU9wdGlvbnMiLCJtdXRhdGVBc3luYyIsImF4aW9zIiwiX2pzeCIsIl9qc3hzIiwiaW1nIiwiRWRpdCIsImZhY3RvcnkiLCJtb2R1bGUiLCJ0aGlzIiwiaG9va0NhbGxiYWNrIiwiaG9va3MiLCJhcHBseSIsImFyZ3VtZW50cyIsInNldEhvb2tDYWxsYmFjayIsImlzT2JqZWN0IiwiaGFzT3duUHJvcCIsImlzT2JqZWN0RW1wdHkiLCJvYmoiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiayIsImlzVW5kZWZpbmVkIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJhcnIiLCJyZXMiLCJhcnJMZW4iLCJleHRlbmQiLCJ2YWx1ZU9mIiwiY3JlYXRlVVRDIiwiZm9ybWF0IiwibG9jYWxlIiwic3RyaWN0IiwiY3JlYXRlTG9jYWxPclVUQyIsInV0YyIsImRlZmF1bHRQYXJzaW5nRmxhZ3MiLCJlbXB0eSIsInVudXNlZFRva2VucyIsInVudXNlZElucHV0Iiwib3ZlcmZsb3ciLCJjaGFyc0xlZnRPdmVyIiwibnVsbElucHV0IiwiaW52YWxpZEVyYSIsImludmFsaWRNb250aCIsImludmFsaWRGb3JtYXQiLCJ1c2VySW52YWxpZGF0ZWQiLCJpc28iLCJwYXJzZWREYXRlUGFydHMiLCJlcmEiLCJtZXJpZGllbSIsInJmYzI4MjIiLCJ3ZWVrZGF5TWlzbWF0Y2giLCJnZXRQYXJzaW5nRmxhZ3MiLCJfcGYiLCJmdW4iLCJ0IiwibGVuIiwiaXNWYWxpZCIsImZsYWdzIiwicGFyc2VkUGFydHMiLCJpc05vd1ZhbGlkIiwiX2QiLCJpc05hTiIsImludmFsaWRXZWVrZGF5IiwiX3N0cmljdCIsImJpZ0hvdXIiLCJ1bmRlZmluZWQiLCJpc0Zyb3plbiIsIl9pc1ZhbGlkIiwiY3JlYXRlSW52YWxpZCIsIk5hTiIsIm1vbWVudFByb3BlcnRpZXMiLCJ1cGRhdGVJblByb2dyZXNzIiwiY29weUNvbmZpZyIsInRvIiwicHJvcCIsIm1vbWVudFByb3BlcnRpZXNMZW4iLCJfaXNBTW9tZW50T2JqZWN0IiwiX2kiLCJfZiIsIl9sIiwiX3R6bSIsIl9pc1VUQyIsIl9vZmZzZXQiLCJfbG9jYWxlIiwiTW9tZW50IiwidXBkYXRlT2Zmc2V0IiwiaXNNb21lbnQiLCJ3YXJuIiwibXNnIiwic3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzIiwiZGVwcmVjYXRlIiwiZmlyc3RUaW1lIiwiZGVwcmVjYXRpb25IYW5kbGVyIiwiYXJnIiwiYXJnTGVuIiwiam9pbiIsInN0YWNrIiwiZGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlU2ltcGxlIiwibmFtZSIsImlzRnVuY3Rpb24iLCJGdW5jdGlvbiIsIl9jb25maWciLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQiLCJSZWdFeHAiLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsInNvdXJjZSIsIl9vcmRpbmFsUGFyc2UiLCJtZXJnZUNvbmZpZ3MiLCJwYXJlbnRDb25maWciLCJjaGlsZENvbmZpZyIsIkxvY2FsZSIsImRlZmF1bHRDYWxlbmRhciIsInNhbWVEYXkiLCJuZXh0RGF5IiwibmV4dFdlZWsiLCJsYXN0RGF5IiwibGFzdFdlZWsiLCJzYW1lRWxzZSIsImNhbGVuZGFyIiwibW9tIiwib3V0cHV0IiwiX2NhbGVuZGFyIiwiemVyb0ZpbGwiLCJudW1iZXIiLCJ0YXJnZXRMZW5ndGgiLCJmb3JjZVNpZ24iLCJhYnNOdW1iZXIiLCJhYnMiLCJ6ZXJvc1RvRmlsbCIsInNpZ24iLCJwb3ciLCJzdWJzdHIiLCJmb3JtYXR0aW5nVG9rZW5zIiwibG9jYWxGb3JtYXR0aW5nVG9rZW5zIiwiZm9ybWF0RnVuY3Rpb25zIiwiZm9ybWF0VG9rZW5GdW5jdGlvbnMiLCJhZGRGb3JtYXRUb2tlbiIsInRva2VuIiwicGFkZGVkIiwib3JkaW5hbCIsImZ1bmMiLCJsb2NhbGVEYXRhIiwicmVtb3ZlRm9ybWF0dGluZ1Rva2VucyIsIm1hdGNoIiwicmVwbGFjZSIsIm1ha2VGb3JtYXRGdW5jdGlvbiIsImZvcm1hdE1vbWVudCIsImludmFsaWREYXRlIiwiZXhwYW5kRm9ybWF0IiwicmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zIiwibG9uZ0RhdGVGb3JtYXQiLCJ0ZXN0IiwiZGVmYXVsdExvbmdEYXRlRm9ybWF0IiwiTFRTIiwiTFQiLCJMIiwiTEwiLCJMTEwiLCJMTExMIiwiX2xvbmdEYXRlRm9ybWF0IiwiZm9ybWF0VXBwZXIiLCJ0b1VwcGVyQ2FzZSIsInRvayIsImRlZmF1bHRJbnZhbGlkRGF0ZSIsIl9pbnZhbGlkRGF0ZSIsImRlZmF1bHRPcmRpbmFsIiwiZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbCIsImRlZmF1bHRSZWxhdGl2ZVRpbWUiLCJmdXR1cmUiLCJwYXN0IiwicyIsInNzIiwibW0iLCJoIiwiaGgiLCJkIiwiZGQiLCJ3Iiwid3ciLCJNIiwiTU0iLCJ5IiwieXkiLCJyZWxhdGl2ZVRpbWUiLCJ3aXRob3V0U3VmZml4Iiwic3RyaW5nIiwiaXNGdXR1cmUiLCJfcmVsYXRpdmVUaW1lIiwicGFzdEZ1dHVyZSIsImRpZmYiLCJhbGlhc2VzIiwiRCIsImRhdGVzIiwiZGF0ZSIsImRheXMiLCJkYXkiLCJlIiwid2Vla2RheXMiLCJ3ZWVrZGF5IiwiRSIsImlzb3dlZWtkYXlzIiwiaXNvd2Vla2RheSIsIkRERCIsImRheW9meWVhcnMiLCJkYXlvZnllYXIiLCJob3VycyIsImhvdXIiLCJtcyIsIm1pbGxpc2Vjb25kcyIsIm1pbGxpc2Vjb25kIiwibWludXRlcyIsIm1pbnV0ZSIsIm1vbnRocyIsIm1vbnRoIiwiUSIsInF1YXJ0ZXJzIiwicXVhcnRlciIsInNlY29uZHMiLCJzZWNvbmQiLCJnZyIsIndlZWt5ZWFycyIsIndlZWt5ZWFyIiwiR0ciLCJpc293ZWVreWVhcnMiLCJpc293ZWVreWVhciIsIndlZWtzIiwid2VlayIsIlciLCJpc293ZWVrcyIsImlzb3dlZWsiLCJ5ZWFycyIsInllYXIiLCJub3JtYWxpemVVbml0cyIsInVuaXRzIiwidG9Mb3dlckNhc2UiLCJub3JtYWxpemVPYmplY3RVbml0cyIsImlucHV0T2JqZWN0Iiwibm9ybWFsaXplZElucHV0Iiwibm9ybWFsaXplZFByb3AiLCJwcmlvcml0aWVzIiwiaXNvV2Vla2RheSIsImRheU9mWWVhciIsIndlZWtZZWFyIiwiaXNvV2Vla1llYXIiLCJpc29XZWVrIiwiZ2V0UHJpb3JpdGl6ZWRVbml0cyIsInVuaXRzT2JqIiwidSIsInVuaXQiLCJwcmlvcml0eSIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwibWF0Y2gxdG8yTm9MZWFkaW5nWmVybyIsIm1hdGNoMXRvMkhhc1plcm8iLCJyZWdleGVzIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInVuZXNjYXBlRm9ybWF0IiwicmVnZXhFc2NhcGUiLCJtYXRjaGVkIiwicDEiLCJwMiIsInAzIiwicDQiLCJhYnNGbG9vciIsImNlaWwiLCJmbG9vciIsInRvSW50IiwiYXJndW1lbnRGb3JDb2VyY2lvbiIsImNvZXJjZWROdW1iZXIiLCJpc0Zpbml0ZSIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJ0b2tlbkxlbiIsImFkZFdlZWtQYXJzZVRva2VuIiwiX3ciLCJhZGRUaW1lVG9BcnJheUZyb21Ub2tlbiIsIl9hIiwiaXNMZWFwWWVhciIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsInBhcnNlVHdvRGlnaXRZZWFyIiwicGFyc2VJbnQiLCJkYXlzSW5ZZWFyIiwiZ2V0U2V0WWVhciIsIm1ha2VHZXRTZXQiLCJnZXRJc0xlYXBZZWFyIiwia2VlcFRpbWUiLCJzZXQkMSIsImlzVVRDIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFNlY29uZHMiLCJnZXRVVENNaW51dGVzIiwiZ2V0TWludXRlcyIsImdldFVUQ0hvdXJzIiwiZ2V0SG91cnMiLCJnZXRVVENEYXRlIiwiZ2V0RGF0ZSIsImdldFVUQ0RheSIsImdldERheSIsImdldFVUQ01vbnRoIiwiZ2V0TW9udGgiLCJnZXRVVENGdWxsWWVhciIsImdldEZ1bGxZZWFyIiwic2V0VVRDTWlsbGlzZWNvbmRzIiwic2V0TWlsbGlzZWNvbmRzIiwic2V0VVRDU2Vjb25kcyIsInNldFNlY29uZHMiLCJzZXRVVENNaW51dGVzIiwic2V0TWludXRlcyIsInNldFVUQ0hvdXJzIiwic2V0SG91cnMiLCJzZXRVVENEYXRlIiwic2V0RGF0ZSIsInNldFVUQ0Z1bGxZZWFyIiwic2V0RnVsbFllYXIiLCJzdHJpbmdHZXQiLCJzdHJpbmdTZXQiLCJwcmlvcml0aXplZCIsInByaW9yaXRpemVkTGVuIiwibW9kIiwibiIsImRheXNJbk1vbnRoIiwibW9kTW9udGgiLCJtb250aHNTaG9ydCIsIm1vbnRoc1Nob3J0UmVnZXgiLCJtb250aHNSZWdleCIsIm1vbnRoc1BhcnNlIiwiZGVmYXVsdExvY2FsZU1vbnRocyIsInNwbGl0IiwiZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0IiwiTU9OVEhTX0lOX0ZPUk1BVCIsImRlZmF1bHRNb250aHNTaG9ydFJlZ2V4IiwiZGVmYXVsdE1vbnRoc1JlZ2V4IiwibG9jYWxlTW9udGhzIiwiX21vbnRocyIsImlzRm9ybWF0IiwibG9jYWxlTW9udGhzU2hvcnQiLCJfbW9udGhzU2hvcnQiLCJoYW5kbGVTdHJpY3RQYXJzZSIsIm1vbnRoTmFtZSIsImlpIiwibGxjIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJfbW9udGhzUGFyc2UiLCJfbG9uZ01vbnRoc1BhcnNlIiwiX3Nob3J0TW9udGhzUGFyc2UiLCJsb2NhbGVNb250aHNQYXJzZSIsIl9tb250aHNQYXJzZUV4YWN0Iiwic2V0TW9udGgiLCJzZXRVVENNb250aCIsImdldFNldE1vbnRoIiwiZ2V0RGF5c0luTW9udGgiLCJjb21wdXRlTW9udGhzUGFyc2UiLCJfbW9udGhzU2hvcnRTdHJpY3RSZWdleCIsIl9tb250aHNTaG9ydFJlZ2V4IiwiX21vbnRoc1N0cmljdFJlZ2V4IiwiX21vbnRoc1JlZ2V4IiwiY21wTGVuUmV2Iiwic2hvcnRQaWVjZXMiLCJsb25nUGllY2VzIiwibWl4ZWRQaWVjZXMiLCJzaG9ydFAiLCJsb25nUCIsImNyZWF0ZURhdGUiLCJjcmVhdGVVVENEYXRlIiwiVVRDIiwiZmlyc3RXZWVrT2Zmc2V0IiwiZG93IiwiZG95IiwiZndkIiwiZndkbHciLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJsb2NhbFdlZWtkYXkiLCJ3ZWVrT2Zmc2V0IiwicmVzWWVhciIsInJlc0RheU9mWWVhciIsIndlZWtPZlllYXIiLCJyZXNXZWVrIiwid2Vla3NJblllYXIiLCJ3ZWVrT2Zmc2V0TmV4dCIsImxvY2FsZVdlZWsiLCJfd2VlayIsImRlZmF1bHRMb2NhbGVXZWVrIiwibG9jYWxlRmlyc3REYXlPZldlZWsiLCJsb2NhbGVGaXJzdERheU9mWWVhciIsImdldFNldFdlZWsiLCJnZXRTZXRJU09XZWVrIiwid2Vla2RheXNNaW4iLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXNNaW5SZWdleCIsIndlZWtkYXlzU2hvcnRSZWdleCIsIndlZWtkYXlzUmVnZXgiLCJ3ZWVrZGF5c1BhcnNlIiwicGFyc2VXZWVrZGF5IiwicGFyc2VJc29XZWVrZGF5Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwiY29uY2F0IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4iLCJkZWZhdWx0V2Vla2RheXNSZWdleCIsImRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXgiLCJkZWZhdWx0V2Vla2RheXNNaW5SZWdleCIsImxvY2FsZVdlZWtkYXlzIiwiX3dlZWtkYXlzIiwibG9jYWxlV2Vla2RheXNTaG9ydCIsIl93ZWVrZGF5c1Nob3J0IiwibG9jYWxlV2Vla2RheXNNaW4iLCJfd2Vla2RheXNNaW4iLCJoYW5kbGVTdHJpY3RQYXJzZSQxIiwid2Vla2RheU5hbWUiLCJfd2Vla2RheXNQYXJzZSIsIl9zaG9ydFdlZWtkYXlzUGFyc2UiLCJfbWluV2Vla2RheXNQYXJzZSIsImxvY2FsZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNQYXJzZUV4YWN0IiwiX2Z1bGxXZWVrZGF5c1BhcnNlIiwiZ2V0U2V0RGF5T2ZXZWVrIiwiZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIiwiZ2V0U2V0SVNPRGF5T2ZXZWVrIiwiY29tcHV0ZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1JlZ2V4IiwiX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1Nob3J0UmVnZXgiLCJfd2Vla2RheXNNaW5TdHJpY3RSZWdleCIsIl93ZWVrZGF5c01pblJlZ2V4IiwibWluUGllY2VzIiwibWlucCIsInNob3J0cCIsImxvbmdwIiwiaEZvcm1hdCIsImtGb3JtYXQiLCJsb3dlcmNhc2UiLCJtYXRjaE1lcmlkaWVtIiwiX21lcmlkaWVtUGFyc2UiLCJrSW5wdXQiLCJfaXNQbSIsImlzUE0iLCJfbWVyaWRpZW0iLCJwb3MiLCJwb3MxIiwicG9zMiIsImxvY2FsZUlzUE0iLCJjaGFyQXQiLCJkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSIsImdldFNldEhvdXIiLCJsb2NhbGVNZXJpZGllbSIsImlzTG93ZXIiLCJiYXNlQ29uZmlnIiwiZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIm1lcmlkaWVtUGFyc2UiLCJsb2NhbGVzIiwibG9jYWxlRmFtaWxpZXMiLCJnbG9iYWxMb2NhbGUiLCJjb21tb25QcmVmaXgiLCJhcnIxIiwiYXJyMiIsIm1pbmwiLCJub3JtYWxpemVMb2NhbGUiLCJjaG9vc2VMb2NhbGUiLCJuYW1lcyIsImoiLCJuZXh0IiwibG9hZExvY2FsZSIsImlzTG9jYWxlTmFtZVNhbmUiLCJvbGRMb2NhbGUiLCJhbGlhc2VkUmVxdWlyZSIsImV4cG9ydHMiLCJfYWJiciIsInJlcXVpcmUiLCJnZXRTZXRHbG9iYWxMb2NhbGUiLCJnZXRMb2NhbGUiLCJkZWZpbmVMb2NhbGUiLCJhYmJyIiwicGFyZW50TG9jYWxlIiwidXBkYXRlTG9jYWxlIiwidG1wTG9jYWxlIiwibGlzdExvY2FsZXMiLCJjaGVja092ZXJmbG93IiwiX292ZXJmbG93RGF5T2ZZZWFyIiwiX292ZXJmbG93V2Vla3MiLCJfb3ZlcmZsb3dXZWVrZGF5IiwiZXh0ZW5kZWRJc29SZWdleCIsImJhc2ljSXNvUmVnZXgiLCJ0elJlZ2V4IiwiaXNvRGF0ZXMiLCJpc29UaW1lcyIsImFzcE5ldEpzb25SZWdleCIsIm9ic09mZnNldHMiLCJVVCIsIkdNVCIsIkVEVCIsIkVTVCIsIkNEVCIsIkNTVCIsIk1EVCIsIk1TVCIsIlBEVCIsIlBTVCIsImNvbmZpZ0Zyb21JU08iLCJsIiwiZXhlYyIsImFsbG93VGltZSIsImRhdGVGb3JtYXQiLCJ0aW1lRm9ybWF0IiwidHpGb3JtYXQiLCJpc29EYXRlc0xlbiIsImlzb1RpbWVzTGVuIiwiY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCIsImV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MiLCJ5ZWFyU3RyIiwibW9udGhTdHIiLCJkYXlTdHIiLCJob3VyU3RyIiwibWludXRlU3RyIiwic2Vjb25kU3RyIiwidW50cnVuY2F0ZVllYXIiLCJwcmVwcm9jZXNzUkZDMjgyMiIsImNoZWNrV2Vla2RheSIsIndlZWtkYXlTdHIiLCJwYXJzZWRJbnB1dCIsIndlZWtkYXlQcm92aWRlZCIsIndlZWtkYXlBY3R1YWwiLCJjYWxjdWxhdGVPZmZzZXQiLCJvYnNPZmZzZXQiLCJtaWxpdGFyeU9mZnNldCIsIm51bU9mZnNldCIsImhtIiwiY29uZmlnRnJvbVJGQzI4MjIiLCJwYXJzZWRBcnJheSIsImNvbmZpZ0Zyb21TdHJpbmciLCJjcmVhdGVGcm9tSW5wdXRGYWxsYmFjayIsIl91c2VVVEMiLCJjIiwiY3VycmVudERhdGVBcnJheSIsIm5vd1ZhbHVlIiwiY29uZmlnRnJvbUFycmF5IiwiY3VycmVudERhdGUiLCJleHBlY3RlZFdlZWtkYXkiLCJ5ZWFyVG9Vc2UiLCJkYXlPZlllYXJGcm9tV2Vla0luZm8iLCJfZGF5T2ZZZWFyIiwiX25leHREYXkiLCJ0ZW1wIiwid2Vla2RheU92ZXJmbG93IiwiY3VyV2VlayIsImNyZWF0ZUxvY2FsIiwiSVNPXzg2MDEiLCJSRkNfMjgyMiIsInNraXBwZWQiLCJzdHJpbmdMZW5ndGgiLCJ0b3RhbFBhcnNlZElucHV0TGVuZ3RoIiwibWVyaWRpZW1GaXhXcmFwIiwiZXJhc0NvbnZlcnRZZWFyIiwiaXNQbSIsIm1lcmlkaWVtSG91ciIsImNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheSIsInRlbXBDb25maWciLCJiZXN0TW9tZW50Iiwic2NvcmVUb0JlYXQiLCJjdXJyZW50U2NvcmUiLCJ2YWxpZEZvcm1hdEZvdW5kIiwiYmVzdEZvcm1hdElzVmFsaWQiLCJjb25maWdmTGVuIiwic2NvcmUiLCJjb25maWdGcm9tT2JqZWN0IiwiZGF5T3JEYXRlIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsImNvbmZpZ0Zyb21JbnB1dCIsInByb3RvdHlwZU1pbiIsIm90aGVyIiwicHJvdG90eXBlTWF4IiwicGlja0J5IiwibW9tZW50cyIsIm9yZGVyaW5nIiwiaXNEdXJhdGlvblZhbGlkIiwidW5pdEhhc0RlY2ltYWwiLCJvcmRlckxlbiIsInBhcnNlRmxvYXQiLCJpc1ZhbGlkJDEiLCJjcmVhdGVJbnZhbGlkJDEiLCJjcmVhdGVEdXJhdGlvbiIsIkR1cmF0aW9uIiwiZHVyYXRpb24iLCJfbWlsbGlzZWNvbmRzIiwiX2RheXMiLCJfZGF0YSIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJyb3VuZCIsImNvbXBhcmVBcnJheXMiLCJhcnJheTEiLCJhcnJheTIiLCJkb250Q29udmVydCIsImxlbmd0aERpZmYiLCJkaWZmcyIsIm9mZnNldCIsInNlcGFyYXRvciIsInV0Y09mZnNldCIsIm9mZnNldEZyb21TdHJpbmciLCJjaHVua09mZnNldCIsIm1hdGNoZXIiLCJtYXRjaGVzIiwiY2h1bmsiLCJwYXJ0cyIsImNsb25lV2l0aE9mZnNldCIsIm1vZGVsIiwiY2xvbmUiLCJzZXRUaW1lIiwibG9jYWwiLCJnZXREYXRlT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRTZXRPZmZzZXQiLCJrZWVwTG9jYWxUaW1lIiwia2VlcE1pbnV0ZXMiLCJsb2NhbEFkanVzdCIsIl9jaGFuZ2VJblByb2dyZXNzIiwiYWRkU3VidHJhY3QiLCJnZXRTZXRab25lIiwic2V0T2Zmc2V0VG9VVEMiLCJzZXRPZmZzZXRUb0xvY2FsIiwic3VidHJhY3QiLCJzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCIsInRab25lIiwiaGFzQWxpZ25lZEhvdXJPZmZzZXQiLCJpc0RheWxpZ2h0U2F2aW5nVGltZSIsImlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCIsIl9pc0RTVFNoaWZ0ZWQiLCJ0b0FycmF5IiwiaXNMb2NhbCIsImlzVXRjT2Zmc2V0IiwiaXNVdGMiLCJhc3BOZXRSZWdleCIsImlzb1JlZ2V4IiwicmV0IiwiZGlmZlJlcyIsInBhcnNlSXNvIiwibW9tZW50c0RpZmZlcmVuY2UiLCJpbnZhbGlkIiwiaW5wIiwicG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZSIsImJhc2UiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCJjcmVhdGVBZGRlciIsInBlcmlvZCIsImR1ciIsInRtcCIsImlzQWRkaW5nIiwiaXNTdHJpbmciLCJTdHJpbmciLCJpc01vbWVudElucHV0IiwiaXNOdW1iZXJPclN0cmluZ0FycmF5IiwiaXNNb21lbnRJbnB1dE9iamVjdCIsIm9iamVjdFRlc3QiLCJwcm9wZXJ0eVRlc3QiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm9wZXJ0eUxlbiIsImFycmF5VGVzdCIsImRhdGFUeXBlVGVzdCIsImlzQ2FsZW5kYXJTcGVjIiwiZ2V0Q2FsZW5kYXJGb3JtYXQiLCJteU1vbWVudCIsImNhbGVuZGFyJDEiLCJmb3JtYXRzIiwic29kIiwic3RhcnRPZiIsImNhbGVuZGFyRm9ybWF0IiwibG9jYWxJbnB1dCIsImVuZE9mIiwiaXNCZXR3ZWVuIiwiaW5jbHVzaXZpdHkiLCJsb2NhbEZyb20iLCJsb2NhbFRvIiwiaXNTYW1lIiwiaW5wdXRNcyIsImlzU2FtZU9yQWZ0ZXIiLCJpc1NhbWVPckJlZm9yZSIsImFzRmxvYXQiLCJ0aGF0Iiwiem9uZURlbHRhIiwibW9udGhEaWZmIiwid2hvbGVNb250aERpZmYiLCJhbmNob3IiLCJhbmNob3IyIiwiYWRqdXN0IiwiZGVmYXVsdEZvcm1hdCIsImRlZmF1bHRGb3JtYXRVdGMiLCJ0b0lTT1N0cmluZyIsImtlZXBPZmZzZXQiLCJ0b0RhdGUiLCJpbnNwZWN0Iiwiem9uZSIsInByZWZpeCIsImRhdGV0aW1lIiwic3VmZml4IiwiaW5wdXRTdHJpbmciLCJwb3N0Zm9ybWF0IiwiaHVtYW5pemUiLCJmcm9tTm93IiwidG9Ob3ciLCJuZXdMb2NhbGVEYXRhIiwibGFuZyIsIk1TX1BFUl9TRUNPTkQiLCJNU19QRVJfTUlOVVRFIiwiTVNfUEVSX0hPVVIiLCJNU19QRVJfNDAwX1lFQVJTIiwibW9kJDEiLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJsb2NhbFN0YXJ0T2ZEYXRlIiwidXRjU3RhcnRPZkRhdGUiLCJzdGFydE9mRGF0ZSIsInVuaXgiLCJ0b09iamVjdCIsInRvSlNPTiIsImlzVmFsaWQkMiIsInBhcnNpbmdGbGFncyIsImludmFsaWRBdCIsImNyZWF0aW9uRGF0YSIsIm1hdGNoRXJhQWJiciIsIm1hdGNoRXJhTmFtZSIsIm1hdGNoRXJhTmFycm93IiwiZXJhc1BhcnNlIiwibWF0Y2hFcmFZZWFyT3JkaW5hbCIsIl9lcmFZZWFyT3JkaW5hbFJlZ2V4IiwiZXJhWWVhck9yZGluYWxQYXJzZSIsImxvY2FsZUVyYXMiLCJlcmFzIiwiX2VyYXMiLCJzaW5jZSIsInVudGlsIiwibG9jYWxlRXJhc1BhcnNlIiwiZXJhTmFtZSIsIm5hcnJvdyIsImxvY2FsZUVyYXNDb252ZXJ0WWVhciIsImRpciIsImdldEVyYU5hbWUiLCJnZXRFcmFOYXJyb3ciLCJnZXRFcmFBYmJyIiwiZ2V0RXJhWWVhciIsImVyYXNOYW1lUmVnZXgiLCJjb21wdXRlRXJhc1BhcnNlIiwiX2VyYXNOYW1lUmVnZXgiLCJfZXJhc1JlZ2V4IiwiZXJhc0FiYnJSZWdleCIsIl9lcmFzQWJiclJlZ2V4IiwiZXJhc05hcnJvd1JlZ2V4IiwiX2VyYXNOYXJyb3dSZWdleCIsImFiYnJQaWVjZXMiLCJuYW1lUGllY2VzIiwibmFycm93UGllY2VzIiwiZXJhc05hbWUiLCJlcmFzQWJiciIsImVyYXNOYXJyb3ciLCJhZGRXZWVrWWVhckZvcm1hdFRva2VuIiwiZ2V0dGVyIiwiZ2V0U2V0V2Vla1llYXIiLCJnZXRTZXRXZWVrWWVhckhlbHBlciIsImdldFNldElTT1dlZWtZZWFyIiwiZ2V0SVNPV2Vla3NJblllYXIiLCJnZXRJU09XZWVrc0luSVNPV2Vla1llYXIiLCJnZXRXZWVrc0luWWVhciIsIndlZWtJbmZvIiwiZ2V0V2Vla3NJbldlZWtZZWFyIiwid2Vla3NUYXJnZXQiLCJzZXRXZWVrQWxsIiwiZGF5T2ZZZWFyRGF0YSIsImdldFNldFF1YXJ0ZXIiLCJnZXRTZXREYXlPZk1vbnRoIiwiZ2V0U2V0RGF5T2ZZZWFyIiwiZ2V0U2V0TWludXRlIiwiZ2V0U2V0U2Vjb25kIiwiZ2V0U2V0TWlsbGlzZWNvbmQiLCJwYXJzZU1zIiwiZ2V0Wm9uZUFiYnIiLCJnZXRab25lTmFtZSIsInByb3RvIiwiZm9yIiwiZXJhTmFycm93IiwiZXJhQWJiciIsImVyYVllYXIiLCJpc29XZWVrcyIsIndlZWtzSW5XZWVrWWVhciIsImlzb1dlZWtzSW5ZZWFyIiwiaXNvV2Vla3NJbklTT1dlZWtZZWFyIiwicGFyc2Vab25lIiwiaXNEU1QiLCJ6b25lQWJiciIsInpvbmVOYW1lIiwiaXNEU1RTaGlmdGVkIiwiY3JlYXRlVW5peCIsImNyZWF0ZUluWm9uZSIsInByZVBhcnNlUG9zdEZvcm1hdCIsInByb3RvJDEiLCJmaXJzdERheU9mWWVhciIsImZpcnN0RGF5T2ZXZWVrIiwiZ2V0JDEiLCJzZXR0ZXIiLCJsaXN0TW9udGhzSW1wbCIsIm91dCIsImxpc3RXZWVrZGF5c0ltcGwiLCJsb2NhbGVTb3J0ZWQiLCJzaGlmdCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImxhbmdEYXRhIiwibWF0aEFicyIsImFkZFN1YnRyYWN0JDEiLCJhZGQkMSIsInN1YnRyYWN0JDEiLCJhYnNDZWlsIiwiYnViYmxlIiwibW9udGhzRnJvbURheXMiLCJtb250aHNUb0RheXMiLCJkYXlzVG9Nb250aHMiLCJhcyIsIm1ha2VBcyIsImFsaWFzIiwiYXNNaWxsaXNlY29uZHMiLCJhc1NlY29uZHMiLCJhc01pbnV0ZXMiLCJhc0hvdXJzIiwiYXNEYXlzIiwiYXNXZWVrcyIsImFzTW9udGhzIiwiYXNRdWFydGVycyIsImFzWWVhcnMiLCJ2YWx1ZU9mJDEiLCJjbG9uZSQxIiwiZ2V0JDIiLCJtYWtlR2V0dGVyIiwidGhyZXNob2xkcyIsInN1YnN0aXR1dGVUaW1lQWdvIiwicmVsYXRpdmVUaW1lJDEiLCJwb3NOZWdEdXJhdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCIsInRocmVzaG9sZCIsImxpbWl0IiwiYXJnV2l0aFN1ZmZpeCIsImFyZ1RocmVzaG9sZHMiLCJ3aXRoU3VmZml4IiwidGgiLCJhYnMkMSIsInRvSVNPU3RyaW5nJDEiLCJ0b3RhbCIsInRvdGFsU2lnbiIsInltU2lnbiIsImRheXNTaWduIiwiaG1zU2lnbiIsInRvRml4ZWQiLCJwcm90byQyIiwidG9Jc29TdHJpbmciLCJ2ZXJzaW9uIiwicmVsYXRpdmVUaW1lUm91bmRpbmciLCJyZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwiQ2xvc2UiLCJ1c2VSZWYiLCJEb3RzSG9yaXpvbnRhbCIsImZvcndhcmRSZWYiLCJjcmVhdGVQb3J0YWwiLCJDaGV2cm9uTGVmdCIsIkNoZXZyb25SaWdodCIsIkxvZ291dEljb24iLCJTZWFyY2giLCJMb2dvRmVlZGJhY2tEYXJrIiwiX0ZyYWdtZW50IiwiTG9nb0ZlZWRiYWNrTGlnaHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLElBQU1BLFlBQUEsR0FBTixNQUErQztBQUdwREMsRUFBQUEsV0FBQUEsR0FBYztBQUZkLElBQUEsSUFBQSxDQUFVQyxTQUFBLGtCQUFnQkMsSUFBQUEsR0FBQSxFQUFlO0FBR3ZDLElBQUEsSUFBQSxDQUFLQyxTQUFBLEdBQVksSUFBQSxDQUFLQSxTQUFBLENBQVVDLElBQUEsQ0FBSyxJQUFJLENBQUE7QUFDM0M7QUFFQUQsRUFBQUEsU0FBQUEsQ0FBVUUsUUFBQSxFQUFpQztBQUN6QyxJQUFBLElBQUEsQ0FBS0osU0FBQSxDQUFVSyxHQUFBLENBQUlELFFBQVEsQ0FBQTtBQUUzQixJQUFBLElBQUEsQ0FBS0UsV0FBQSxFQUFZO0FBRWpCLElBQUEsT0FBTyxNQUFNO0FBQ1gsTUFBQSxJQUFBLENBQUtOLFNBQUEsQ0FBVU8sTUFBQSxDQUFPSCxRQUFRLENBQUE7QUFDOUIsTUFBQSxJQUFBLENBQUtJLGFBQUEsRUFBYztBQUNyQixLQUFBO0FBQ0Y7QUFFQUMsRUFBQUEsWUFBQUEsR0FBd0I7QUFDdEIsSUFBQSxPQUFPLElBQUtULENBQUFBLFNBQUEsQ0FBVVUsSUFBQSxHQUFPLENBQUE7QUFDL0I7QUFFVUosRUFBQUEsV0FBQUEsR0FBb0I7QUFJcEJFLEVBQUFBLGFBQUFBLEdBQXNCO0FBR2xDLENBQUE7O0FDN0JBLGVBQWdCLE9BQU9HLE1BQU0sS0FBSyxXQUFXLEdBQUdBLE1BQU0sR0FDcEQsT0FBT0MsSUFBSSxLQUFLLFdBQVcsR0FBR0EsSUFBSSxHQUNsQyxPQUFPQyxNQUFNLEtBQUssV0FBVyxHQUFHQSxNQUFNLEdBQUcsRUFBRTs7QUNzSTdDLElBQUlDLEdBQUcsR0FBRyxFQUFFOztBQTBCWjtBQUNBLElBQUlDLFdBQVcsR0FBR0osUUFBTSxDQUFDSSxXQUFXLElBQUksRUFBRTtBQUV4Q0EsV0FBVyxDQUFDQyxHQUFHLElBQ2ZELFdBQVcsQ0FBQ0UsTUFBTSxJQUNsQkYsV0FBVyxDQUFDRyxLQUFLLElBQ2pCSCxXQUFXLENBQUNJLElBQUksSUFDaEJKLFdBQVcsQ0FBQ0ssU0FBUyxJQUNyQixZQUFVO0FBQUUsRUFBQSxPQUFRLElBQUlDLElBQUksRUFBRSxDQUFFQyxPQUFPLEVBQUU7QUFBQztBQTBCNUMsSUFBSUMsU0FBUyxHQUFHO0FBQ2RDLEVBR0FWLEdBQUcsRUFBRUEsR0FvQlAsQ0FBQzs7O0FDNUlNLElBQU1XLFFBQUEsR0FBVyxPQUFPWixNQUFBLEtBQVcsV0FBQSxJQUFlLFVBQVVhLFVBQUE7QUFJNUQsU0FBU0MsTUFBQUEsR0FBTztBQUVoQixTQUFTQyxnQkFDZEMsQ0FBQUEsT0FBQSxFQUNBQyxLQUFBLEVBQ1M7RUFDVCxPQUFPLE9BQU9ELE9BQUEsS0FBWSxVQUFBLEdBQ3JCQSxPQUFBLENBQW1DQyxLQUFLLElBQ3pDRCxPQUFBO0FBQ047QUFFTyxTQUFTRSxjQUFBQSxDQUFlQyxLQUFBLEVBQWlDO0VBQzlELE9BQU8sT0FBT0EsS0FBQSxLQUFVLFFBQUEsSUFBWUEsS0FBQSxJQUFTLENBQUEsSUFBS0EsS0FBQSxLQUFVQyxRQUFBO0FBQzlEO0FBRU8sU0FBU0MsY0FBZUMsQ0FBQUEsU0FBQSxFQUFtQkMsU0FBQSxFQUE0QjtBQUM1RSxFQUFBLE9BQU9DLElBQUEsQ0FBS0MsR0FBQSxDQUFJSCxTQUFBLElBQWFDLFNBQUEsSUFBYSxDQUFBLENBQUEsR0FBS2YsSUFBQSxDQUFLTCxHQUFBLElBQU8sQ0FBQyxDQUFBO0FBQzlEO0FBRU8sU0FBU3VCLGdCQU1kSCxDQUFBQSxTQUFBLEVBQ0FJLEtBQUEsRUFDb0I7RUFDcEIsT0FBTyxPQUFPSixTQUFBLEtBQWMsVUFBQSxHQUFhQSxTQUFBLENBQVVJLEtBQUssSUFBSUosU0FBQTtBQUM5RDtBQUVPLFNBQVNLLGNBTWRDLENBQUFBLE9BQUEsRUFDQUYsS0FBQSxFQUNxQjtFQUNyQixPQUFPLE9BQU9FLE9BQUEsS0FBWSxVQUFBLEdBQWFBLE9BQUEsQ0FBUUYsS0FBSyxJQUFJRSxPQUFBO0FBQzFEO0FBRU8sU0FBU0MsVUFDZEMsQ0FBQUEsT0FBQSxFQUNBSixLQUFBLEVBQ1M7RUFDVCxNQUFNO0FBQ0pLLElBQUFBLElBQUEsR0FBTyxLQUFBO0lBQ1BDLEtBQUE7SUFDQUMsV0FBQTtJQUNBQyxTQUFBO0lBQ0FDLFFBQUE7QUFDQUMsSUFBQUE7QUFDRixHQUFBLEdBQUlOLE9BQUE7QUFFSixFQUFBLElBQUlLLFFBQUEsRUFBVTtBQUNaLElBQUEsSUFBSUgsS0FBQSxFQUFPO01BQ1QsSUFBSU4sS0FBQSxDQUFNVyxTQUFBLEtBQWNDLHFCQUFBLENBQXNCSCxRQUFBLEVBQVVULEtBQUEsQ0FBTWEsT0FBTyxDQUFHLEVBQUE7UUFDdEUsT0FBTyxLQUFBO0FBQ1Q7S0FDUyxNQUFBLElBQUEsQ0FBQ0MsZUFBQSxDQUFnQmQsS0FBQSxDQUFNUyxRQUFBLEVBQVVBLFFBQVEsQ0FBRyxFQUFBO01BQ3JELE9BQU8sS0FBQTtBQUNUO0FBQ0Y7RUFFQSxJQUFJSixJQUFBLEtBQVMsS0FBTyxFQUFBO0FBQ2xCLElBQUEsTUFBTVUsUUFBQSxHQUFXZixLQUFBLENBQU1lLFFBQUEsRUFBUztBQUNoQyxJQUFBLElBQUlWLElBQUEsS0FBUyxRQUFZLElBQUEsQ0FBQ1UsUUFBQSxFQUFVO01BQ2xDLE9BQU8sS0FBQTtBQUNUO0FBQ0EsSUFBQSxJQUFJVixJQUFBLEtBQVMsVUFBY1UsSUFBQUEsUUFBQSxFQUFVO01BQ25DLE9BQU8sS0FBQTtBQUNUO0FBQ0Y7RUFFQSxJQUFJLE9BQU9MLEtBQUEsS0FBVSxTQUFhVixJQUFBQSxLQUFBLENBQU1nQixPQUFBLEVBQWNOLEtBQUFBLEtBQUEsRUFBTztJQUMzRCxPQUFPLEtBQUE7QUFDVDtFQUVBLElBQUlILFdBQUEsSUFBZUEsV0FBQSxLQUFnQlAsS0FBQSxDQUFNaUIsS0FBQSxDQUFNVixXQUFBLEVBQWE7SUFDMUQsT0FBTyxLQUFBO0FBQ1Q7QUFFQSxFQUFBLElBQUlDLFNBQUEsSUFBYSxDQUFDQSxTQUFBLENBQVVSLEtBQUssQ0FBRyxFQUFBO0lBQ2xDLE9BQU8sS0FBQTtBQUNUO0VBRUEsT0FBTyxJQUFBO0FBQ1Q7QUFFTyxTQUFTa0IsYUFDZGQsQ0FBQUEsT0FBQSxFQUNBZSxRQUFBLEVBQ1M7RUFDVCxNQUFNO0lBQUViLEtBQUE7SUFBT2MsTUFBQTtJQUFRWixTQUFBO0FBQVdhLElBQUFBO0FBQVksR0FBQSxHQUFJakIsT0FBQTtBQUNsRCxFQUFBLElBQUlpQixXQUFBLEVBQWE7QUFDZixJQUFBLElBQUksQ0FBQ0YsUUFBQSxDQUFTTixPQUFBLENBQVFRLFdBQUEsRUFBYTtNQUNqQyxPQUFPLEtBQUE7QUFDVDtBQUNBLElBQUEsSUFBSWYsS0FBQSxFQUFPO01BQ1QsSUFBSWdCLE9BQUEsQ0FBUUgsUUFBQSxDQUFTTixPQUFBLENBQVFRLFdBQVcsQ0FBTUMsS0FBQUEsT0FBQSxDQUFRRCxXQUFXLENBQUcsRUFBQTtRQUNsRSxPQUFPLEtBQUE7QUFDVDtLQUNTLE1BQUEsSUFBQSxDQUFDUCxlQUFBLENBQWdCSyxRQUFBLENBQVNOLE9BQUEsQ0FBUVEsV0FBQSxFQUFhQSxXQUFXLENBQUcsRUFBQTtNQUN0RSxPQUFPLEtBQUE7QUFDVDtBQUNGO0VBRUEsSUFBSUQsTUFBQSxJQUFVRCxRQUFBLENBQVNGLEtBQUEsQ0FBTUcsTUFBQSxLQUFXQSxNQUFBLEVBQVE7SUFDOUMsT0FBTyxLQUFBO0FBQ1Q7QUFFQSxFQUFBLElBQUlaLFNBQUEsSUFBYSxDQUFDQSxTQUFBLENBQVVXLFFBQVEsQ0FBRyxFQUFBO0lBQ3JDLE9BQU8sS0FBQTtBQUNUO0VBRUEsT0FBTyxJQUFBO0FBQ1Q7QUFFTyxTQUFTUCxxQkFDZEgsQ0FBQUEsUUFBQSxFQUNBSSxPQUFBLEVBQ1E7QUFDUixFQUFBLE1BQU1VLE1BQUEsR0FBU1YsT0FBQSxFQUFTVyxjQUFBLElBQWtCRixPQUFBO0VBQzFDLE9BQU9DLE1BQUEsQ0FBT2QsUUFBUSxDQUFBO0FBQ3hCO0FBTU8sU0FBU2EsT0FBQUEsQ0FBUWIsUUFBQSxFQUEwQztBQUNoRSxFQUFBLE9BQU9nQixJQUFBLENBQUtDLFNBQUEsQ0FBVWpCLFFBQUEsRUFBVSxDQUFDa0IsQ0FBQSxFQUFHQyxHQUFBLEtBQ2xDQyxhQUFBLENBQWNELEdBQUcsQ0FBQSxHQUNiRSxNQUFBLENBQU9DLElBQUEsQ0FBS0gsR0FBRyxDQUFBLENBQ1pJLElBQUEsRUFDQUMsQ0FBQUEsTUFBQSxDQUFPLENBQUNDLE1BQUEsRUFBUUMsR0FBQSxLQUFRO0FBQ3ZCRCxJQUFBQSxNQUFBLENBQU9DLEdBQUcsQ0FBSVAsR0FBQUEsR0FBQSxDQUFJTyxHQUFHLENBQUE7QUFDckIsSUFBQSxPQUFPRCxNQUFBO0dBQ04sRUFBQSxFQUFTLENBQUEsR0FDZE4sR0FDTixDQUFBO0FBQ0Y7QUFNTyxTQUFTZCxlQUFnQnNCLENBQUFBLENBQUEsRUFBUUMsQ0FBQSxFQUFpQjtFQUN2RCxJQUFJRCxDQUFBLEtBQU1DLENBQUEsRUFBRztJQUNYLE9BQU8sSUFBQTtBQUNUO0FBRUEsRUFBQSxJQUFJLE9BQU9ELENBQUEsS0FBTSxPQUFPQyxDQUFBLEVBQUc7SUFDekIsT0FBTyxLQUFBO0FBQ1Q7RUFFQSxJQUFJRCxDQUFBLElBQUtDLENBQUEsSUFBSyxPQUFPRCxDQUFBLEtBQU0sUUFBWSxJQUFBLE9BQU9DLENBQUEsS0FBTSxRQUFVLEVBQUE7SUFDNUQsT0FBTyxDQUFDUCxNQUFBLENBQU9DLElBQUEsQ0FBS00sQ0FBQyxDQUFBLENBQUVDLElBQUEsQ0FBTUgsR0FBQSxJQUFRLENBQUNyQixlQUFBLENBQWdCc0IsQ0FBQSxDQUFFRCxHQUFHLEdBQUdFLENBQUEsQ0FBRUYsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUN2RTtFQUVBLE9BQU8sS0FBQTtBQUNUO0FBUU8sU0FBU0ksZ0JBQWlCSCxDQUFBQSxDQUFBLEVBQVFDLENBQUEsRUFBYTtFQUNwRCxJQUFJRCxDQUFBLEtBQU1DLENBQUEsRUFBRztBQUNYLElBQUEsT0FBT0QsQ0FBQTtBQUNUO0VBRUEsTUFBTUksS0FBQSxHQUFRQyxZQUFBLENBQWFMLENBQUMsQ0FBS0ssSUFBQUEsWUFBQSxDQUFhSixDQUFDLENBQUE7RUFFL0MsSUFBSUcsS0FBQSxJQUFVWCxhQUFBLENBQWNPLENBQUMsQ0FBS1AsSUFBQUEsYUFBQSxDQUFjUSxDQUFDLENBQUksRUFBQTtJQUNuRCxNQUFNSyxNQUFBLEdBQVNGLEtBQUEsR0FBUUosQ0FBQSxHQUFJTixNQUFBLENBQU9DLElBQUEsQ0FBS0ssQ0FBQyxDQUFBO0FBQ3hDLElBQUEsTUFBTU8sS0FBQSxHQUFRRCxNQUFBLENBQU9FLE1BQUE7SUFDckIsTUFBTUMsTUFBQSxHQUFTTCxLQUFBLEdBQVFILENBQUEsR0FBSVAsTUFBQSxDQUFPQyxJQUFBLENBQUtNLENBQUMsQ0FBQTtBQUN4QyxJQUFBLE1BQU1TLEtBQUEsR0FBUUQsTUFBQSxDQUFPRCxNQUFBO0FBQ3JCLElBQUEsTUFBTUcsSUFBQSxHQUFZUCxLQUFBLEdBQVEsRUFBQyxHQUFJLEVBQUM7QUFFaEMsSUFBQSxJQUFJUSxVQUFBLEdBQWEsQ0FBQTtJQUVqQixLQUFTQyxJQUFBQSxDQUFBLEdBQUksQ0FBR0EsRUFBQUEsQ0FBQSxHQUFJSCxLQUFBLEVBQU9HLENBQUEsRUFBSyxFQUFBO01BQzlCLE1BQU1kLEdBQUEsR0FBTUssS0FBQSxHQUFRUyxDQUFBLEdBQUlKLE1BQUEsQ0FBT0ksQ0FBQyxDQUFBO01BQ2hDLElBQ0ksQ0FBQSxDQUFDVCxLQUFBLElBQVNFLE1BQUEsQ0FBT1EsUUFBQSxDQUFTZixHQUFHLENBQU1LLElBQUFBLEtBQUEsS0FDckNKLENBQUEsQ0FBRUQsR0FBRyxDQUFNLEtBQUEsTUFBQSxJQUNYRSxDQUFBLENBQUVGLEdBQUcsTUFBTSxNQUNYLEVBQUE7UUFDQVksSUFBQSxDQUFLWixHQUFHLENBQUksR0FBQSxNQUFBO1FBQ1phLFVBQUEsRUFBQTtPQUNLLE1BQUE7QUFDTEQsUUFBQUEsSUFBQSxDQUFLWixHQUFHLENBQUlJLEdBQUFBLGdCQUFBLENBQWlCSCxDQUFBLENBQUVELEdBQUcsQ0FBR0UsRUFBQUEsQ0FBQSxDQUFFRixHQUFHLENBQUMsQ0FBQTtBQUMzQyxRQUFBLElBQUlZLElBQUEsQ0FBS1osR0FBRyxDQUFBLEtBQU1DLENBQUEsQ0FBRUQsR0FBRyxDQUFBLElBQUtDLENBQUEsQ0FBRUQsR0FBRyxDQUFBLEtBQU0sTUFBVyxFQUFBO1VBQ2hEYSxVQUFBLEVBQUE7QUFDRjtBQUNGO0FBQ0Y7SUFFQSxPQUFPTCxLQUFBLEtBQVVHLEtBQUEsSUFBU0UsVUFBQSxLQUFlTCxLQUFBLEdBQVFQLENBQUEsR0FBSVcsSUFBQTtBQUN2RDtBQUVBLEVBQUEsT0FBT1YsQ0FBQTtBQUNUO0FBS08sU0FBU2MsbUJBQ2RmLENBQUFBLENBQUEsRUFDQUMsQ0FBQSxFQUNTO0FBQ1QsRUFBQSxJQUFJLENBQUNBLENBQUEsSUFBS1AsTUFBQSxDQUFPQyxJQUFBLENBQUtLLENBQUMsQ0FBQSxDQUFFUSxNQUFBLEtBQVdkLE1BQUEsQ0FBT0MsSUFBQSxDQUFLTSxDQUFDLENBQUEsQ0FBRU8sTUFBQSxFQUFRO0lBQ3pELE9BQU8sS0FBQTtBQUNUO0VBRUEsS0FBV1QsTUFBQUEsR0FBQSxJQUFPQyxDQUFBLEVBQUc7QUFDbkIsSUFBQSxJQUFJQSxDQUFBLENBQUVELEdBQUcsTUFBTUUsQ0FBQSxDQUFFRixHQUFHLENBQUcsRUFBQTtNQUNyQixPQUFPLEtBQUE7QUFDVDtBQUNGO0VBRUEsT0FBTyxJQUFBO0FBQ1Q7QUFFTyxTQUFTTSxZQUFBQSxDQUFhakQsS0FBQSxFQUFnQjtBQUMzQyxFQUFBLE9BQU80RCxLQUFBLENBQU1DLE9BQUEsQ0FBUTdELEtBQUssS0FBS0EsS0FBQSxDQUFNb0QsTUFBQSxLQUFXZCxNQUFBLENBQU9DLElBQUEsQ0FBS3ZDLEtBQUssRUFBRW9ELE1BQUE7QUFDckU7QUFJTyxTQUFTZixhQUFBQSxDQUFjeUIsQ0FBQSxFQUFxQjtBQUNqRCxFQUFBLElBQUksQ0FBQ0Msa0JBQUEsQ0FBbUJELENBQUMsQ0FBRyxFQUFBO0lBQzFCLE9BQU8sS0FBQTtBQUNUO0FBR0EsRUFBQSxNQUFNRSxJQUFBLEdBQU9GLENBQUEsQ0FBRS9GLFdBQUE7RUFDZixJQUFJaUcsSUFBQSxLQUFTLE1BQVcsRUFBQTtJQUN0QixPQUFPLElBQUE7QUFDVDtBQUdBLEVBQUEsTUFBTUMsSUFBQSxHQUFPRCxJQUFBLENBQUtFLFNBQUE7QUFDbEIsRUFBQSxJQUFJLENBQUNILGtCQUFBLENBQW1CRSxJQUFJLENBQUcsRUFBQTtJQUM3QixPQUFPLEtBQUE7QUFDVDtBQUdBLEVBQUEsSUFBSSxDQUFDQSxJQUFBLENBQUtFLGNBQUEsQ0FBZSxlQUFlLENBQUcsRUFBQTtJQUN6QyxPQUFPLEtBQUE7QUFDVDtFQUdBLElBQUk3QixNQUFBLENBQU84QixjQUFBLENBQWVOLENBQUMsQ0FBTXhCLEtBQUFBLE1BQUEsQ0FBTzRCLFNBQUEsRUFBVztJQUNqRCxPQUFPLEtBQUE7QUFDVDtFQUdBLE9BQU8sSUFBQTtBQUNUO0FBRUEsU0FBU0gsa0JBQUFBLENBQW1CRCxDQUFBLEVBQWlCO0VBQzNDLE9BQU94QixNQUFBLENBQU80QixTQUFBLENBQVVHLFFBQUEsQ0FBU0MsSUFBQSxDQUFLUixDQUFDLENBQU0sS0FBQSxpQkFBQTtBQUMvQztBQUVPLFNBQVNTLEtBQUFBLENBQU1DLE9BQUEsRUFBZ0M7QUFDcEQsRUFBQSxPQUFPLElBQUlDLE9BQUEsQ0FBU0MsT0FBQSxJQUFZO0lBQzlCQyxVQUFBLENBQVdELE9BQUEsRUFBU0YsT0FBTyxDQUFBO0dBQzVCLENBQUE7QUFDSDtBQUVPLFNBQVNJLFlBR2RDLFFBQUEsRUFBNkJDLElBQUEsRUFBYXpELE9BQUEsRUFBMEI7QUFDcEUsRUFBQSxJQUFJLE9BQU9BLE9BQUEsQ0FBUTBELGlCQUFBLEtBQXNCLFVBQVksRUFBQTtBQUNuRCxJQUFBLE9BQU8xRCxPQUFBLENBQVEwRCxpQkFBQSxDQUFrQkYsUUFBQSxFQUFVQyxJQUFJLENBQUE7QUFDakQsR0FBQSxNQUFBLElBQVd6RCxPQUFBLENBQVEwRCxpQkFBQSxLQUFzQixLQUFPLEVBQUE7QUFDOUMsSUFBQSxJQUFJQyxTQUFBLENBQVFsRyxHQUFBLENBQUltRyxRQUFBLEtBQWEsWUFBYyxFQUFBO01BQ3pDLElBQUk7QUFDRixRQUFBLE9BQU9sQyxnQkFBQSxDQUFpQjhCLFFBQUEsRUFBVUMsSUFBSSxDQUFBO0FBQ3hDLE9BQUEsQ0FBQSxPQUFTSSxLQUFBLEVBQU87UUFDZEMsT0FBQSxDQUFRRCxLQUFBLENBQ04sQ0FBQSx1SkFBQSxFQUEwSjdELE9BQUEsQ0FBUUYsU0FBUyxDQUFNK0QsR0FBQUEsRUFBQUEsS0FBSyxDQUN4TCxDQUFBLENBQUE7QUFDRjtBQUNGO0FBRUEsSUFBQSxPQUFPbkMsZ0JBQUEsQ0FBaUI4QixRQUFBLEVBQVVDLElBQUksQ0FBQTtBQUN4QztBQUNBLEVBQUEsT0FBT0EsSUFBQTtBQUNUO0FBUU8sU0FBU00sU0FBWUMsS0FBQSxFQUFpQkMsSUFBQSxFQUFTaEYsR0FBQSxHQUFNLENBQWEsRUFBQTtBQUN2RSxFQUFBLE1BQU1pRixRQUFBLEdBQVcsQ0FBQyxHQUFHRixLQUFBLEVBQU9DLElBQUksQ0FBQTtBQUNoQyxFQUFBLE9BQU9oRixHQUFBLElBQU9pRixRQUFBLENBQVNuQyxNQUFBLEdBQVM5QyxHQUFBLEdBQU1pRixRQUFBLENBQVNDLEtBQUEsQ0FBTSxDQUFDLElBQUlELFFBQUE7QUFDNUQ7QUFFTyxTQUFTRSxXQUFjSixLQUFBLEVBQWlCQyxJQUFBLEVBQVNoRixHQUFBLEdBQU0sQ0FBYSxFQUFBO0FBQ3pFLEVBQUEsTUFBTWlGLFFBQUEsR0FBVyxDQUFDRCxJQUFBLEVBQU0sR0FBR0QsS0FBSyxDQUFBO0FBQ2hDLEVBQUEsT0FBTy9FLEdBQUEsSUFBT2lGLFFBQUEsQ0FBU25DLE1BQUEsR0FBUzlDLEdBQUEsR0FBTWlGLFFBQUEsQ0FBU0MsS0FBQSxDQUFNLENBQUcsRUFBQSxFQUFFLElBQUlELFFBQUE7QUFDaEU7QUFFTyxJQUFNRyxTQUFBLEdBQVlDLE1BQUEsRUFBTztBQUd6QixTQUFTQyxhQUlkdkUsQ0FBQUEsT0FBQSxFQUlBd0UsWUFBQSxFQUN3QztBQUN4QyxFQUFBLElBQUliLFNBQUEsQ0FBUWxHLEdBQUEsQ0FBSW1HLFFBQUEsS0FBYSxZQUFjLEVBQUE7QUFDekMsSUFBQSxJQUFJNUQsT0FBQSxDQUFReUUsT0FBQSxLQUFZSixTQUFBLEVBQVc7QUFDakNQLE1BQUFBLE9BQUEsQ0FBUUQsS0FBQSxDQUNOLHlHQUF5RzdELE9BQUEsQ0FBUUYsU0FBUyxDQUM1SCxDQUFBLENBQUEsQ0FBQTtBQUNGO0FBQ0Y7RUFLQSxJQUFJLENBQUNFLE9BQUEsQ0FBUXlFLE9BQUEsSUFBV0QsWUFBQSxFQUFjRSxjQUFBLEVBQWdCO0lBQ3BELE9BQU8sTUFBTUYsWUFBQSxDQUFhRSxjQUFBO0FBQzVCO0VBRUEsSUFBSSxDQUFDMUUsT0FBQSxDQUFReUUsT0FBQSxJQUFXekUsT0FBQSxDQUFReUUsT0FBQSxLQUFZSixTQUFBLEVBQVc7QUFDckQsSUFBQSxPQUFPLE1BQ0xqQixPQUFBLENBQVF1QixNQUFBLENBQU8sSUFBSUMsS0FBQSxDQUFNLENBQXFCNUUsa0JBQUFBLEVBQUFBLE9BQUEsQ0FBUUYsU0FBUyxHQUFHLENBQUMsQ0FBQTtBQUN2RTtFQUVBLE9BQU9FLE9BQUEsQ0FBUXlFLE9BQUE7QUFDakI7OztBQ3hhTyxJQUFNSSxZQUFBLEdBQU4sY0FBMkJwSSxZQUFBLENBQXVCO0FBQ3ZELEVBQUEsUUFBQTtBQUNBLEVBQUEsUUFBQTtBQUVBLEVBQUEsTUFBQTtBQUVBQyxFQUFBQSxXQUFBQSxHQUFjO0lBQ1osS0FBTSxFQUFBO0FBQ04sSUFBQSxJQUFBLENBQUssTUFBQSxHQUFVb0ksT0FBQSxJQUFZO0FBR3pCLE1BQUEsSUFBSSxDQUFDMUcsUUFBQSxJQUFZWixNQUFBLENBQU91SCxnQkFBQSxFQUFrQjtBQUN4QyxRQUFBLE1BQU1oSSxRQUFBLEdBQVdBLE1BQU0rSCxPQUFBLEVBQVE7QUFFL0J0SCxRQUFBQSxNQUFBLENBQU91SCxnQkFBQSxDQUFpQixrQkFBb0JoSSxFQUFBQSxRQUFBLEVBQVUsS0FBSyxDQUFBO0FBRTNELFFBQUEsT0FBTyxNQUFNO0FBRVhTLFVBQUFBLE1BQUEsQ0FBT3dILG1CQUFBLENBQW9CLGtCQUFBLEVBQW9CakksUUFBUSxDQUFBO0FBQ3pELFNBQUE7QUFDRjtBQUNBLE1BQUE7QUFDRixLQUFBO0FBQ0Y7QUFFVUUsRUFBQUEsV0FBQUEsR0FBb0I7QUFDNUIsSUFBQSxJQUFJLENBQUMsSUFBQSxDQUFLLFFBQUEsRUFBVTtBQUNsQixNQUFBLElBQUEsQ0FBS2dJLGdCQUFBLENBQWlCLElBQUssQ0FBQSxNQUFNLENBQUE7QUFDbkM7QUFDRjtBQUVVOUgsRUFBQUEsYUFBQUEsR0FBZ0I7QUFDeEIsSUFBQSxJQUFJLENBQUMsSUFBQSxDQUFLQyxZQUFBLEVBQWdCLEVBQUE7TUFDeEIsSUFBSyxDQUFBLFFBQUEsSUFBVztNQUNoQixJQUFLLENBQUEsUUFBQSxHQUFXLE1BQUE7QUFDbEI7QUFDRjtBQUVBNkgsRUFBQUEsZ0JBQUFBLENBQWlCQyxLQUFBLEVBQXNCO0lBQ3JDLElBQUssQ0FBQSxNQUFBLEdBQVNBLEtBQUE7SUFDZCxJQUFLLENBQUEsUUFBQSxJQUFXO0FBQ2hCLElBQUEsSUFBQSxDQUFLLFFBQUEsR0FBV0EsS0FBQSxDQUFPQyxPQUFBLElBQVk7TUFDakMsSUFBSSxPQUFPQSxPQUFBLEtBQVksU0FBVyxFQUFBO1FBQ2hDLElBQUtDLENBQUFBLFVBQUEsQ0FBV0QsT0FBTyxDQUFBO09BQ2xCLE1BQUE7QUFDTCxRQUFBLElBQUEsQ0FBS0wsT0FBQSxFQUFRO0FBQ2Y7S0FDRCxDQUFBO0FBQ0g7QUFFQU0sRUFBQUEsVUFBQUEsQ0FBV0QsT0FBQSxFQUF5QjtBQUNsQyxJQUFBLE1BQU1FLE9BQUEsR0FBVSxJQUFBLENBQUssUUFBQSxLQUFhRixPQUFBO0FBQ2xDLElBQUEsSUFBSUUsT0FBQSxFQUFTO01BQ1gsSUFBSyxDQUFBLFFBQUEsR0FBV0YsT0FBQTtBQUNoQixNQUFBLElBQUEsQ0FBS0wsT0FBQSxFQUFRO0FBQ2Y7QUFDRjtBQUVBQSxFQUFBQSxPQUFBQSxHQUFnQjtBQUNkLElBQUEsTUFBTVEsU0FBQSxHQUFZLElBQUtBLENBQUFBLFNBQUEsRUFBVTtBQUNqQyxJQUFBLElBQUEsQ0FBSzNJLFNBQUEsQ0FBVTRJLE9BQUEsQ0FBU3hJLFFBQUEsSUFBYTtBQUNuQ0EsTUFBQUEsUUFBQSxDQUFTdUksU0FBUyxDQUFBO0tBQ25CLENBQUE7QUFDSDtBQUVBQSxFQUFBQSxTQUFBQSxHQUFxQjtBQUNuQixJQUFBLElBQUksT0FBTyxJQUFBLENBQUssUUFBQSxLQUFhLFNBQVcsRUFBQTtNQUN0QyxPQUFPLElBQUEsQ0FBSyxRQUFBO0FBQ2Q7QUFJQSxJQUFBLE9BQU9qSCxVQUFBLENBQVdtSCxRQUFBLEVBQVVDLGVBQUEsS0FBb0IsUUFBQTtBQUNsRDtBQUNGLENBQUE7QUFFTyxJQUFNQyxZQUFBLEdBQWUsSUFBSWIsWUFBQSxFQUFhOzs7QUMvRXRDLElBQU1jLGFBQUEsR0FBTixjQUE0QmxKLFlBQUEsQ0FBdUI7QUFDeEQsRUFBQSxPQUFBLEdBQVUsSUFBQTtBQUNWLEVBQUEsUUFBQTtBQUVBLEVBQUEsTUFBQTtBQUVBQyxFQUFBQSxXQUFBQSxHQUFjO0lBQ1osS0FBTSxFQUFBO0FBQ04sSUFBQSxJQUFBLENBQUssTUFBQSxHQUFVa0osUUFBQSxJQUFhO0FBRzFCLE1BQUEsSUFBSSxDQUFDeEgsUUFBQSxJQUFZWixNQUFBLENBQU91SCxnQkFBQSxFQUFrQjtBQUN4QyxRQUFBLE1BQU1jLGNBQUEsR0FBaUJBLE1BQU1ELFFBQUEsQ0FBUyxJQUFJLENBQUE7QUFDMUMsUUFBQSxNQUFNRSxlQUFBLEdBQWtCQSxNQUFNRixRQUFBLENBQVMsS0FBSyxDQUFBO0FBRTVDcEksUUFBQUEsTUFBQSxDQUFPdUgsZ0JBQUEsQ0FBaUIsUUFBVWMsRUFBQUEsY0FBQSxFQUFnQixLQUFLLENBQUE7QUFDdkRySSxRQUFBQSxNQUFBLENBQU91SCxnQkFBQSxDQUFpQixTQUFXZSxFQUFBQSxlQUFBLEVBQWlCLEtBQUssQ0FBQTtBQUV6RCxRQUFBLE9BQU8sTUFBTTtBQUVYdEksVUFBQUEsTUFBQSxDQUFPd0gsbUJBQUEsQ0FBb0IsUUFBQSxFQUFVYSxjQUFjLENBQUE7QUFDbkRySSxVQUFBQSxNQUFBLENBQU93SCxtQkFBQSxDQUFvQixTQUFBLEVBQVdjLGVBQWUsQ0FBQTtBQUN2RCxTQUFBO0FBQ0Y7QUFFQSxNQUFBO0FBQ0YsS0FBQTtBQUNGO0FBRVU3SSxFQUFBQSxXQUFBQSxHQUFvQjtBQUM1QixJQUFBLElBQUksQ0FBQyxJQUFBLENBQUssUUFBQSxFQUFVO0FBQ2xCLE1BQUEsSUFBQSxDQUFLZ0ksZ0JBQUEsQ0FBaUIsSUFBSyxDQUFBLE1BQU0sQ0FBQTtBQUNuQztBQUNGO0FBRVU5SCxFQUFBQSxhQUFBQSxHQUFnQjtBQUN4QixJQUFBLElBQUksQ0FBQyxJQUFBLENBQUtDLFlBQUEsRUFBZ0IsRUFBQTtNQUN4QixJQUFLLENBQUEsUUFBQSxJQUFXO01BQ2hCLElBQUssQ0FBQSxRQUFBLEdBQVcsTUFBQTtBQUNsQjtBQUNGO0FBRUE2SCxFQUFBQSxnQkFBQUEsQ0FBaUJDLEtBQUEsRUFBc0I7SUFDckMsSUFBSyxDQUFBLE1BQUEsR0FBU0EsS0FBQTtJQUNkLElBQUssQ0FBQSxRQUFBLElBQVc7SUFDaEIsSUFBSyxDQUFBLFFBQUEsR0FBV0EsS0FBQSxDQUFNLElBQUthLENBQUFBLFNBQUEsQ0FBVWpKLElBQUEsQ0FBSyxJQUFJLENBQUMsQ0FBQTtBQUNqRDtBQUVBaUosRUFBQUEsU0FBQUEsQ0FBVUMsTUFBQSxFQUF1QjtBQUMvQixJQUFBLE1BQU1YLE9BQUEsR0FBVSxJQUFBLENBQUssT0FBQSxLQUFZVyxNQUFBO0FBRWpDLElBQUEsSUFBSVgsT0FBQSxFQUFTO01BQ1gsSUFBSyxDQUFBLE9BQUEsR0FBVVcsTUFBQTtBQUNmLE1BQUEsSUFBQSxDQUFLckosU0FBQSxDQUFVNEksT0FBQSxDQUFTeEksUUFBQSxJQUFhO0FBQ25DQSxRQUFBQSxRQUFBLENBQVNpSixNQUFNLENBQUE7T0FDaEIsQ0FBQTtBQUNIO0FBQ0Y7QUFFQUMsRUFBQUEsUUFBQUEsR0FBb0I7SUFDbEIsT0FBTyxJQUFBLENBQUssT0FBQTtBQUNkO0FBQ0YsQ0FBQTtBQUVPLElBQU1DLGFBQUEsR0FBZ0IsSUFBSVAsYUFBQSxFQUFjOzs7QUM3QnhDLFNBQVNRLGtCQUF5QztBQUN2RCxFQUFBLElBQUk5QyxPQUFBO0FBQ0osRUFBQSxJQUFJc0IsTUFBQTtFQUVKLE1BQU15QixRQUFBLEdBQVcsSUFBSWhELE9BQUEsQ0FBUSxDQUFDaUQsUUFBQSxFQUFVQyxPQUFBLEtBQVk7QUFDbERqRCxJQUFBQSxPQUFBLEdBQVVnRCxRQUFBO0FBQ1YxQixJQUFBQSxNQUFBLEdBQVMyQixPQUFBO0dBQ1YsQ0FBQTtFQUVERixRQUFBLENBQVM3RixNQUFBLEdBQVMsU0FBQTtBQUNsQjZGLEVBQUFBLFFBQUEsQ0FBU0csS0FBQSxDQUFNLE1BQU0sRUFFcEIsQ0FBQTtFQUVELFNBQVNDLFFBQUFBLENBQVMvQyxJQUFBLEVBQStCO0FBQy9DeEMsSUFBQUEsTUFBQSxDQUFPd0YsTUFBQSxDQUFPTCxRQUFBLEVBQVUzQyxJQUFJLENBQUE7SUFHNUIsT0FBUTJDLFFBQUEsQ0FBeUMvQyxPQUFBO0lBQ2pELE9BQVErQyxRQUFBLENBQXlDekIsTUFBQTtBQUNuRDtBQUVBeUIsRUFBQUEsUUFBQSxDQUFTL0MsT0FBQSxHQUFXMUUsS0FBQSxJQUFVO0FBQzVCNkgsSUFBQUEsUUFBQSxDQUFTO0FBQ1BqRyxNQUFBQSxNQUFBLEVBQVEsV0FBQTtBQUNSNUIsTUFBQUE7S0FDRCxDQUFBO0FBRUQwRSxJQUFBQSxPQUFBLENBQVExRSxLQUFLLENBQUE7QUFDZixHQUFBO0FBQ0F5SCxFQUFBQSxRQUFBLENBQVN6QixNQUFBLEdBQVUrQixNQUFBLElBQVc7QUFDNUJGLElBQUFBLFFBQUEsQ0FBUztBQUNQakcsTUFBQUEsTUFBQSxFQUFRLFVBQUE7QUFDUm1HLE1BQUFBO0tBQ0QsQ0FBQTtBQUVEL0IsSUFBQUEsTUFBQSxDQUFPK0IsTUFBTSxDQUFBO0FBQ2YsR0FBQTtBQUVBLEVBQUEsT0FBT04sUUFBQTtBQUNUOzs7QUNsQ0EsU0FBU08saUJBQUFBLENBQWtCQyxZQUFBLEVBQXNCO0VBQy9DLE9BQU81SCxJQUFBLENBQUs2SCxHQUFBLENBQUksTUFBTyxDQUFLRCxJQUFBQSxZQUFBLEVBQWMsR0FBSyxDQUFBO0FBQ2pEO0FBRU8sU0FBU0UsUUFBQUEsQ0FBU0MsV0FBQSxFQUErQztFQUN0RSxPQUFRQSxDQUFBQSxXQUFBLElBQWUsUUFBYyxNQUFBLFFBQUEsR0FDakNiLGFBQUEsQ0FBY0QsUUFBQSxFQUNkLEdBQUEsSUFBQTtBQUNOO0FBRU8sSUFBTWUsY0FBQSxHQUFOLGNBQTZCcEMsS0FBQSxDQUFNO0FBR3hDbEksRUFBQUEsV0FBQUEsQ0FBWXNELE9BQUEsRUFBeUI7QUFDbkMsSUFBQSxLQUFBLENBQU0sZ0JBQWdCLENBQUE7QUFDdEIsSUFBQSxJQUFBLENBQUtpSCxNQUFBLEdBQVNqSCxPQUFBLEVBQVNpSCxNQUFBO0FBQ3ZCLElBQUEsSUFBQSxDQUFLQyxNQUFBLEdBQVNsSCxPQUFBLEVBQVNrSCxNQUFBO0FBQ3pCO0FBQ0YsQ0FBQTtBQUVPLFNBQVNDLGdCQUFBQSxDQUFpQnhJLEtBQUEsRUFBcUM7RUFDcEUsT0FBT0EsS0FBQSxZQUFpQnFJLGNBQUE7QUFDMUI7QUFFTyxTQUFTSSxhQUFBQSxDQUNkQyxNQUFBLEVBQ2dCO0FBQ2hCLEVBQUEsSUFBSUMsZ0JBQUEsR0FBbUIsS0FBQTtBQUN2QixFQUFBLElBQUlWLFlBQUEsR0FBZSxDQUFBO0FBQ25CLEVBQUEsSUFBSVcsVUFBQSxHQUFhLEtBQUE7QUFDakIsRUFBQSxJQUFJQyxVQUFBO0VBRUosTUFBTXBCLFFBQUEsR0FBV0QsZUFBQSxFQUF1QjtFQUV4QyxNQUFNc0IsTUFBQSxHQUFVQyxhQUFBLElBQXdDO0lBQ3RELElBQUksQ0FBQ0gsVUFBQSxFQUFZO0FBQ2Y1QyxNQUFBQSxNQUFBLENBQU8sSUFBSXFDLGNBQUEsQ0FBZVUsYUFBYSxDQUFDLENBQUE7TUFFeENMLE1BQUEsQ0FBT00sS0FBQSxJQUFRO0FBQ2pCO0FBQ0YsR0FBQTtFQUNBLE1BQU1DLFdBQUEsR0FBY0EsTUFBTTtBQUN4Qk4sSUFBQUEsZ0JBQUEsR0FBbUIsSUFBQTtBQUNyQixHQUFBO0VBRUEsTUFBTU8sYUFBQSxHQUFnQkEsTUFBTTtBQUMxQlAsSUFBQUEsZ0JBQUEsR0FBbUIsS0FBQTtBQUNyQixHQUFBO0VBRUEsTUFBTVEsV0FBQSxHQUFjQSxNQUNsQnBDLFlBQUEsQ0FBYUosU0FBQSxFQUFVLEtBQ3RCK0IsTUFBQSxDQUFPTixXQUFBLEtBQWdCLFFBQUEsSUFBWWIsYUFBQSxDQUFjRCxRQUFBLEVBQ2xEb0IsQ0FBQUEsSUFBQUEsTUFBQSxDQUFPVSxNQUFBLEVBQU87QUFFaEIsRUFBQSxNQUFNQyxRQUFBLEdBQVdBLE1BQU1sQixRQUFBLENBQVNPLE1BQUEsQ0FBT04sV0FBVyxDQUFBLElBQUtNLE1BQUEsQ0FBT1UsTUFBQSxFQUFPO0VBRXJFLE1BQU0xRSxPQUFBLEdBQVcxRSxLQUFBLElBQWU7SUFDOUIsSUFBSSxDQUFDNEksVUFBQSxFQUFZO0FBQ2ZBLE1BQUFBLFVBQUEsR0FBYSxJQUFBO01BQ2JGLE1BQUEsQ0FBT1ksU0FBQSxHQUFZdEosS0FBSyxDQUFBO0FBQ3hCNkksTUFBQUEsVUFBQSxJQUFhO01BQ2JwQixRQUFBLENBQVMvQyxPQUFBLENBQVExRSxLQUFLLENBQUE7QUFDeEI7QUFDRixHQUFBO0VBRUEsTUFBTWdHLE1BQUEsR0FBVWhHLEtBQUEsSUFBZTtJQUM3QixJQUFJLENBQUM0SSxVQUFBLEVBQVk7QUFDZkEsTUFBQUEsVUFBQSxHQUFhLElBQUE7TUFDYkYsTUFBQSxDQUFPYSxPQUFBLEdBQVV2SixLQUFLLENBQUE7QUFDdEI2SSxNQUFBQSxVQUFBLElBQWE7TUFDYnBCLFFBQUEsQ0FBU3pCLE1BQUEsQ0FBT2hHLEtBQUssQ0FBQTtBQUN2QjtBQUNGLEdBQUE7RUFFQSxNQUFNd0osS0FBQSxHQUFRQSxNQUFNO0FBQ2xCLElBQUEsT0FBTyxJQUFJL0UsT0FBQSxDQUFTZ0YsZUFBQSxJQUFvQjtNQUN0Q1osVUFBQSxHQUFjN0ksS0FBQSxJQUFVO0FBQ3RCLFFBQUEsSUFBSTRJLFVBQUEsSUFBY08sV0FBQSxFQUFlLEVBQUE7QUFDL0JNLFVBQUFBLGVBQUEsQ0FBZ0J6SixLQUFLLENBQUE7QUFDdkI7QUFDRixPQUFBO01BQ0EwSSxNQUFBLENBQU9nQixPQUFBLElBQVU7S0FDbEIsQ0FBQSxDQUFFQyxJQUFBLENBQUssTUFBTTtBQUNaZCxNQUFBQSxVQUFBLEdBQWEsTUFBQTtNQUNiLElBQUksQ0FBQ0QsVUFBQSxFQUFZO1FBQ2ZGLE1BQUEsQ0FBT2tCLFVBQUEsSUFBYTtBQUN0QjtLQUNELENBQUE7QUFDSCxHQUFBO0VBR0EsTUFBTUMsR0FBQSxHQUFNQSxNQUFNO0FBRWhCLElBQUEsSUFBSWpCLFVBQUEsRUFBWTtBQUNkLE1BQUE7QUFDRjtBQUVBLElBQUEsSUFBSWtCLGNBQUE7SUFHSixNQUFNL0QsY0FBQSxHQUNKa0MsWUFBQSxLQUFpQixJQUFJUyxNQUFBLENBQU8zQyxjQUFBLEdBQWlCLE1BQUE7SUFHL0MsSUFBSTtBQUNGK0QsTUFBQUEsY0FBQSxHQUFpQi9ELGNBQUEsSUFBa0IyQyxNQUFBLENBQU9xQixFQUFBLEVBQUc7QUFDL0MsS0FBQSxDQUFBLE9BQVM3RSxLQUFBLEVBQU87QUFDZDRFLE1BQUFBLGNBQUEsR0FBaUJyRixPQUFBLENBQVF1QixNQUFBLENBQU9kLEtBQUssQ0FBQTtBQUN2QztBQUVBVCxJQUFBQSxPQUFBLENBQVFDLE9BQUEsQ0FBUW9GLGNBQWMsQ0FDM0JILENBQUFBLElBQUEsQ0FBS2pGLE9BQU8sQ0FDWmtELENBQUFBLEtBQUEsQ0FBTzFDLEtBQUEsSUFBVTtBQUVoQixNQUFBLElBQUkwRCxVQUFBLEVBQVk7QUFDZCxRQUFBO0FBQ0Y7TUFHQSxNQUFNb0IsS0FBQSxHQUFRdEIsTUFBQSxDQUFPc0IsS0FBQSxLQUFVdkssUUFBQSxHQUFXLENBQUksR0FBQSxDQUFBLENBQUE7QUFDOUMsTUFBQSxNQUFNd0ssVUFBQSxHQUFhdkIsTUFBQSxDQUFPdUIsVUFBQSxJQUFjakMsaUJBQUE7QUFDeEMsTUFBQSxNQUFNa0MsS0FBQSxHQUNKLE9BQU9ELFVBQUEsS0FBZSxVQUFBLEdBQ2xCQSxVQUFBLENBQVdoQyxZQUFBLEVBQWMvQyxLQUFLLENBQUEsR0FDOUIrRSxVQUFBO01BQ04sTUFBTUUsV0FBQSxHQUNKSCxLQUFBLEtBQVUsUUFDVCxPQUFPQSxLQUFBLEtBQVUsUUFBWS9CLElBQUFBLFlBQUEsR0FBZStCLEtBQUEsSUFDNUMsT0FBT0EsS0FBQSxLQUFVLGNBQWNBLEtBQUEsQ0FBTS9CLFlBQUEsRUFBYy9DLEtBQUssQ0FBQTtBQUUzRCxNQUFBLElBQUl5RCxnQkFBQSxJQUFvQixDQUFDd0IsV0FBQSxFQUFhO0FBRXBDbkUsUUFBQUEsTUFBQSxDQUFPZCxLQUFLLENBQUE7QUFDWixRQUFBO0FBQ0Y7TUFFQStDLFlBQUEsRUFBQTtBQUdBUyxNQUFBQSxNQUFBLENBQU8wQixNQUFBLEdBQVNuQyxZQUFBLEVBQWMvQyxLQUFLLENBQUE7QUFHbkNYLE1BQUFBLEtBQUEsQ0FBTTJGLEtBQUssQ0FFUlAsQ0FBQUEsSUFBQSxDQUFLLE1BQU07QUFDVixRQUFBLE9BQU9SLFdBQUEsRUFBZ0IsR0FBQSxNQUFBLEdBQVlLLEtBQUEsRUFBTTtPQUMxQyxDQUFBLENBQ0FHLElBQUEsQ0FBSyxNQUFNO0FBQ1YsUUFBQSxJQUFJaEIsZ0JBQUEsRUFBa0I7QUFDcEIzQyxVQUFBQSxNQUFBLENBQU9kLEtBQUssQ0FBQTtTQUNQLE1BQUE7QUFDTDJFLFVBQUFBLEdBQUEsRUFBSTtBQUNOO09BQ0QsQ0FBQTtLQUNKLENBQUE7QUFDTCxHQUFBO0VBRUEsT0FBTztBQUNMUSxJQUFBQSxPQUFBLEVBQVM1QyxRQUFBO0lBQ1RxQixNQUFBO0lBQ0F3QixRQUFBLEVBQVVBLE1BQU07QUFDZHpCLE1BQUFBLFVBQUEsSUFBYTtBQUNiLE1BQUEsT0FBT3BCLFFBQUE7QUFDVCxLQUFBO0lBQ0F3QixXQUFBO0lBQ0FDLGFBQUE7SUFDQUcsUUFBQTtJQUNBa0IsS0FBQSxFQUFPQSxNQUFNO01BRVgsSUFBSWxCLFFBQUEsRUFBWSxFQUFBO0FBQ2RRLFFBQUFBLEdBQUEsRUFBSTtPQUNDLE1BQUE7QUFDTEwsUUFBQUEsS0FBQSxFQUFNLENBQUVHLElBQUEsQ0FBS0UsR0FBRyxDQUFBO0FBQ2xCO0FBQ0EsTUFBQSxPQUFPcEMsUUFBQTtBQUNUO0FBQ0YsR0FBQTtBQUNGOzs7QUNwTk8sU0FBUytDLHNCQUFzQjtFQUNwQyxJQUFJQyxLQUFBLEdBQStCLEVBQUM7QUFDcEMsRUFBQSxJQUFJQyxZQUFBLEdBQWUsQ0FBQTtFQUNuQixJQUFJQyxRQUFBLEdBQTRCQyxRQUFBLElBQWE7QUFDM0NBLElBQUFBLFFBQUEsRUFBUztBQUNYLEdBQUE7RUFDQSxJQUFJQyxhQUFBLEdBQXNDRCxRQUFBLElBQXlCO0FBQ2pFQSxJQUFBQSxRQUFBLEVBQVM7QUFDWCxHQUFBO0VBQ0EsSUFBSUUsVUFBQSxHQUFnQ0MsRUFBQSxJQUFPcEcsVUFBQSxDQUFXb0csRUFBQSxFQUFJLENBQUMsQ0FBQTtFQUUzRCxNQUFNQyxRQUFBLEdBQVlKLFFBQUEsSUFBbUM7QUFDbkQsSUFBQSxJQUFJRixZQUFBLEVBQWM7TUFDaEJELEtBQUEsQ0FBTVEsSUFBQSxDQUFLTCxRQUFRLENBQUE7S0FDZCxNQUFBO0FBQ0xFLE1BQUFBLFVBQUEsQ0FBVyxNQUFNO0FBQ2ZILFFBQUFBLFFBQUEsQ0FBU0MsUUFBUSxDQUFBO09BQ2xCLENBQUE7QUFDSDtBQUNGLEdBQUE7RUFDQSxNQUFNTSxLQUFBLEdBQVFBLE1BQVk7SUFDeEIsTUFBTUMsYUFBQSxHQUFnQlYsS0FBQTtBQUN0QkEsSUFBQUEsS0FBQSxHQUFRLEVBQUM7SUFDVCxJQUFJVSxhQUFBLENBQWMvSCxNQUFBLEVBQVE7QUFDeEIwSCxNQUFBQSxVQUFBLENBQVcsTUFBTTtBQUNmRCxRQUFBQSxhQUFBLENBQWMsTUFBTTtBQUNsQk0sVUFBQUEsYUFBQSxDQUFjdkUsT0FBQSxDQUFTZ0UsUUFBQSxJQUFhO0FBQ2xDRCxZQUFBQSxRQUFBLENBQVNDLFFBQVEsQ0FBQTtXQUNsQixDQUFBO1NBQ0YsQ0FBQTtPQUNGLENBQUE7QUFDSDtBQUNGLEdBQUE7RUFFQSxPQUFPO0lBQ0xRLEtBQUEsRUFBV1IsUUFBQSxJQUF5QjtBQUNsQyxNQUFBLElBQUlsSSxNQUFBO01BQ0pnSSxZQUFBLEVBQUE7TUFDQSxJQUFJO1FBQ0ZoSSxNQUFBLEdBQVNrSSxRQUFBLEVBQVM7T0FDbEIsU0FBQTtRQUNBRixZQUFBLEVBQUE7UUFDQSxJQUFJLENBQUNBLFlBQUEsRUFBYztBQUNqQlEsVUFBQUEsS0FBQSxFQUFNO0FBQ1I7QUFDRjtBQUNBLE1BQUEsT0FBT3hJLE1BQUE7QUFDVCxLQUFBO0FBQUE7QUFBQTtBQUFBO0lBSUEySSxVQUFBLEVBQ0VULFFBQUEsSUFDMEI7TUFDMUIsT0FBTyxDQUFBLEdBQUlVLElBQUEsS0FBUztBQUNsQk4sUUFBQUEsUUFBQSxDQUFTLE1BQU07VUFDYkosUUFBQSxDQUFTLEdBQUdVLElBQUksQ0FBQTtTQUNqQixDQUFBO0FBQ0gsT0FBQTtBQUNGLEtBQUE7SUFDQU4sUUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBS0FPLGlCQUFBLEVBQW9CeEIsRUFBQSxJQUF1QjtBQUN6Q1ksTUFBQUEsUUFBQSxHQUFXWixFQUFBO0FBQ2IsS0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0lBS0F5QixzQkFBQSxFQUF5QnpCLEVBQUEsSUFBNEI7QUFDbkRjLE1BQUFBLGFBQUEsR0FBZ0JkLEVBQUE7QUFDbEIsS0FBQTtJQUNBMEIsWUFBQSxFQUFlMUIsRUFBQSxJQUF5QjtBQUN0Q2UsTUFBQUEsVUFBQSxHQUFhZixFQUFBO0FBQ2Y7QUFDRixHQUFBO0FBQ0Y7QUFHTyxJQUFNMkIsYUFBQSxHQUFnQmxCLG1CQUFBLEVBQW9COzs7QUM1RjFDLElBQWVtQixTQUFBLEdBQWYsTUFBeUI7QUFFOUIsRUFBQSxVQUFBO0FBRUFDLEVBQUFBLE9BQUFBLEdBQWdCO0FBQ2QsSUFBQSxJQUFBLENBQUtDLGNBQUEsRUFBZTtBQUN0QjtBQUVVQyxFQUFBQSxVQUFBQSxHQUFtQjtBQUMzQixJQUFBLElBQUEsQ0FBS0QsY0FBQSxFQUFlO0FBRXBCLElBQUEsSUFBSTlMLGNBQUEsQ0FBZSxJQUFLZ00sQ0FBQUEsTUFBTSxDQUFHLEVBQUE7QUFDL0IsTUFBQSxJQUFBLENBQUssVUFBQSxHQUFhcEgsVUFBQSxDQUFXLE1BQU07QUFDakMsUUFBQSxJQUFBLENBQUtxSCxjQUFBLEVBQWU7QUFDdEIsT0FBQSxFQUFHLEtBQUtELE1BQU0sQ0FBQTtBQUNoQjtBQUNGO0FBRVVFLEVBQUFBLFlBQUFBLENBQWFDLFNBQUEsRUFBcUM7QUFFMUQsSUFBQSxJQUFBLENBQUtILE1BQUEsR0FBUzFMLElBQUEsQ0FBS0MsR0FBQSxDQUNqQixLQUFLeUwsTUFBQSxJQUFVLENBQ2ZHLEVBQUFBLFNBQUEsS0FBY3pNLFFBQUEsR0FBV1EsUUFBQSxHQUFXLENBQUEsR0FBSSxLQUFLLEdBQy9DLENBQUEsQ0FBQTtBQUNGO0FBRVU0TCxFQUFBQSxjQUFBQSxHQUFpQjtJQUN6QixJQUFJLElBQUEsQ0FBSyxVQUFBLEVBQVk7TUFDbkJNLFlBQUEsQ0FBYSxJQUFLLENBQUEsVUFBVSxDQUFBO01BQzVCLElBQUssQ0FBQSxVQUFBLEdBQWEsTUFBQTtBQUNwQjtBQUNGO0FBR0YsQ0FBQTs7QUN1SE8sSUFBTUMsS0FBQSxHQUFOLGNBS0dULFNBQUEsQ0FBVTtBQU1sQixFQUFBLGFBQUE7QUFDQSxFQUFBLFlBQUE7QUFDQSxFQUFBLE1BQUE7QUFDQSxFQUFBLFFBQUE7QUFFQSxFQUFBLGVBQUE7QUFDQSxFQUFBLG9CQUFBO0FBRUE1TixFQUFBQSxXQUFBQSxDQUFZMkssTUFBQSxFQUE2RDtJQUN2RSxLQUFNLEVBQUE7SUFFTixJQUFLLENBQUEsb0JBQUEsR0FBdUIsS0FBQTtBQUM1QixJQUFBLElBQUEsQ0FBSyxlQUFBLEdBQWtCQSxNQUFBLENBQU8yRCxjQUFBO0FBQzlCLElBQUEsSUFBQSxDQUFLQyxVQUFBLENBQVc1RCxNQUFBLENBQU9ySCxPQUFPLENBQUE7SUFDOUIsSUFBS2tMLENBQUFBLFNBQUEsR0FBWSxFQUFDO0FBQ2xCLElBQUEsSUFBQSxDQUFLLE1BQUEsR0FBUzdELE1BQUEsQ0FBTzhELEtBQUE7QUFDckIsSUFBQSxJQUFBLENBQUt2TCxRQUFBLEdBQVd5SCxNQUFBLENBQU96SCxRQUFBO0FBQ3ZCLElBQUEsSUFBQSxDQUFLRSxTQUFBLEdBQVl1SCxNQUFBLENBQU92SCxTQUFBO0FBQ3hCLElBQUEsSUFBQSxDQUFLLGFBQUEsR0FBZ0JzTCxpQkFBQSxDQUFnQixLQUFLcEwsT0FBTyxDQUFBO0lBQ2pELElBQUtJLENBQUFBLEtBQUEsR0FBUWlILE1BQUEsQ0FBT2pILEtBQUEsSUFBUyxJQUFBLENBQUssYUFBQTtBQUNsQyxJQUFBLElBQUEsQ0FBS3FLLFVBQUEsRUFBVztBQUNsQjtBQUNBLEVBQUEsSUFBSVksT0FBOEI7SUFDaEMsT0FBTyxJQUFBLENBQUtyTCxPQUFBLENBQVFxTCxJQUFBO0FBQ3RCO0FBRUEsRUFBQSxJQUFJckMsVUFBc0M7QUFDeEMsSUFBQSxPQUFPLElBQUssQ0FBQSxRQUFBLEVBQVVBLE9BQUE7QUFDeEI7QUFFQWlDLEVBQUFBLFVBQUFBLENBQ0VqTCxPQUFBLEVBQ007QUFDTixJQUFBLElBQUEsQ0FBS0EsT0FBQSxHQUFVO01BQUUsR0FBRyxJQUFBLENBQUssZUFBQTtNQUFpQixHQUFHQTtBQUFRLEtBQUE7QUFFckQsSUFBQSxJQUFBLENBQUs0SyxZQUFBLENBQWEsSUFBSzVLLENBQUFBLE9BQUEsQ0FBUTBLLE1BQU0sQ0FBQTtBQUN2QztBQUVVQyxFQUFBQSxjQUFBQSxHQUFpQjtJQUN6QixJQUFJLENBQUMsSUFBS08sQ0FBQUEsU0FBQSxDQUFVbkosTUFBQSxJQUFVLElBQUEsQ0FBSzNCLEtBQUEsQ0FBTVYsV0FBQSxLQUFnQixNQUFRLEVBQUE7QUFDL0QsTUFBQSxJQUFBLENBQUssTUFBQSxDQUFPNEwsTUFBQSxDQUFPLElBQUksQ0FBQTtBQUN6QjtBQUNGO0VBRUFDLE9BQ0VDLENBQUFBLE9BQUEsRUFDQXhMLE9BQUEsRUFDTztBQUNQLElBQUEsTUFBTXlELElBQUEsR0FBT0YsV0FBQSxDQUFZLElBQUtuRCxDQUFBQSxLQUFBLENBQU1xRCxJQUFBLEVBQU0rSCxPQUFBLEVBQVMsSUFBQSxDQUFLeEwsT0FBTyxDQUFBO0lBRy9ELElBQUssQ0FBQSxTQUFBLENBQVU7TUFDYnlELElBQUE7QUFDQWpFLE1BQUFBLElBQUEsRUFBTSxTQUFBO01BQ05pTSxhQUFBLEVBQWV6TCxPQUFBLEVBQVNsQixTQUFBO01BQ3hCNE0sTUFBQSxFQUFRMUwsT0FBQSxFQUFTMEw7S0FDbEIsQ0FBQTtBQUVELElBQUEsT0FBT2pJLElBQUE7QUFDVDtFQUVBa0ksUUFDRXZMLENBQUFBLEtBQUEsRUFDQXdMLGVBQUEsRUFDTTtJQUNOLElBQUssQ0FBQSxTQUFBLENBQVU7QUFBRXBNLE1BQUFBLElBQUEsRUFBTSxVQUFBO01BQVlZLEtBQUE7QUFBT3dMLE1BQUFBO0tBQWlCLENBQUE7QUFDN0Q7QUFFQW5FLEVBQUFBLE1BQUFBLENBQU96SCxPQUFBLEVBQXdDO0FBQzdDLElBQUEsTUFBTWdKLE9BQUEsR0FBVSxJQUFBLENBQUssUUFBQSxFQUFVQSxPQUFBO0FBQy9CLElBQUEsSUFBQSxDQUFLLFFBQUEsRUFBVXZCLE1BQUEsQ0FBT3pILE9BQU8sQ0FBQTtBQUM3QixJQUFBLE9BQU9nSixPQUFBLEdBQVVBLE9BQUEsQ0FBUVYsSUFBQSxDQUFLaEssTUFBSSxDQUFFaUksQ0FBQUEsS0FBQSxDQUFNakksTUFBSSxDQUFBLEdBQUk4RSxPQUFBLENBQVFDLE9BQUEsRUFBUTtBQUNwRTtBQUVBa0gsRUFBQUEsT0FBQUEsR0FBZ0I7QUFDZCxJQUFBLEtBQUEsQ0FBTUEsT0FBQSxFQUFRO0FBRWQsSUFBQSxJQUFBLENBQUs5QyxNQUFBLENBQU87QUFBRVAsTUFBQUEsTUFBQSxFQUFRO0tBQU0sQ0FBQTtBQUM5QjtBQUVBMkUsRUFBQUEsS0FBQUEsR0FBYztBQUNaLElBQUEsSUFBQSxDQUFLdEIsT0FBQSxFQUFRO0FBQ2IsSUFBQSxJQUFBLENBQUtvQixRQUFBLENBQVMsSUFBSyxDQUFBLGFBQWEsQ0FBQTtBQUNsQztBQUVBekwsRUFBQUEsUUFBQUEsR0FBb0I7QUFDbEIsSUFBQSxPQUFPLEtBQUtnTCxTQUFBLENBQVV6SixJQUFBLENBQ25CcUssUUFBQSxJQUFhMU0sY0FBQSxDQUFlME0sUUFBQSxDQUFTOUwsT0FBQSxDQUFRWCxPQUFBLEVBQVMsSUFBSSxNQUFNLEtBQ25FLENBQUE7QUFDRjtBQUVBME0sRUFBQUEsVUFBQUEsR0FBc0I7QUFDcEIsSUFBQSxJQUFJLElBQUtDLENBQUFBLGlCQUFBLEVBQWtCLEdBQUksQ0FBRyxFQUFBO01BQ2hDLE9BQU8sQ0FBQyxJQUFLOUwsQ0FBQUEsUUFBQSxFQUFTO0FBQ3hCO0FBRUEsSUFBQSxPQUNFLEtBQUtGLE9BQUEsQ0FBUXlFLE9BQUEsS0FBWUosU0FBQSxJQUN6QixJQUFBLENBQUtqRSxLQUFBLENBQU02TCxlQUFBLEdBQWtCLElBQUEsQ0FBSzdMLEtBQUEsQ0FBTThMLGdCQUFBLEtBQXFCLENBQUE7QUFFakU7QUFFQS9MLEVBQUFBLE9BQUFBLEdBQW1CO0FBQ2pCLElBQUEsSUFBSSxJQUFLQyxDQUFBQSxLQUFBLENBQU0rTCxhQUFBLEVBQWU7TUFDNUIsT0FBTyxJQUFBO0FBQ1Q7QUFFQSxJQUFBLElBQUksSUFBS0gsQ0FBQUEsaUJBQUEsRUFBa0IsR0FBSSxDQUFHLEVBQUE7QUFDaEMsTUFBQSxPQUFPLElBQUtkLENBQUFBLFNBQUEsQ0FBVXpKLElBQUEsQ0FDbkJxSyxRQUFBLElBQWFBLFFBQUEsQ0FBU00sZ0JBQUEsRUFBaUIsQ0FBRWpNLE9BQzVDLENBQUE7QUFDRjtBQUVBLElBQUEsT0FBTyxJQUFLQyxDQUFBQSxLQUFBLENBQU1xRCxJQUFBLEtBQVMsTUFBQTtBQUM3QjtFQUVBNEksYUFBY3ROLENBQUFBLFNBQUEsR0FBWSxDQUFZLEVBQUE7QUFDcEMsSUFBQSxPQUNFLEtBQUtxQixLQUFBLENBQU0rTCxhQUFBLElBQ1gsSUFBQSxDQUFLL0wsS0FBQSxDQUFNcUQsSUFBQSxLQUFTLE1BQ3BCLElBQUEsQ0FBQzVFLGNBQUEsQ0FBZSxJQUFBLENBQUt1QixLQUFBLENBQU1xTCxhQUFBLEVBQWUxTSxTQUFTLENBQUE7QUFFdkQ7QUFFQStGLEVBQUFBLE9BQUFBLEdBQWdCO0FBQ2QsSUFBQSxNQUFNZ0gsUUFBQSxHQUFXLElBQUtaLENBQUFBLFNBQUEsQ0FBVW9CLElBQUEsQ0FBTUMsQ0FBQSxJQUFNQSxDQUFBLENBQUVDLHdCQUFBLEVBQTBCLENBQUE7SUFFeEVWLFFBQUEsRUFBVVcsT0FBQSxDQUFRO0FBQUVDLE1BQUFBLGFBQUEsRUFBZTtLQUFPLENBQUE7QUFHMUMsSUFBQSxJQUFBLENBQUssUUFBQSxFQUFVekQsUUFBQSxFQUFTO0FBQzFCO0FBRUFyRCxFQUFBQSxRQUFBQSxHQUFpQjtBQUNmLElBQUEsTUFBTWtHLFFBQUEsR0FBVyxJQUFLWixDQUFBQSxTQUFBLENBQVVvQixJQUFBLENBQU1DLENBQUEsSUFBTUEsQ0FBQSxDQUFFSSxzQkFBQSxFQUF3QixDQUFBO0lBRXRFYixRQUFBLEVBQVVXLE9BQUEsQ0FBUTtBQUFFQyxNQUFBQSxhQUFBLEVBQWU7S0FBTyxDQUFBO0FBRzFDLElBQUEsSUFBQSxDQUFLLFFBQUEsRUFBVXpELFFBQUEsRUFBUztBQUMxQjtBQUVBMkQsRUFBQUEsV0FBQUEsQ0FBWWQsUUFBQSxFQUF3RDtBQUNsRSxJQUFBLElBQUksQ0FBQyxJQUFLWixDQUFBQSxTQUFBLENBQVU3SSxRQUFBLENBQVN5SixRQUFRLENBQUcsRUFBQTtBQUN0QyxNQUFBLElBQUEsQ0FBS1osU0FBQSxDQUFVdEIsSUFBQSxDQUFLa0MsUUFBUSxDQUFBO0FBRzVCLE1BQUEsSUFBQSxDQUFLdEIsY0FBQSxFQUFlO0FBRXBCLE1BQUEsSUFBQSxDQUFLLE1BQUEsQ0FBT3FDLE1BQUEsQ0FBTztBQUFFck4sUUFBQUEsSUFBQSxFQUFNLGVBQUE7QUFBaUJMLFFBQUFBLEtBQUEsRUFBTyxJQUFBO0FBQU0yTSxRQUFBQTtPQUFVLENBQUE7QUFDckU7QUFDRjtBQUVBZ0IsRUFBQUEsY0FBQUEsQ0FBZWhCLFFBQUEsRUFBd0Q7QUFDckUsSUFBQSxJQUFJLEtBQUtaLFNBQUEsQ0FBVTdJLFFBQUEsQ0FBU3lKLFFBQVEsQ0FBRyxFQUFBO01BQ3JDLElBQUtaLENBQUFBLFNBQUEsR0FBWSxJQUFBLENBQUtBLFNBQUEsQ0FBVTZCLE1BQUEsQ0FBUVIsQ0FBQSxJQUFNQSxDQUFBLEtBQU1ULFFBQVEsQ0FBQTtBQUU1RCxNQUFBLElBQUksQ0FBQyxJQUFBLENBQUtaLFNBQUEsQ0FBVW5KLE1BQUEsRUFBUTtRQUcxQixJQUFJLElBQUEsQ0FBSyxRQUFBLEVBQVU7VUFDakIsSUFBSSxJQUFBLENBQUssb0JBQUEsRUFBc0I7QUFDN0IsWUFBQSxJQUFBLENBQUssUUFBQSxDQUFTMEYsTUFBQSxDQUFPO0FBQUVSLGNBQUFBLE1BQUEsRUFBUTthQUFNLENBQUE7V0FDaEMsTUFBQTtBQUNMLFlBQUEsSUFBQSxDQUFLLFFBQUEsQ0FBU1csV0FBQSxFQUFZO0FBQzVCO0FBQ0Y7QUFFQSxRQUFBLElBQUEsQ0FBSzZDLFVBQUEsRUFBVztBQUNsQjtBQUVBLE1BQUEsSUFBQSxDQUFLLE1BQUEsQ0FBT29DLE1BQUEsQ0FBTztBQUFFck4sUUFBQUEsSUFBQSxFQUFNLGlCQUFBO0FBQW1CTCxRQUFBQSxLQUFBLEVBQU8sSUFBQTtBQUFNMk0sUUFBQUE7T0FBVSxDQUFBO0FBQ3ZFO0FBQ0Y7QUFFQUUsRUFBQUEsaUJBQUFBLEdBQTRCO0lBQzFCLE9BQU8sSUFBQSxDQUFLZCxTQUFBLENBQVVuSixNQUFBO0FBQ3hCO0FBRUFpTCxFQUFBQSxVQUFBQSxHQUFtQjtBQUNqQixJQUFBLElBQUksQ0FBQyxJQUFBLENBQUs1TSxLQUFBLENBQU0rTCxhQUFBLEVBQWU7TUFDN0IsSUFBSyxDQUFBLFNBQUEsQ0FBVTtBQUFFM00sUUFBQUEsSUFBQSxFQUFNO09BQWMsQ0FBQTtBQUN2QztBQUNGO0VBRUF5TixLQUNFak4sQ0FBQUEsT0FBQSxFQUNBd0UsWUFBQSxFQUNnQjtBQUNoQixJQUFBLElBQUksSUFBS3BFLENBQUFBLEtBQUEsQ0FBTVYsV0FBQSxLQUFnQixNQUFRLEVBQUE7TUFDckMsSUFBSSxJQUFBLENBQUtVLEtBQUEsQ0FBTXFELElBQUEsS0FBUyxNQUFhZSxJQUFBQSxZQUFBLEVBQWNrSSxhQUFBLEVBQWU7QUFFaEUsUUFBQSxJQUFBLENBQUtqRixNQUFBLENBQU87QUFBRVAsVUFBQUEsTUFBQSxFQUFRO1NBQU0sQ0FBQTtPQUNuQixNQUFBLElBQUEsSUFBQSxDQUFLLFFBQUEsRUFBVTtBQUV4QixRQUFBLElBQUEsQ0FBSyxRQUFBLENBQVNXLGFBQUEsRUFBYztBQUU1QixRQUFBLE9BQU8sSUFBSyxDQUFBLFFBQUEsQ0FBU21CLE9BQUE7QUFDdkI7QUFDRjtBQUdBLElBQUEsSUFBSWhKLE9BQUEsRUFBUztNQUNYLElBQUtpTCxDQUFBQSxVQUFBLENBQVdqTCxPQUFPLENBQUE7QUFDekI7QUFJQSxJQUFBLElBQUksQ0FBQyxJQUFBLENBQUtBLE9BQUEsQ0FBUXlFLE9BQUEsRUFBUztBQUN6QixNQUFBLE1BQU1xSCxRQUFBLEdBQVcsSUFBS1osQ0FBQUEsU0FBQSxDQUFVb0IsSUFBQSxDQUFNQyxDQUFBLElBQU1BLENBQUEsQ0FBRXZNLE9BQUEsQ0FBUXlFLE9BQU8sQ0FBQTtBQUM3RCxNQUFBLElBQUlxSCxRQUFBLEVBQVU7QUFDWixRQUFBLElBQUEsQ0FBS2IsVUFBQSxDQUFXYSxRQUFBLENBQVM5TCxPQUFPLENBQUE7QUFDbEM7QUFDRjtBQUVBLElBQUEsSUFBSTJELFNBQUEsQ0FBUWxHLEdBQUEsQ0FBSW1HLFFBQUEsS0FBYSxZQUFjLEVBQUE7TUFDekMsSUFBSSxDQUFDckIsS0FBQSxDQUFNQyxPQUFBLENBQVEsSUFBS3hDLENBQUFBLE9BQUEsQ0FBUUosUUFBUSxDQUFHLEVBQUE7UUFDekNrRSxPQUFBLENBQVFELEtBQUEsQ0FDTixDQUNGLG1JQUFBLENBQUEsQ0FBQTtBQUNGO0FBQ0Y7QUFFQSxJQUFBLE1BQU1xSixlQUFBLEdBQWtCLElBQUlDLGVBQUEsRUFBZ0I7SUFLNUMsTUFBTUMsaUJBQUEsR0FBcUJDLE1BQUEsSUFBb0I7QUFDN0NwTSxNQUFBQSxNQUFBLENBQU9xTSxjQUFBLENBQWVELE1BQUEsRUFBUSxRQUFVLEVBQUE7QUFDdENFLFFBQUFBLFVBQUEsRUFBWSxJQUFBO1FBQ1pDLEdBQUEsRUFBS0EsTUFBTTtVQUNULElBQUssQ0FBQSxvQkFBQSxHQUF1QixJQUFBO1VBQzVCLE9BQU9OLGVBQUEsQ0FBZ0JPLE1BQUE7QUFDekI7T0FDRCxDQUFBO0FBQ0gsS0FBQTtJQUdBLE1BQU1DLE9BQUEsR0FBVUEsTUFBTTtBQUNwQixNQUFBLE1BQU1qSixPQUFBLEdBQVVGLGFBQUEsQ0FBYyxJQUFLdkUsQ0FBQUEsT0FBQSxFQUFTd0UsWUFBWSxDQUFBO0FBR3hELE1BQUEsTUFBTW1KLGNBQUEsR0FHRjtRQUNGL04sUUFBQSxFQUFVLEtBQUtBLFFBQUE7QUFDZnlMLFFBQUFBLElBQUEsRUFBTSxJQUFLQSxDQUFBQTtBQUNiLE9BQUE7QUFFQStCLE1BQUFBLGlCQUFBLENBQWtCTyxjQUFjLENBQUE7TUFFaEMsSUFBSyxDQUFBLG9CQUFBLEdBQXVCLEtBQUE7QUFDNUIsTUFBQSxJQUFJLElBQUszTixDQUFBQSxPQUFBLENBQVE0TixTQUFBLEVBQVc7UUFDMUIsT0FBTyxJQUFBLENBQUs1TixPQUFBLENBQVE0TixTQUFBLENBQ2xCbkosT0FBQSxFQUNBa0osY0FBQSxFQUNBLElBQ0YsQ0FBQTtBQUNGO01BRUEsT0FBT2xKLE9BQUEsQ0FBUWtKLGNBQWlELENBQUE7QUFDbEUsS0FBQTtBQUdBLElBQUEsTUFBTUUsT0FBQSxHQUdGO01BQ0ZySixZQUFBO01BQ0F4RSxPQUFBLEVBQVMsS0FBS0EsT0FBQTtNQUNkSixRQUFBLEVBQVUsS0FBS0EsUUFBQTtNQUNmUSxLQUFBLEVBQU8sS0FBS0EsS0FBQTtBQUNac04sTUFBQUE7QUFDRixLQUFBO0FBRUFOLElBQUFBLGlCQUFBLENBQWtCUyxPQUFPLENBQUE7SUFFekIsSUFBSzdOLENBQUFBLE9BQUEsQ0FBUThOLFFBQUEsRUFBVUMsT0FBQSxDQUNyQkYsT0FBQSxFQUNBLElBQ0YsQ0FBQTtBQUdBLElBQUEsSUFBQSxDQUFLLFlBQUEsR0FBZSxJQUFBLENBQUt6TixLQUFBO0FBR3pCLElBQUEsSUFDRSxLQUFLQSxLQUFBLENBQU1WLFdBQUEsS0FBZ0IsVUFDM0IsSUFBS1UsQ0FBQUEsS0FBQSxDQUFNNE4sU0FBQSxLQUFjSCxPQUFBLENBQVFySixZQUFBLEVBQWM2RyxJQUFBLEVBQy9DO01BQ0EsSUFBSyxDQUFBLFNBQUEsQ0FBVTtBQUFFN0wsUUFBQUEsSUFBQSxFQUFNLE9BQUE7QUFBUzZMLFFBQUFBLElBQUEsRUFBTXdDLE9BQUEsQ0FBUXJKLFlBQUEsRUFBYzZHO09BQU0sQ0FBQTtBQUNwRTtJQUVBLE1BQU1uRCxPQUFBLEdBQVdyRSxLQUFBLElBQXlDO01BRXhELElBQUksRUFBRXNELGdCQUFBLENBQWlCdEQsS0FBSyxLQUFLQSxLQUFBLENBQU1xRCxNQUFBLENBQVMsRUFBQTtRQUM5QyxJQUFLLENBQUEsU0FBQSxDQUFVO0FBQ2IxSCxVQUFBQSxJQUFBLEVBQU0sT0FBQTtBQUNOcUUsVUFBQUE7U0FDRCxDQUFBO0FBQ0g7QUFFQSxNQUFBLElBQUksQ0FBQ3NELGdCQUFBLENBQWlCdEQsS0FBSyxDQUFHLEVBQUE7UUFFNUIsSUFBSyxDQUFBLE1BQUEsQ0FBT3dELE1BQUEsQ0FBT2EsT0FBQSxHQUNqQnJFLEtBQUEsRUFDQSxJQUNGLENBQUE7QUFDQSxRQUFBLElBQUEsQ0FBSyxNQUFBLENBQU93RCxNQUFBLENBQU80RyxTQUFBLEdBQ2pCLElBQUs3TixDQUFBQSxLQUFBLENBQU1xRCxJQUFBLEVBQ1hJLEtBQUEsRUFDQSxJQUNGLENBQUE7QUFDRjtBQUdBLE1BQUEsSUFBQSxDQUFLNEcsVUFBQSxFQUFXO0FBQ2xCLEtBQUE7QUFHQSxJQUFBLElBQUEsQ0FBSyxRQUFBLEdBQVdyRCxhQUFBLENBQWM7TUFDNUIxQyxjQUFBLEVBQWdCRixZQUFBLEVBQWNFLGNBQUE7TUFHOUJnRSxFQUFBLEVBQUltRixPQUFBLENBQVFILE9BQUE7QUFDWi9GLE1BQUFBLEtBQUEsRUFBT3VGLGVBQUEsQ0FBZ0J2RixLQUFBLENBQU03SyxJQUFBLENBQUtvUSxlQUFlLENBQUE7TUFDakRqRixTQUFBLEVBQVl4RSxJQUFBLElBQVM7UUFDbkIsSUFBSUEsSUFBQSxLQUFTLE1BQVcsRUFBQTtBQUN0QixVQUFBLElBQUlFLFNBQUEsQ0FBUWxHLEdBQUEsQ0FBSW1HLFFBQUEsS0FBYSxZQUFjLEVBQUE7QUFDekNFLFlBQUFBLE9BQUEsQ0FBUUQsS0FBQSxDQUNOLENBQXlJLHNJQUFBLEVBQUEsSUFBQSxDQUFLL0QsU0FBUyxDQUN6SixDQUFBLENBQUE7QUFDRjtVQUNBb0ksT0FBQSxDQUFRLElBQUl0RCxLQUFBLENBQU0sR0FBRyxJQUFLOUUsQ0FBQUEsU0FBUyxvQkFBb0IsQ0FBUSxDQUFBO0FBQy9ELFVBQUE7QUFDRjtRQUVBLElBQUk7VUFDRixJQUFLeUwsQ0FBQUEsT0FBQSxDQUFROUgsSUFBSSxDQUFBO0FBQ25CLFNBQUEsQ0FBQSxPQUFTSSxLQUFBLEVBQU87QUFDZHFFLFVBQUFBLE9BQUEsQ0FBUXJFLEtBQWUsQ0FBQTtBQUN2QixVQUFBO0FBQ0Y7UUFHQSxJQUFLLENBQUEsTUFBQSxDQUFPd0QsTUFBQSxDQUFPWSxTQUFBLEdBQVl4RSxJQUFBLEVBQU0sSUFBaUMsQ0FBQTtBQUN0RSxRQUFBLElBQUEsQ0FBSyxNQUFBLENBQU80RCxNQUFBLENBQU80RyxTQUFBLEdBQ2pCeEssSUFBQSxFQUNBLElBQUtyRCxDQUFBQSxLQUFBLENBQU15RCxLQUFBLEVBQ1gsSUFDRixDQUFBO0FBR0EsUUFBQSxJQUFBLENBQUs0RyxVQUFBLEVBQVc7QUFDbEIsT0FBQTtNQUNBdkMsT0FBQTtBQUNBYSxNQUFBQSxNQUFBLEVBQVFBLENBQUNuQyxZQUFBLEVBQWMvQyxLQUFBLEtBQVU7UUFDL0IsSUFBSyxDQUFBLFNBQUEsQ0FBVTtBQUFFckUsVUFBQUEsSUFBQSxFQUFNLFFBQUE7VUFBVW9ILFlBQUE7QUFBYy9DLFVBQUFBO1NBQU8sQ0FBQTtBQUN4RCxPQUFBO01BQ0F3RSxPQUFBLEVBQVNBLE1BQU07UUFDYixJQUFLLENBQUEsU0FBQSxDQUFVO0FBQUU3SSxVQUFBQSxJQUFBLEVBQU07U0FBUyxDQUFBO0FBQ2xDLE9BQUE7TUFDQStJLFVBQUEsRUFBWUEsTUFBTTtRQUNoQixJQUFLLENBQUEsU0FBQSxDQUFVO0FBQUUvSSxVQUFBQSxJQUFBLEVBQU07U0FBWSxDQUFBO0FBQ3JDLE9BQUE7QUFDQW1KLE1BQUFBLEtBQUEsRUFBT2tGLE9BQUEsQ0FBUTdOLE9BQUEsQ0FBUTJJLEtBQUE7QUFDdkJDLE1BQUFBLFVBQUEsRUFBWWlGLE9BQUEsQ0FBUTdOLE9BQUEsQ0FBUTRJLFVBQUE7QUFDNUI3QixNQUFBQSxXQUFBLEVBQWE4RyxPQUFBLENBQVE3TixPQUFBLENBQVErRyxXQUFBO01BQzdCZ0IsTUFBQSxFQUFRQSxNQUFNO0tBQ2YsQ0FBQTtBQUVELElBQUEsT0FBTyxJQUFLLENBQUEsUUFBQSxDQUFTbUIsS0FBQSxFQUFNO0FBQzdCO0VBRUEsU0FBQWdGLENBQVVDLE1BQUEsRUFBcUM7SUFDN0MsTUFBTUMsT0FBQSxHQUNKaE8sS0FBQSxJQUM4QjtNQUM5QixRQUFRK04sTUFBQSxDQUFPM08sSUFBQTtRQUNiLEtBQUssUUFBQTtVQUNILE9BQU87QUFDTCxZQUFBLEdBQUdZLEtBQUE7WUFDSGlPLGlCQUFBLEVBQW1CRixNQUFBLENBQU92SCxZQUFBO1lBQzFCMEgsa0JBQUEsRUFBb0JILE1BQUEsQ0FBT3RLO0FBQzdCLFdBQUE7UUFDRixLQUFLLE9BQUE7VUFDSCxPQUFPO0FBQ0wsWUFBQSxHQUFHekQsS0FBQTtBQUNIVixZQUFBQSxXQUFBLEVBQWE7QUFDZixXQUFBO1FBQ0YsS0FBSyxVQUFBO1VBQ0gsT0FBTztBQUNMLFlBQUEsR0FBR1UsS0FBQTtBQUNIVixZQUFBQSxXQUFBLEVBQWE7QUFDZixXQUFBO1FBQ0YsS0FBSyxPQUFBO1VBQ0gsT0FBTztBQUNMLFlBQUEsR0FBR1UsS0FBQTtBQUNILFlBQUEsR0FBR21PLFVBQUEsQ0FBV25PLEtBQUEsQ0FBTXFELElBQUEsRUFBTSxLQUFLekQsT0FBTyxDQUFBO0FBQ3RDZ08sWUFBQUEsU0FBQSxFQUFXRyxNQUFBLENBQU85QyxJQUFBLElBQVE7QUFDNUIsV0FBQTtRQUNGLEtBQUssU0FBQTtVQUNILE9BQU87QUFDTCxZQUFBLEdBQUdqTCxLQUFBO1lBQ0hxRCxJQUFBLEVBQU0wSyxNQUFBLENBQU8xSyxJQUFBO0FBQ2J3SSxZQUFBQSxlQUFBLEVBQWlCN0wsS0FBQSxDQUFNNkwsZUFBQSxHQUFrQixDQUFBO1lBQ3pDUixhQUFBLEVBQWUwQyxNQUFBLENBQU8xQyxhQUFBLElBQWlCek4sSUFBQSxDQUFLTCxHQUFBLEVBQUk7QUFDaERrRyxZQUFBQSxLQUFBLEVBQU8sSUFBQTtBQUNQc0ksWUFBQUEsYUFBQSxFQUFlLEtBQUE7QUFDZjVMLFlBQUFBLE1BQUEsRUFBUSxTQUFBO0FBQ1IsWUFBQSxJQUFJLENBQUM0TixNQUFBLENBQU96QyxNQUFBLElBQVU7QUFDcEJoTSxjQUFBQSxXQUFBLEVBQWEsTUFBQTtBQUNiMk8sY0FBQUEsaUJBQUEsRUFBbUIsQ0FBQTtBQUNuQkMsY0FBQUEsa0JBQUEsRUFBb0I7QUFDdEIsYUFBQTtBQUNGLFdBQUE7UUFDRixLQUFLLE9BQUE7QUFDSCxVQUFBLE1BQU16SyxLQUFBLEdBQVFzSyxNQUFBLENBQU90SyxLQUFBO1VBRXJCLElBQUlzRCxnQkFBQSxDQUFpQnRELEtBQUssQ0FBS0EsSUFBQUEsS0FBQSxDQUFNb0QsTUFBQSxJQUFVLElBQUEsQ0FBSyxZQUFBLEVBQWM7WUFDaEUsT0FBTztjQUFFLEdBQUcsSUFBQSxDQUFLLFlBQUE7QUFBY3ZILGNBQUFBLFdBQUEsRUFBYTtBQUFPLGFBQUE7QUFDckQ7VUFFQSxPQUFPO0FBQ0wsWUFBQSxHQUFHVSxLQUFBO1lBQ0h5RCxLQUFBO0FBQ0FxSSxZQUFBQSxnQkFBQSxFQUFrQjlMLEtBQUEsQ0FBTThMLGdCQUFBLEdBQW1CLENBQUE7QUFDM0NzQyxZQUFBQSxjQUFBLEVBQWdCeFEsSUFBQSxDQUFLTCxHQUFBLEVBQUk7QUFDekIwUSxZQUFBQSxpQkFBQSxFQUFtQmpPLEtBQUEsQ0FBTWlPLGlCQUFBLEdBQW9CLENBQUE7QUFDN0NDLFlBQUFBLGtCQUFBLEVBQW9CekssS0FBQTtBQUNwQm5FLFlBQUFBLFdBQUEsRUFBYSxNQUFBO0FBQ2JhLFlBQUFBLE1BQUEsRUFBUTtBQUNWLFdBQUE7UUFDRixLQUFLLFlBQUE7VUFDSCxPQUFPO0FBQ0wsWUFBQSxHQUFHSCxLQUFBO0FBQ0grTCxZQUFBQSxhQUFBLEVBQWU7QUFDakIsV0FBQTtRQUNGLEtBQUssVUFBQTtVQUNILE9BQU87QUFDTCxZQUFBLEdBQUcvTCxLQUFBO0FBQ0gsWUFBQSxHQUFHK04sTUFBQSxDQUFPL047QUFDWixXQUFBO0FBQ0o7QUFDRixLQUFBO0FBRUEsSUFBQSxJQUFBLENBQUtBLEtBQUEsR0FBUWdPLE9BQUEsQ0FBUSxLQUFLaE8sS0FBSyxDQUFBO0lBRS9CaUssYUFBQSxDQUFjTixLQUFBLENBQU0sTUFBTTtBQUN4QixNQUFBLElBQUEsQ0FBS21CLFNBQUEsQ0FBVTNGLE9BQUEsQ0FBU3VHLFFBQUEsSUFBYTtRQUNuQ0EsUUFBQSxDQUFTMkMsYUFBQSxFQUFjO09BQ3hCLENBQUE7QUFFRCxNQUFBLElBQUEsQ0FBSyxNQUFBLENBQU81QixNQUFBLENBQU87QUFBRTFOLFFBQUFBLEtBQUEsRUFBTyxJQUFBO0FBQU1LLFFBQUFBLElBQUEsRUFBTSxTQUFBO0FBQVcyTyxRQUFBQTtPQUFRLENBQUE7S0FDNUQsQ0FBQTtBQUNIO0FBQ0YsQ0FBQTtBQUVPLFNBQVNJLFVBTWQ5SyxDQUFBQSxJQUFBLEVBQ0F6RCxPQUFBLEVBQ0E7RUFDQSxPQUFPO0FBQ0xxTyxJQUFBQSxpQkFBQSxFQUFtQixDQUFBO0FBQ25CQyxJQUFBQSxrQkFBQSxFQUFvQixJQUFBO0FBQ3BCNU8sSUFBQUEsV0FBQSxFQUFhb0gsUUFBQSxDQUFTOUcsT0FBQSxDQUFRK0csV0FBVyxJQUFJLFVBQWEsR0FBQSxRQUFBO0lBQzFELElBQUl0RCxJQUFBLEtBQVMsTUFDVixJQUFBO0FBQ0NJLE1BQUFBLEtBQUEsRUFBTyxJQUFBO0FBQ1B0RCxNQUFBQSxNQUFBLEVBQVE7QUFDVixLQUFBO0FBQ0osR0FBQTtBQUNGO0FBRUEsU0FBUzZLLGlCQUFBQSxDQU1QcEwsT0FBQSxFQUMyQjtBQUMzQixFQUFBLE1BQU15RCxJQUFBLEdBQ0osT0FBT3pELE9BQUEsQ0FBUTBPLFdBQUEsS0FBZ0IsVUFDMUIxTyxHQUFBQSxPQUFBLENBQVEwTyxXQUFBLEVBQ1QxTyxHQUFBQSxPQUFBLENBQVEwTyxXQUFBO0VBRWQsTUFBTUMsT0FBQSxHQUFVbEwsSUFBQSxLQUFTLE1BQUE7QUFFekIsRUFBQSxNQUFNbUwsb0JBQUEsR0FBdUJELE9BQUEsR0FDekIsT0FBTzNPLE9BQUEsQ0FBUTRPLG9CQUFBLEtBQXlCLFVBQ3JDNU8sR0FBQUEsT0FBQSxDQUFRNE8sb0JBQUEsS0FDVDVPLE9BQUEsQ0FBUTRPLG9CQUFBLEdBQ1YsQ0FBQTtFQUVKLE9BQU87SUFDTG5MLElBQUE7QUFDQXdJLElBQUFBLGVBQUEsRUFBaUIsQ0FBQTtJQUNqQlIsYUFBQSxFQUFla0QsT0FBQSxHQUFXQyxvQkFBQSxJQUF3QjVRLElBQUEsQ0FBS0wsR0FBQSxFQUFTLEdBQUEsQ0FBQTtBQUNoRWtHLElBQUFBLEtBQUEsRUFBTyxJQUFBO0FBQ1BxSSxJQUFBQSxnQkFBQSxFQUFrQixDQUFBO0FBQ2xCc0MsSUFBQUEsY0FBQSxFQUFnQixDQUFBO0FBQ2hCSCxJQUFBQSxpQkFBQSxFQUFtQixDQUFBO0FBQ25CQyxJQUFBQSxrQkFBQSxFQUFvQixJQUFBO0FBQ3BCTixJQUFBQSxTQUFBLEVBQVcsSUFBQTtBQUNYN0IsSUFBQUEsYUFBQSxFQUFlLEtBQUE7SUFDZjVMLE1BQUEsRUFBUW9PLE9BQUEsR0FBVSxTQUFZLEdBQUEsU0FBQTtBQUM5QmpQLElBQUFBLFdBQUEsRUFBYTtBQUNmLEdBQUE7QUFDRjs7O0FDL2tCTyxJQUFNbVAsVUFBQSxHQUFOLGNBQXlCcFMsWUFBQSxDQUFpQztFQUcvREMsV0FBbUIySyxDQUFBQSxNQUFBLEdBQTJCLEVBQUksRUFBQTtJQUNoRCxLQUFNLEVBQUE7SUFEVyxJQUFBQSxDQUFBQSxNQUFBLEdBQUFBLE1BQUE7QUFFakIsSUFBQSxJQUFBLENBQUssUUFBQSxrQkFBVyxJQUFJeUgsR0FBQSxFQUFtQjtBQUN6QztBQUxBLEVBQUEsUUFBQTtBQU9BQyxFQUFBQSxLQUFBQSxDQU1FQyxNQUFBLEVBQ0FoUCxPQUFBLEVBSUFJLEtBQUEsRUFDK0M7QUFDL0MsSUFBQSxNQUFNUixRQUFBLEdBQVdJLE9BQUEsQ0FBUUosUUFBQTtJQUN6QixNQUFNRSxTQUFBLEdBQ0pFLE9BQUEsQ0FBUUYsU0FBQSxJQUFhQyxxQkFBQSxDQUFzQkgsUUFBQSxFQUFVSSxPQUFPLENBQUE7QUFDOUQsSUFBQSxJQUFJYixLQUFBLEdBQVEsSUFBS3FPLENBQUFBLEdBQUEsQ0FBNEMxTixTQUFTLENBQUE7SUFFdEUsSUFBSSxDQUFDWCxLQUFBLEVBQU87TUFDVkEsS0FBQSxHQUFRLElBQUk0TCxLQUFBLENBQU07QUFDaEJJLFFBQUFBLEtBQUEsRUFBTyxJQUFBO1FBQ1B2TCxRQUFBO1FBQ0FFLFNBQUE7QUFDQUUsUUFBQUEsT0FBQSxFQUFTZ1AsTUFBQSxDQUFPQyxtQkFBQSxDQUFvQmpQLE9BQU8sQ0FBQTtRQUMzQ0ksS0FBQTtBQUNBNEssUUFBQUEsY0FBQSxFQUFnQmdFLE1BQUEsQ0FBT0UsZ0JBQUEsQ0FBaUJ0UCxRQUFRO09BQ2pELENBQUE7TUFDRCxJQUFLNUMsQ0FBQUEsR0FBQSxDQUFJbUMsS0FBSyxDQUFBO0FBQ2hCO0FBRUEsSUFBQSxPQUFPQSxLQUFBO0FBQ1Q7QUFFQW5DLEVBQUFBLEdBQUFBLENBQUltQyxLQUFBLEVBQXdDO0lBQzFDLElBQUksQ0FBQyxJQUFLLENBQUEsUUFBQSxDQUFTZ1EsR0FBQSxDQUFJaFEsS0FBQSxDQUFNVyxTQUFTLENBQUcsRUFBQTtNQUN2QyxJQUFLLENBQUEsUUFBQSxDQUFTc1AsR0FBQSxDQUFJalEsS0FBQSxDQUFNVyxTQUFBLEVBQVdYLEtBQUssQ0FBQTtBQUV4QyxNQUFBLElBQUEsQ0FBSzBOLE1BQUEsQ0FBTztBQUNWck4sUUFBQUEsSUFBQSxFQUFNLE9BQUE7QUFDTkwsUUFBQUE7T0FDRCxDQUFBO0FBQ0g7QUFDRjtBQUVBbU0sRUFBQUEsTUFBQUEsQ0FBT25NLEtBQUEsRUFBd0M7SUFDN0MsTUFBTWtRLFVBQUEsR0FBYSxJQUFBLENBQUssUUFBQSxDQUFTN0IsR0FBQSxDQUFJck8sS0FBQSxDQUFNVyxTQUFTLENBQUE7QUFFcEQsSUFBQSxJQUFJdVAsVUFBQSxFQUFZO01BQ2RsUSxLQUFBLENBQU1vTCxPQUFBLEVBQVE7TUFFZCxJQUFJOEUsVUFBQSxLQUFlbFEsS0FBQSxFQUFPO0FBQ3hCLFFBQUEsSUFBQSxDQUFLLFFBQUEsQ0FBU2pDLE1BQUEsQ0FBT2lDLEtBQUEsQ0FBTVcsU0FBUyxDQUFBO0FBQ3RDO0FBRUEsTUFBQSxJQUFBLENBQUsrTSxNQUFBLENBQU87QUFBRXJOLFFBQUFBLElBQUEsRUFBTSxTQUFBO0FBQVdMLFFBQUFBO09BQU8sQ0FBQTtBQUN4QztBQUNGO0FBRUFtUSxFQUFBQSxLQUFBQSxHQUFjO0lBQ1pqRixhQUFBLENBQWNOLEtBQUEsQ0FBTSxNQUFNO0FBQ3hCLE1BQUEsSUFBQSxDQUFLd0YsTUFBQSxFQUFPLENBQUVoSyxPQUFBLENBQVNwRyxLQUFBLElBQVU7UUFDL0IsSUFBS21NLENBQUFBLE1BQUEsQ0FBT25NLEtBQUssQ0FBQTtPQUNsQixDQUFBO0tBQ0YsQ0FBQTtBQUNIO0FBRUFxTyxFQUFBQSxHQUFBQSxDQU1FMU4sU0FBQSxFQUMyRDtBQUMzRCxJQUFBLE9BQU8sS0FBSyxRQUFBLENBQVMwTixHQUFBLENBQUkxTixTQUFTLENBQUE7QUFHcEM7QUFFQXlQLEVBQUFBLE1BQUFBLEdBQXVCO0lBQ3JCLE9BQU8sQ0FBQyxHQUFHLElBQUssQ0FBQSxRQUFBLENBQVNDLE1BQUEsRUFBUSxDQUFBO0FBQ25DO0FBRUFsRCxFQUFBQSxJQUFBQSxDQUNFL00sT0FBQSxFQUNnRDtBQUNoRCxJQUFBLE1BQU1rUSxnQkFBQSxHQUFtQjtBQUFFaFEsTUFBQUEsS0FBQSxFQUFPLElBQUE7TUFBTSxHQUFHRjtBQUFRLEtBQUE7QUFFbkQsSUFBQSxPQUFPLElBQUtnUSxDQUFBQSxNQUFBLEVBQU8sQ0FBRWpELElBQUEsQ0FBTW5OLEtBQUEsSUFDekJHLFVBQUEsQ0FBV21RLGdCQUFBLEVBQWtCdFEsS0FBSyxDQUNwQyxDQUFBO0FBQ0Y7RUFFQXVRLE9BQVFuUSxDQUFBQSxPQUFBLEdBQXdCLEVBQWtCLEVBQUE7QUFDaEQsSUFBQSxNQUFNb1EsT0FBQSxHQUFVLElBQUtKLENBQUFBLE1BQUEsRUFBTztJQUM1QixPQUFPdE8sTUFBQSxDQUFPQyxJQUFBLENBQUszQixPQUFPLENBQUV3QyxDQUFBQSxNQUFBLEdBQVMsQ0FBQSxHQUNqQzROLE9BQUEsQ0FBUTVDLE1BQUEsQ0FBUTVOLEtBQUEsSUFBVUcsVUFBQSxDQUFXQyxPQUFBLEVBQVNKLEtBQUssQ0FBQyxDQUFBLEdBQ3BEd1EsT0FBQTtBQUNOO0FBRUE5QyxFQUFBQSxNQUFBQSxDQUFPK0MsS0FBQSxFQUFvQztJQUN6Q3ZGLGFBQUEsQ0FBY04sS0FBQSxDQUFNLE1BQU07QUFDeEIsTUFBQSxJQUFBLENBQUtwTixTQUFBLENBQVU0SSxPQUFBLENBQVN4SSxRQUFBLElBQWE7QUFDbkNBLFFBQUFBLFFBQUEsQ0FBUzZTLEtBQUssQ0FBQTtPQUNmLENBQUE7S0FDRixDQUFBO0FBQ0g7QUFFQTlLLEVBQUFBLE9BQUFBLEdBQWdCO0lBQ2R1RixhQUFBLENBQWNOLEtBQUEsQ0FBTSxNQUFNO0FBQ3hCLE1BQUEsSUFBQSxDQUFLd0YsTUFBQSxFQUFPLENBQUVoSyxPQUFBLENBQVNwRyxLQUFBLElBQVU7UUFDL0JBLEtBQUEsQ0FBTTJGLE9BQUEsRUFBUTtPQUNmLENBQUE7S0FDRixDQUFBO0FBQ0g7QUFFQWMsRUFBQUEsUUFBQUEsR0FBaUI7SUFDZnlFLGFBQUEsQ0FBY04sS0FBQSxDQUFNLE1BQU07QUFDeEIsTUFBQSxJQUFBLENBQUt3RixNQUFBLEVBQU8sQ0FBRWhLLE9BQUEsQ0FBU3BHLEtBQUEsSUFBVTtRQUMvQkEsS0FBQSxDQUFNeUcsUUFBQSxFQUFTO09BQ2hCLENBQUE7S0FDRixDQUFBO0FBQ0g7QUFDRixDQUFBOzs7QUM5SU8sSUFBTWlLLFFBQUEsR0FBTixjQUtHdkYsU0FBQSxDQUFVO0FBS2xCLEVBQUEsVUFBQTtBQUNBLEVBQUEsY0FBQTtBQUNBLEVBQUEsUUFBQTtBQUVBNU4sRUFBQUEsV0FBQUEsQ0FBWTJLLE1BQUEsRUFBNkQ7SUFDdkUsS0FBTSxFQUFBO0FBRU4sSUFBQSxJQUFBLENBQUt5SSxVQUFBLEdBQWF6SSxNQUFBLENBQU95SSxVQUFBO0FBQ3pCLElBQUEsSUFBQSxDQUFLLGNBQUEsR0FBaUJ6SSxNQUFBLENBQU8wSSxhQUFBO0lBQzdCLElBQUssQ0FBQSxVQUFBLEdBQWEsRUFBQztBQUNuQixJQUFBLElBQUEsQ0FBSzNQLEtBQUEsR0FBUWlILE1BQUEsQ0FBT2pILEtBQUEsSUFBU2dMLGVBQUEsRUFBZ0I7QUFFN0MsSUFBQSxJQUFBLENBQUtILFVBQUEsQ0FBVzVELE1BQUEsQ0FBT3JILE9BQU8sQ0FBQTtBQUM5QixJQUFBLElBQUEsQ0FBS3lLLFVBQUEsRUFBVztBQUNsQjtBQUVBUSxFQUFBQSxVQUFBQSxDQUNFakwsT0FBQSxFQUNNO0lBQ04sSUFBS0EsQ0FBQUEsT0FBQSxHQUFVQSxPQUFBO0FBRWYsSUFBQSxJQUFBLENBQUs0SyxZQUFBLENBQWEsSUFBSzVLLENBQUFBLE9BQUEsQ0FBUTBLLE1BQU0sQ0FBQTtBQUN2QztBQUVBLEVBQUEsSUFBSVcsT0FBaUM7SUFDbkMsT0FBTyxJQUFBLENBQUtyTCxPQUFBLENBQVFxTCxJQUFBO0FBQ3RCO0FBRUF1QixFQUFBQSxXQUFBQSxDQUFZZCxRQUFBLEVBQXNEO0lBQ2hFLElBQUksQ0FBQyxLQUFLLFVBQUEsQ0FBV3pKLFFBQUEsQ0FBU3lKLFFBQVEsQ0FBRyxFQUFBO0FBQ3ZDLE1BQUEsSUFBQSxDQUFLLFVBQUEsQ0FBV2xDLElBQUEsQ0FBS2tDLFFBQVEsQ0FBQTtBQUc3QixNQUFBLElBQUEsQ0FBS3RCLGNBQUEsRUFBZTtBQUVwQixNQUFBLElBQUEsQ0FBSyxjQUFBLENBQWVxQyxNQUFBLENBQU87QUFDekJyTixRQUFBQSxJQUFBLEVBQU0sZUFBQTtBQUNOYyxRQUFBQSxRQUFBLEVBQVUsSUFBQTtBQUNWd0wsUUFBQUE7T0FDRCxDQUFBO0FBQ0g7QUFDRjtBQUVBZ0IsRUFBQUEsY0FBQUEsQ0FBZWhCLFFBQUEsRUFBc0Q7QUFDbkUsSUFBQSxJQUFBLENBQUssVUFBQSxHQUFhLElBQUEsQ0FBSyxVQUFBLENBQVdpQixNQUFBLENBQVFSLENBQUEsSUFBTUEsQ0FBQSxLQUFNVCxRQUFRLENBQUE7QUFFOUQsSUFBQSxJQUFBLENBQUtyQixVQUFBLEVBQVc7QUFFaEIsSUFBQSxJQUFBLENBQUssY0FBQSxDQUFlb0MsTUFBQSxDQUFPO0FBQ3pCck4sTUFBQUEsSUFBQSxFQUFNLGlCQUFBO0FBQ05jLE1BQUFBLFFBQUEsRUFBVSxJQUFBO0FBQ1Z3TCxNQUFBQTtLQUNELENBQUE7QUFDSDtBQUVVbkIsRUFBQUEsY0FBQUEsR0FBaUI7QUFDekIsSUFBQSxJQUFJLENBQUMsSUFBSyxDQUFBLFVBQUEsQ0FBVzVJLE1BQUEsRUFBUTtBQUMzQixNQUFBLElBQUksSUFBSzNCLENBQUFBLEtBQUEsQ0FBTUcsTUFBQSxLQUFXLFNBQVcsRUFBQTtBQUNuQyxRQUFBLElBQUEsQ0FBS2tLLFVBQUEsRUFBVztPQUNYLE1BQUE7QUFDTCxRQUFBLElBQUEsQ0FBSyxjQUFBLENBQWVhLE1BQUEsQ0FBTyxJQUFJLENBQUE7QUFDakM7QUFDRjtBQUNGO0FBRUFyQyxFQUFBQSxRQUFBQSxHQUE2QjtBQUMzQixJQUFBLE9BQ0UsSUFBSyxDQUFBLFFBQUEsRUFBVUEsUUFBQSxFQUFTO0FBQUE7QUFFeEIsSUFBQSxJQUFBLENBQUsrRyxPQUFBLENBQVEsSUFBSzVQLENBQUFBLEtBQUEsQ0FBTTZQLFNBQVUsQ0FBQTtBQUV0QztFQUVBLE1BQU1ELE9BQUFBLENBQVFDLFNBQUEsRUFBdUM7QUFDbkQsSUFBQSxJQUFBLENBQUssUUFBQSxHQUFXN0ksYUFBQSxDQUFjO01BQzVCc0IsRUFBQSxFQUFJQSxNQUFNO0FBQ1IsUUFBQSxJQUFJLENBQUMsSUFBQSxDQUFLMUksT0FBQSxDQUFRa1EsVUFBQSxFQUFZO1VBQzVCLE9BQU85TSxPQUFBLENBQVF1QixNQUFBLENBQU8sSUFBSUMsS0FBQSxDQUFNLHFCQUFxQixDQUFDLENBQUE7QUFDeEQ7QUFDQSxRQUFBLE9BQU8sSUFBSzVFLENBQUFBLE9BQUEsQ0FBUWtRLFVBQUEsQ0FBV0QsU0FBUyxDQUFBO0FBQzFDLE9BQUE7QUFDQWxILE1BQUFBLE1BQUEsRUFBUUEsQ0FBQ25DLFlBQUEsRUFBYy9DLEtBQUEsS0FBVTtRQUMvQixJQUFLLENBQUEsU0FBQSxDQUFVO0FBQUVyRSxVQUFBQSxJQUFBLEVBQU0sUUFBQTtVQUFVb0gsWUFBQTtBQUFjL0MsVUFBQUE7U0FBTyxDQUFBO0FBQ3hELE9BQUE7TUFDQXdFLE9BQUEsRUFBU0EsTUFBTTtRQUNiLElBQUssQ0FBQSxTQUFBLENBQVU7QUFBRTdJLFVBQUFBLElBQUEsRUFBTTtTQUFTLENBQUE7QUFDbEMsT0FBQTtNQUNBK0ksVUFBQSxFQUFZQSxNQUFNO1FBQ2hCLElBQUssQ0FBQSxTQUFBLENBQVU7QUFBRS9JLFVBQUFBLElBQUEsRUFBTTtTQUFZLENBQUE7QUFDckMsT0FBQTtBQUNBbUosTUFBQUEsS0FBQSxFQUFPLElBQUEsQ0FBSzNJLE9BQUEsQ0FBUTJJLEtBQUEsSUFBUyxDQUFBO0FBQzdCQyxNQUFBQSxVQUFBLEVBQVksSUFBQSxDQUFLNUksT0FBQSxDQUFRNEksVUFBQTtBQUN6QjdCLE1BQUFBLFdBQUEsRUFBYSxJQUFBLENBQUsvRyxPQUFBLENBQVErRyxXQUFBO01BQzFCZ0IsTUFBQSxFQUFRQSxNQUFNLElBQUEsQ0FBSyxjQUFBLENBQWVBLE1BQUEsQ0FBTyxJQUFJO0tBQzlDLENBQUE7QUFFRCxJQUFBLE1BQU1vSSxRQUFBLEdBQVcsSUFBQSxDQUFLL1AsS0FBQSxDQUFNRyxNQUFBLEtBQVcsU0FBQTtJQUN2QyxNQUFNNlAsUUFBQSxHQUFXLENBQUMsSUFBQSxDQUFLLFFBQUEsQ0FBU3BJLFFBQUEsRUFBUztJQUV6QyxJQUFJO01BQ0YsSUFBSSxDQUFDbUksUUFBQSxFQUFVO1FBQ2IsSUFBSyxDQUFBLFNBQUEsQ0FBVTtBQUFFM1EsVUFBQUEsSUFBQSxFQUFNLFNBQUE7VUFBV3lRLFNBQUE7QUFBV0csVUFBQUE7U0FBVSxDQUFBO1FBRXZELE1BQU0sSUFBQSxDQUFLLGNBQUEsQ0FBZS9JLE1BQUEsQ0FBT2dKLFFBQUEsR0FDL0JKLFNBQUEsRUFDQSxJQUNGLENBQUE7UUFDQSxNQUFNcEMsT0FBQSxHQUFVLE1BQU0sSUFBQSxDQUFLN04sT0FBQSxDQUFRcVEsUUFBQSxHQUFXSixTQUFTLENBQUE7QUFDdkQsUUFBQSxJQUFJcEMsT0FBQSxLQUFZLElBQUEsQ0FBS3pOLEtBQUEsQ0FBTXlOLE9BQUEsRUFBUztVQUNsQyxJQUFLLENBQUEsU0FBQSxDQUFVO0FBQ2JyTyxZQUFBQSxJQUFBLEVBQU0sU0FBQTtZQUNOcU8sT0FBQTtZQUNBb0MsU0FBQTtBQUNBRyxZQUFBQTtXQUNELENBQUE7QUFDSDtBQUNGO01BQ0EsTUFBTTNNLElBQUEsR0FBTyxNQUFNLElBQUEsQ0FBSyxRQUFBLENBQVN5RixLQUFBLEVBQU07QUFHdkMsTUFBQSxNQUFNLEtBQUssY0FBQSxDQUFlN0IsTUFBQSxDQUFPWSxTQUFBLEdBQy9CeEUsSUFBQSxFQUNBd00sU0FBQSxFQUNBLElBQUEsQ0FBSzdQLEtBQUEsQ0FBTXlOLE9BQUEsRUFDWCxJQUNGLENBQUE7QUFFQSxNQUFBLE1BQU0sSUFBSzdOLENBQUFBLE9BQUEsQ0FBUWlJLFNBQUEsR0FBWXhFLElBQUEsRUFBTXdNLFNBQUEsRUFBVyxJQUFBLENBQUs3UCxLQUFBLENBQU15TixPQUFRLENBQUE7TUFHbkUsTUFBTSxJQUFBLENBQUssY0FBQSxDQUFleEcsTUFBQSxDQUFPNEcsU0FBQSxHQUMvQnhLLElBQUEsRUFDQSxNQUNBLElBQUtyRCxDQUFBQSxLQUFBLENBQU02UCxTQUFBLEVBQ1gsS0FBSzdQLEtBQUEsQ0FBTXlOLE9BQUEsRUFDWCxJQUNGLENBQUE7QUFFQSxNQUFBLE1BQU0sSUFBSzdOLENBQUFBLE9BQUEsQ0FBUWlPLFNBQUEsR0FBWXhLLElBQUEsRUFBTSxJQUFBLEVBQU13TSxTQUFBLEVBQVcsSUFBSzdQLENBQUFBLEtBQUEsQ0FBTXlOLE9BQU8sQ0FBQTtNQUV4RSxJQUFLLENBQUEsU0FBQSxDQUFVO0FBQUVyTyxRQUFBQSxJQUFBLEVBQU0sU0FBQTtBQUFXaUUsUUFBQUE7T0FBTSxDQUFBO0FBQ3hDLE1BQUEsT0FBT0EsSUFBQTtBQUNULEtBQUEsQ0FBQSxPQUFTSSxLQUFBLEVBQU87TUFDZCxJQUFJO0FBRUYsUUFBQSxNQUFNLEtBQUssY0FBQSxDQUFld0QsTUFBQSxDQUFPYSxPQUFBLEdBQy9CckUsS0FBQSxFQUNBb00sU0FBQSxFQUNBLElBQUEsQ0FBSzdQLEtBQUEsQ0FBTXlOLE9BQUEsRUFDWCxJQUNGLENBQUE7QUFFQSxRQUFBLE1BQU0sSUFBSzdOLENBQUFBLE9BQUEsQ0FBUWtJLE9BQUEsR0FDakJyRSxLQUFBLEVBQ0FvTSxTQUFBLEVBQ0EsSUFBQSxDQUFLN1AsS0FBQSxDQUFNeU4sT0FDYixDQUFBO1FBR0EsTUFBTSxJQUFBLENBQUssY0FBQSxDQUFleEcsTUFBQSxDQUFPNEcsU0FBQSxHQUMvQixLQUNBcEssQ0FBQUEsRUFBQUEsS0FBQSxFQUNBLElBQUt6RCxDQUFBQSxLQUFBLENBQU02UCxTQUFBLEVBQ1gsS0FBSzdQLEtBQUEsQ0FBTXlOLE9BQUEsRUFDWCxJQUNGLENBQUE7QUFFQSxRQUFBLE1BQU0sSUFBSzdOLENBQUFBLE9BQUEsQ0FBUWlPLFNBQUEsR0FDakIsS0FBQSxDQUFBLEVBQ0FwSyxLQUFBLEVBQ0FvTSxTQUFBLEVBQ0EsSUFBSzdQLENBQUFBLEtBQUEsQ0FBTXlOLE9BQ2IsQ0FBQTtBQUNBLFFBQUEsTUFBTWhLLEtBQUE7T0FDTixTQUFBO1FBQ0EsSUFBSyxDQUFBLFNBQUEsQ0FBVTtBQUFFckUsVUFBQUEsSUFBQSxFQUFNLE9BQUE7QUFBU3FFLFVBQUFBO1NBQXdCLENBQUE7QUFDMUQ7S0FDQSxTQUFBO0FBQ0EsTUFBQSxJQUFBLENBQUssY0FBQSxDQUFleU0sT0FBQSxDQUFRLElBQUksQ0FBQTtBQUNsQztBQUNGO0VBRUEsU0FBQXBDLENBQVVDLE1BQUEsRUFBMkQ7SUFDbkUsTUFBTUMsT0FBQSxHQUNKaE8sS0FBQSxJQUN1RDtNQUN2RCxRQUFRK04sTUFBQSxDQUFPM08sSUFBQTtRQUNiLEtBQUssUUFBQTtVQUNILE9BQU87QUFDTCxZQUFBLEdBQUdZLEtBQUE7WUFDSHdHLFlBQUEsRUFBY3VILE1BQUEsQ0FBT3ZILFlBQUE7WUFDckIySixhQUFBLEVBQWVwQyxNQUFBLENBQU90SztBQUN4QixXQUFBO1FBQ0YsS0FBSyxPQUFBO1VBQ0gsT0FBTztBQUNMLFlBQUEsR0FBR3pELEtBQUE7QUFDSGdRLFlBQUFBLFFBQUEsRUFBVTtBQUNaLFdBQUE7UUFDRixLQUFLLFVBQUE7VUFDSCxPQUFPO0FBQ0wsWUFBQSxHQUFHaFEsS0FBQTtBQUNIZ1EsWUFBQUEsUUFBQSxFQUFVO0FBQ1osV0FBQTtRQUNGLEtBQUssU0FBQTtVQUNILE9BQU87QUFDTCxZQUFBLEdBQUdoUSxLQUFBO1lBQ0h5TixPQUFBLEVBQVNNLE1BQUEsQ0FBT04sT0FBQTtBQUNoQnBLLFlBQUFBLElBQUEsRUFBTSxNQUFBO0FBQ05tRCxZQUFBQSxZQUFBLEVBQWMsQ0FBQTtBQUNkMkosWUFBQUEsYUFBQSxFQUFlLElBQUE7QUFDZjFNLFlBQUFBLEtBQUEsRUFBTyxJQUFBO1lBQ1B1TSxRQUFBLEVBQVVqQyxNQUFBLENBQU9pQyxRQUFBO0FBQ2pCN1AsWUFBQUEsTUFBQSxFQUFRLFNBQUE7WUFDUjBQLFNBQUEsRUFBVzlCLE1BQUEsQ0FBTzhCLFNBQUE7QUFDbEJPLFlBQUFBLFdBQUEsRUFBYXhTLElBQUEsQ0FBS0wsR0FBQTtBQUNwQixXQUFBO1FBQ0YsS0FBSyxTQUFBO1VBQ0gsT0FBTztBQUNMLFlBQUEsR0FBR3lDLEtBQUE7WUFDSHFELElBQUEsRUFBTTBLLE1BQUEsQ0FBTzFLLElBQUE7QUFDYm1ELFlBQUFBLFlBQUEsRUFBYyxDQUFBO0FBQ2QySixZQUFBQSxhQUFBLEVBQWUsSUFBQTtBQUNmMU0sWUFBQUEsS0FBQSxFQUFPLElBQUE7QUFDUHRELFlBQUFBLE1BQUEsRUFBUSxTQUFBO0FBQ1I2UCxZQUFBQSxRQUFBLEVBQVU7QUFDWixXQUFBO1FBQ0YsS0FBSyxPQUFBO1VBQ0gsT0FBTztBQUNMLFlBQUEsR0FBR2hRLEtBQUE7QUFDSHFELFlBQUFBLElBQUEsRUFBTSxNQUFBO1lBQ05JLEtBQUEsRUFBT3NLLE1BQUEsQ0FBT3RLLEtBQUE7QUFDZCtDLFlBQUFBLFlBQUEsRUFBY3hHLEtBQUEsQ0FBTXdHLFlBQUEsR0FBZSxDQUFBO1lBQ25DMkosYUFBQSxFQUFlcEMsTUFBQSxDQUFPdEssS0FBQTtBQUN0QnVNLFlBQUFBLFFBQUEsRUFBVSxLQUFBO0FBQ1Y3UCxZQUFBQSxNQUFBLEVBQVE7QUFDVixXQUFBO0FBQ0o7QUFDRixLQUFBO0FBQ0EsSUFBQSxJQUFBLENBQUtILEtBQUEsR0FBUWdPLE9BQUEsQ0FBUSxLQUFLaE8sS0FBSyxDQUFBO0lBRS9CaUssYUFBQSxDQUFjTixLQUFBLENBQU0sTUFBTTtBQUN4QixNQUFBLElBQUEsQ0FBSyxVQUFBLENBQVd4RSxPQUFBLENBQVN1RyxRQUFBLElBQWE7UUFDcENBLFFBQUEsQ0FBUzJFLGdCQUFBLENBQWlCdEMsTUFBTSxDQUFBO09BQ2pDLENBQUE7QUFDRCxNQUFBLElBQUEsQ0FBSyxjQUFBLENBQWV0QixNQUFBLENBQU87QUFDekJ2TSxRQUFBQSxRQUFBLEVBQVUsSUFBQTtBQUNWZCxRQUFBQSxJQUFBLEVBQU0sU0FBQTtBQUNOMk8sUUFBQUE7T0FDRCxDQUFBO0tBQ0YsQ0FBQTtBQUNIO0FBQ0YsQ0FBQTtBQUVPLFNBQVMvQyxrQkFLd0M7RUFDdEQsT0FBTztBQUNMeUMsSUFBQUEsT0FBQSxFQUFTLE1BQUE7QUFDVHBLLElBQUFBLElBQUEsRUFBTSxNQUFBO0FBQ05JLElBQUFBLEtBQUEsRUFBTyxJQUFBO0FBQ1ArQyxJQUFBQSxZQUFBLEVBQWMsQ0FBQTtBQUNkMkosSUFBQUEsYUFBQSxFQUFlLElBQUE7QUFDZkgsSUFBQUEsUUFBQSxFQUFVLEtBQUE7QUFDVjdQLElBQUFBLE1BQUEsRUFBUSxNQUFBO0FBQ1IwUCxJQUFBQSxTQUFBLEVBQVcsTUFBQTtBQUNYTyxJQUFBQSxXQUFBLEVBQWE7QUFDZixHQUFBO0FBQ0Y7OztBQ3JSTyxJQUFNRSxhQUFBLEdBQU4sY0FBNEJqVSxZQUFBLENBQW9DO0VBS3JFQyxXQUFtQjJLLENBQUFBLE1BQUEsR0FBOEIsRUFBSSxFQUFBO0lBQ25ELEtBQU0sRUFBQTtJQURXLElBQUFBLENBQUFBLE1BQUEsR0FBQUEsTUFBQTtBQUVqQixJQUFBLElBQUEsQ0FBSyxVQUFBLGtCQUFhLElBQUl6SyxHQUFBLEVBQUk7QUFDMUIsSUFBQSxJQUFBLENBQUssT0FBQSxrQkFBVSxJQUFJa1MsR0FBQSxFQUFJO0lBQ3ZCLElBQUssQ0FBQSxXQUFBLEdBQWMsQ0FBQTtBQUNyQjtBQVRBLEVBQUEsVUFBQTtBQUNBLEVBQUEsT0FBQTtBQUNBLEVBQUEsV0FBQTtBQVNBQyxFQUFBQSxLQUFBQSxDQUNFQyxNQUFBLEVBQ0FoUCxPQUFBLEVBQ0FJLEtBQUEsRUFDK0M7QUFDL0MsSUFBQSxNQUFNRSxRQUFBLEdBQVcsSUFBSXVQLFFBQUEsQ0FBUztBQUM1QkUsTUFBQUEsYUFBQSxFQUFlLElBQUE7QUFDZkQsTUFBQUEsVUFBQSxFQUFZLEVBQUUsSUFBSyxDQUFBLFdBQUE7QUFDbkI5UCxNQUFBQSxPQUFBLEVBQVNnUCxNQUFBLENBQU8yQixzQkFBQSxDQUF1QjNRLE9BQU8sQ0FBQTtBQUM5Q0ksTUFBQUE7S0FDRCxDQUFBO0lBRUQsSUFBS3BELENBQUFBLEdBQUEsQ0FBSXNELFFBQVEsQ0FBQTtBQUVqQixJQUFBLE9BQU9BLFFBQUE7QUFDVDtBQUVBdEQsRUFBQUEsR0FBQUEsQ0FBSXNELFFBQUEsRUFBOEM7QUFDaEQsSUFBQSxJQUFBLENBQUssVUFBQSxDQUFXdEQsR0FBQSxDQUFJc0QsUUFBUSxDQUFBO0FBQzVCLElBQUEsTUFBTXNRLEtBQUEsR0FBUUMsUUFBQSxDQUFTdlEsUUFBUSxDQUFBO0lBQy9CLElBQUksT0FBT3NRLEtBQUEsS0FBVSxRQUFVLEVBQUE7TUFDN0IsTUFBTUUsZUFBQSxHQUFrQixJQUFLLENBQUEsT0FBQSxDQUFRdEQsR0FBQSxDQUFJb0QsS0FBSyxDQUFBO0FBQzlDLE1BQUEsSUFBSUUsZUFBQSxFQUFpQjtRQUNuQkEsZUFBQSxDQUFnQmxILElBQUEsQ0FBS3RKLFFBQVEsQ0FBQTtPQUN4QixNQUFBO1FBQ0wsSUFBSyxDQUFBLE9BQUEsQ0FBUThPLEdBQUEsQ0FBSXdCLEtBQUEsRUFBTyxDQUFDdFEsUUFBUSxDQUFDLENBQUE7QUFDcEM7QUFDRjtBQUNBLElBQUEsSUFBQSxDQUFLdU0sTUFBQSxDQUFPO0FBQUVyTixNQUFBQSxJQUFBLEVBQU0sT0FBQTtBQUFTYyxNQUFBQTtLQUFVLENBQUE7QUFDekM7QUFFQWdMLEVBQUFBLE1BQUFBLENBQU9oTCxRQUFBLEVBQThDO0FBQ25ELElBQUEsSUFBSSxLQUFLLFVBQUEsQ0FBV3BELE1BQUEsQ0FBT29ELFFBQVEsQ0FBRyxFQUFBO0FBQ3BDLE1BQUEsTUFBTXNRLEtBQUEsR0FBUUMsUUFBQSxDQUFTdlEsUUFBUSxDQUFBO01BQy9CLElBQUksT0FBT3NRLEtBQUEsS0FBVSxRQUFVLEVBQUE7UUFDN0IsTUFBTUUsZUFBQSxHQUFrQixJQUFLLENBQUEsT0FBQSxDQUFRdEQsR0FBQSxDQUFJb0QsS0FBSyxDQUFBO0FBQzlDLFFBQUEsSUFBSUUsZUFBQSxFQUFpQjtBQUNuQixVQUFBLElBQUlBLGVBQUEsQ0FBZ0IvTyxNQUFBLEdBQVMsQ0FBRyxFQUFBO0FBQzlCLFlBQUEsTUFBTWdQLEtBQUEsR0FBUUQsZUFBQSxDQUFnQkUsT0FBQSxDQUFRMVEsUUFBUSxDQUFBO1lBQzlDLElBQUl5USxLQUFBLEtBQVUsRUFBSSxFQUFBO0FBQ2hCRCxjQUFBQSxlQUFBLENBQWdCRyxNQUFBLENBQU9GLEtBQUEsRUFBTyxDQUFDLENBQUE7QUFDakM7QUFDRixXQUFBLE1BQUEsSUFBV0QsZUFBQSxDQUFnQixDQUFDLENBQUEsS0FBTXhRLFFBQUEsRUFBVTtBQUMxQyxZQUFBLElBQUEsQ0FBSyxPQUFBLENBQVFwRCxNQUFBLENBQU8wVCxLQUFLLENBQUE7QUFDM0I7QUFDRjtBQUNGO0FBQ0Y7QUFJQSxJQUFBLElBQUEsQ0FBSy9ELE1BQUEsQ0FBTztBQUFFck4sTUFBQUEsSUFBQSxFQUFNLFNBQUE7QUFBV2MsTUFBQUE7S0FBVSxDQUFBO0FBQzNDO0FBRUF5SCxFQUFBQSxNQUFBQSxDQUFPekgsUUFBQSxFQUFpRDtBQUN0RCxJQUFBLE1BQU1zUSxLQUFBLEdBQVFDLFFBQUEsQ0FBU3ZRLFFBQVEsQ0FBQTtJQUMvQixJQUFJLE9BQU9zUSxLQUFBLEtBQVUsUUFBVSxFQUFBO01BQzdCLE1BQU1NLHNCQUFBLEdBQXlCLElBQUssQ0FBQSxPQUFBLENBQVExRCxHQUFBLENBQUlvRCxLQUFLLENBQUE7QUFDckQsTUFBQSxNQUFNTyxvQkFBQSxHQUF1QkQsc0JBQUEsRUFBd0I1RSxJQUFBLENBQ2xEOEUsQ0FBQSxJQUFNQSxDQUFBLENBQUVoUixLQUFBLENBQU1HLE1BQUEsS0FBVyxTQUM1QixDQUFBO0FBR0EsTUFBQSxPQUFPLENBQUM0USxvQkFBQSxJQUF3QkEsb0JBQUEsS0FBeUI3USxRQUFBO0tBQ3BELE1BQUE7TUFHTCxPQUFPLElBQUE7QUFDVDtBQUNGO0FBRUFnUSxFQUFBQSxPQUFBQSxDQUFRaFEsUUFBQSxFQUEwRDtBQUNoRSxJQUFBLE1BQU1zUSxLQUFBLEdBQVFDLFFBQUEsQ0FBU3ZRLFFBQVEsQ0FBQTtJQUMvQixJQUFJLE9BQU9zUSxLQUFBLEtBQVUsUUFBVSxFQUFBO01BQzdCLE1BQU1TLGFBQUEsR0FBZ0IsSUFBSyxDQUFBLE9BQUEsQ0FDeEI3RCxHQUFBLENBQUlvRCxLQUFLLENBQ1J0RSxFQUFBQSxJQUFBLENBQU04RSxDQUFBLElBQU1BLENBQUEsS0FBTTlRLFFBQUEsSUFBWThRLENBQUEsQ0FBRWhSLEtBQUEsQ0FBTWdRLFFBQVEsQ0FBQTtNQUVsRCxPQUFPaUIsYUFBQSxFQUFlcEksUUFBQSxNQUFjN0YsT0FBQSxDQUFRQyxPQUFBLEVBQVE7S0FDL0MsTUFBQTtNQUNMLE9BQU9ELE9BQUEsQ0FBUUMsT0FBQSxFQUFRO0FBQ3pCO0FBQ0Y7QUFFQWlNLEVBQUFBLEtBQUFBLEdBQWM7SUFDWmpGLGFBQUEsQ0FBY04sS0FBQSxDQUFNLE1BQU07QUFDeEIsTUFBQSxJQUFBLENBQUssVUFBQSxDQUFXeEUsT0FBQSxDQUFTakYsUUFBQSxJQUFhO0FBQ3BDLFFBQUEsSUFBQSxDQUFLdU0sTUFBQSxDQUFPO0FBQUVyTixVQUFBQSxJQUFBLEVBQU0sU0FBQTtBQUFXYyxVQUFBQTtTQUFVLENBQUE7T0FDMUMsQ0FBQTtBQUNELE1BQUEsSUFBQSxDQUFLLFVBQUEsQ0FBV2dQLEtBQUEsRUFBTTtBQUN0QixNQUFBLElBQUEsQ0FBSyxPQUFBLENBQVFBLEtBQUEsRUFBTTtLQUNwQixDQUFBO0FBQ0g7QUFFQUMsRUFBQUEsTUFBQUEsR0FBMEI7QUFDeEIsSUFBQSxPQUFPaE4sS0FBQSxDQUFNK08sSUFBQSxDQUFLLElBQUEsQ0FBSyxVQUFVLENBQUE7QUFDbkM7QUFFQWhGLEVBQUFBLElBQUFBLENBTUUvTSxPQUFBLEVBQzJEO0FBQzNELElBQUEsTUFBTWtRLGdCQUFBLEdBQW1CO0FBQUVoUSxNQUFBQSxLQUFBLEVBQU8sSUFBQTtNQUFNLEdBQUdGO0FBQVEsS0FBQTtBQUVuRCxJQUFBLE9BQU8sSUFBS2dRLENBQUFBLE1BQUEsRUFBTyxDQUFFakQsSUFBQSxDQUFNaE0sUUFBQSxJQUN6QkQsYUFBQSxDQUFjb1AsZ0JBQUEsRUFBa0JuUCxRQUFRLENBQzFDLENBQUE7QUFDRjtFQUVBb1AsT0FBUW5RLENBQUFBLE9BQUEsR0FBMkIsRUFBcUIsRUFBQTtBQUN0RCxJQUFBLE9BQU8sSUFBS2dRLENBQUFBLE1BQUEsRUFBTyxDQUFFeEMsTUFBQSxDQUFRek0sUUFBQSxJQUFhRCxhQUFBLENBQWNkLE9BQUEsRUFBU2UsUUFBUSxDQUFDLENBQUE7QUFDNUU7QUFFQXVNLEVBQUFBLE1BQUFBLENBQU8rQyxLQUFBLEVBQWlDO0lBQ3RDdkYsYUFBQSxDQUFjTixLQUFBLENBQU0sTUFBTTtBQUN4QixNQUFBLElBQUEsQ0FBS3BOLFNBQUEsQ0FBVTRJLE9BQUEsQ0FBU3hJLFFBQUEsSUFBYTtBQUNuQ0EsUUFBQUEsUUFBQSxDQUFTNlMsS0FBSyxDQUFBO09BQ2YsQ0FBQTtLQUNGLENBQUE7QUFDSDtBQUVBMkIsRUFBQUEscUJBQUFBLEdBQTBDO0FBQ3hDLElBQUEsTUFBTUMsZUFBQSxHQUFrQixJQUFLakMsQ0FBQUEsTUFBQSxFQUFTeEMsQ0FBQUEsTUFBQSxDQUFRUixDQUFBLElBQU1BLENBQUEsQ0FBRW5NLEtBQUEsQ0FBTWdRLFFBQVEsQ0FBQTtJQUVwRSxPQUFPL0YsYUFBQSxDQUFjTixLQUFBLENBQU0sTUFDekIzRyxPQUFBLENBQVFxTyxHQUFBLENBQ05ELGVBQUEsQ0FBZ0JFLEdBQUEsQ0FBS3BSLFFBQUEsSUFBYUEsUUFBQSxDQUFTMkksUUFBQSxFQUFXMUMsQ0FBQUEsS0FBQSxDQUFNakksTUFBSSxDQUFDLENBQ25FLENBQ0YsQ0FBQTtBQUNGO0FBQ0YsQ0FBQTtBQUVBLFNBQVN1UyxRQUFBQSxDQUFTdlEsUUFBQSxFQUF3QztBQUN4RCxFQUFBLE9BQU9BLFFBQUEsQ0FBU04sT0FBQSxDQUFRNFEsS0FBQSxFQUFPZSxFQUFBO0FBQ2pDOzs7QUMvTk8sU0FBU0MscUJBQUFBLENBQ2RDLEtBQUEsRUFDc0U7RUFDdEUsT0FBTztBQUNMOUQsSUFBQUEsT0FBQSxFQUFTQSxDQUFDRixPQUFBLEVBQVMxTyxLQUFBLEtBQVU7QUFDM0IsTUFBQSxNQUFNYSxPQUFBLEdBQVU2TixPQUFBLENBQVE3TixPQUFBO01BQ3hCLE1BQU04UixTQUFBLEdBQVlqRSxPQUFBLENBQVFySixZQUFBLEVBQWM2RyxJQUFBLEVBQU0wRyxTQUFBLEVBQVdELFNBQUE7TUFDekQsTUFBTUUsUUFBQSxHQUFXbkUsT0FBQSxDQUFRek4sS0FBQSxDQUFNcUQsSUFBQSxFQUFNb08sS0FBQSxJQUFTLEVBQUM7TUFDL0MsTUFBTUksYUFBQSxHQUFnQnBFLE9BQUEsQ0FBUXpOLEtBQUEsQ0FBTXFELElBQUEsRUFBTXlPLFVBQUEsSUFBYyxFQUFDO0FBQ3pELE1BQUEsSUFBSTdRLE1BQUEsR0FBZ0M7QUFBRXdRLFFBQUFBLEtBQUEsRUFBTyxFQUFDO0FBQUdLLFFBQUFBLFVBQUEsRUFBWTtBQUFHLE9BQUE7QUFDaEUsTUFBQSxJQUFJQyxXQUFBLEdBQWMsQ0FBQTtBQUVsQixNQUFBLE1BQU16RSxPQUFBLEdBQVUsWUFBWTtBQUMxQixRQUFBLElBQUkwRSxTQUFBLEdBQVksS0FBQTtRQUNoQixNQUFNaEYsaUJBQUEsR0FBcUJDLE1BQUEsSUFBb0I7QUFDN0NwTSxVQUFBQSxNQUFBLENBQU9xTSxjQUFBLENBQWVELE1BQUEsRUFBUSxRQUFVLEVBQUE7QUFDdENFLFlBQUFBLFVBQUEsRUFBWSxJQUFBO1lBQ1pDLEdBQUEsRUFBS0EsTUFBTTtBQUNULGNBQUEsSUFBSUssT0FBQSxDQUFRSixNQUFBLENBQU80RSxPQUFBLEVBQVM7QUFDMUJELGdCQUFBQSxTQUFBLEdBQVksSUFBQTtlQUNQLE1BQUE7QUFDTHZFLGdCQUFBQSxPQUFBLENBQVFKLE1BQUEsQ0FBTzFJLGdCQUFBLENBQWlCLFNBQVMsTUFBTTtBQUM3Q3FOLGtCQUFBQSxTQUFBLEdBQVksSUFBQTtpQkFDYixDQUFBO0FBQ0g7Y0FDQSxPQUFPdkUsT0FBQSxDQUFRSixNQUFBO0FBQ2pCO1dBQ0QsQ0FBQTtBQUNILFNBQUE7UUFFQSxNQUFNaEosT0FBQSxHQUFVRixhQUFBLENBQWNzSixPQUFBLENBQVE3TixPQUFBLEVBQVM2TixPQUFBLENBQVFySixZQUFZLENBQUE7UUFHbkUsTUFBTThOLFNBQUEsR0FBWSxPQUNoQjdPLElBQUEsRUFDQThPLEtBQUEsRUFDQUMsUUFBQSxLQUNtQztBQUNuQyxVQUFBLElBQUlKLFNBQUEsRUFBVztZQUNiLE9BQU9oUCxPQUFBLENBQVF1QixNQUFBLEVBQU87QUFDeEI7VUFFQSxJQUFJNE4sS0FBQSxJQUFTLElBQVE5TyxJQUFBQSxJQUFBLENBQUtvTyxLQUFBLENBQU05UCxNQUFBLEVBQVE7QUFDdEMsWUFBQSxPQUFPcUIsT0FBQSxDQUFRQyxPQUFBLENBQVFJLElBQUksQ0FBQTtBQUM3QjtBQUVBLFVBQUEsTUFBTWtLLGNBQUEsR0FHRjtZQUNGL04sUUFBQSxFQUFVaU8sT0FBQSxDQUFRak8sUUFBQTtBQUNsQjZTLFlBQUFBLFNBQUEsRUFBV0YsS0FBQTtZQUNYVCxTQUFBLEVBQVdVLFFBQUEsR0FBVyxVQUFhLEdBQUEsU0FBQTtBQUNuQ25ILFlBQUFBLElBQUEsRUFBTXdDLE9BQUEsQ0FBUTdOLE9BQUEsQ0FBUXFMO0FBQ3hCLFdBQUE7QUFFQStCLFVBQUFBLGlCQUFBLENBQWtCTyxjQUFjLENBQUE7QUFFaEMsVUFBQSxNQUFNK0UsSUFBQSxHQUFPLE1BQU1qTyxPQUFBLENBQ2pCa0osY0FDRixDQUFBO1VBRUEsTUFBTTtBQUFFZ0YsWUFBQUE7V0FBYTlFLEdBQUFBLE9BQUEsQ0FBUTdOLE9BQUE7QUFDN0IsVUFBQSxNQUFNNFMsS0FBQSxHQUFRSixRQUFBLEdBQVdwTyxVQUFBLEdBQWFMLFFBQUE7VUFFdEMsT0FBTztZQUNMOE4sS0FBQSxFQUFPZSxLQUFBLENBQU1uUCxJQUFBLENBQUtvTyxLQUFBLEVBQU9hLElBQUEsRUFBTUMsUUFBUSxDQUFBO1lBQ3ZDVCxVQUFBLEVBQVlVLEtBQUEsQ0FBTW5QLElBQUEsQ0FBS3lPLFVBQUEsRUFBWUssS0FBQSxFQUFPSSxRQUFRO0FBQ3BELFdBQUE7QUFDRixTQUFBO0FBR0EsUUFBQSxJQUFJYixTQUFBLElBQWFFLFFBQUEsQ0FBU2pRLE1BQUEsRUFBUTtVQUNoQyxNQUFNeVEsUUFBQSxHQUFXVixTQUFBLEtBQWMsVUFBQTtBQUMvQixVQUFBLE1BQU1lLFdBQUEsR0FBY0wsUUFBQSxHQUFXTSxvQkFBQSxHQUF1QkMsZ0JBQUE7QUFDdEQsVUFBQSxNQUFNQyxPQUFBLEdBQVU7QUFDZG5CLFlBQUFBLEtBQUEsRUFBT0csUUFBQTtBQUNQRSxZQUFBQSxVQUFBLEVBQVlEO0FBQ2QsV0FBQTtBQUNBLFVBQUEsTUFBTU0sS0FBQSxHQUFRTSxXQUFBLENBQVk3UyxPQUFBLEVBQVNnVCxPQUFPLENBQUE7VUFFMUMzUixNQUFBLEdBQVMsTUFBTWlSLFNBQUEsQ0FBVVUsT0FBQSxFQUFTVCxLQUFBLEVBQU9DLFFBQVEsQ0FBQTtTQUM1QyxNQUFBO0FBQ0wsVUFBQSxNQUFNUyxjQUFBLEdBQWlCcEIsS0FBQSxJQUFTRyxRQUFBLENBQVNqUSxNQUFBO1VBR3pDLEdBQUc7QUFDRCxZQUFBLE1BQU13USxLQUFBLEdBQ0pKLFdBQUEsS0FBZ0IsQ0FBQSxHQUNYRixhQUFBLENBQWMsQ0FBQyxDQUFLalMsSUFBQUEsT0FBQSxDQUFRa1QsZ0JBQUEsR0FDN0JILGdCQUFBLENBQWlCL1MsT0FBQSxFQUFTcUIsTUFBTSxDQUFBO0FBQ3RDLFlBQUEsSUFBSThRLFdBQUEsR0FBYyxDQUFLSSxJQUFBQSxLQUFBLElBQVMsSUFBTSxFQUFBO0FBQ3BDLGNBQUE7QUFDRjtBQUNBbFIsWUFBQUEsTUFBQSxHQUFTLE1BQU1pUixTQUFBLENBQVVqUixNQUFBLEVBQVFrUixLQUFLLENBQUE7WUFDdENKLFdBQUEsRUFBQTtXQUNPQSxRQUFBQSxXQUFBLEdBQWNjLGNBQUE7QUFDekI7QUFFQSxRQUFBLE9BQU81UixNQUFBO0FBQ1QsT0FBQTtBQUNBLE1BQUEsSUFBSXdNLE9BQUEsQ0FBUTdOLE9BQUEsQ0FBUTROLFNBQUEsRUFBVztRQUM3QkMsT0FBQSxDQUFRSCxPQUFBLEdBQVUsTUFBTTtBQUN0QixVQUFBLE9BQU9HLE9BQUEsQ0FBUTdOLE9BQUEsQ0FBUTROLFNBQUEsR0FDckJGLE9BQUEsRUFDQTtZQUNFOU4sUUFBQSxFQUFVaU8sT0FBQSxDQUFRak8sUUFBQTtBQUNsQnlMLFlBQUFBLElBQUEsRUFBTXdDLE9BQUEsQ0FBUTdOLE9BQUEsQ0FBUXFMLElBQUE7WUFDdEJvQyxNQUFBLEVBQVFJLE9BQUEsQ0FBUUo7QUFDbEIsV0FBQSxFQUNBdE8sS0FDRixDQUFBO0FBQ0YsU0FBQTtPQUNLLE1BQUE7UUFDTDBPLE9BQUEsQ0FBUUgsT0FBQSxHQUFVQSxPQUFBO0FBQ3BCO0FBQ0Y7QUFDRixHQUFBO0FBQ0Y7QUFFQSxTQUFTcUYsZ0JBQUFBLENBQ1AvUyxPQUFBLEVBQ0E7RUFBRTZSLEtBQUE7QUFBT0ssRUFBQUE7QUFBVyxDQUNDLEVBQUE7QUFDckIsRUFBQSxNQUFNaUIsU0FBQSxHQUFZdEIsS0FBQSxDQUFNOVAsTUFBQSxHQUFTLENBQUE7RUFDakMsT0FBTzhQLEtBQUEsQ0FBTTlQLE1BQUEsR0FBUyxJQUNsQi9CLE9BQUEsQ0FBUStTLGdCQUFBLENBQ05sQixLQUFBLENBQU1zQixTQUFTLENBQUEsRUFDZnRCLEtBQUEsRUFDQUssVUFBQSxDQUFXaUIsU0FBUyxDQUFBLEVBQ3BCakIsVUFDRixDQUNBLEdBQUEsTUFBQTtBQUNOO0FBRUEsU0FBU1ksb0JBQUFBLENBQ1A5UyxPQUFBLEVBQ0E7RUFBRTZSLEtBQUE7QUFBT0ssRUFBQUE7QUFBVyxDQUNDLEVBQUE7RUFDckIsT0FBT0wsS0FBQSxDQUFNOVAsTUFBQSxHQUFTLElBQ2xCL0IsT0FBQSxDQUFROFMsb0JBQUEsR0FBdUJqQixLQUFBLENBQU0sQ0FBQyxDQUFBLEVBQUdBLEtBQUEsRUFBT0ssVUFBQSxDQUFXLENBQUMsQ0FBQSxFQUFHQSxVQUFVLENBQ3pFLEdBQUEsTUFBQTtBQUNOOzs7QUM1Rk8sSUFBTWtCLFdBQUEsR0FBTixNQUFrQjtBQUN2QixFQUFBLFdBQUE7QUFDQSxFQUFBLGNBQUE7QUFDQSxFQUFBLGVBQUE7QUFDQSxFQUFBLGNBQUE7QUFDQSxFQUFBLGlCQUFBO0FBQ0EsRUFBQSxXQUFBO0FBQ0EsRUFBQSxpQkFBQTtBQUNBLEVBQUEsa0JBQUE7RUFFQTFXLFdBQVkySyxDQUFBQSxNQUFBLEdBQTRCLEVBQUksRUFBQTtJQUMxQyxJQUFLLENBQUEsV0FBQSxHQUFjQSxNQUFBLENBQU9nTSxVQUFBLElBQWMsSUFBSXhFLFVBQUEsRUFBVztJQUN2RCxJQUFLLENBQUEsY0FBQSxHQUFpQnhILE1BQUEsQ0FBTzBJLGFBQUEsSUFBaUIsSUFBSVcsYUFBQSxFQUFjO0FBQ2hFLElBQUEsSUFBQSxDQUFLLGVBQUEsR0FBa0JySixNQUFBLENBQU8yRCxjQUFBLElBQWtCLEVBQUM7QUFDakQsSUFBQSxJQUFBLENBQUssY0FBQSxrQkFBaUIsSUFBSThELEdBQUEsRUFBSTtBQUM5QixJQUFBLElBQUEsQ0FBSyxpQkFBQSxrQkFBb0IsSUFBSUEsR0FBQSxFQUFJO0lBQ2pDLElBQUssQ0FBQSxXQUFBLEdBQWMsQ0FBQTtBQUNyQjtBQUVBd0UsRUFBQUEsS0FBQUEsR0FBYztBQUNaLElBQUEsSUFBQSxDQUFLLFdBQUEsRUFBQTtBQUNMLElBQUEsSUFBSSxJQUFLLENBQUEsV0FBQSxLQUFnQixDQUFHLEVBQUE7SUFFNUIsSUFBSyxDQUFBLGlCQUFBLEdBQW9CNU4sWUFBQSxDQUFhN0ksU0FBQSxDQUFVLE1BQU9zSSxPQUFBLElBQVk7QUFDakUsTUFBQSxJQUFJQSxPQUFBLEVBQVM7UUFDWCxNQUFNLElBQUEsQ0FBS29NLHFCQUFBLEVBQXNCO0FBQ2pDLFFBQUEsSUFBQSxDQUFLLFdBQUEsQ0FBWXpNLE9BQUEsRUFBUTtBQUMzQjtLQUNELENBQUE7SUFDRCxJQUFLLENBQUEsa0JBQUEsR0FBcUJvQixhQUFBLENBQWNySixTQUFBLENBQVUsTUFBT21KLE1BQUEsSUFBVztBQUNsRSxNQUFBLElBQUlBLE1BQUEsRUFBUTtRQUNWLE1BQU0sSUFBQSxDQUFLdUwscUJBQUEsRUFBc0I7QUFDakMsUUFBQSxJQUFBLENBQUssV0FBQSxDQUFZM0wsUUFBQSxFQUFTO0FBQzVCO0tBQ0QsQ0FBQTtBQUNIO0FBRUEyTixFQUFBQSxPQUFBQSxHQUFnQjtBQUNkLElBQUEsSUFBQSxDQUFLLFdBQUEsRUFBQTtBQUNMLElBQUEsSUFBSSxJQUFLLENBQUEsV0FBQSxLQUFnQixDQUFHLEVBQUE7SUFFNUIsSUFBSyxDQUFBLGlCQUFBLElBQW9CO0lBQ3pCLElBQUssQ0FBQSxpQkFBQSxHQUFvQixNQUFBO0lBRXpCLElBQUssQ0FBQSxrQkFBQSxJQUFxQjtJQUMxQixJQUFLLENBQUEsa0JBQUEsR0FBcUIsTUFBQTtBQUM1QjtBQUVBQyxFQUFBQSxVQUFBQSxDQUVFalUsT0FBQSxFQUFpQztBQUNqQyxJQUFBLE9BQU8sSUFBSyxDQUFBLFdBQUEsQ0FBWW1RLE9BQUEsQ0FBUTtBQUFFLE1BQUEsR0FBR25RLE9BQUE7QUFBU0csTUFBQUEsV0FBQSxFQUFhO0FBQVcsS0FBQyxFQUNwRXFDLE1BQUE7QUFDTDtBQUVBMFIsRUFBQUEsVUFBQUEsQ0FFRWxVLE9BQUEsRUFBb0M7QUFDcEMsSUFBQSxPQUFPLElBQUssQ0FBQSxjQUFBLENBQWVtUSxPQUFBLENBQVE7QUFBRSxNQUFBLEdBQUduUSxPQUFBO0FBQVNnQixNQUFBQSxNQUFBLEVBQVE7QUFBVSxLQUFDLEVBQUV3QixNQUFBO0FBQ3hFO0FBRUEyUixFQUFBQSxZQUFBQSxDQVVFOVQsUUFBQSxFQUE2RDtBQUM3RCxJQUFBLE1BQU1JLE9BQUEsR0FBVSxJQUFLaVAsQ0FBQUEsbUJBQUEsQ0FBb0I7QUFBRXJQLE1BQUFBO0tBQVUsQ0FBQTtBQUVyRCxJQUFBLE9BQU8sSUFBSyxDQUFBLFdBQUEsQ0FBWTROLEdBQUEsQ0FBSXhOLE9BQUEsQ0FBUUYsU0FBUyxDQUFBLEVBQUdNLEtBQUEsQ0FBTXFELElBQUE7QUFHeEQ7QUFFQWtRLEVBQUFBLGVBQUFBLENBTUUzVCxPQUFBLEVBQ2dCO0FBQ2hCLElBQUEsTUFBTTRULGdCQUFBLEdBQW1CLElBQUszRSxDQUFBQSxtQkFBQSxDQUFvQmpQLE9BQU8sQ0FBQTtJQUN6RCxNQUFNYixLQUFBLEdBQVEsSUFBSyxDQUFBLFdBQUEsQ0FBWTRQLEtBQUEsQ0FBTSxJQUFBLEVBQU02RSxnQkFBZ0IsQ0FBQTtBQUMzRCxJQUFBLE1BQU1DLFVBQUEsR0FBYTFVLEtBQUEsQ0FBTWlCLEtBQUEsQ0FBTXFELElBQUE7SUFFL0IsSUFBSW9RLFVBQUEsS0FBZSxNQUFXLEVBQUE7TUFDNUIsT0FBTyxJQUFBLENBQUtDLFVBQUEsQ0FBVzlULE9BQU8sQ0FBQTtBQUNoQztBQUVBLElBQUEsSUFDRUEsT0FBQSxDQUFRK1QsaUJBQUEsSUFDUjVVLEtBQUEsQ0FBTWtOLGFBQUEsQ0FBY25OLGdCQUFBLENBQWlCMFUsZ0JBQUEsQ0FBaUI3VSxTQUFBLEVBQVdJLEtBQUssQ0FBQyxDQUN2RSxFQUFBO01BQ0EsS0FBSyxJQUFBLENBQUs2VSxhQUFBLENBQWNKLGdCQUFnQixDQUFBO0FBQzFDO0FBRUEsSUFBQSxPQUFPeFEsT0FBQSxDQUFRQyxPQUFBLENBQVF3USxVQUFVLENBQUE7QUFDbkM7QUFFQUksRUFBQUEsY0FBQUEsQ0FpQkUxVSxPQUFBLEVBQ3FEO0lBQ3JELE9BQU8sSUFBQSxDQUFLLFdBQUEsQ0FBWW1RLE9BQUEsQ0FBUW5RLE9BQU8sQ0FBQSxDQUFFbVMsR0FBQSxDQUFJLENBQUM7TUFBRTlSLFFBQUE7QUFBVVEsTUFBQUE7S0FBWSxLQUFBO0FBQ3BFLE1BQUEsTUFBTXFELElBQUEsR0FBT3JELEtBQUEsQ0FBTXFELElBQUE7TUFDbkIsT0FBTyxDQUFDN0QsUUFBQSxFQUFVNkQsSUFBSSxDQUFBO0tBQ3ZCLENBQUE7QUFDSDtBQUVBeVEsRUFBQUEsWUFBQUEsQ0FXRXRVLFFBQUEsRUFDQXBCLE9BQUEsRUFJQXdCLE9BQUEsRUFDa0M7QUFDbEMsSUFBQSxNQUFNNFQsZ0JBQUEsR0FBbUIsSUFBSzNFLENBQUFBLG1CQUFBLENBTTVCO0FBQUVyUCxNQUFBQTtLQUFVLENBQUE7SUFFZCxNQUFNVCxLQUFBLEdBQVEsSUFBQSxDQUFLLFdBQUEsQ0FBWXFPLEdBQUEsQ0FDN0JvRyxnQkFBQSxDQUFpQjlULFNBQ25CLENBQUE7QUFDQSxJQUFBLE1BQU0wRCxRQUFBLEdBQVdyRSxLQUFBLEVBQU9pQixLQUFBLENBQU1xRCxJQUFBO0FBQzlCLElBQUEsTUFBTUEsSUFBQSxHQUFPbEYsZ0JBQUEsQ0FBaUJDLE9BQUEsRUFBU2dGLFFBQVEsQ0FBQTtJQUUvQyxJQUFJQyxJQUFBLEtBQVMsTUFBVyxFQUFBO01BQ3RCLE9BQU8sTUFBQTtBQUNUO0FBRUEsSUFBQSxPQUFPLElBQUssQ0FBQSxXQUFBLENBQ1RzTCxLQUFBLENBQU0sSUFBTTZFLEVBQUFBLGdCQUFnQixDQUM1QnJJLENBQUFBLE9BQUEsQ0FBUTlILElBQUEsRUFBTTtBQUFFLE1BQUEsR0FBR3pELE9BQUE7QUFBUzBMLE1BQUFBLE1BQUEsRUFBUTtLQUFNLENBQUE7QUFDL0M7QUFFQXlJLEVBQUFBLGNBQUFBLENBaUJFNVUsT0FBQSxFQUNBZixPQUFBLEVBSUF3QixPQUFBLEVBQ3FEO0FBQ3JELElBQUEsT0FBT3FLLGFBQUEsQ0FBY04sS0FBQSxDQUFNLE1BQ3pCLElBQUssQ0FBQSxXQUFBLENBQ0YyRixPQUFBLENBQVFuUSxPQUFPLENBQ2ZtUyxDQUFBQSxHQUFBLENBQUksQ0FBQztBQUFFOVIsTUFBQUE7QUFBUyxLQUFBLEtBQU0sQ0FDckJBLFFBQUEsRUFDQSxJQUFBLENBQUtzVSxZQUFBLENBQW1DdFUsUUFBQSxFQUFVcEIsT0FBQSxFQUFTd0IsT0FBTyxDQUFBLENBQ25FLENBQ0wsQ0FBQTtBQUNGO0FBRUFvVSxFQUFBQSxhQUFBQSxDQXFCRXhVLFFBQUEsRUFDOEQ7QUFDOUQsSUFBQSxNQUFNSSxPQUFBLEdBQVUsSUFBS2lQLENBQUFBLG1CQUFBLENBQW9CO0FBQUVyUCxNQUFBQTtLQUFVLENBQUE7SUFDckQsT0FBTyxJQUFBLENBQUssV0FBQSxDQUFZNE4sR0FBQSxDQUN0QnhOLE9BQUEsQ0FBUUYsU0FDVixDQUFBLEVBQUdNLEtBQUE7QUFDTDtBQUVBaVUsRUFBQUEsYUFBQUEsQ0FFRTlVLE9BQUEsRUFBK0I7QUFDL0IsSUFBQSxNQUFNOFQsVUFBQSxHQUFhLElBQUssQ0FBQSxXQUFBO0lBQ3hCaEosYUFBQSxDQUFjTixLQUFBLENBQU0sTUFBTTtNQUN4QnNKLFVBQUEsQ0FBVzNELE9BQUEsQ0FBUW5RLE9BQU8sRUFBRWdHLE9BQUEsQ0FBU3BHLEtBQUEsSUFBVTtRQUM3Q2tVLFVBQUEsQ0FBVy9ILE1BQUEsQ0FBT25NLEtBQUssQ0FBQTtPQUN4QixDQUFBO0tBQ0YsQ0FBQTtBQUNIO0VBRUFtVixZQUVFL1UsQ0FBQUEsT0FBQSxFQUF5QlMsT0FBQSxFQUF1QztBQUNoRSxJQUFBLE1BQU1xVCxVQUFBLEdBQWEsSUFBSyxDQUFBLFdBQUE7QUFFeEIsSUFBQSxNQUFNa0IsY0FBQSxHQUFzQztBQUMxQy9VLE1BQUFBLElBQUEsRUFBTSxRQUFBO01BQ04sR0FBR0Q7QUFDTCxLQUFBO0FBRUEsSUFBQSxPQUFPOEssYUFBQSxDQUFjTixLQUFBLENBQU0sTUFBTTtNQUMvQnNKLFVBQUEsQ0FBVzNELE9BQUEsQ0FBUW5RLE9BQU8sRUFBRWdHLE9BQUEsQ0FBU3BHLEtBQUEsSUFBVTtRQUM3Q0EsS0FBQSxDQUFNME0sS0FBQSxFQUFNO09BQ2IsQ0FBQTtBQUNELE1BQUEsT0FBTyxJQUFLMkksQ0FBQUEsY0FBQSxDQUFlRCxjQUFBLEVBQWdCdlUsT0FBTyxDQUFBO0tBQ25ELENBQUE7QUFDSDtBQUVBeVUsRUFBQUEsYUFBQUEsQ0FFRWxWLE9BQUEsRUFBeUJtSSxhQUFBLEdBQStCLEVBQW1CLEVBQUE7QUFDM0UsSUFBQSxNQUFNZ04sc0JBQUEsR0FBeUI7QUFBRXpOLE1BQUFBLE1BQUEsRUFBUSxJQUFBO01BQU0sR0FBR1M7QUFBYyxLQUFBO0lBRWhFLE1BQU1pTixRQUFBLEdBQVd0SyxhQUFBLENBQWNOLEtBQUEsQ0FBTSxNQUNuQyxJQUFBLENBQUssV0FBQSxDQUNGMkYsT0FBQSxDQUFRblEsT0FBTyxDQUFBLENBQ2ZtUyxHQUFBLENBQUt2UyxLQUFBLElBQVVBLEtBQUEsQ0FBTXNJLE1BQUEsQ0FBT2lOLHNCQUFzQixDQUFDLENBQ3hELENBQUE7QUFFQSxJQUFBLE9BQU90UixPQUFBLENBQVFxTyxHQUFBLENBQUlrRCxRQUFRLENBQUEsQ0FBRXJNLElBQUEsQ0FBS2hLLE1BQUksQ0FBQSxDQUFFaUksS0FBQSxDQUFNakksTUFBSSxDQUFBO0FBQ3BEO0FBRUFzVyxFQUFBQSxpQkFBQUEsQ0FRRXJWLE9BQUEsRUFDQVMsT0FBQSxHQUE2QixFQUNkLEVBQUE7QUFDZixJQUFBLE9BQU9xSyxhQUFBLENBQWNOLEtBQUEsQ0FBTSxNQUFNO01BQy9CLElBQUssQ0FBQSxXQUFBLENBQVkyRixPQUFBLENBQVFuUSxPQUFPLENBQUVnRyxDQUFBQSxPQUFBLENBQVNwRyxLQUFBLElBQVU7UUFDbkRBLEtBQUEsQ0FBTTZOLFVBQUEsRUFBVztPQUNsQixDQUFBO0FBRUQsTUFBQSxJQUFJek4sT0FBQSxFQUFTc1YsV0FBQSxLQUFnQixNQUFRLEVBQUE7UUFDbkMsT0FBT3pSLE9BQUEsQ0FBUUMsT0FBQSxFQUFRO0FBQ3pCO0FBQ0EsTUFBQSxNQUFNa1IsY0FBQSxHQUFzQztBQUMxQyxRQUFBLEdBQUdoVixPQUFBO1FBQ0hDLElBQUEsRUFBTUQsT0FBQSxFQUFTc1YsV0FBQSxJQUFldFYsT0FBQSxFQUFTQyxJQUFBLElBQVE7QUFDakQsT0FBQTtBQUNBLE1BQUEsT0FBTyxJQUFLZ1YsQ0FBQUEsY0FBQSxDQUFlRCxjQUFBLEVBQWdCdlUsT0FBTyxDQUFBO0tBQ25ELENBQUE7QUFDSDtBQUVBd1UsRUFBQUEsY0FBQUEsQ0FRRWpWLE9BQUEsRUFDQVMsT0FBQSxHQUEwQixFQUNYLEVBQUE7QUFDZixJQUFBLE1BQU13RSxZQUFBLEdBQWU7QUFDbkIsTUFBQSxHQUFHeEUsT0FBQTtBQUNIME0sTUFBQUEsYUFBQSxFQUFlMU0sT0FBQSxDQUFRME0sYUFBQSxJQUFpQjtBQUMxQyxLQUFBO0FBQ0EsSUFBQSxNQUFNaUksUUFBQSxHQUFXdEssYUFBQSxDQUFjTixLQUFBLENBQU0sTUFDbkMsSUFBQSxDQUFLLFdBQUEsQ0FDRjJGLE9BQUEsQ0FBUW5RLE9BQU8sQ0FDZndOLENBQUFBLE1BQUEsQ0FBUTVOLEtBQUEsSUFBVSxDQUFDQSxLQUFBLENBQU00TSxVQUFBLEVBQVksQ0FBQSxDQUNyQzJGLEdBQUEsQ0FBS3ZTLEtBQUEsSUFBVTtBQUNkLE1BQUEsSUFBSTZKLE9BQUEsR0FBVTdKLEtBQUEsQ0FBTThOLEtBQUEsQ0FBTSxRQUFXekksWUFBWSxDQUFBO0FBQ2pELE1BQUEsSUFBSSxDQUFDQSxZQUFBLENBQWFzUSxZQUFBLEVBQWM7QUFDOUI5TCxRQUFBQSxPQUFBLEdBQVVBLE9BQUEsQ0FBUXpDLEtBQUEsQ0FBTWpJLE1BQUksQ0FBQTtBQUM5QjtBQUNBLE1BQUEsT0FBT2EsS0FBQSxDQUFNaUIsS0FBQSxDQUFNVixXQUFBLEtBQWdCLFFBQy9CMEQsR0FBQUEsT0FBQSxDQUFRQyxPQUFBLEVBQVEsR0FDaEIyRixPQUFBO0FBQ04sS0FBQyxDQUNMLENBQUE7SUFFQSxPQUFPNUYsT0FBQSxDQUFRcU8sR0FBQSxDQUFJa0QsUUFBUSxDQUFFck0sQ0FBQUEsSUFBQSxDQUFLaEssTUFBSSxDQUFBO0FBQ3hDO0FBRUF3VixFQUFBQSxVQUFBQSxDQU9FOVQsT0FBQSxFQU9nQjtBQUNoQixJQUFBLE1BQU00VCxnQkFBQSxHQUFtQixJQUFLM0UsQ0FBQUEsbUJBQUEsQ0FBb0JqUCxPQUFPLENBQUE7QUFHekQsSUFBQSxJQUFJNFQsZ0JBQUEsQ0FBaUJqTCxLQUFBLEtBQVUsTUFBVyxFQUFBO01BQ3hDaUwsZ0JBQUEsQ0FBaUJqTCxLQUFBLEdBQVEsS0FBQTtBQUMzQjtJQUVBLE1BQU14SixLQUFBLEdBQVEsSUFBSyxDQUFBLFdBQUEsQ0FBWTRQLEtBQUEsQ0FBTSxJQUFBLEVBQU02RSxnQkFBZ0IsQ0FBQTtJQUUzRCxPQUFPelUsS0FBQSxDQUFNa04sYUFBQSxDQUNYbk4sZ0JBQUEsQ0FBaUIwVSxnQkFBQSxDQUFpQjdVLFNBQUEsRUFBV0ksS0FBSyxDQUNwRCxDQUFBLEdBQ0lBLEtBQUEsQ0FBTThOLEtBQUEsQ0FBTTJHLGdCQUFnQixDQUFBLEdBQzVCeFEsT0FBQSxDQUFRQyxPQUFBLENBQVFsRSxLQUFBLENBQU1pQixLQUFBLENBQU1xRCxJQUFhLENBQUE7QUFDL0M7QUFFQXVRLEVBQUFBLGFBQUFBLENBTUVoVSxPQUFBLEVBQ2U7SUFDZixPQUFPLElBQUEsQ0FBSzhULFVBQUEsQ0FBVzlULE9BQU8sQ0FBQSxDQUFFc0ksSUFBQSxDQUFLaEssTUFBSSxDQUFBLENBQUVpSSxLQUFBLENBQU1qSSxNQUFJLENBQUE7QUFDdkQ7QUFFQXlXLEVBQUFBLGtCQUFBQSxDQU9FL1UsT0FBQSxFQU8wQztBQUMxQ0EsSUFBQUEsT0FBQSxDQUFROE4sUUFBQSxHQUFXOEQscUJBQUEsQ0FLakI1UixPQUFBLENBQVE2UixLQUFLLENBQUE7SUFDZixPQUFPLElBQUEsQ0FBS2lDLFVBQUEsQ0FBVzlULE9BQWMsQ0FBQTtBQUN2QztBQUVBZ1YsRUFBQUEscUJBQUFBLENBT0VoVixPQUFBLEVBT2U7SUFDZixPQUFPLElBQUEsQ0FBSytVLGtCQUFBLENBQW1CL1UsT0FBTyxDQUFBLENBQUVzSSxJQUFBLENBQUtoSyxNQUFJLENBQUEsQ0FBRWlJLEtBQUEsQ0FBTWpJLE1BQUksQ0FBQTtBQUMvRDtBQUVBMlcsRUFBQUEsdUJBQUFBLENBT0VqVixPQUFBLEVBTzBDO0FBQzFDQSxJQUFBQSxPQUFBLENBQVE4TixRQUFBLEdBQVc4RCxxQkFBQSxDQUtqQjVSLE9BQUEsQ0FBUTZSLEtBQUssQ0FBQTtJQUVmLE9BQU8sSUFBQSxDQUFLOEIsZUFBQSxDQUFnQjNULE9BQWMsQ0FBQTtBQUM1QztBQUVBdVIsRUFBQUEscUJBQUFBLEdBQTBDO0FBQ3hDLElBQUEsSUFBSXJMLGFBQUEsQ0FBY0QsUUFBQSxFQUFZLEVBQUE7QUFDNUIsTUFBQSxPQUFPLElBQUssQ0FBQSxjQUFBLENBQWVzTCxxQkFBQSxFQUFzQjtBQUNuRDtJQUNBLE9BQU9uTyxPQUFBLENBQVFDLE9BQUEsRUFBUTtBQUN6QjtBQUVBNlIsRUFBQUEsYUFBQUEsR0FBNEI7SUFDMUIsT0FBTyxJQUFBLENBQUssV0FBQTtBQUNkO0FBRUFDLEVBQUFBLGdCQUFBQSxHQUFrQztJQUNoQyxPQUFPLElBQUEsQ0FBSyxjQUFBO0FBQ2Q7QUFFQUMsRUFBQUEsaUJBQUFBLEdBQW9DO0lBQ2xDLE9BQU8sSUFBQSxDQUFLLGVBQUE7QUFDZDtBQUVBQyxFQUFBQSxpQkFBQUEsQ0FBa0JyVixPQUFBLEVBQStCO0lBQy9DLElBQUssQ0FBQSxlQUFBLEdBQWtCQSxPQUFBO0FBQ3pCO0VBRUFzVixnQkFNRTFWLENBQUFBLFFBQUEsRUFDQUksT0FBQSxFQU1NO0lBQ04sSUFBSyxDQUFBLGNBQUEsQ0FBZW9QLEdBQUEsQ0FBSTNPLE9BQUEsQ0FBUWIsUUFBUSxDQUFHLEVBQUE7TUFDekNBLFFBQUE7QUFDQW9MLE1BQUFBLGNBQUEsRUFBZ0JoTDtLQUNqQixDQUFBO0FBQ0g7QUFFQWtQLEVBQUFBLGdCQUFBQSxDQUNFdFAsUUFBQSxFQUNzRTtJQUN0RSxNQUFNMlYsUUFBQSxHQUFXLENBQUMsR0FBRyxJQUFBLENBQUssY0FBQSxDQUFlL0YsTUFBQSxFQUFRLENBQUE7SUFFakQsTUFBTW5PLE1BQUEsR0FHRixFQUFDO0FBRUxrVSxJQUFBQSxRQUFBLENBQVNoUSxPQUFBLENBQVNpUSxZQUFBLElBQWlCO0FBQ2pDLE1BQUEsSUFBSXZWLGVBQUEsQ0FBZ0JMLFFBQUEsRUFBVTRWLFlBQUEsQ0FBYTVWLFFBQVEsQ0FBRyxFQUFBO0FBQ3BEcUIsUUFBQUEsTUFBQSxDQUFPd0YsTUFBQSxDQUFPcEYsTUFBQSxFQUFRbVUsWUFBQSxDQUFheEssY0FBYyxDQUFBO0FBQ25EO0tBQ0QsQ0FBQTtBQUNELElBQUEsT0FBTzNKLE1BQUE7QUFDVDtFQUVBb1UsbUJBTUVqVixDQUFBQSxXQUFBLEVBQ0FSLE9BQUEsRUFJTTtJQUNOLElBQUssQ0FBQSxpQkFBQSxDQUFrQm9QLEdBQUEsQ0FBSTNPLE9BQUEsQ0FBUUQsV0FBVyxDQUFHLEVBQUE7TUFDL0NBLFdBQUE7QUFDQXdLLE1BQUFBLGNBQUEsRUFBZ0JoTDtLQUNqQixDQUFBO0FBQ0g7QUFFQTBWLEVBQUFBLG1CQUFBQSxDQUNFbFYsV0FBQSxFQUM2QztJQUM3QyxNQUFNK1UsUUFBQSxHQUFXLENBQUMsR0FBRyxJQUFBLENBQUssaUJBQUEsQ0FBa0IvRixNQUFBLEVBQVEsQ0FBQTtJQUVwRCxJQUFJbk8sTUFBQSxHQUFzRCxFQUFDO0FBRTNEa1UsSUFBQUEsUUFBQSxDQUFTaFEsT0FBQSxDQUFTaVEsWUFBQSxJQUFpQjtBQUNqQyxNQUFBLElBQUl2VixlQUFBLENBQWdCTyxXQUFBLEVBQWFnVixZQUFBLENBQWFoVixXQUFXLENBQUcsRUFBQTtBQUMxRGEsUUFBQUEsTUFBQSxHQUFTO0FBQUUsVUFBQSxHQUFHQSxNQUFBO0FBQVEsVUFBQSxHQUFHbVUsWUFBQSxDQUFheEs7QUFBZSxTQUFBO0FBQ3ZEO0tBQ0QsQ0FBQTtBQUVELElBQUEsT0FBTzNKLE1BQUE7QUFDVDtBQUVBNE4sRUFBQUEsbUJBQUFBLENBUUVqUCxPQUFBLEVBc0JBO0lBQ0EsSUFBSUEsT0FBQSxDQUFRMlYsVUFBQSxFQUFZO0FBQ3RCLE1BQUEsT0FBTzNWLE9BQUE7QUFPVDtBQUVBLElBQUEsTUFBTTRULGdCQUFBLEdBQW1CO0FBQ3ZCLE1BQUEsR0FBRyxJQUFLLENBQUEsZUFBQSxDQUFnQmpFLE9BQUE7QUFDeEIsTUFBQSxHQUFHLElBQUtULENBQUFBLGdCQUFBLENBQWlCbFAsT0FBQSxDQUFRSixRQUFRLENBQUE7QUFDekMsTUFBQSxHQUFHSSxPQUFBO0FBQ0gyVixNQUFBQSxVQUFBLEVBQVk7QUFDZCxLQUFBO0FBRUEsSUFBQSxJQUFJLENBQUMvQixnQkFBQSxDQUFpQjlULFNBQUEsRUFBVztNQUMvQjhULGdCQUFBLENBQWlCOVQsU0FBQSxHQUFZQyxxQkFBQSxDQUMzQjZULGdCQUFBLENBQWlCaFUsUUFBQSxFQUNqQmdVLGdCQUNGLENBQUE7QUFDRjtBQUdBLElBQUEsSUFBSUEsZ0JBQUEsQ0FBaUJnQyxrQkFBQSxLQUF1QixNQUFXLEVBQUE7QUFDckRoQyxNQUFBQSxnQkFBQSxDQUFpQmdDLGtCQUFBLEdBQ2ZoQyxnQkFBQSxDQUFpQjdNLFdBQUEsS0FBZ0IsUUFBQTtBQUNyQztBQUNBLElBQUEsSUFBSTZNLGdCQUFBLENBQWlCa0IsWUFBQSxLQUFpQixNQUFXLEVBQUE7QUFDL0NsQixNQUFBQSxnQkFBQSxDQUFpQmtCLFlBQUEsR0FBZSxDQUFDLENBQUNsQixnQkFBQSxDQUFpQmlDLFFBQUE7QUFDckQ7SUFFQSxJQUFJLENBQUNqQyxnQkFBQSxDQUFpQjdNLFdBQUEsSUFBZTZNLGdCQUFBLENBQWlCaEcsU0FBQSxFQUFXO01BQy9EZ0csZ0JBQUEsQ0FBaUI3TSxXQUFBLEdBQWMsY0FBQTtBQUNqQztBQUVBLElBQUEsSUFBSTZNLGdCQUFBLENBQWlCblAsT0FBQSxLQUFZSixTQUFBLEVBQVc7TUFDMUN1UCxnQkFBQSxDQUFpQnZVLE9BQUEsR0FBVSxLQUFBO0FBQzdCO0FBRUEsSUFBQSxPQUFPdVUsZ0JBQUE7QUFPVDtBQUVBakQsRUFBQUEsc0JBQUFBLENBQ0UzUSxPQUFBLEVBQ0c7SUFDSCxJQUFJQSxPQUFBLEVBQVMyVixVQUFBLEVBQVk7QUFDdkIsTUFBQSxPQUFPM1YsT0FBQTtBQUNUO0lBQ0EsT0FBTztBQUNMLE1BQUEsR0FBRyxJQUFLLENBQUEsZUFBQSxDQUFnQjhWLFNBQUE7TUFDeEIsSUFBSTlWLE9BQUEsRUFBU1EsV0FBQSxJQUNYLEtBQUtrVixtQkFBQSxDQUFvQjFWLE9BQUEsQ0FBUVEsV0FBVyxDQUFBLENBQUE7QUFDOUMsTUFBQSxHQUFHUixPQUFBO0FBQ0gyVixNQUFBQSxVQUFBLEVBQVk7QUFDZCxLQUFBO0FBQ0Y7QUFFQXJHLEVBQUFBLEtBQUFBLEdBQWM7QUFDWixJQUFBLElBQUEsQ0FBSyxXQUFBLENBQVlBLEtBQUEsRUFBTTtBQUN2QixJQUFBLElBQUEsQ0FBSyxjQUFBLENBQWVBLEtBQUEsRUFBTTtBQUM1QjtBQUNGLENBQUE7OztBQ25wQk8sSUFBTXlHLGFBQUEsR0FBTixjQU1HdFosWUFBQSxDQUFtRDtFQXlCM0RDLFdBQ0VzUyxDQUFBQSxNQUFBLEVBQ09oUCxPQUFBLEVBT1A7SUFDQSxLQUFNLEVBQUE7SUFSQyxJQUFBQSxDQUFBQSxPQUFBLEdBQUFBLE9BQUE7SUFVUCxJQUFLLENBQUEsT0FBQSxHQUFVZ1AsTUFBQTtJQUNmLElBQUssQ0FBQSxZQUFBLEdBQWUsSUFBQTtBQUNwQixJQUFBLElBQUEsQ0FBSyxnQkFBQSxHQUFtQjdJLGVBQUEsRUFBZ0I7QUFDeEMsSUFBQSxJQUFJLENBQUMsSUFBQSxDQUFLbkcsT0FBQSxDQUFRZ1csNkJBQUEsRUFBK0I7TUFDL0MsSUFBSyxDQUFBLGdCQUFBLENBQWlCclIsTUFBQSxDQUNwQixJQUFJQyxLQUFBLENBQU0sMkRBQTJELENBQ3ZFLENBQUE7QUFDRjtBQUVBLElBQUEsSUFBQSxDQUFLcVIsV0FBQSxFQUFZO0lBQ2pCLElBQUtoTCxDQUFBQSxVQUFBLENBQVdqTCxPQUFPLENBQUE7QUFDekI7QUEvQ0EsRUFBQSxPQUFBO0FBQ0EsRUFBQSxhQUFBLEdBQW9FLE1BQUE7QUFDcEUsRUFBQSx5QkFBQSxHQUE0RCxNQUFBO0FBQzVELEVBQUEsY0FBQSxHQUFxRCxNQUFBO0FBQ3JELEVBQUEsbUJBQUE7QUFDQSxFQUFBLHFCQUFBO0FBT0EsRUFBQSxnQkFBQTtBQUNBLEVBQUEsWUFBQTtBQUNBLEVBQUEsU0FBQTtBQUNBLEVBQUEsYUFBQTtBQUFBO0FBQUE7QUFHQSxFQUFBLHlCQUFBO0FBQ0EsRUFBQSxlQUFBO0FBQ0EsRUFBQSxrQkFBQTtBQUNBLEVBQUEsdUJBQUE7QUFDQSxFQUFBLGFBQUEsa0JBQW9CcEQsSUFBQUEsR0FBQSxFQUErQjtBQTJCekNxWixFQUFBQSxXQUFBQSxHQUFvQjtBQUM1QixJQUFBLElBQUEsQ0FBS3hKLE9BQUEsR0FBVSxJQUFBLENBQUtBLE9BQUEsQ0FBUTNQLElBQUEsQ0FBSyxJQUFJLENBQUE7QUFDdkM7QUFFVUcsRUFBQUEsV0FBQUEsR0FBb0I7QUFDNUIsSUFBQSxJQUFJLElBQUtOLENBQUFBLFNBQUEsQ0FBVVUsSUFBQSxLQUFTLENBQUcsRUFBQTtBQUM3QixNQUFBLElBQUEsQ0FBSyxhQUFBLENBQWN1UCxXQUFBLENBQVksSUFBSSxDQUFBO01BRW5DLElBQUlzSixrQkFBQSxDQUFtQixJQUFLLENBQUEsYUFBQSxFQUFlLElBQUEsQ0FBS2xXLE9BQU8sQ0FBRyxFQUFBO1FBQ3hELElBQUssQ0FBQSxhQUFBLEVBQWM7T0FDZCxNQUFBO0FBQ0wsUUFBQSxJQUFBLENBQUttVyxZQUFBLEVBQWE7QUFDcEI7TUFFQSxJQUFLLENBQUEsYUFBQSxFQUFjO0FBQ3JCO0FBQ0Y7QUFFVWhaLEVBQUFBLGFBQUFBLEdBQXNCO0FBQzlCLElBQUEsSUFBSSxDQUFDLElBQUEsQ0FBS0MsWUFBQSxFQUFnQixFQUFBO0FBQ3hCLE1BQUEsSUFBQSxDQUFLbU4sT0FBQSxFQUFRO0FBQ2Y7QUFDRjtBQUVBb0MsRUFBQUEsc0JBQUFBLEdBQWtDO0FBQ2hDLElBQUEsT0FBT3lKLGFBQUEsQ0FDTCxJQUFLLENBQUEsYUFBQSxFQUNMLElBQUtwVyxDQUFBQSxPQUFBLEVBQ0wsSUFBQSxDQUFLQSxPQUFBLENBQVE0VixrQkFDZixDQUFBO0FBQ0Y7QUFFQXBKLEVBQUFBLHdCQUFBQSxHQUFvQztBQUNsQyxJQUFBLE9BQU80SixhQUFBLENBQ0wsSUFBSyxDQUFBLGFBQUEsRUFDTCxJQUFLcFcsQ0FBQUEsT0FBQSxFQUNMLElBQUEsQ0FBS0EsT0FBQSxDQUFRcVcsb0JBQ2YsQ0FBQTtBQUNGO0FBRUE5TCxFQUFBQSxPQUFBQSxHQUFnQjtBQUNkLElBQUEsSUFBQSxDQUFLNU4sU0FBQSxrQkFBZ0JDLElBQUFBLEdBQUEsRUFBSTtJQUN6QixJQUFLLENBQUEsa0JBQUEsRUFBbUI7SUFDeEIsSUFBSyxDQUFBLHFCQUFBLEVBQXNCO0FBQzNCLElBQUEsSUFBQSxDQUFLLGFBQUEsQ0FBY2tRLGNBQUEsQ0FBZSxJQUFJLENBQUE7QUFDeEM7RUFFQTdCLFVBQ0VqTCxDQUFBQSxPQUFBLEVBT0FzVyxhQUFBLEVBQ007SUFDTixNQUFNQyxXQUFBLEdBQWMsSUFBQSxDQUFLdlcsT0FBQTtBQUN6QixJQUFBLE1BQU13VyxTQUFBLEdBQVksSUFBSyxDQUFBLGFBQUE7SUFFdkIsSUFBS3hXLENBQUFBLE9BQUEsR0FBVSxJQUFLLENBQUEsT0FBQSxDQUFRaVAsbUJBQUEsQ0FBb0JqUCxPQUFPLENBQUE7QUFFdkQsSUFBQSxJQUNFLElBQUtBLENBQUFBLE9BQUEsQ0FBUVgsT0FBQSxLQUFZLE1BQ3pCLElBQUEsT0FBTyxJQUFLVyxDQUFBQSxPQUFBLENBQVFYLE9BQUEsS0FBWSxTQUFBLElBQ2hDLE9BQU8sSUFBS1csQ0FBQUEsT0FBQSxDQUFRWCxPQUFBLEtBQVksVUFBQSxJQUNoQyxPQUFPRCxjQUFBLENBQWUsSUFBS1ksQ0FBQUEsT0FBQSxDQUFRWCxPQUFBLEVBQVMsSUFBQSxDQUFLLGFBQWEsTUFDNUQsU0FDRixFQUFBO01BQ0EsTUFBTSxJQUFJdUYsS0FBQSxDQUNSLHVFQUNGLENBQUE7QUFDRjtJQUVBLElBQUssQ0FBQSxZQUFBLEVBQWE7QUFDbEIsSUFBQSxJQUFBLENBQUssYUFBQSxDQUFjcUcsVUFBQSxDQUFXLEtBQUtqTCxPQUFPLENBQUE7SUFFMUMsSUFDRXVXLFdBQUEsQ0FBWVosVUFBQSxJQUNaLENBQUNyVCxtQkFBQSxDQUFvQixJQUFLdEMsQ0FBQUEsT0FBQSxFQUFTdVcsV0FBVyxDQUM5QyxFQUFBO0FBQ0EsTUFBQSxJQUFBLENBQUssT0FBQSxDQUFRckIsYUFBQSxFQUFjLENBQUVySSxNQUFBLENBQU87QUFDbENyTixRQUFBQSxJQUFBLEVBQU0sd0JBQUE7UUFDTkwsS0FBQSxFQUFPLElBQUssQ0FBQSxhQUFBO0FBQ1oyTSxRQUFBQSxRQUFBLEVBQVU7T0FDWCxDQUFBO0FBQ0g7QUFFQSxJQUFBLE1BQU0ySyxPQUFBLEdBQVUsSUFBS3JaLENBQUFBLFlBQUEsRUFBYTtBQUdsQyxJQUFBLElBQ0VxWixPQUFBLElBQ0FDLHFCQUFBLENBQ0UsS0FBSyxhQUFBLEVBQ0xGLFNBQUEsRUFDQSxJQUFBLENBQUt4VyxPQUFBLEVBQ0x1VyxXQUNGLENBQ0EsRUFBQTtNQUNBLElBQUssQ0FBQSxhQUFBLEVBQWM7QUFDckI7SUFHQSxJQUFLSixDQUFBQSxZQUFBLENBQWFHLGFBQWEsQ0FBQTtJQUcvQixJQUNFRyxPQUFBLEtBQ0MsSUFBSyxDQUFBLGFBQUEsS0FBa0JELFNBQUEsSUFDdEJwWCxjQUFBLENBQWUsSUFBQSxDQUFLWSxPQUFBLENBQVFYLE9BQUEsRUFBUyxJQUFLLENBQUEsYUFBYSxDQUNyREQsS0FBQUEsY0FBQSxDQUFlbVgsV0FBQSxDQUFZbFgsT0FBQSxFQUFTLElBQUssQ0FBQSxhQUFhLENBQ3hESCxJQUFBQSxnQkFBQSxDQUFpQixJQUFLYyxDQUFBQSxPQUFBLENBQVFqQixTQUFBLEVBQVcsSUFBQSxDQUFLLGFBQWEsQ0FBQSxLQUN6REcsZ0JBQUEsQ0FBaUJxWCxXQUFBLENBQVl4WCxTQUFBLEVBQVcsSUFBQSxDQUFLLGFBQWEsQ0FDOUQsQ0FBQSxFQUFBO01BQ0EsSUFBSyxDQUFBLG1CQUFBLEVBQW9CO0FBQzNCO0FBRUEsSUFBQSxNQUFNNFgsbUJBQUEsR0FBc0IsSUFBSyxDQUFBLHVCQUFBLEVBQXdCO0FBR3pELElBQUEsSUFDRUYsT0FBQSxLQUNDLElBQUssQ0FBQSxhQUFBLEtBQWtCRCxTQUFBLElBQ3RCcFgsY0FBQSxDQUFlLElBQUtZLENBQUFBLE9BQUEsQ0FBUVgsT0FBQSxFQUFTLElBQUssQ0FBQSxhQUFhLENBQUEsS0FDckRELGNBQUEsQ0FBZW1YLFdBQUEsQ0FBWWxYLE9BQUEsRUFBUyxJQUFBLENBQUssYUFBYSxLQUN4RHNYLG1CQUFBLEtBQXdCLElBQUssQ0FBQSx1QkFBQSxDQUMvQixFQUFBO01BQ0EsSUFBSyxDQUFBLHNCQUFBLENBQXVCQSxtQkFBbUIsQ0FBQTtBQUNqRDtBQUNGO0FBRUFDLEVBQUFBLG1CQUFBQSxDQUNFNVcsT0FBQSxFQU9vQztBQUNwQyxJQUFBLE1BQU1iLEtBQUEsR0FBUSxJQUFLLENBQUEsT0FBQSxDQUFRK1YsYUFBQSxFQUFjLENBQUVuRyxLQUFBLENBQU0sSUFBQSxDQUFLLE9BQUEsRUFBUy9PLE9BQU8sQ0FBQTtBQUV0RSxJQUFBLE1BQU1xQixNQUFBLEdBQVMsSUFBQSxDQUFLd1YsWUFBQSxDQUFhMVgsS0FBQSxFQUFPYSxPQUFPLENBQUE7QUFFL0MsSUFBQSxJQUFJOFcscUNBQUEsQ0FBc0MsSUFBTXpWLEVBQUFBLE1BQU0sQ0FBRyxFQUFBO01BaUJ2RCxJQUFLLENBQUEsY0FBQSxHQUFpQkEsTUFBQTtBQUN0QixNQUFBLElBQUEsQ0FBSyxxQkFBQSxHQUF3QixJQUFBLENBQUtyQixPQUFBO0FBQ2xDLE1BQUEsSUFBQSxDQUFLLG1CQUFBLEdBQXNCLEtBQUssYUFBQSxDQUFjSSxLQUFBO0FBQ2hEO0FBQ0EsSUFBQSxPQUFPaUIsTUFBQTtBQUNUO0FBRUErSyxFQUFBQSxnQkFBQUEsR0FBdUQ7SUFDckQsT0FBTyxJQUFBLENBQUssY0FBQTtBQUNkO0VBRUEySyxXQUNFMVYsQ0FBQUEsTUFBQSxFQUNBMlYsYUFBQSxFQUNvQztJQUNwQyxNQUFNQyxhQUFBLEdBQWdCLEVBQUM7SUFFdkJoVyxNQUFBLENBQU9DLElBQUEsQ0FBS0csTUFBTSxFQUFFa0UsT0FBQSxDQUFTakUsR0FBQSxJQUFRO0FBQ25DTCxNQUFBQSxNQUFBLENBQU9xTSxjQUFBLENBQWUySixhQUFBLEVBQWUzVixHQUFBLEVBQUs7QUFDeEM0VixRQUFBQSxZQUFBLEVBQWMsS0FBQTtBQUNkM0osUUFBQUEsVUFBQSxFQUFZLElBQUE7UUFDWkMsR0FBQSxFQUFLQSxNQUFNO1VBQ1QsSUFBSzJKLENBQUFBLFNBQUEsQ0FBVTdWLEdBQWdDLENBQUE7QUFDL0MwVixVQUFBQSxhQUFBLEdBQWdCMVYsR0FBZ0MsQ0FBQTtVQUNoRCxPQUFPRCxNQUFBLENBQU9DLEdBQWdDLENBQUE7QUFDaEQ7T0FDRCxDQUFBO0tBQ0YsQ0FBQTtBQUVELElBQUEsT0FBTzJWLGFBQUE7QUFDVDtBQUVBRSxFQUFBQSxTQUFBQSxDQUFVN1YsR0FBQSxFQUFnQztBQUN4QyxJQUFBLElBQUEsQ0FBSyxhQUFBLENBQWN0RSxHQUFBLENBQUlzRSxHQUFHLENBQUE7QUFDNUI7QUFFQThWLEVBQUFBLGVBQUFBLEdBQXNFO0lBQ3BFLE9BQU8sSUFBQSxDQUFLLGFBQUE7QUFDZDtFQUVBM0ssT0FBUSxDQUFBO0lBQUUsR0FBR3pNO0FBQVEsR0FBQSxHQUFvQixFQUV2QyxFQUFBO0lBQ0EsT0FBTyxJQUFBLENBQUtpTixLQUFBLENBQU07TUFDaEIsR0FBR2pOO0tBQ0osQ0FBQTtBQUNIO0FBRUFxWCxFQUFBQSxlQUFBQSxDQUNFclgsT0FBQSxFQU82QztJQUM3QyxNQUFNNFQsZ0JBQUEsR0FBbUIsSUFBSyxDQUFBLE9BQUEsQ0FBUTNFLG1CQUFBLENBQW9CalAsT0FBTyxDQUFBO0FBRWpFLElBQUEsTUFBTWIsS0FBQSxHQUFRLElBQUssQ0FBQSxPQUFBLENBQ2hCK1YsYUFBQSxFQUFjLENBQ2RuRyxLQUFBLENBQU0sSUFBQSxDQUFLLE9BQUEsRUFBUzZFLGdCQUFnQixDQUFBO0FBRXZDLElBQUEsT0FBT3pVLEtBQUEsQ0FBTThOLEtBQUEsR0FBUTNFLElBQUEsQ0FBSyxNQUFNLElBQUEsQ0FBS3VPLFlBQUEsQ0FBYTFYLEtBQUEsRUFBT3lVLGdCQUFnQixDQUFDLENBQUE7QUFDNUU7QUFFVTNHLEVBQUFBLEtBQUFBLENBQ1J6SSxZQUFBLEVBQzZDO0lBQzdDLE9BQU8sSUFBQSxDQUFLLGFBQUEsQ0FBYztBQUN4QixNQUFBLEdBQUdBLFlBQUE7QUFDSGtJLE1BQUFBLGFBQUEsRUFBZWxJLFlBQUEsQ0FBYWtJLGFBQUEsSUFBaUI7S0FDOUMsQ0FBQSxDQUFFcEUsSUFBQSxDQUFLLE1BQU07QUFDWixNQUFBLElBQUEsQ0FBSzZOLFlBQUEsRUFBYTtNQUNsQixPQUFPLElBQUEsQ0FBSyxjQUFBO0tBQ2IsQ0FBQTtBQUNIO0VBRUEsYUFBQW1CLENBQ0U5UyxZQUFBLEVBQ2lDO0lBRWpDLElBQUssQ0FBQSxZQUFBLEVBQWE7SUFHbEIsSUFBSXdFLE9BQUEsR0FBMkMsSUFBQSxDQUFLLGFBQUEsQ0FBY2lFLEtBQUEsQ0FDaEUsSUFBQSxDQUFLak4sT0FBQSxFQUNMd0UsWUFDRixDQUFBO0FBRUEsSUFBQSxJQUFJLENBQUNBLFlBQUEsRUFBY3NRLFlBQUEsRUFBYztBQUMvQjlMLE1BQUFBLE9BQUEsR0FBVUEsT0FBQSxDQUFRekMsS0FBQSxDQUFNakksTUFBSSxDQUFBO0FBQzlCO0FBRUEsSUFBQSxPQUFPMEssT0FBQTtBQUNUO0VBRUEsbUJBQUF1TyxHQUE0QjtJQUMxQixJQUFLLENBQUEsa0JBQUEsRUFBbUI7SUFDeEIsTUFBTXhZLFNBQUEsR0FBWUcsZ0JBQUEsQ0FDaEIsSUFBQSxDQUFLYyxPQUFBLENBQVFqQixTQUFBLEVBQ2IsSUFBSyxDQUFBLGFBQ1AsQ0FBQTtBQUVBLElBQUEsSUFBSVgsUUFBQSxJQUFZLElBQUssQ0FBQSxjQUFBLENBQWUrQixPQUFBLElBQVcsQ0FBQ3pCLGNBQUEsQ0FBZUssU0FBUyxDQUFHLEVBQUE7QUFDekUsTUFBQTtBQUNGO0lBRUEsTUFBTXlZLElBQUEsR0FBTzNZLGNBQUEsQ0FBZSxJQUFBLENBQUssY0FBQSxDQUFlNE0sYUFBQSxFQUFlMU0sU0FBUyxDQUFBO0lBSXhFLE1BQU1vRSxPQUFBLEdBQVVxVSxJQUFBLEdBQU8sQ0FBQTtBQUV2QixJQUFBLElBQUEsQ0FBSyxlQUFBLEdBQWtCbFUsVUFBQSxDQUFXLE1BQU07QUFDdEMsTUFBQSxJQUFJLENBQUMsSUFBSyxDQUFBLGNBQUEsQ0FBZW5ELE9BQUEsRUFBUztBQUNoQyxRQUFBLElBQUEsQ0FBS2dXLFlBQUEsRUFBYTtBQUNwQjtBQUNGLEtBQUEsRUFBR2hULE9BQU8sQ0FBQTtBQUNaO0VBRUEsdUJBQUFzVSxHQUEwQjtJQUN4QixPQUNHLENBQUEsT0FBTyxLQUFLelgsT0FBQSxDQUFRMFgsZUFBQSxLQUFvQixVQUFBLEdBQ3JDLEtBQUsxWCxPQUFBLENBQVEwWCxlQUFBLENBQWdCLElBQUEsQ0FBSyxhQUFhLENBQUEsR0FDL0MsS0FBSzFYLE9BQUEsQ0FBUTBYLGVBQUEsS0FBb0IsS0FBQTtBQUV6QztFQUVBLHNCQUFBQyxDQUF1QkMsWUFBQSxFQUFvQztJQUN6RCxJQUFLLENBQUEscUJBQUEsRUFBc0I7SUFFM0IsSUFBSyxDQUFBLHVCQUFBLEdBQTBCQSxZQUFBO0lBRS9CLElBQ0V4WixRQUFBLElBQ0FnQixjQUFBLENBQWUsSUFBQSxDQUFLWSxPQUFBLENBQVFYLE9BQUEsRUFBUyxJQUFBLENBQUssYUFBYSxNQUFNLEtBQzdELElBQUEsQ0FBQ1gsY0FBQSxDQUFlLElBQUssQ0FBQSx1QkFBdUIsQ0FBQSxJQUM1QyxJQUFLLENBQUEsdUJBQUEsS0FBNEIsQ0FDakMsRUFBQTtBQUNBLE1BQUE7QUFDRjtBQUVBLElBQUEsSUFBQSxDQUFLLGtCQUFBLEdBQXFCbVosV0FBQSxDQUFZLE1BQU07TUFDMUMsSUFDRSxJQUFBLENBQUs3WCxPQUFBLENBQVE4WCwyQkFBQSxJQUNicFMsWUFBQSxDQUFhSixTQUFBLEVBQ2IsRUFBQTtRQUNBLElBQUssQ0FBQSxhQUFBLEVBQWM7QUFDckI7S0FDQyxFQUFBLElBQUEsQ0FBSyx1QkFBdUIsQ0FBQTtBQUNqQztFQUVBLGFBQUF5UyxHQUFzQjtJQUNwQixJQUFLLENBQUEsbUJBQUEsRUFBb0I7QUFDekIsSUFBQSxJQUFBLENBQUssc0JBQUEsQ0FBdUIsS0FBSyx1QkFBQSxFQUF5QixDQUFBO0FBQzVEO0VBRUEsa0JBQUFDLEdBQTJCO0lBQ3pCLElBQUksSUFBQSxDQUFLLGVBQUEsRUFBaUI7TUFDeEJsTixZQUFBLENBQWEsSUFBSyxDQUFBLGVBQWUsQ0FBQTtNQUNqQyxJQUFLLENBQUEsZUFBQSxHQUFrQixNQUFBO0FBQ3pCO0FBQ0Y7RUFFQSxxQkFBQW1OLEdBQThCO0lBQzVCLElBQUksSUFBQSxDQUFLLGtCQUFBLEVBQW9CO01BQzNCQyxhQUFBLENBQWMsSUFBSyxDQUFBLGtCQUFrQixDQUFBO01BQ3JDLElBQUssQ0FBQSxrQkFBQSxHQUFxQixNQUFBO0FBQzVCO0FBQ0Y7RUFFVXJCLFlBQ1IxWCxDQUFBQSxLQUFBLEVBQ0FhLE9BQUEsRUFPb0M7QUFDcEMsSUFBQSxNQUFNd1csU0FBQSxHQUFZLElBQUssQ0FBQSxhQUFBO0lBQ3ZCLE1BQU1ELFdBQUEsR0FBYyxJQUFBLENBQUt2VyxPQUFBO0FBQ3pCLElBQUEsTUFBTW1ZLFVBQUEsR0FBYSxJQUFLLENBQUEsY0FBQTtBQUd4QixJQUFBLE1BQU1DLGVBQUEsR0FBa0IsSUFBSyxDQUFBLG1CQUFBO0FBQzdCLElBQUEsTUFBTUMsaUJBQUEsR0FBb0IsSUFBSyxDQUFBLHFCQUFBO0FBQy9CLElBQUEsTUFBTUMsV0FBQSxHQUFjblosS0FBQSxLQUFVcVgsU0FBQTtJQUM5QixNQUFNK0IsaUJBQUEsR0FBb0JELFdBQUEsR0FDdEJuWixLQUFBLENBQU1pQixLQUFBLEdBQ04sSUFBSyxDQUFBLHlCQUFBO0lBRVQsTUFBTTtBQUFFQSxNQUFBQTtBQUFNLEtBQUEsR0FBSWpCLEtBQUE7QUFDbEIsSUFBQSxJQUFJcVosUUFBQSxHQUFXO01BQUUsR0FBR3BZO0FBQU0sS0FBQTtBQUMxQixJQUFBLElBQUlxWSxpQkFBQSxHQUFvQixLQUFBO0FBQ3hCLElBQUEsSUFBSWhWLElBQUE7SUFHSixJQUFJekQsT0FBQSxDQUFRMFksa0JBQUEsRUFBb0I7QUFDOUIsTUFBQSxNQUFNakMsT0FBQSxHQUFVLElBQUtyWixDQUFBQSxZQUFBLEVBQWE7TUFFbEMsTUFBTXViLFlBQUEsR0FBZSxDQUFDbEMsT0FBQSxJQUFXUCxrQkFBQSxDQUFtQi9XLEtBQUEsRUFBT2EsT0FBTyxDQUFBO0FBRWxFLE1BQUEsTUFBTTRZLGVBQUEsR0FDSm5DLE9BQUEsSUFBV0MscUJBQUEsQ0FBc0J2WCxLQUFBLEVBQU9xWCxTQUFBLEVBQVd4VyxPQUFBLEVBQVN1VyxXQUFXLENBQUE7TUFFekUsSUFBSW9DLFlBQUEsSUFBZ0JDLGVBQUEsRUFBaUI7QUFDbkNKLFFBQUFBLFFBQUEsR0FBVztBQUNULFVBQUEsR0FBR0EsUUFBQTtVQUNILEdBQUdqSyxVQUFBLENBQVduTyxLQUFBLENBQU1xRCxJQUFBLEVBQU10RSxLQUFBLENBQU1hLE9BQU87QUFDekMsU0FBQTtBQUNGO0FBQ0EsTUFBQSxJQUFJQSxPQUFBLENBQVEwWSxrQkFBQSxLQUF1QixhQUFlLEVBQUE7UUFDaERGLFFBQUEsQ0FBUzlZLFdBQUEsR0FBYyxNQUFBO0FBQ3pCO0FBQ0Y7SUFFQSxJQUFJO01BQUVtRSxLQUFBO01BQU8ySyxjQUFBO0FBQWdCak8sTUFBQUE7QUFBTyxLQUFBLEdBQUlpWSxRQUFBO0lBR3hDLElBQUl4WSxPQUFBLENBQVE2WSxNQUFBLElBQVVMLFFBQUEsQ0FBUy9VLElBQUEsS0FBUyxNQUFXLEVBQUE7QUFFakQsTUFBQSxJQUNFMFUsVUFBQSxJQUNBSyxRQUFBLENBQVMvVSxJQUFBLEtBQVMyVSxlQUFBLEVBQWlCM1UsSUFBQSxJQUNuQ3pELE9BQUEsQ0FBUTZZLE1BQUEsS0FBVyxJQUFLLENBQUEsU0FBQSxFQUN4QjtRQUNBcFYsSUFBQSxHQUFPLElBQUssQ0FBQSxhQUFBO09BQ1AsTUFBQTtRQUNMLElBQUk7QUFDRixVQUFBLElBQUEsQ0FBSyxTQUFBLEdBQVl6RCxPQUFBLENBQVE2WSxNQUFBO0FBQ3pCcFYsVUFBQUEsSUFBQSxHQUFPekQsT0FBQSxDQUFRNlksTUFBQSxDQUFPTCxRQUFBLENBQVMvVSxJQUFJLENBQUE7VUFDbkNBLElBQUEsR0FBT0YsV0FBQSxDQUFZNFUsVUFBQSxFQUFZMVUsSUFBQSxFQUFNQSxJQUFBLEVBQU16RCxPQUFPLENBQUE7VUFDbEQsSUFBSyxDQUFBLGFBQUEsR0FBZ0J5RCxJQUFBO1VBQ3JCLElBQUssQ0FBQSxZQUFBLEdBQWUsSUFBQTtBQUN0QixTQUFBLENBQUEsT0FBU3FWLFdBQUEsRUFBYTtVQUNwQixJQUFLLENBQUEsWUFBQSxHQUFlQSxXQUFBO0FBQ3RCO0FBQ0Y7S0FHRyxNQUFBO01BQ0hyVixJQUFBLEdBQU8rVSxRQUFBLENBQVMvVSxJQUFBO0FBQ2xCO0lBR0EsSUFDRXpELE9BQUEsQ0FBUStZLGVBQUEsS0FBb0IsTUFBQSxJQUM1QnRWLElBQUEsS0FBUyxNQUFBLElBQ1RsRCxNQUFBLEtBQVcsU0FDWCxFQUFBO0FBQ0EsTUFBQSxJQUFJd1ksZUFBQTtNQUdKLElBQ0VaLFVBQUEsRUFBWU0saUJBQUEsSUFDWnpZLE9BQUEsQ0FBUStZLGVBQUEsS0FBb0JWLGlCQUFBLEVBQW1CVSxlQUFBLEVBQy9DO1FBQ0FBLGVBQUEsR0FBa0JaLFVBQUEsQ0FBVzFVLElBQUE7T0FDeEIsTUFBQTtRQUNMc1YsZUFBQSxHQUNFLE9BQU8vWSxPQUFBLENBQVErWSxlQUFBLEtBQW9CLFVBRTdCL1ksR0FBQUEsT0FBQSxDQUFRK1ksZUFBQSxDQUVSLElBQUEsQ0FBSyx5QkFBQSxFQUEyQjNZLEtBQUEsQ0FBTXFELElBQUEsRUFDdEMsSUFBSyxDQUFBLHlCQUNQLENBQUEsR0FDQXpELE9BQUEsQ0FBUStZLGVBQUE7QUFDZCxRQUFBLElBQUkvWSxPQUFBLENBQVE2WSxNQUFBLElBQVVFLGVBQUEsS0FBb0IsTUFBVyxFQUFBO1VBQ25ELElBQUk7QUFDRkEsWUFBQUEsZUFBQSxHQUFrQi9ZLE9BQUEsQ0FBUTZZLE1BQUEsQ0FBT0UsZUFBZSxDQUFBO1lBQ2hELElBQUssQ0FBQSxZQUFBLEdBQWUsSUFBQTtBQUN0QixXQUFBLENBQUEsT0FBU0QsV0FBQSxFQUFhO1lBQ3BCLElBQUssQ0FBQSxZQUFBLEdBQWVBLFdBQUE7QUFDdEI7QUFDRjtBQUNGO01BRUEsSUFBSUMsZUFBQSxLQUFvQixNQUFXLEVBQUE7QUFDakN4WSxRQUFBQSxNQUFBLEdBQVMsU0FBQTtRQUNUa0QsSUFBQSxHQUFPRixXQUFBLENBQ0w0VSxVQUFBLEVBQVkxVSxJQUFBLEVBQ1pzVixlQUFBLEVBQ0EvWSxPQUNGLENBQUE7QUFDQXlZLFFBQUFBLGlCQUFBLEdBQW9CLElBQUE7QUFDdEI7QUFDRjtJQUVBLElBQUksSUFBQSxDQUFLLFlBQUEsRUFBYztNQUNyQjVVLEtBQUEsR0FBUSxJQUFLLENBQUEsWUFBQTtNQUNiSixJQUFBLEdBQU8sSUFBSyxDQUFBLGFBQUE7QUFDWitLLE1BQUFBLGNBQUEsR0FBaUJ4USxJQUFBLENBQUtMLEdBQUEsRUFBSTtBQUMxQjRDLE1BQUFBLE1BQUEsR0FBUyxPQUFBO0FBQ1g7QUFFQSxJQUFBLE1BQU1pVCxVQUFBLEdBQWFnRixRQUFBLENBQVM5WSxXQUFBLEtBQWdCLFVBQUE7SUFDNUMsTUFBTXNaLFNBQUEsR0FBWXpZLE1BQUEsS0FBVyxTQUFBO0lBQzdCLE1BQU0wWSxPQUFBLEdBQVUxWSxNQUFBLEtBQVcsT0FBQTtBQUUzQixJQUFBLE1BQU0yWSxTQUFBLEdBQVlGLFNBQUEsSUFBYXhGLFVBQUE7SUFDL0IsTUFBTTdFLE9BQUEsR0FBVWxMLElBQUEsS0FBUyxNQUFBO0FBRXpCLElBQUEsTUFBTXBDLE1BQUEsR0FBaUQ7TUFDckRkLE1BQUE7TUFDQWIsV0FBQSxFQUFhOFksUUFBQSxDQUFTOVksV0FBQTtNQUN0QnNaLFNBQUE7TUFDQUcsU0FBQSxFQUFXNVksTUFBQSxLQUFXLFNBQUE7TUFDdEIwWSxPQUFBO0FBQ0FHLE1BQUFBLGdCQUFBLEVBQWtCRixTQUFBO01BQ2xCQSxTQUFBO01BQ0F6VixJQUFBO01BQ0FnSSxhQUFBLEVBQWUrTSxRQUFBLENBQVMvTSxhQUFBO01BQ3hCNUgsS0FBQTtNQUNBMkssY0FBQTtNQUNBNUgsWUFBQSxFQUFjNFIsUUFBQSxDQUFTbkssaUJBQUE7TUFDdkJrQyxhQUFBLEVBQWVpSSxRQUFBLENBQVNsSyxrQkFBQTtNQUN4QnBDLGdCQUFBLEVBQWtCc00sUUFBQSxDQUFTdE0sZ0JBQUE7TUFDM0JtTixTQUFBLEVBQVdiLFFBQUEsQ0FBU3ZNLGVBQUEsR0FBa0IsQ0FBS3VNLElBQUFBLFFBQUEsQ0FBU3RNLGdCQUFBLEdBQW1CLENBQUE7QUFDdkVvTixNQUFBQSxtQkFBQSxFQUNFZCxRQUFBLENBQVN2TSxlQUFBLEdBQWtCc00saUJBQUEsQ0FBa0J0TSxlQUFBLElBQzdDdU0sUUFBQSxDQUFTdE0sZ0JBQUEsR0FBbUJxTSxpQkFBQSxDQUFrQnJNLGdCQUFBO01BQ2hEc0gsVUFBQTtBQUNBK0YsTUFBQUEsWUFBQSxFQUFjL0YsVUFBQSxJQUFjLENBQUN3RixTQUFBO0FBQzdCUSxNQUFBQSxjQUFBLEVBQWdCUCxPQUFBLElBQVcsQ0FBQ3RLLE9BQUE7QUFDNUJ5QixNQUFBQSxRQUFBLEVBQVVvSSxRQUFBLENBQVM5WSxXQUFBLEtBQWdCLFFBQUE7TUFDbkMrWSxpQkFBQTtNQUNBZ0IsY0FBQSxFQUFnQlIsT0FBQSxJQUFXdEssT0FBQTtBQUMzQnhPLE1BQUFBLE9BQUEsRUFBU0EsT0FBQSxDQUFRaEIsS0FBQSxFQUFPYSxPQUFPLENBQUE7TUFDL0J5TSxPQUFBLEVBQVMsS0FBS0EsT0FBQTtNQUNkekQsT0FBQSxFQUFTLEtBQUs7QUFDaEIsS0FBQTtJQUVBLE1BQU0wUSxVQUFBLEdBQWFyWSxNQUFBO0FBRW5CLElBQUEsSUFBSSxJQUFLckIsQ0FBQUEsT0FBQSxDQUFRZ1csNkJBQUEsRUFBK0I7TUFDOUMsTUFBTTJELDBCQUFBLEdBQThCdlQsUUFBQSxJQUFxQztBQUN2RSxRQUFBLElBQUlzVCxVQUFBLENBQVduWixNQUFBLEtBQVcsT0FBUyxFQUFBO0FBQ2pDNkYsVUFBQUEsUUFBQSxDQUFTekIsTUFBQSxDQUFPK1UsVUFBQSxDQUFXN1YsS0FBSyxDQUFBO0FBQ2xDLFNBQUEsTUFBQSxJQUFXNlYsVUFBQSxDQUFXalcsSUFBQSxLQUFTLE1BQVcsRUFBQTtBQUN4QzJDLFVBQUFBLFFBQUEsQ0FBUy9DLE9BQUEsQ0FBUXFXLFVBQUEsQ0FBV2pXLElBQUksQ0FBQTtBQUNsQztBQUNGLE9BQUE7TUFLQSxNQUFNbVcsZ0JBQUEsR0FBbUJBLE1BQU07UUFDN0IsTUFBTUMsT0FBQSxHQUNILElBQUEsQ0FBSyxnQkFBQSxHQUNOSCxVQUFBLENBQVcxUSxPQUFBLEdBQ1Q3QyxlQUFBLEVBQWdCO0FBRXBCd1QsUUFBQUEsMEJBQUEsQ0FBMkJFLE9BQU8sQ0FBQTtBQUNwQyxPQUFBO0FBRUEsTUFBQSxNQUFNQyxZQUFBLEdBQWUsSUFBSyxDQUFBLGdCQUFBO01BQzFCLFFBQVFBLFlBQUEsQ0FBYXZaLE1BQUE7UUFDbkIsS0FBSyxTQUFBO0FBR0gsVUFBQSxJQUFJcEIsS0FBQSxDQUFNVyxTQUFBLEtBQWMwVyxTQUFBLENBQVUxVyxTQUFBLEVBQVc7QUFDM0M2WixZQUFBQSwwQkFBQSxDQUEyQkcsWUFBWSxDQUFBO0FBQ3pDO0FBQ0EsVUFBQTtRQUNGLEtBQUssV0FBQTtBQUNILFVBQUEsSUFDRUosVUFBQSxDQUFXblosTUFBQSxLQUFXLE9BQ3RCbVosSUFBQUEsVUFBQSxDQUFXalcsSUFBQSxLQUFTcVcsWUFBQSxDQUFhbmIsS0FBQSxFQUNqQztBQUNBaWIsWUFBQUEsZ0JBQUEsRUFBaUI7QUFDbkI7QUFDQSxVQUFBO1FBQ0YsS0FBSyxVQUFBO0FBQ0gsVUFBQSxJQUNFRixVQUFBLENBQVduWixNQUFBLEtBQVcsT0FDdEJtWixJQUFBQSxVQUFBLENBQVc3VixLQUFBLEtBQVVpVyxZQUFBLENBQWFwVCxNQUFBLEVBQ2xDO0FBQ0FrVCxZQUFBQSxnQkFBQSxFQUFpQjtBQUNuQjtBQUNBLFVBQUE7QUFDSjtBQUNGO0FBRUEsSUFBQSxPQUFPRixVQUFBO0FBQ1Q7QUFFQXZELEVBQUFBLFlBQUFBLENBQWFHLGFBQUEsRUFBcUM7QUFDaEQsSUFBQSxNQUFNNkIsVUFBQSxHQUFhLElBQUssQ0FBQSxjQUFBO0lBSXhCLE1BQU11QixVQUFBLEdBQWEsSUFBQSxDQUFLN0MsWUFBQSxDQUFhLEtBQUssYUFBQSxFQUFlLElBQUEsQ0FBSzdXLE9BQU8sQ0FBQTtBQUVyRSxJQUFBLElBQUEsQ0FBSyxtQkFBQSxHQUFzQixLQUFLLGFBQUEsQ0FBY0ksS0FBQTtBQUM5QyxJQUFBLElBQUEsQ0FBSyxxQkFBQSxHQUF3QixJQUFBLENBQUtKLE9BQUE7QUFFbEMsSUFBQSxJQUFJLEtBQUssbUJBQUEsQ0FBb0J5RCxJQUFBLEtBQVMsTUFBVyxFQUFBO0FBQy9DLE1BQUEsSUFBQSxDQUFLLHlCQUFBLEdBQTRCLElBQUEsQ0FBSyxhQUFBO0FBQ3hDO0FBR0EsSUFBQSxJQUFJbkIsbUJBQUEsQ0FBb0JvWCxVQUFBLEVBQVl2QixVQUFVLENBQUcsRUFBQTtBQUMvQyxNQUFBO0FBQ0Y7SUFFQSxJQUFLLENBQUEsY0FBQSxHQUFpQnVCLFVBQUE7SUFHdEIsTUFBTUssb0JBQUEsR0FBc0MsRUFBQztJQUU3QyxNQUFNQyxxQkFBQSxHQUF3QkEsTUFBZTtNQUMzQyxJQUFJLENBQUM3QixVQUFBLEVBQVk7UUFDZixPQUFPLElBQUE7QUFDVDtNQUVBLE1BQU07QUFBRThCLFFBQUFBO0FBQW9CLE9BQUEsR0FBSSxLQUFLamEsT0FBQTtNQUNyQyxNQUFNa2Esd0JBQUEsR0FDSixPQUFPRCxtQkFBQSxLQUF3QixVQUMzQkEsR0FBQUEsbUJBQUEsRUFBb0IsR0FDcEJBLG1CQUFBO0FBRU4sTUFBQSxJQUNFQyx3QkFBQSxLQUE2QixLQUM1QixJQUFBLENBQUNBLHdCQUFBLElBQTRCLENBQUMsSUFBQSxDQUFLLGFBQUEsQ0FBYzdjLElBQUEsRUFDbEQ7UUFDQSxPQUFPLElBQUE7QUFDVDtNQUVBLE1BQU04YyxhQUFBLEdBQWdCLElBQUl2ZCxHQUFBLENBQ3hCc2Qsd0JBQUEsSUFBNEIsSUFBSyxDQUFBLGFBQ25DLENBQUE7QUFFQSxNQUFBLElBQUksSUFBS2xhLENBQUFBLE9BQUEsQ0FBUThVLFlBQUEsRUFBYztRQUM3QnFGLGFBQUEsQ0FBY25kLEdBQUEsQ0FBSSxPQUFPLENBQUE7QUFDM0I7TUFFQSxPQUFPaUUsTUFBQSxDQUFPQyxJQUFBLENBQUssSUFBQSxDQUFLLGNBQWMsQ0FBRU8sQ0FBQUEsSUFBQSxDQUFNSCxHQUFBLElBQVE7UUFDcEQsTUFBTThZLFFBQUEsR0FBVzlZLEdBQUE7UUFDakIsTUFBTStELE9BQUEsR0FBVSxJQUFBLENBQUssY0FBQSxDQUFlK1UsUUFBUSxDQUFBLEtBQU1qQyxVQUFBLENBQVdpQyxRQUFRLENBQUE7QUFFckUsUUFBQSxPQUFPL1UsT0FBQSxJQUFXOFUsYUFBQSxDQUFjaEwsR0FBQSxDQUFJaUwsUUFBUSxDQUFBO09BQzdDLENBQUE7QUFDSCxLQUFBO0FBRUEsSUFBQSxJQUFJOUQsYUFBQSxFQUFlM1osU0FBQSxLQUFjLEtBQVNxZCxJQUFBQSxxQkFBQSxFQUF5QixFQUFBO01BQ2pFRCxvQkFBQSxDQUFxQnBkLFNBQUEsR0FBWSxJQUFBO0FBQ25DO0lBRUEsSUFBSyxDQUFBLE9BQUEsQ0FBUTtBQUFFLE1BQUEsR0FBR29kLG9CQUFBO01BQXNCLEdBQUd6RDtLQUFlLENBQUE7QUFDNUQ7RUFFQSxZQUFBK0QsR0FBcUI7QUFDbkIsSUFBQSxNQUFNbGIsS0FBQSxHQUFRLElBQUEsQ0FBSyxPQUFBLENBQVErVixhQUFBLEVBQWdCbkcsQ0FBQUEsS0FBQSxDQUFNLElBQUssQ0FBQSxPQUFBLEVBQVMsS0FBSy9PLE9BQU8sQ0FBQTtBQUUzRSxJQUFBLElBQUliLEtBQUEsS0FBVSxJQUFLLENBQUEsYUFBQSxFQUFlO0FBQ2hDLE1BQUE7QUFDRjtBQUVBLElBQUEsTUFBTXFYLFNBQUEsR0FBWSxJQUFLLENBQUEsYUFBQTtJQUd2QixJQUFLLENBQUEsYUFBQSxHQUFnQnJYLEtBQUE7QUFDckIsSUFBQSxJQUFBLENBQUsseUJBQUEsR0FBNEJBLEtBQUEsQ0FBTWlCLEtBQUE7SUFFdkMsSUFBSSxJQUFBLENBQUtoRCxZQUFBLEVBQWdCLEVBQUE7TUFDdkJvWixTQUFBLEVBQVcxSixjQUFBLENBQWUsSUFBSSxDQUFBO01BQzlCM04sS0FBQSxDQUFNeU4sV0FBQSxDQUFZLElBQUksQ0FBQTtBQUN4QjtBQUNGO0FBRUE2QixFQUFBQSxhQUFBQSxHQUFzQjtBQUNwQixJQUFBLElBQUEsQ0FBSzBILFlBQUEsRUFBYTtJQUVsQixJQUFJLElBQUEsQ0FBSy9ZLFlBQUEsRUFBZ0IsRUFBQTtNQUN2QixJQUFLLENBQUEsYUFBQSxFQUFjO0FBQ3JCO0FBQ0Y7RUFFQSxPQUFBa2QsQ0FBUWhFLGFBQUEsRUFBb0M7SUFDMUNqTSxhQUFBLENBQWNOLEtBQUEsQ0FBTSxNQUFNO01BRXhCLElBQUl1TSxhQUFBLENBQWMzWixTQUFBLEVBQVc7QUFDM0IsUUFBQSxJQUFBLENBQUtBLFNBQUEsQ0FBVTRJLE9BQUEsQ0FBU3hJLFFBQUEsSUFBYTtVQUNuQ0EsUUFBQSxDQUFTLElBQUssQ0FBQSxjQUFjLENBQUE7U0FDN0IsQ0FBQTtBQUNIO0FBR0EsTUFBQSxJQUFBLENBQUssT0FBQSxDQUFRbVksYUFBQSxFQUFjLENBQUVySSxNQUFBLENBQU87UUFDbEMxTixLQUFBLEVBQU8sSUFBSyxDQUFBLGFBQUE7QUFDWkssUUFBQUEsSUFBQSxFQUFNO09BQ1AsQ0FBQTtLQUNGLENBQUE7QUFDSDtBQUNGLENBQUE7QUFFQSxTQUFTK2EsaUJBQ1BwYixDQUFBQSxLQUFBLEVBQ0FhLE9BQUEsRUFDUztFQUNULE9BQ0VaLGNBQUEsQ0FBZVksT0FBQSxDQUFRWCxPQUFBLEVBQVNGLEtBQUssQ0FBTSxLQUFBLEtBQUEsSUFDM0NBLEtBQUEsQ0FBTWlCLEtBQUEsQ0FBTXFELElBQUEsS0FBUyxNQUNyQixJQUFBLEVBQUV0RSxLQUFBLENBQU1pQixLQUFBLENBQU1HLE1BQUEsS0FBVyxPQUFXUCxJQUFBQSxPQUFBLENBQVF3YSxZQUFBLEtBQWlCLEtBQUEsQ0FBQTtBQUVqRTtBQUVBLFNBQVN0RSxrQkFDUC9XLENBQUFBLEtBQUEsRUFDQWEsT0FBQSxFQUNTO0VBQ1QsT0FDRXVhLGlCQUFBLENBQWtCcGIsS0FBQSxFQUFPYSxPQUFPLENBQy9CYixJQUFBQSxLQUFBLENBQU1pQixLQUFBLENBQU1xRCxJQUFBLEtBQVMsTUFBQSxJQUNwQjJTLGFBQUEsQ0FBY2pYLEtBQUEsRUFBT2EsT0FBQSxFQUFTQSxPQUFBLENBQVF5YSxjQUFjLENBQUE7QUFFMUQ7QUFFQSxTQUFTckUsY0FDUGpYLEtBQUEsRUFDQWEsT0FBQSxFQUNBMGEsS0FBQSxFQUdBO0VBQ0EsSUFBSXRiLGNBQUEsQ0FBZVksT0FBQSxDQUFRWCxPQUFBLEVBQVNGLEtBQUssTUFBTSxLQUFPLEVBQUE7SUFDcEQsTUFBTVIsS0FBQSxHQUFRLE9BQU8rYixLQUFBLEtBQVUsYUFBYUEsS0FBQSxDQUFNdmIsS0FBSyxDQUFBLEdBQUl1YixLQUFBO0lBRTNELE9BQU8vYixLQUFBLEtBQVUsUUFBQSxJQUFhQSxLQUFBLEtBQVUsU0FBU3dCLE9BQUEsQ0FBUWhCLEtBQUEsRUFBT2EsT0FBTyxDQUFBO0FBQ3pFO0VBQ0EsT0FBTyxLQUFBO0FBQ1Q7QUFFQSxTQUFTMFcscUJBQUFBLENBQ1B2WCxLQUFBLEVBQ0FxWCxTQUFBLEVBQ0F4VyxPQUFBLEVBQ0F1VyxXQUFBLEVBQ1M7QUFDVCxFQUFBLE9BQUEsQ0FDR3BYLEtBQUEsS0FBVXFYLFNBQUEsSUFDVHBYLGNBQUEsQ0FBZW1YLFdBQUEsQ0FBWWxYLE9BQUEsRUFBU0YsS0FBSyxDQUFBLEtBQU0sS0FDaEQsTUFBQSxDQUFDYSxPQUFBLENBQVE2VixRQUFBLElBQVkxVyxLQUFBLENBQU1pQixLQUFBLENBQU1HLE1BQUEsS0FBVyxPQUM3Q0osQ0FBQUEsSUFBQUEsT0FBQSxDQUFRaEIsS0FBQSxFQUFPYSxPQUFPLENBQUE7QUFFMUI7QUFFQSxTQUFTRyxPQUNQaEIsQ0FBQUEsS0FBQSxFQUNBYSxPQUFBLEVBQ1M7RUFDVCxPQUNFWixjQUFBLENBQWVZLE9BQUEsQ0FBUVgsT0FBQSxFQUFTRixLQUFLLE1BQU0sS0FDM0NBLElBQUFBLEtBQUEsQ0FBTWtOLGFBQUEsQ0FBY25OLGdCQUFBLENBQWlCYyxPQUFBLENBQVFqQixTQUFBLEVBQVdJLEtBQUssQ0FBQyxDQUFBO0FBRWxFO0FBSUEsU0FBUzJYLHFDQU9QaEwsQ0FBQUEsUUFBQSxFQUNBNk8sZ0JBQUEsRUFDQTtFQUdBLElBQUksQ0FBQ3JZLG1CQUFBLENBQW9Cd0osUUFBQSxDQUFTTSxnQkFBQSxFQUFvQnVPLEVBQUFBLGdCQUFnQixDQUFHLEVBQUE7SUFDdkUsT0FBTyxJQUFBO0FBQ1Q7RUFHQSxPQUFPLEtBQUE7QUFDVDs7O0FDcHpCTyxJQUFNQyxnQkFBQSxHQUFOLGNBS0duZSxZQUFBLENBRVI7QUFHQSxFQUFBLE9BQUE7QUFDQSxFQUFBLGNBQUEsR0FDRSxNQUFBO0FBQ0YsRUFBQSxnQkFBQTtBQUNBLEVBQUEsY0FBQTtFQUVBQyxXQUNFc1MsQ0FBQUEsTUFBQSxFQUNBaFAsT0FBQSxFQUNBO0lBQ0EsS0FBTSxFQUFBO0lBRU4sSUFBSyxDQUFBLE9BQUEsR0FBVWdQLE1BQUE7SUFDZixJQUFLL0QsQ0FBQUEsVUFBQSxDQUFXakwsT0FBTyxDQUFBO0FBQ3ZCLElBQUEsSUFBQSxDQUFLaVcsV0FBQSxFQUFZO0lBQ2pCLElBQUssQ0FBQSxhQUFBLEVBQWM7QUFDckI7QUFFVUEsRUFBQUEsV0FBQUEsR0FBb0I7QUFDNUIsSUFBQSxJQUFBLENBQUs0RSxNQUFBLEdBQVMsSUFBQSxDQUFLQSxNQUFBLENBQU8vZCxJQUFBLENBQUssSUFBSSxDQUFBO0FBQ25DLElBQUEsSUFBQSxDQUFLK08sS0FBQSxHQUFRLElBQUEsQ0FBS0EsS0FBQSxDQUFNL08sSUFBQSxDQUFLLElBQUksQ0FBQTtBQUNuQztBQUVBbU8sRUFBQUEsVUFBQUEsQ0FDRWpMLE9BQUEsRUFDQTtJQUNBLE1BQU11VyxXQUFBLEdBQWMsSUFBQSxDQUFLdlcsT0FBQTtJQUd6QixJQUFLQSxDQUFBQSxPQUFBLEdBQVUsSUFBSyxDQUFBLE9BQUEsQ0FBUTJRLHNCQUFBLENBQXVCM1EsT0FBTyxDQUFBO0FBQzFELElBQUEsSUFBSSxDQUFDc0MsbUJBQUEsQ0FBb0IsS0FBS3RDLE9BQUEsRUFBU3VXLFdBQVcsQ0FBRyxFQUFBO0FBQ25ELE1BQUEsSUFBQSxDQUFLLE9BQUEsQ0FBUXBCLGdCQUFBLEVBQWlCLENBQUV0SSxNQUFBLENBQU87QUFDckNyTixRQUFBQSxJQUFBLEVBQU0sd0JBQUE7UUFDTmMsUUFBQSxFQUFVLElBQUssQ0FBQSxnQkFBQTtBQUNmd0wsUUFBQUEsUUFBQSxFQUFVO09BQ1gsQ0FBQTtBQUNIO0lBRUEsSUFDRXlLLFdBQUEsRUFBYS9WLFdBQUEsSUFDYixLQUFLUixPQUFBLENBQVFRLFdBQUEsSUFDYkMsT0FBQSxDQUFROFYsV0FBQSxDQUFZL1YsV0FBVyxDQUFNQyxLQUFBQSxPQUFBLENBQVEsSUFBS1QsQ0FBQUEsT0FBQSxDQUFRUSxXQUFXLENBQ3JFLEVBQUE7QUFDQSxNQUFBLElBQUEsQ0FBS3FMLEtBQUEsRUFBTTtLQUNGLE1BQUEsSUFBQSxJQUFBLENBQUssZ0JBQUEsRUFBa0J6TCxLQUFBLENBQU1HLE1BQUEsS0FBVyxTQUFXLEVBQUE7QUFDNUQsTUFBQSxJQUFBLENBQUssZ0JBQUEsQ0FBaUIwSyxVQUFBLENBQVcsS0FBS2pMLE9BQU8sQ0FBQTtBQUMvQztBQUNGO0FBRVU3QyxFQUFBQSxhQUFBQSxHQUFzQjtBQUM5QixJQUFBLElBQUksQ0FBQyxJQUFBLENBQUtDLFlBQUEsRUFBZ0IsRUFBQTtBQUN4QixNQUFBLElBQUEsQ0FBSyxnQkFBQSxFQUFrQjBQLGNBQUEsQ0FBZSxJQUFJLENBQUE7QUFDNUM7QUFDRjtBQUVBMkQsRUFBQUEsZ0JBQUFBLENBQWlCdEMsTUFBQSxFQUEyRDtJQUMxRSxJQUFLLENBQUEsYUFBQSxFQUFjO0lBRW5CLElBQUssQ0FBQSxPQUFBLENBQVFBLE1BQU0sQ0FBQTtBQUNyQjtBQUVBL0IsRUFBQUEsZ0JBQUFBLEdBS0U7SUFDQSxPQUFPLElBQUEsQ0FBSyxjQUFBO0FBQ2Q7QUFFQVAsRUFBQUEsS0FBQUEsR0FBYztBQUdaLElBQUEsSUFBQSxDQUFLLGdCQUFBLEVBQWtCaUIsY0FBQSxDQUFlLElBQUksQ0FBQTtJQUMxQyxJQUFLLENBQUEsZ0JBQUEsR0FBbUIsTUFBQTtJQUN4QixJQUFLLENBQUEsYUFBQSxFQUFjO0lBQ25CLElBQUssQ0FBQSxPQUFBLEVBQVE7QUFDZjtFQUVBK04sTUFDRTVLLENBQUFBLFNBQUEsRUFDQWpRLE9BQUEsRUFDZ0I7SUFDaEIsSUFBSyxDQUFBLGNBQUEsR0FBaUJBLE9BQUE7QUFFdEIsSUFBQSxJQUFBLENBQUssZ0JBQUEsRUFBa0I4TSxjQUFBLENBQWUsSUFBSSxDQUFBO0FBRTFDLElBQUEsSUFBQSxDQUFLLGdCQUFBLEdBQW1CLElBQUssQ0FBQSxPQUFBLENBQzFCcUksZ0JBQUEsRUFBaUIsQ0FDakJwRyxLQUFBLENBQU0sSUFBQSxDQUFLLE9BQUEsRUFBUyxLQUFLL08sT0FBTyxDQUFBO0FBRW5DLElBQUEsSUFBQSxDQUFLLGdCQUFBLENBQWlCNE0sV0FBQSxDQUFZLElBQUksQ0FBQTtBQUV0QyxJQUFBLE9BQU8sS0FBSyxnQkFBQSxDQUFpQm9ELE9BQUEsQ0FBUUMsU0FBUyxDQUFBO0FBQ2hEO0VBRUEsYUFBQTZLLEdBQXNCO0lBQ3BCLE1BQU0xYSxLQUFBLEdBQ0osSUFBSyxDQUFBLGdCQUFBLEVBQWtCQSxLQUFBLElBQ3ZCZ0wsZUFBQSxFQUFxRDtJQUV2RCxJQUFLLENBQUEsY0FBQSxHQUFpQjtBQUNwQixNQUFBLEdBQUdoTCxLQUFBO0FBQ0g0WSxNQUFBQSxTQUFBLEVBQVc1WSxLQUFBLENBQU1HLE1BQUEsS0FBVyxTQUFBO0FBQzVCNFksTUFBQUEsU0FBQSxFQUFXL1ksS0FBQSxDQUFNRyxNQUFBLEtBQVcsU0FBQTtBQUM1QjBZLE1BQUFBLE9BQUEsRUFBUzdZLEtBQUEsQ0FBTUcsTUFBQSxLQUFXLE9BQUE7QUFDMUJ3YSxNQUFBQSxNQUFBLEVBQVEzYSxLQUFBLENBQU1HLE1BQUEsS0FBVyxNQUFBO01BQ3pCc2EsTUFBQSxFQUFRLEtBQUtBLE1BQUE7QUFDYmhQLE1BQUFBLEtBQUEsRUFBTyxJQUFLQSxDQUFBQTtBQUNkLEtBQUE7QUFDRjtFQUVBLE9BQUF5TyxDQUFRbk0sTUFBQSxFQUE0RDtJQUNsRTlELGFBQUEsQ0FBY04sS0FBQSxDQUFNLE1BQU07QUFFeEIsTUFBQSxJQUFJLEtBQUssY0FBQSxJQUFrQixJQUFLM00sQ0FBQUEsWUFBQSxFQUFnQixFQUFBO0FBQzlDLFFBQUEsTUFBTTZTLFNBQUEsR0FBWSxJQUFBLENBQUssY0FBQSxDQUFlQSxTQUFBO0FBQ3RDLFFBQUEsTUFBTXBDLE9BQUEsR0FBVSxJQUFBLENBQUssY0FBQSxDQUFlQSxPQUFBO0FBRXBDLFFBQUEsSUFBSU0sTUFBQSxFQUFRM08sSUFBQSxLQUFTLFNBQVcsRUFBQTtVQUM5QixJQUFLLENBQUEsY0FBQSxDQUFleUksU0FBQSxHQUFZa0csTUFBQSxDQUFPMUssSUFBQSxFQUFNd00sU0FBQSxFQUFXcEMsT0FBUSxDQUFBO0FBQ2hFLFVBQUEsSUFBQSxDQUFLLGNBQUEsQ0FBZUksU0FBQSxHQUFZRSxNQUFBLENBQU8xSyxJQUFBLEVBQU0sSUFBQSxFQUFNd00sU0FBQSxFQUFXcEMsT0FBTyxDQUFBO0FBQ3ZFLFNBQUEsTUFBQSxJQUFXTSxNQUFBLEVBQVEzTyxJQUFBLEtBQVMsT0FBUyxFQUFBO1VBQ25DLElBQUssQ0FBQSxjQUFBLENBQWUwSSxPQUFBLEdBQVVpRyxNQUFBLENBQU90SyxLQUFBLEVBQU9vTSxTQUFBLEVBQVdwQyxPQUFPLENBQUE7QUFDOUQsVUFBQSxJQUFBLENBQUssY0FBQSxDQUFlSSxTQUFBLEdBQ2xCLE1BQUEsRUFDQUUsTUFBQSxDQUFPdEssS0FBQSxFQUNQb00sU0FBQSxFQUNBcEMsT0FDRixDQUFBO0FBQ0Y7QUFDRjtBQUdBLE1BQUEsSUFBQSxDQUFLbFIsU0FBQSxDQUFVNEksT0FBQSxDQUFTeEksUUFBQSxJQUFhO1FBQ25DQSxRQUFBLENBQVMsSUFBSyxDQUFBLGNBQWMsQ0FBQTtPQUM3QixDQUFBO0tBQ0YsQ0FBQTtBQUNIO0FBQ0YsQ0FBQTs7QUNyS08sSUFBTWllLGtCQUFBLEdBQTJCQyxnQkFBQSxDQUFBQyxhQUFBLENBQ3RDLE1BQ0YsQ0FBQTtBQUVPLElBQU1DLGNBQUEsR0FBa0JDLFdBQUEsSUFBOEI7QUFDM0QsRUFBQSxNQUFNcE0sTUFBQSxHQUFlaU0sZ0JBQUEsQ0FBQUksVUFBQSxDQUFXTCxrQkFBa0IsQ0FBQTtFQU1sRCxJQUFJLENBQUNoTSxNQUFBLEVBQVE7SUFDWCxNQUFNLElBQUlwSyxLQUFBLENBQU0sd0RBQXdELENBQUE7QUFDMUU7QUFFQSxFQUFBLE9BQU9vSyxNQUFBO0FBQ1QsQ0FBQTtBQU9PLElBQU1zTSxtQkFBQSxHQUFzQkEsQ0FBQztFQUNsQ3RNLE1BQUE7QUFDQXVNLEVBQUFBO0FBQ0YsQ0FBbUQsS0FBQTtFQUMzQ04sZ0JBQUEsQ0FBQU8sU0FBQSxDQUFVLE1BQU07SUFDcEJ4TSxNQUFBLENBQU9zRSxLQUFBLEVBQU07QUFDYixJQUFBLE9BQU8sTUFBTTtNQUNYdEUsTUFBQSxDQUFPdUUsT0FBQSxFQUFRO0FBQ2pCLEtBQUE7R0FDQyxFQUFBLENBQUN2RSxNQUFNLENBQUMsQ0FBQTtBQUVYLEVBQUEsc0JBQ0V5TSxjQUFBLENBQUNULGtCQUFBLENBQW1CVSxRQUFBLEVBQW5CO0FBQTRCL2MsSUFBQUEsS0FBQSxFQUFPcVEsTUFBQTtBQUNqQ3VNLElBQUFBO0dBQ0gsQ0FBQTtBQUVKLENBQUE7O0FDekNBLElBQU1JLGtCQUFBLEdBQTJCVixnQkFBQSxDQUFBQyxhQUFBLENBQWMsS0FBSyxDQUFBO0FBRTdDLElBQU1VLGNBQUEsR0FBaUJBLE1BQVlYLGdCQUFBLENBQUFJLFVBQUEsQ0FBV00sa0JBQWtCLENBQUE7QUFDcENBLGtCQUFBLENBQW1CRDs7QUNRdEQsU0FBU0csY0FBNEM7QUFDbkQsRUFBQSxJQUFJQyxPQUFBLEdBQVUsS0FBQTtFQUNkLE9BQU87SUFDTEMsVUFBQSxFQUFZQSxNQUFNO0FBQ2hCRCxNQUFBQSxPQUFBLEdBQVUsS0FBQTtBQUNaLEtBQUE7SUFDQWpRLEtBQUEsRUFBT0EsTUFBTTtBQUNYaVEsTUFBQUEsT0FBQSxHQUFVLElBQUE7QUFDWixLQUFBO0lBQ0FBLE9BQUEsRUFBU0EsTUFBTTtBQUNiLE1BQUEsT0FBT0EsT0FBQTtBQUNUO0FBQ0YsR0FBQTtBQUNGO0FBRUEsSUFBTUUsOEJBQUEsR0FBdUNmLGdCQUFBLENBQUFDLGFBQUEsQ0FBY1csV0FBQSxFQUFhLENBQUE7QUFJakUsSUFBTUksMEJBQUEsR0FBNkJBLE1BQ2xDaEIsZ0JBQUEsQ0FBQUksVUFBQSxDQUFXVyw4QkFBOEIsQ0FBQTs7O0FDbEMxQyxTQUFTRSxnQkFDZEMsQ0FBQUEsVUFBQSxFQUNBQyxNQUFBLEVBQ1M7RUFFVCxJQUFJLE9BQU9ELFVBQUEsS0FBZSxVQUFZLEVBQUE7SUFDcEMsT0FBT0EsVUFBQSxDQUFXLEdBQUdDLE1BQU0sQ0FBQTtBQUM3QjtFQUVBLE9BQU8sQ0FBQyxDQUFDRCxVQUFBO0FBQ1g7QUFFTyxTQUFTN2QsSUFBQUEsR0FBYTs7QUNBdEIsSUFBTStkLCtCQUFBLEdBQWtDQSxDQU83Q3JjLE9BQUEsRUFPQXNjLGtCQUFBLEtBQ0c7RUFDSCxJQUNFdGMsT0FBQSxDQUFRNlYsUUFBQSxJQUNSN1YsT0FBQSxDQUFROFUsWUFBQSxJQUNSOVUsT0FBQSxDQUFRZ1csNkJBQUEsRUFDUjtBQUVBLElBQUEsSUFBSSxDQUFDc0csa0JBQUEsQ0FBbUJSLE9BQUEsRUFBVyxFQUFBO01BQ2pDOWIsT0FBQSxDQUFRd2EsWUFBQSxHQUFlLEtBQUE7QUFDekI7QUFDRjtBQUNGLENBQUE7QUFFTyxJQUFNK0IsMEJBQUEsR0FDWEQsa0JBQUEsSUFDRztFQUNHckIsZ0JBQUEsQ0FBQU8sU0FBQSxDQUFVLE1BQU07SUFDcEJjLGtCQUFBLENBQW1CUCxVQUFBLEVBQVc7R0FDN0IsRUFBQSxDQUFDTyxrQkFBa0IsQ0FBQyxDQUFBO0FBQ3pCLENBQUE7QUFFTyxJQUFNRSxXQUFBLEdBQWNBLENBTXpCO0VBQ0FuYixNQUFBO0VBQ0FpYixrQkFBQTtFQUNBeEgsWUFBQTtBQUNBM1YsRUFBQUE7QUFDRixDQUtNLEtBQUE7RUFDSixPQUNFa0MsTUFBQSxDQUFPNFgsT0FBQSxJQUNQLENBQUNxRCxrQkFBQSxDQUFtQlIsT0FBQSxFQUNwQixJQUFBLENBQUN6YSxNQUFBLENBQU9tUyxVQUFBLElBQ1JyVSxLQUFBLElBQ0ErYyxnQkFBQSxDQUFpQnBILFlBQUEsRUFBYyxDQUFDelQsTUFBQSxDQUFPd0MsS0FBQSxFQUFPMUUsS0FBSyxDQUFDLENBQUE7QUFFeEQsQ0FBQTs7O0FDcERPLElBQU1zZCxvQkFBQSxHQUNYN0ksZ0JBQUEsSUFDRztBQUNILEVBQUEsTUFBTThJLGlCQUFBLEdBQW9COUksZ0JBQUEsQ0FBaUI3VSxTQUFBO0VBRTNDLElBQUk2VSxnQkFBQSxDQUFpQmlDLFFBQUEsRUFBVTtBQUc3QmpDLElBQUFBLGdCQUFBLENBQWlCN1UsU0FBQSxHQUNmLE9BQU8yZCxpQkFBQSxLQUFzQixVQUN6QixHQUFBLENBQUEsR0FBSXpTLElBQUEsS0FBU2pMLElBQUEsQ0FBS0MsR0FBQSxDQUFJeWQsaUJBQUEsQ0FBa0IsR0FBR3pTLElBQUksQ0FBRyxFQUFBLEdBQUksQ0FDdERqTCxHQUFBQSxJQUFBLENBQUtDLEdBQUEsQ0FBSXlkLGlCQUFBLElBQXFCLEdBQUEsRUFBTSxHQUFJLENBQUE7QUFFOUMsSUFBQSxJQUFJLE9BQU85SSxnQkFBQSxDQUFpQmxKLE1BQUEsS0FBVyxRQUFVLEVBQUE7TUFDL0NrSixnQkFBQSxDQUFpQmxKLE1BQUEsR0FBUzFMLElBQUEsQ0FBS0MsR0FBQSxDQUFJMlUsZ0JBQUEsQ0FBaUJsSixNQUFBLEVBQVEsR0FBSSxDQUFBO0FBQ2xFO0FBQ0Y7QUFDRixDQUFBO0FBRU8sSUFBTWlTLFNBQUEsR0FBWUEsQ0FDdkJ0YixNQUFBLEVBQ0F1YixXQUFBLEtBQ0d2YixNQUFBLENBQU82WCxTQUFBLElBQWE3WCxNQUFBLENBQU9tUyxVQUFBLElBQWMsQ0FBQ29KLFdBQUE7QUFFeEMsSUFBTUMsYUFBQSxHQUFnQkEsQ0FDM0JqSixnQkFBQSxFQUdBdlMsTUFBQSxLQUNHdVMsZ0JBQUEsRUFBa0JpQyxRQUFBLElBQVl4VSxNQUFBLENBQU8yWCxTQUFBO0FBRW5DLElBQU0zQixlQUFBLEdBQWtCQSxDQU83QnpELGdCQUFBLEVBT0E5SCxRQUFBLEVBQ0F3USxrQkFBQSxLQUVBeFEsUUFBQSxDQUFTdUwsZUFBQSxDQUFnQnpELGdCQUFnQixDQUFFck4sQ0FBQUEsS0FBQSxDQUFNLE1BQU07RUFDckQrVixrQkFBQSxDQUFtQlAsVUFBQSxFQUFXO0FBQ2hDLENBQUMsQ0FBQTs7QUMzQ0ksU0FBU2UsYUFPZDljLE9BQUEsRUFPQStjLFFBQUEsRUFDQTNCLFdBQUEsRUFDb0M7QUFDcEMsRUFBQSxJQUFJelgsU0FBQSxDQUFRbEcsR0FBQSxDQUFJbUcsUUFBQSxLQUFhLFlBQWMsRUFBQTtJQUN6QyxJQUFJLE9BQU81RCxPQUFBLEtBQVksUUFBQSxJQUFZdUMsS0FBQSxDQUFNQyxPQUFBLENBQVF4QyxPQUFPLENBQUcsRUFBQTtNQUN6RCxNQUFNLElBQUk0RSxLQUFBLENBQ1IsOFJBQ0YsQ0FBQTtBQUNGO0FBQ0Y7QUFFQSxFQUFBLE1BQU1vSyxNQUFBLEdBQVNtTSxjQUFBLENBQTBCLENBQUE7RUFDekMsTUFBTXlCLFdBQUEsR0FBY2hCLGNBQUEsRUFBZTtFQUNuQyxNQUFNVSxrQkFBQSxHQUFxQkwsMEJBQUEsRUFBMkI7QUFDdEQsRUFBQSxNQUFNckksZ0JBQUEsR0FBbUI1RSxNQUFBLENBQU9DLG1CQUFBLENBQW9CalAsT0FBTyxDQUFBO0VBRXpEZ1AsTUFBQSxDQUFPb0csaUJBQUEsRUFBa0IsQ0FBRXpGLE9BQUEsRUFBaUJxTix5QkFBQSxHQUM1Q3BKLGdCQUNGLENBQUE7QUFHQUEsRUFBQUEsZ0JBQUEsQ0FBaUI4RSxrQkFBQSxHQUFxQmtFLFdBQUEsR0FDbEMsYUFDQSxHQUFBLFlBQUE7QUFFSkgsRUFBQUEsb0JBQUEsQ0FBcUI3SSxnQkFBZ0IsQ0FBQTtFQUNyQ3lJLCtCQUFBLENBQWdDekksZ0JBQUEsRUFBa0IwSSxrQkFBa0IsQ0FBQTtBQUVwRUMsRUFBQUEsMEJBQUEsQ0FBMkJELGtCQUFrQixDQUFBO0FBRzdDLEVBQUEsTUFBTVcsZUFBQSxHQUFrQixDQUFDak8sTUFBQSxDQUN0QmtHLGFBQUEsRUFBYyxDQUNkMUgsR0FBQSxDQUFJb0csZ0JBQUEsQ0FBaUI5VCxTQUFTLENBQUE7QUFFakMsRUFBQSxNQUFNLENBQUNnTSxRQUFRLENBQVVtUCxHQUFBQSxnQkFBQSxDQUFBaUMsUUFBQSxDQUN2QixNQUNFLElBQUlILFFBQUEsQ0FDRi9OLE1BQUEsRUFDQTRFLGdCQUNGLENBQ0osQ0FBQTtBQUdBLEVBQUEsTUFBTXZTLE1BQUEsR0FBU3lLLFFBQUEsQ0FBUzhLLG1CQUFBLENBQW9CaEQsZ0JBQWdCLENBQUE7RUFFNUQsTUFBTXVKLGVBQUEsR0FBa0IsQ0FBQ1AsV0FBQSxJQUFlNWMsT0FBQSxDQUFRb2QsVUFBQSxLQUFlLEtBQUE7RUFDekRuQyxnQkFBQSxDQUFBb0Msb0JBQUEsQ0FDRXBDLGdCQUFBLENBQUFxQyxXQUFBLENBQ0hDLGFBQUEsSUFBa0I7QUFDakIsSUFBQSxNQUFNQyxXQUFBLEdBQWNMLGVBQUEsR0FDaEJyUixRQUFBLENBQVNqUCxTQUFBLENBQVV3TixhQUFBLENBQWNMLFVBQUEsQ0FBV3VULGFBQWEsQ0FBQyxJQUMxRGpmLElBQUE7SUFJSndOLFFBQUEsQ0FBU3FLLFlBQUEsRUFBYTtBQUV0QixJQUFBLE9BQU9xSCxXQUFBO0FBQ1QsR0FBQSxFQUNBLENBQUMxUixRQUFBLEVBQVVxUixlQUFlLENBQzVCLEdBQ0EsTUFBTXJSLFFBQUEsQ0FBU00sZ0JBQUEsRUFDZixFQUFBLE1BQU1OLFFBQUEsQ0FBU00sZ0JBQUEsRUFDakIsQ0FBQTtFQUVNNk8sZ0JBQUEsQ0FBQU8sU0FBQSxDQUFVLE1BQU07QUFHcEIxUCxJQUFBQSxRQUFBLENBQVNiLFVBQUEsQ0FBVzJJLGdCQUFBLEVBQWtCO0FBQUVqWCxNQUFBQSxTQUFBLEVBQVc7S0FBTyxDQUFBO0FBQzVELEdBQUEsRUFBRyxDQUFDaVgsZ0JBQUEsRUFBa0I5SCxRQUFRLENBQUMsQ0FBQTtBQUcvQixFQUFBLElBQUkrUSxhQUFBLENBQWNqSixnQkFBQSxFQUFrQnZTLE1BQU0sQ0FBRyxFQUFBO0FBQzNDLElBQUEsTUFBTWdXLGVBQUEsQ0FBZ0J6RCxnQkFBQSxFQUFrQjlILFFBQUEsRUFBVXdRLGtCQUFrQixDQUFBO0FBQ3RFO0FBR0EsRUFBQSxJQUNFRSxXQUFBLENBQVk7SUFDVm5iLE1BQUE7SUFDQWliLGtCQUFBO0lBQ0F4SCxZQUFBLEVBQWNsQixnQkFBQSxDQUFpQmtCLFlBQUE7SUFDL0IzVixLQUFBLEVBQU82UCxNQUFBLENBQ0prRyxhQUFBLEdBQ0ExSCxHQUFBLENBS0NvRyxnQkFBQSxDQUFpQjlULFNBQVM7QUFDaEMsR0FBQyxDQUNELEVBQUE7SUFDQSxNQUFNdUIsTUFBQSxDQUFPd0MsS0FBQTtBQUNmO0VBRUVtTCxNQUFBLENBQU9vRyxpQkFBQSxFQUFvQnpGLENBQUFBLE9BQUEsRUFBaUI4Tix3QkFBQSxHQUM1QzdKLGdCQUFBLEVBQ0F2UyxNQUNGLENBQUE7QUFFQSxFQUFBLElBQ0V1UyxnQkFBQSxDQUFpQm9DLDZCQUFBLElBQ2pCLENBQUM1WCxRQUFBLElBQ0R1ZSxTQUFBLENBQVV0YixNQUFBLEVBQVF1YixXQUFXLENBQzdCLEVBQUE7SUFDQSxNQUFNNVQsT0FBQSxHQUFVaVUsZUFBQTtBQUFBO0FBRVo1RixJQUFBQSxlQUFBLENBQWdCekQsZ0JBQUEsRUFBa0I5SCxRQUFBLEVBQVV3USxrQkFBa0IsQ0FBQTtBQUFBO0lBRTlEdE4sTUFBQSxDQUFPa0csYUFBQSxFQUFnQjFILENBQUFBLEdBQUEsQ0FBSW9HLGdCQUFBLENBQWlCOVQsU0FBUyxDQUFBLEVBQUdrSixPQUFBO0FBRTVEQSxJQUFBQSxPQUFBLEVBQVN6QyxLQUFBLENBQU1qSSxJQUFJLENBQUVvZixDQUFBQSxPQUFBLENBQVEsTUFBTTtNQUVqQzVSLFFBQUEsQ0FBU3FLLFlBQUEsRUFBYTtLQUN2QixDQUFBO0FBQ0g7RUFHQSxPQUFPLENBQUN2QyxnQkFBQSxDQUFpQnFHLG1CQUFBLEdBQ3JCbk8sUUFBQSxDQUFTaUwsV0FBQSxDQUFZMVYsTUFBTSxDQUFBLEdBQzNCQSxNQUFBO0FBQ047O0FDdkhPLFNBQVNzYyxRQUFTM2QsQ0FBQUEsT0FBQSxFQUEwQm9iLFdBQUEsRUFBMkI7QUFDNUUsRUFBQSxPQUFPMEIsWUFBQSxDQUFhOWMsT0FBQSxFQUFTK1YsYUFBMEIsQ0FBQTtBQUN6RDs7QUNoQ08sU0FBUzZILFdBTWQ1ZCxDQUFBQSxPQUFBLEVBQ0FvYixXQUFBLEVBQ3dEO0FBQ3hELEVBQUEsTUFBTXBNLE1BQUEsR0FBU21NLGNBQUEsQ0FBMEIsQ0FBQTtBQUV6QyxFQUFBLE1BQU0sQ0FBQ3JQLFFBQVEsQ0FBVW1QLEdBQUFBLGdCQUFBLENBQUFpQyxRQUFBLENBQ3ZCLE1BQ0UsSUFBSXRDLGdCQUFBLENBQ0Y1TCxNQUFBLEVBQ0FoUCxPQUNGLENBQ0osQ0FBQTtFQUVNaWIsZ0JBQUEsQ0FBQU8sU0FBQSxDQUFVLE1BQU07SUFDcEIxUCxRQUFBLENBQVNiLFVBQUEsQ0FBV2pMLE9BQU8sQ0FBQTtBQUM3QixHQUFBLEVBQUcsQ0FBQzhMLFFBQUEsRUFBVTlMLE9BQU8sQ0FBQyxDQUFBO0FBRXRCLEVBQUEsTUFBTXFCLE1BQUEsR0FBZTRaLGdCQUFBLENBQUFvQyxvQkFBQSxDQUNicEMsZ0JBQUEsQ0FBQXFDLFdBQUEsQ0FDSEMsYUFBQSxJQUNDelIsUUFBQSxDQUFTalAsU0FBQSxDQUFVd04sYUFBQSxDQUFjTCxVQUFBLENBQVd1VCxhQUFhLENBQUMsQ0FDNUQsRUFBQSxDQUFDelIsUUFBUSxDQUNYLEdBQ0EsTUFBTUEsUUFBQSxDQUFTTSxnQkFBQSxFQUNmLEVBQUEsTUFBTU4sUUFBQSxDQUFTTSxnQkFBQSxFQUNqQixDQUFBO0VBRUEsTUFBTXlPLE1BQUEsR0FBZUksZ0JBQUEsQ0FBQXFDLFdBQUEsQ0FHbkIsQ0FBQ3JOLFNBQUEsRUFBVzROLGFBQUEsS0FBa0I7SUFDNUIvUixRQUFBLENBQVMrTyxNQUFBLENBQU81SyxTQUFBLEVBQVc0TixhQUFhLENBQUEsQ0FBRXRYLEtBQUEsQ0FBTWpJLElBQUksQ0FBQTtHQUV0RCxFQUFBLENBQUN3TixRQUFRLENBQ1gsQ0FBQTtBQUVBLEVBQUEsSUFDRXpLLE1BQUEsQ0FBT3dDLEtBQUEsSUFDUHFZLGdCQUFBLENBQWlCcFEsUUFBQSxDQUFTOUwsT0FBQSxDQUFROFUsWUFBQSxFQUFjLENBQUN6VCxNQUFBLENBQU93QyxLQUFLLENBQUMsQ0FDOUQsRUFBQTtJQUNBLE1BQU14QyxNQUFBLENBQU93QyxLQUFBO0FBQ2Y7RUFFQSxPQUFPO0FBQUUsSUFBQSxHQUFHeEMsTUFBQTtJQUFRd1osTUFBQTtJQUFRaUQsV0FBQSxFQUFhemMsTUFBQSxDQUFPd1o7QUFBTyxHQUFBO0FBQ3pEOztBQ2hFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVRztBQVNJLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBdUIvRDs7OztBQUlHO01BQ1UsT0FBTyxDQUFBO0FBR2hCLElBQUEsV0FBQSxDQUFZLGFBQTZCLEVBQVksUUFBQSxHQUFtQixTQUFTLEVBQVksUUFBdUIsV0FBVyxFQUFBOztRQUExRSxJQUFRLENBQUEsUUFBQSxHQUFSLFFBQVE7UUFBZ0MsSUFBSyxDQUFBLEtBQUEsR0FBTCxLQUFLO1FBQzlGLElBQUksYUFBYSxFQUFFO0FBQ2YsWUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWE7WUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFBLEVBQUEsR0FBQSxhQUFhLENBQUMsUUFBUSxNQUFJLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLEVBQUEsR0FBQSxRQUFROzs7QUFHN0Q7QUFFRDs7Ozs7QUFLRztBQUNHLE1BQU8sYUFBYyxTQUFRLEtBQUssQ0FBQTtJQUNwQyxXQUFtQixDQUFBLEtBQWEsRUFBRSxHQUFZLEVBQUE7UUFDMUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQURLLElBQUssQ0FBQSxLQUFBLEdBQUwsS0FBSztBQUVwQixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZTs7QUFFbEM7QUFTRDs7O0FBR0c7QUFDSSxNQUFNLGtCQUFrQixHQUFjLEVBQzVDOztBQ3JGRDtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVRztBQVFIOzs7QUFHRztBQUNJLE1BQU0sY0FBYyxHQUFHLHFCQUFxQjtBQUVuRDs7OztBQUlHO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxVQUFVLFlBQW9CLEVBQUUsU0FBaUIsRUFBRSxVQUFtQixFQUFBO0lBQ25HLElBQUksVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1FBQ2pELE1BQU0sSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLENBQXNCLG1CQUFBLEVBQUEsU0FBUyxDQUF1QyxvQ0FBQSxFQUFBLFlBQVksQ0FBRyxDQUFBLENBQUEsQ0FBQzs7QUFFakksQ0FBQztBQXlCRDs7O0FBR0c7QUFDSSxNQUFNLHFCQUFxQixHQUFHLGdCQUFnQixNQUFXLEVBQUUsYUFBNkIsRUFBQTtBQUMzRixJQUFBLElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxXQUFXLEVBQUU7QUFDNUMsUUFBQSxNQUFNLFdBQVcsR0FBRyxPQUFPLGFBQWEsQ0FBQyxXQUFXLEtBQUs7QUFDckQsY0FBRSxNQUFNLGFBQWEsQ0FBQyxXQUFXO0FBQ2pDLGNBQUUsTUFBTSxhQUFhLENBQUMsV0FBVztBQUNyQyxRQUFBLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxTQUFTLEdBQUcsV0FBVzs7QUFFekQsQ0FBQztBQWVELFNBQVMsdUJBQXVCLENBQUMsZUFBZ0MsRUFBRSxTQUFjLEVBQUUsTUFBYyxFQUFFLEVBQUE7SUFDL0YsSUFBSSxTQUFTLElBQUksSUFBSTtRQUFFO0FBQ3ZCLElBQUEsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7QUFDL0IsUUFBQSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDekIsWUFBQSxTQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksdUJBQXVCLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzs7YUFFeEY7QUFDRCxZQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFDckMsdUJBQXVCLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBLEVBQUcsR0FBRyxDQUFHLEVBQUEsR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBLEVBQUcsVUFBVSxDQUFFLENBQUEsQ0FBQyxDQUNqSDs7O1NBR0o7QUFDRCxRQUFBLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMxQixZQUFBLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQzs7YUFFckM7QUFDRCxZQUFBLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQzs7O0FBRy9DO0FBRUE7OztBQUdHO0FBQ0ksTUFBTSxlQUFlLEdBQUcsVUFBVSxHQUFRLEVBQUUsR0FBRyxPQUFjLEVBQUE7SUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUNwRCxJQUFBLHVCQUF1QixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUM7QUFDOUMsSUFBQSxHQUFHLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUU7QUFDeEMsQ0FBQztBQUVEOzs7QUFHRztBQUNJLE1BQU0scUJBQXFCLEdBQUcsVUFBVSxLQUFVLEVBQUUsY0FBbUIsRUFBRSxhQUE2QixFQUFBO0FBQ3pHLElBQUEsTUFBTSxTQUFTLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUTtJQUMzQyxNQUFNLGtCQUFrQixHQUFHLFNBQVMsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDO1VBQ2pFLGFBQWEsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7VUFDL0QsU0FBUztBQUNmLElBQUEsT0FBTztBQUNILFVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLEtBQUssR0FBRyxFQUFFO0FBQ2pELFdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUN2QixDQUFDO0FBRUQ7OztBQUdHO0FBQ0ksTUFBTSxZQUFZLEdBQUcsVUFBVSxHQUFRLEVBQUE7SUFDMUMsT0FBTyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUk7QUFDL0MsQ0FBQztBQUVEOzs7QUFHRztBQUNJLE1BQU0scUJBQXFCLEdBQUcsVUFBVSxTQUFzQixFQUFFLFdBQTBCLEVBQUUsU0FBaUIsRUFBRSxhQUE2QixFQUFBO0FBQy9JLElBQUEsT0FBTyxDQUFvQyxLQUF1QixHQUFBLFdBQVcsRUFBRSxRQUFtQixHQUFBLFNBQVMsS0FBSTs7QUFDM0csUUFBQSxNQUFNLGdCQUFnQixHQUFPLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBLEVBQUEsU0FBUyxDQUFDLE9BQU8sS0FBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsQ0FBQSxFQUFBLEdBQUEsYUFBYSxLQUFiLElBQUEsSUFBQSxhQUFhLHVCQUFiLGFBQWEsQ0FBRSxRQUFRLE1BQUEsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxHQUFJLFFBQVEsSUFBSSxTQUFTLENBQUMsR0FBRyxHQUFDO0FBQ3pJLFFBQUEsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFPLGdCQUFnQixDQUFDO0FBQ2hELEtBQUM7QUFDTCxDQUFDOztBQ3JKRDtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVRztBQWdqQkg7OztBQUdHO0FBQ0ksTUFBTSx3QkFBd0IsR0FBRyxVQUFVLGFBQTZCLEVBQUE7SUFDM0UsT0FBTztBQUNIOzs7OztBQUtHO1FBQ0gsNEJBQTRCLEVBQUUsT0FBTyxXQUFtQixFQUFFLE9BQWlDLEdBQUEsRUFBRSxLQUEwQjs7QUFFbkgsWUFBQSxpQkFBaUIsQ0FBQyw4QkFBOEIsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDO1lBQzdFLE1BQU0sWUFBWSxHQUFHLENBQUEscUJBQUEsQ0FBdUI7O1lBRTVDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUM7QUFDNUQsWUFBQSxJQUFJLFdBQVc7WUFDZixJQUFJLGFBQWEsRUFBRTtBQUNmLGdCQUFBLFdBQVcsR0FBRyxhQUFhLENBQUMsV0FBVzs7WUFHM0MsTUFBTSxzQkFBc0IsR0FBSyxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsRUFBQSxNQUFNLEVBQUUsS0FBSyxJQUFLLFdBQVcsQ0FBQSxFQUFLLE9BQU8sQ0FBQztZQUMzRSxNQUFNLHVCQUF1QixHQUFHLEVBQVM7WUFDekMsTUFBTSxzQkFBc0IsR0FBRyxFQUFTO0FBRXhDLFlBQUEsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO0FBQzNCLGdCQUFBLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxHQUFHLFdBQVc7O0FBS3ZELFlBQUEsZUFBZSxDQUFDLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQztBQUN2RCxZQUFBLElBQUksc0JBQXNCLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sR0FBRyxFQUFFO1lBQzFGLHNCQUFzQixDQUFDLE9BQU8sR0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBLEVBQU8sdUJBQXVCLENBQUEsRUFBSyxzQkFBc0IsQ0FBQSxFQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFFNUcsT0FBTztBQUNILGdCQUFBLEdBQUcsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDO0FBQ2pDLGdCQUFBLE9BQU8sRUFBRSxzQkFBc0I7YUFDbEM7U0FDSjtBQUNEOzs7O0FBSUc7QUFDSCxRQUFBLHlCQUF5QixFQUFFLE9BQU8sT0FBaUMsR0FBQSxFQUFFLEtBQTBCO1lBQzNGLE1BQU0sWUFBWSxHQUFHLENBQUEsWUFBQSxDQUFjOztZQUVuQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDO0FBQzVELFlBQUEsSUFBSSxXQUFXO1lBQ2YsSUFBSSxhQUFhLEVBQUU7QUFDZixnQkFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVc7O1lBRzNDLE1BQU0sc0JBQXNCLEdBQUssTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsTUFBTSxFQUFFLEtBQUssSUFBSyxXQUFXLENBQUEsRUFBSyxPQUFPLENBQUM7WUFDM0UsTUFBTSx1QkFBdUIsR0FBRyxFQUFTO1lBQ3pDLE1BQU0sc0JBQXNCLEdBQUcsRUFBUztBQUl4QyxZQUFBLGVBQWUsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUM7QUFDdkQsWUFBQSxJQUFJLHNCQUFzQixHQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEdBQUcsRUFBRTtZQUMxRixzQkFBc0IsQ0FBQyxPQUFPLEdBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsRUFBQSxFQUFPLHVCQUF1QixDQUFBLEVBQUssc0JBQXNCLENBQUEsRUFBSyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBRTVHLE9BQU87QUFDSCxnQkFBQSxHQUFHLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQztBQUNqQyxnQkFBQSxPQUFPLEVBQUUsc0JBQXNCO2FBQ2xDO1NBQ0o7QUFDRDs7Ozs7QUFLRztRQUNILG9CQUFvQixFQUFFLE9BQU8sU0FBb0IsRUFBRSxPQUFpQyxHQUFBLEVBQUUsS0FBMEI7O0FBRTVHLFlBQUEsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQztZQUNqRSxNQUFNLFlBQVksR0FBRyxDQUFBLFlBQUEsQ0FBYzs7WUFFbkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQztBQUM1RCxZQUFBLElBQUksV0FBVztZQUNmLElBQUksYUFBYSxFQUFFO0FBQ2YsZ0JBQUEsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXOztZQUczQyxNQUFNLHNCQUFzQixHQUFLLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBLE1BQU0sRUFBRSxNQUFNLElBQUssV0FBVyxDQUFBLEVBQUssT0FBTyxDQUFDO1lBQzVFLE1BQU0sdUJBQXVCLEdBQUcsRUFBUztZQUN6QyxNQUFNLHNCQUFzQixHQUFHLEVBQVM7QUFJeEMsWUFBQSx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsR0FBRyxrQkFBa0I7QUFFNUQsWUFBQSxlQUFlLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDO0FBQ3ZELFlBQUEsSUFBSSxzQkFBc0IsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxHQUFHLEVBQUU7WUFDMUYsc0JBQXNCLENBQUMsT0FBTyxHQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsRUFBTyx1QkFBdUIsQ0FBQSxFQUFLLHNCQUFzQixDQUFBLEVBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUM1RyxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLGFBQWEsQ0FBQztZQUVyRyxPQUFPO0FBQ0gsZ0JBQUEsR0FBRyxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUM7QUFDakMsZ0JBQUEsT0FBTyxFQUFFLHNCQUFzQjthQUNsQztTQUNKO0FBQ0Q7Ozs7O0FBS0c7UUFDSCxvQkFBb0IsRUFBRSxPQUFPLFNBQW9CLEVBQUUsT0FBaUMsR0FBQSxFQUFFLEtBQTBCOztBQUU1RyxZQUFBLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7WUFDakUsTUFBTSxZQUFZLEdBQUcsQ0FBQSxZQUFBLENBQWM7O1lBRW5DLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUM7QUFDNUQsWUFBQSxJQUFJLFdBQVc7WUFDZixJQUFJLGFBQWEsRUFBRTtBQUNmLGdCQUFBLFdBQVcsR0FBRyxhQUFhLENBQUMsV0FBVzs7WUFHM0MsTUFBTSxzQkFBc0IsR0FBSyxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsRUFBQSxNQUFNLEVBQUUsTUFBTSxJQUFLLFdBQVcsQ0FBQSxFQUFLLE9BQU8sQ0FBQztZQUM1RSxNQUFNLHVCQUF1QixHQUFHLEVBQVM7WUFDekMsTUFBTSxzQkFBc0IsR0FBRyxFQUFTO0FBSXhDLFlBQUEsdUJBQXVCLENBQUMsY0FBYyxDQUFDLEdBQUcsa0JBQWtCO0FBRTVELFlBQUEsZUFBZSxDQUFDLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQztBQUN2RCxZQUFBLElBQUksc0JBQXNCLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sR0FBRyxFQUFFO1lBQzFGLHNCQUFzQixDQUFDLE9BQU8sR0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBLEVBQU8sdUJBQXVCLENBQUEsRUFBSyxzQkFBc0IsQ0FBQSxFQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDNUcsc0JBQXNCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxhQUFhLENBQUM7WUFFckcsT0FBTztBQUNILGdCQUFBLEdBQUcsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDO0FBQ2pDLGdCQUFBLE9BQU8sRUFBRSxzQkFBc0I7YUFDbEM7U0FDSjtLQUNKO0FBQ0wsQ0FBQztBQUVEOzs7QUFHRztBQUNJLE1BQU0sU0FBUyxHQUFHLFVBQVMsYUFBNkIsRUFBQTtBQUMzRCxJQUFBLE1BQU0seUJBQXlCLEdBQUcsd0JBQXdCLENBQUMsYUFBYSxDQUFDO0lBQ3pFLE9BQU87QUFDSDs7Ozs7QUFLRztBQUNILFFBQUEsTUFBTSw0QkFBNEIsQ0FBQyxXQUFtQixFQUFFLE9BQStCLEVBQUE7O1lBQ25GLE1BQU0saUJBQWlCLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO0FBQzVHLFlBQUEsTUFBTSw0QkFBNEIsR0FBRyxDQUFBLEVBQUEsR0FBQSxhQUFhLEtBQWIsSUFBQSxJQUFBLGFBQWEsS0FBYixNQUFBLEdBQUEsTUFBQSxHQUFBLGFBQWEsQ0FBRSxXQUFXLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxHQUFBLENBQUM7QUFDcEUsWUFBQSxNQUFNLCtCQUErQixHQUFHLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLGtCQUFrQixDQUFDLHNDQUFzQyxDQUFDLE1BQUcsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBQSw0QkFBNEIsQ0FBQyxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQUUsR0FBRztZQUN2SSxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSwrQkFBK0IsSUFBSSxRQUFRLENBQUM7U0FDbEs7QUFDRDs7OztBQUlHO1FBQ0gsTUFBTSx5QkFBeUIsQ0FBQyxPQUErQixFQUFBOztZQUMzRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0seUJBQXlCLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDO0FBQzVGLFlBQUEsTUFBTSw0QkFBNEIsR0FBRyxDQUFBLEVBQUEsR0FBQSxhQUFhLEtBQWIsSUFBQSxJQUFBLGFBQWEsS0FBYixNQUFBLEdBQUEsTUFBQSxHQUFBLGFBQWEsQ0FBRSxXQUFXLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxHQUFBLENBQUM7QUFDcEUsWUFBQSxNQUFNLCtCQUErQixHQUFHLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLGtCQUFrQixDQUFDLG1DQUFtQyxDQUFDLE1BQUcsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBQSw0QkFBNEIsQ0FBQyxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQUUsR0FBRztZQUNwSSxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSwrQkFBK0IsSUFBSSxRQUFRLENBQUM7U0FDbEs7QUFDRDs7Ozs7QUFLRztBQUNILFFBQUEsTUFBTSxvQkFBb0IsQ0FBQyxTQUFvQixFQUFFLE9BQStCLEVBQUE7O1lBQzVFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO0FBQ2xHLFlBQUEsTUFBTSw0QkFBNEIsR0FBRyxDQUFBLEVBQUEsR0FBQSxhQUFhLEtBQWIsSUFBQSxJQUFBLGFBQWEsS0FBYixNQUFBLEdBQUEsTUFBQSxHQUFBLGFBQWEsQ0FBRSxXQUFXLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxHQUFBLENBQUM7QUFDcEUsWUFBQSxNQUFNLCtCQUErQixHQUFHLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLGtCQUFrQixDQUFDLDhCQUE4QixDQUFDLE1BQUcsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBQSw0QkFBNEIsQ0FBQyxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQUUsR0FBRztZQUMvSCxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSwrQkFBK0IsSUFBSSxRQUFRLENBQUM7U0FDbEs7QUFDRDs7Ozs7QUFLRztBQUNILFFBQUEsTUFBTSxvQkFBb0IsQ0FBQyxTQUFvQixFQUFFLE9BQStCLEVBQUE7O1lBQzVFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO0FBQ2xHLFlBQUEsTUFBTSw0QkFBNEIsR0FBRyxDQUFBLEVBQUEsR0FBQSxhQUFhLEtBQWIsSUFBQSxJQUFBLGFBQWEsS0FBYixNQUFBLEdBQUEsTUFBQSxHQUFBLGFBQWEsQ0FBRSxXQUFXLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxHQUFBLENBQUM7QUFDcEUsWUFBQSxNQUFNLCtCQUErQixHQUFHLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLGtCQUFrQixDQUFDLDhCQUE4QixDQUFDLE1BQUcsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBQSw0QkFBNEIsQ0FBQyxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQUUsR0FBRztZQUMvSCxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSwrQkFBK0IsSUFBSSxRQUFRLENBQUM7U0FDbEs7S0FDSjtBQUNMLENBQUM7QUErQ0Q7Ozs7O0FBS0c7QUFDRyxNQUFPLE9BQVEsU0FBUSxPQUFPLENBQUE7QUFDaEM7Ozs7OztBQU1HO0lBQ0ksNEJBQTRCLENBQUMsV0FBbUIsRUFBRSxPQUErQixFQUFBO0FBQ3BGLFFBQUEsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUdqSjs7Ozs7QUFLRztBQUNJLElBQUEseUJBQXlCLENBQUMsT0FBK0IsRUFBQTtBQUM1RCxRQUFBLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUdqSTs7Ozs7O0FBTUc7SUFDSSxvQkFBb0IsQ0FBQyxTQUFvQixFQUFFLE9BQStCLEVBQUE7QUFDN0UsUUFBQSxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7O0FBR3ZJOzs7Ozs7QUFNRztJQUNJLG9CQUFvQixDQUFDLFNBQW9CLEVBQUUsT0FBK0IsRUFBQTtBQUM3RSxRQUFBLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7QUFFMUk7QUFJRDs7O0FBR0c7QUFDSSxNQUFNLDRCQUE0QixHQUFHLFVBQVUsYUFBNkIsRUFBQTtJQUMvRSxPQUFPO0FBQ0g7Ozs7O0FBS0c7UUFDSCx3QkFBd0IsRUFBRSxPQUFPLGlCQUFvQyxFQUFFLE9BQWlDLEdBQUEsRUFBRSxLQUEwQjs7QUFFaEksWUFBQSxpQkFBaUIsQ0FBQywwQkFBMEIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQztZQUNyRixNQUFNLFlBQVksR0FBRyxDQUFBLFNBQUEsQ0FBVzs7WUFFaEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQztBQUM1RCxZQUFBLElBQUksV0FBVztZQUNmLElBQUksYUFBYSxFQUFFO0FBQ2YsZ0JBQUEsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXOztZQUczQyxNQUFNLHNCQUFzQixHQUFLLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBLE1BQU0sRUFBRSxNQUFNLElBQUssV0FBVyxDQUFBLEVBQUssT0FBTyxDQUFDO1lBQzVFLE1BQU0sdUJBQXVCLEdBQUcsRUFBUztZQUN6QyxNQUFNLHNCQUFzQixHQUFHLEVBQVM7QUFJeEMsWUFBQSx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsR0FBRyxrQkFBa0I7QUFFNUQsWUFBQSxlQUFlLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDO0FBQ3ZELFlBQUEsSUFBSSxzQkFBc0IsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxHQUFHLEVBQUU7WUFDMUYsc0JBQXNCLENBQUMsT0FBTyxHQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsRUFBTyx1QkFBdUIsQ0FBQSxFQUFLLHNCQUFzQixDQUFBLEVBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUM1RyxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxDQUFDO1lBRTdHLE9BQU87QUFDSCxnQkFBQSxHQUFHLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQztBQUNqQyxnQkFBQSxPQUFPLEVBQUUsc0JBQXNCO2FBQ2xDO1NBQ0o7QUFDRDs7Ozs7O0FBTUc7UUFDSCw2QkFBNkIsRUFBRSxPQUFPLEVBQVUsRUFBRSxJQUFZLEVBQUUsT0FBQSxHQUFpQyxFQUFFLEtBQTBCOztBQUV6SCxZQUFBLGlCQUFpQixDQUFDLCtCQUErQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7O0FBRTVELFlBQUEsaUJBQWlCLENBQUMsK0JBQStCLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNoRSxNQUFNLFlBQVksR0FBRyxDQUF3QixzQkFBQTtBQUN4QyxpQkFBQSxPQUFPLENBQUMsQ0FBQSxDQUFBLEVBQUksSUFBSSxDQUFBLENBQUEsQ0FBRyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUV6RCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDO0FBQzVELFlBQUEsSUFBSSxXQUFXO1lBQ2YsSUFBSSxhQUFhLEVBQUU7QUFDZixnQkFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVc7O1lBRzNDLE1BQU0sc0JBQXNCLEdBQUssTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsTUFBTSxFQUFFLE1BQU0sSUFBSyxXQUFXLENBQUEsRUFBSyxPQUFPLENBQUM7WUFDNUUsTUFBTSx1QkFBdUIsR0FBRyxFQUFTO1lBQ3pDLE1BQU0sc0JBQXNCLEdBQUcsRUFBUztBQUl4QyxZQUFBLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxHQUFHLGtCQUFrQjtBQUU1RCxZQUFBLGVBQWUsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUM7QUFDdkQsWUFBQSxJQUFJLHNCQUFzQixHQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEdBQUcsRUFBRTtZQUMxRixzQkFBc0IsQ0FBQyxPQUFPLEdBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsRUFBQSxFQUFPLHVCQUF1QixDQUFBLEVBQUssc0JBQXNCLENBQUEsRUFBSyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQzVHLHNCQUFzQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxDQUFDO1lBRWhHLE9BQU87QUFDSCxnQkFBQSxHQUFHLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQztBQUNqQyxnQkFBQSxPQUFPLEVBQUUsc0JBQXNCO2FBQ2xDO1NBQ0o7QUFDRDs7Ozs7QUFLRztRQUNILHdCQUF3QixFQUFFLE9BQU8sRUFBVSxFQUFFLE9BQWlDLEdBQUEsRUFBRSxLQUEwQjs7QUFFdEcsWUFBQSxpQkFBaUIsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sWUFBWSxHQUFHLENBQWdCLGNBQUE7QUFDaEMsaUJBQUEsT0FBTyxDQUFDLENBQUEsQ0FBQSxFQUFJLElBQUksQ0FBQSxDQUFBLENBQUcsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7WUFFekQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQztBQUM1RCxZQUFBLElBQUksV0FBVztZQUNmLElBQUksYUFBYSxFQUFFO0FBQ2YsZ0JBQUEsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXOztZQUczQyxNQUFNLHNCQUFzQixHQUFLLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBLE1BQU0sRUFBRSxRQUFRLElBQUssV0FBVyxDQUFBLEVBQUssT0FBTyxDQUFDO1lBQzlFLE1BQU0sdUJBQXVCLEdBQUcsRUFBUztZQUN6QyxNQUFNLHNCQUFzQixHQUFHLEVBQVM7QUFJeEMsWUFBQSxlQUFlLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDO0FBQ3ZELFlBQUEsSUFBSSxzQkFBc0IsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxHQUFHLEVBQUU7WUFDMUYsc0JBQXNCLENBQUMsT0FBTyxHQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsRUFBTyx1QkFBdUIsQ0FBQSxFQUFLLHNCQUFzQixDQUFBLEVBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUU1RyxPQUFPO0FBQ0gsZ0JBQUEsR0FBRyxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUM7QUFDakMsZ0JBQUEsT0FBTyxFQUFFLHNCQUFzQjthQUNsQztTQUNKO0FBQ0Q7Ozs7O0FBS0c7UUFDSCx5Q0FBeUMsRUFBRSxPQUFPLFNBQWlCLEVBQUUsT0FBaUMsR0FBQSxFQUFFLEtBQTBCOztBQUU5SCxZQUFBLGlCQUFpQixDQUFDLDJDQUEyQyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7WUFDdEYsTUFBTSxZQUFZLEdBQUcsQ0FBdUIscUJBQUE7QUFDdkMsaUJBQUEsT0FBTyxDQUFDLENBQUEsQ0FBQSxFQUFJLFdBQVcsQ0FBQSxDQUFBLENBQUcsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs7WUFFdkUsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQztBQUM1RCxZQUFBLElBQUksV0FBVztZQUNmLElBQUksYUFBYSxFQUFFO0FBQ2YsZ0JBQUEsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXOztZQUczQyxNQUFNLHNCQUFzQixHQUFLLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBLE1BQU0sRUFBRSxLQUFLLElBQUssV0FBVyxDQUFBLEVBQUssT0FBTyxDQUFDO1lBQzNFLE1BQU0sdUJBQXVCLEdBQUcsRUFBUztZQUN6QyxNQUFNLHNCQUFzQixHQUFHLEVBQVM7QUFJeEMsWUFBQSxlQUFlLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDO0FBQ3ZELFlBQUEsSUFBSSxzQkFBc0IsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxHQUFHLEVBQUU7WUFDMUYsc0JBQXNCLENBQUMsT0FBTyxHQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsRUFBTyx1QkFBdUIsQ0FBQSxFQUFLLHNCQUFzQixDQUFBLEVBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUU1RyxPQUFPO0FBQ0gsZ0JBQUEsR0FBRyxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUM7QUFDakMsZ0JBQUEsT0FBTyxFQUFFLHNCQUFzQjthQUNsQztTQUNKO0FBQ0Q7Ozs7OztBQU1HO1FBQ0gsd0JBQXdCLEVBQUUsT0FBTyxFQUFVLEVBQUUsaUJBQW9DLEVBQUUsT0FBQSxHQUFpQyxFQUFFLEtBQTBCOztBQUU1SSxZQUFBLGlCQUFpQixDQUFDLDBCQUEwQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7O0FBRXZELFlBQUEsaUJBQWlCLENBQUMsMEJBQTBCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUM7WUFDckYsTUFBTSxZQUFZLEdBQUcsQ0FBZ0IsY0FBQTtBQUNoQyxpQkFBQSxPQUFPLENBQUMsQ0FBQSxDQUFBLEVBQUksSUFBSSxDQUFBLENBQUEsQ0FBRyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUV6RCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDO0FBQzVELFlBQUEsSUFBSSxXQUFXO1lBQ2YsSUFBSSxhQUFhLEVBQUU7QUFDZixnQkFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVc7O1lBRzNDLE1BQU0sc0JBQXNCLEdBQUssTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsTUFBTSxFQUFFLE9BQU8sSUFBSyxXQUFXLENBQUEsRUFBSyxPQUFPLENBQUM7WUFDN0UsTUFBTSx1QkFBdUIsR0FBRyxFQUFTO1lBQ3pDLE1BQU0sc0JBQXNCLEdBQUcsRUFBUztBQUl4QyxZQUFBLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxHQUFHLGtCQUFrQjtBQUU1RCxZQUFBLGVBQWUsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUM7QUFDdkQsWUFBQSxJQUFJLHNCQUFzQixHQUFHLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEdBQUcsRUFBRTtZQUMxRixzQkFBc0IsQ0FBQyxPQUFPLEdBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsRUFBQSxFQUFPLHVCQUF1QixDQUFBLEVBQUssc0JBQXNCLENBQUEsRUFBSyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQzVHLHNCQUFzQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxhQUFhLENBQUM7WUFFN0csT0FBTztBQUNILGdCQUFBLEdBQUcsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDO0FBQ2pDLGdCQUFBLE9BQU8sRUFBRSxzQkFBc0I7YUFDbEM7U0FDSjtLQUNKO0FBQ0wsQ0FBQztBQUVEOzs7QUFHRztBQUNJLE1BQU0sYUFBYSxHQUFHLFVBQVMsYUFBNkIsRUFBQTtBQUMvRCxJQUFBLE1BQU0seUJBQXlCLEdBQUcsNEJBQTRCLENBQUMsYUFBYSxDQUFDO0lBQzdFLE9BQU87QUFDSDs7Ozs7QUFLRztBQUNILFFBQUEsTUFBTSx3QkFBd0IsQ0FBQyxpQkFBb0MsRUFBRSxPQUErQixFQUFBOztZQUNoRyxNQUFNLGlCQUFpQixHQUFHLE1BQU0seUJBQXlCLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO0FBQzlHLFlBQUEsTUFBTSw0QkFBNEIsR0FBRyxDQUFBLEVBQUEsR0FBQSxhQUFhLEtBQWIsSUFBQSxJQUFBLGFBQWEsS0FBYixNQUFBLEdBQUEsTUFBQSxHQUFBLGFBQWEsQ0FBRSxXQUFXLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxHQUFBLENBQUM7QUFDcEUsWUFBQSxNQUFNLCtCQUErQixHQUFHLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLGtCQUFrQixDQUFDLHNDQUFzQyxDQUFDLE1BQUcsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBQSw0QkFBNEIsQ0FBQyxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQUUsR0FBRztZQUN2SSxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSwrQkFBK0IsSUFBSSxRQUFRLENBQUM7U0FDbEs7QUFDRDs7Ozs7O0FBTUc7QUFDSCxRQUFBLE1BQU0sNkJBQTZCLENBQUMsRUFBVSxFQUFFLElBQVksRUFBRSxPQUErQixFQUFBOztBQUN6RixZQUFBLE1BQU0saUJBQWlCLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUMxRyxZQUFBLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQSxFQUFBLEdBQUEsYUFBYSxLQUFiLElBQUEsSUFBQSxhQUFhLEtBQWIsTUFBQSxHQUFBLE1BQUEsR0FBQSxhQUFhLENBQUUsV0FBVyxNQUFJLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLEVBQUEsR0FBQSxDQUFDO0FBQ3BFLFlBQUEsTUFBTSwrQkFBK0IsR0FBRyxDQUFBLEVBQUEsR0FBQSxDQUFBLEVBQUEsR0FBQSxrQkFBa0IsQ0FBQywyQ0FBMkMsQ0FBQyxNQUFHLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQUEsNEJBQTRCLENBQUMsTUFBQSxJQUFBLElBQUEsRUFBQSxLQUFBLE1BQUEsR0FBQSxNQUFBLEdBQUEsRUFBQSxDQUFFLEdBQUc7WUFDNUksT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEtBQUsscUJBQXFCLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLElBQUksUUFBUSxDQUFDO1NBQ2xLO0FBQ0Q7Ozs7O0FBS0c7QUFDSCxRQUFBLE1BQU0sd0JBQXdCLENBQUMsRUFBVSxFQUFFLE9BQStCLEVBQUE7O1lBQ3RFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDO0FBQy9GLFlBQUEsTUFBTSw0QkFBNEIsR0FBRyxDQUFBLEVBQUEsR0FBQSxhQUFhLEtBQWIsSUFBQSxJQUFBLGFBQWEsS0FBYixNQUFBLEdBQUEsTUFBQSxHQUFBLGFBQWEsQ0FBRSxXQUFXLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxHQUFBLENBQUM7QUFDcEUsWUFBQSxNQUFNLCtCQUErQixHQUFHLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLGtCQUFrQixDQUFDLHNDQUFzQyxDQUFDLE1BQUcsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBQSw0QkFBNEIsQ0FBQyxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQUUsR0FBRztZQUN2SSxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSwrQkFBK0IsSUFBSSxRQUFRLENBQUM7U0FDbEs7QUFDRDs7Ozs7QUFLRztBQUNILFFBQUEsTUFBTSx5Q0FBeUMsQ0FBQyxTQUFpQixFQUFFLE9BQStCLEVBQUE7O1lBQzlGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyx5Q0FBeUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO0FBQ3ZILFlBQUEsTUFBTSw0QkFBNEIsR0FBRyxDQUFBLEVBQUEsR0FBQSxhQUFhLEtBQWIsSUFBQSxJQUFBLGFBQWEsS0FBYixNQUFBLEdBQUEsTUFBQSxHQUFBLGFBQWEsQ0FBRSxXQUFXLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxHQUFBLENBQUM7QUFDcEUsWUFBQSxNQUFNLCtCQUErQixHQUFHLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLGtCQUFrQixDQUFDLHVEQUF1RCxDQUFDLE1BQUcsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBQSw0QkFBNEIsQ0FBQyxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQUUsR0FBRztZQUN4SixPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSwrQkFBK0IsSUFBSSxRQUFRLENBQUM7U0FDbEs7QUFDRDs7Ozs7O0FBTUc7QUFDSCxRQUFBLE1BQU0sd0JBQXdCLENBQUMsRUFBVSxFQUFFLGlCQUFvQyxFQUFFLE9BQStCLEVBQUE7O0FBQzVHLFlBQUEsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLHlCQUF5QixDQUFDLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUM7QUFDbEgsWUFBQSxNQUFNLDRCQUE0QixHQUFHLENBQUEsRUFBQSxHQUFBLGFBQWEsS0FBYixJQUFBLElBQUEsYUFBYSxLQUFiLE1BQUEsR0FBQSxNQUFBLEdBQUEsYUFBYSxDQUFFLFdBQVcsTUFBSSxJQUFBLElBQUEsRUFBQSxLQUFBLE1BQUEsR0FBQSxFQUFBLEdBQUEsQ0FBQztBQUNwRSxZQUFBLE1BQU0sK0JBQStCLEdBQUcsQ0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsa0JBQWtCLENBQUMsc0NBQXNDLENBQUMsTUFBRyxJQUFBLElBQUEsRUFBQSxLQUFBLE1BQUEsR0FBQSxNQUFBLEdBQUEsRUFBQSxDQUFBLDRCQUE0QixDQUFDLE1BQUEsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBRSxHQUFHO1lBQ3ZJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLHFCQUFxQixDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLCtCQUErQixJQUFJLFFBQVEsQ0FBQztTQUNsSztLQUNKO0FBQ0wsQ0FBQztBQTJERDs7Ozs7QUFLRztBQUNHLE1BQU8sV0FBWSxTQUFRLE9BQU8sQ0FBQTtBQUNwQzs7Ozs7O0FBTUc7SUFDSSx3QkFBd0IsQ0FBQyxpQkFBb0MsRUFBRSxPQUErQixFQUFBO0FBQ2pHLFFBQUEsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7O0FBR3ZKOzs7Ozs7O0FBT0c7QUFDSSxJQUFBLDZCQUE2QixDQUFDLEVBQVUsRUFBRSxJQUFZLEVBQUUsT0FBK0IsRUFBQTtBQUMxRixRQUFBLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7O0FBR25KOzs7Ozs7QUFNRztJQUNJLHdCQUF3QixDQUFDLEVBQVUsRUFBRSxPQUErQixFQUFBO0FBQ3ZFLFFBQUEsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUd4STs7Ozs7O0FBTUc7SUFDSSx5Q0FBeUMsQ0FBQyxTQUFpQixFQUFFLE9BQStCLEVBQUE7QUFDL0YsUUFBQSxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMseUNBQXlDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7O0FBR2hLOzs7Ozs7O0FBT0c7QUFDSSxJQUFBLHdCQUF3QixDQUFDLEVBQVUsRUFBRSxpQkFBb0MsRUFBRSxPQUErQixFQUFBO0FBQzdHLFFBQUEsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUU5SjtBQUlEOzs7QUFHRztBQUNJLE1BQU0sd0JBQXdCLEdBQUcsVUFBVSxhQUE2QixFQUFBO0lBQzNFLE9BQU87QUFDSDs7OztBQUlHO0FBQ0gsUUFBQSxtQkFBbUIsRUFBRSxPQUFPLE9BQWlDLEdBQUEsRUFBRSxLQUEwQjtZQUNyRixNQUFNLFlBQVksR0FBRyxDQUFBLFFBQUEsQ0FBVTs7WUFFL0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQztBQUM1RCxZQUFBLElBQUksV0FBVztZQUNmLElBQUksYUFBYSxFQUFFO0FBQ2YsZ0JBQUEsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXOztZQUczQyxNQUFNLHNCQUFzQixHQUFLLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBLE1BQU0sRUFBRSxLQUFLLElBQUssV0FBVyxDQUFBLEVBQUssT0FBTyxDQUFDO1lBQzNFLE1BQU0sdUJBQXVCLEdBQUcsRUFBUztZQUN6QyxNQUFNLHNCQUFzQixHQUFHLEVBQVM7OztBQUl4QyxZQUFBLE1BQU0scUJBQXFCLENBQUMsdUJBQXVCLEVBQUUsYUFBYSxDQUFDO0FBSW5FLFlBQUEsZUFBZSxDQUFDLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQztBQUN2RCxZQUFBLElBQUksc0JBQXNCLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sR0FBRyxFQUFFO1lBQzFGLHNCQUFzQixDQUFDLE9BQU8sR0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxFQUFBLEVBQU8sdUJBQXVCLENBQUEsRUFBSyxzQkFBc0IsQ0FBQSxFQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFFNUcsT0FBTztBQUNILGdCQUFBLEdBQUcsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDO0FBQ2pDLGdCQUFBLE9BQU8sRUFBRSxzQkFBc0I7YUFDbEM7U0FDSjtLQUNKO0FBQ0wsQ0FBQztBQUVEOzs7QUFHRztBQUNJLE1BQU0sU0FBUyxHQUFHLFVBQVMsYUFBNkIsRUFBQTtBQUMzRCxJQUFBLE1BQU0seUJBQXlCLEdBQUcsd0JBQXdCLENBQUMsYUFBYSxDQUFDO0lBQ3pFLE9BQU87QUFDSDs7OztBQUlHO1FBQ0gsTUFBTSxtQkFBbUIsQ0FBQyxPQUErQixFQUFBOztZQUNyRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO0FBQ3RGLFlBQUEsTUFBTSw0QkFBNEIsR0FBRyxDQUFBLEVBQUEsR0FBQSxhQUFhLEtBQWIsSUFBQSxJQUFBLGFBQWEsS0FBYixNQUFBLEdBQUEsTUFBQSxHQUFBLGFBQWEsQ0FBRSxXQUFXLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxHQUFBLENBQUM7QUFDcEUsWUFBQSxNQUFNLCtCQUErQixHQUFHLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLE1BQUcsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBQSw0QkFBNEIsQ0FBQyxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQUUsR0FBRztZQUM5SCxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSwrQkFBK0IsSUFBSSxRQUFRLENBQUM7U0FDbEs7S0FDSjtBQUNMLENBQUM7QUFvQkQ7Ozs7O0FBS0c7QUFDRyxNQUFPLE9BQVEsU0FBUSxPQUFPLENBQUE7QUFDaEM7Ozs7O0FBS0c7QUFDSSxJQUFBLG1CQUFtQixDQUFDLE9BQStCLEVBQUE7QUFDdEQsUUFBQSxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7QUFFOUg7O0FDeDBDRDtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFVRztNQWNVLGFBQWEsQ0FBQTtBQTBEdEIsSUFBQSxXQUFBLENBQVksUUFBaUMsRUFBRSxFQUFBOztBQUMzQyxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU07QUFDMUIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUTtBQUM5QixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVc7QUFDcEMsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUNaLE1BQUEsQ0FBQSxNQUFBLENBQUEsRUFBQSxPQUFPLGtDQUNBLENBQUEsRUFBQSxHQUFBLEtBQUssQ0FBQyxXQUFXLE1BQUEsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBRSxPQUFPLENBQzdCLEVBQUEsRUFBQSxZQUFZLEVBQUUsb0NBQW9DLEVBQUEsQ0FBQSxFQUFBLEVBRW5ELEtBQUssQ0FBQyxXQUFXLENBQ3ZCO0FBQ0QsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZOztBQUcxQzs7Ozs7Ozs7O0FBU0c7QUFDSSxJQUFBLFVBQVUsQ0FBQyxJQUFZLEVBQUE7UUFDMUIsTUFBTSxRQUFRLEdBQVcsSUFBSSxNQUFNLENBQUMsK0RBQStELEVBQUUsR0FBRyxDQUFDO0FBQ3pHLFFBQUEsT0FBTyxJQUFJLEtBQUssSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLDZCQUE2QixDQUFDOztBQUU1Rzs7QUMzR0QsTUFBTSxNQUFNLEdBQUcsK0RBQStEO0FBRTlFLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDO0FBQ3RDLElBQUEsUUFBUSxFQUFFLE1BQU07QUFDakIsQ0FBQSxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUdrRCxXQUFLLENBQUMsTUFBTSxDQUFDO0FBQ2pDLElBQUEsT0FBTyxFQUFFLE1BQU07QUFDaEIsQ0FBQSxDQUFDO0FBRUYsTUFBTSxHQUFHLEdBQUc7SUFDVixJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUM7SUFDdkQsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDO0lBQy9ELElBQUksRUFBRSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQztDQUN4RDtBQUVELGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDcEMsT0FBTyxNQUFNLEtBQUk7SUFDZixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0FBQzNELElBQUEsSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxDQUFVLE9BQUEsRUFBQSxLQUFLLEVBQUU7O1NBQzNDO1FBQ0wsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYTs7QUFFNUQsSUFBQSxPQUFPLE1BQU07QUFDZixDQUFDLEVBQ0QsQ0FBQyxLQUFLLEtBQUk7QUFDUixJQUFBLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDOUIsQ0FBQyxDQUNGOztBQzdCTSxNQUFNLGNBQWMsR0FBRyxPQUFPLFNBQWtCLEtBQUk7QUFDekQsSUFBQSxJQUFJLENBQUMsU0FBUztBQUFFLFFBQUEsT0FBTyxFQUFFO0FBQ3pCLElBQUEsSUFBSTtRQUNGLE1BQU0sUUFBUSxHQUNaLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyx5Q0FBeUMsQ0FBQyxTQUFTLENBQUM7UUFDekUsT0FBTyxRQUFRLENBQUMsSUFBSTs7QUFDcEIsSUFBQSxPQUFBLEVBQUEsRUFBTTtBQUNOLFFBQUEsT0FBTyxFQUFFOztBQUViLENBQUM7QUFFTSxNQUFNLGNBQWMsR0FBRyxPQUFPLFFBQTJCLEtBQUk7SUFDbEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQztJQUN0RSxPQUFPLFFBQVEsQ0FBQyxJQUFJO0FBQ3RCLENBQUM7QUFFTSxNQUFNLFdBQVcsR0FBRyxPQUFPLFVBQWtCLEVBQUUsT0FBZSxLQUFJO0lBQ3ZFLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FDL0QsVUFBVSxFQUNWO1FBQ0UsT0FBTztBQUNSLEtBQUEsQ0FDRjtJQUNELE9BQU8sUUFBUSxDQUFDLElBQUk7QUFDdEIsQ0FBQztBQUVNLE1BQU0sY0FBYyxHQUFHLE9BQU8sRUFDbkMsVUFBVSxFQUNWLE9BQU8sR0FJUixLQUFJO0FBQ0gsSUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUNsRSxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsRUFBQSxPQUFPLEVBQ1Y7SUFDRixPQUFPLFFBQVEsQ0FBQyxJQUFJO0FBQ3RCLENBQUM7QUFFTSxNQUFNLGNBQWMsR0FBRyxPQUFPLFFBQTBCLEtBQUk7QUFDakUsSUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUN6RSxPQUFPLFFBQVEsQ0FBQyxJQUFJO0FBQ3RCLENBQUM7QUFFTSxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQWtCLEtBQUk7QUFDakQsSUFBQSxPQUFPLFFBQVEsQ0FBQztRQUNkLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQztBQUN2QixRQUFBLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQyxTQUFTLENBQUM7QUFDekMsS0FBQSxDQUFDO0FBQ0osQ0FBQztBQUVNLE1BQU0saUJBQWlCLEdBQUcsTUFBSztBQUNwQyxJQUFBLE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRTtBQUNwQyxJQUFBLE9BQU8sV0FBVyxDQUFDO0FBQ2pCLFFBQUEsVUFBVSxFQUFFLGNBQWM7UUFDMUIsU0FBUyxFQUFFLE1BQUs7QUFDZCxZQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7QUFFL0IsWUFBQSxPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7U0FDbEU7QUFDRixLQUFBLENBQUM7QUFDSixDQUFDO0FBRU0sTUFBTSxjQUFjLEdBQUcsQ0FBQyxVQUFrQixLQUFJO0FBQ25ELElBQUEsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFO0FBQ3BDLElBQUEsT0FBTyxXQUFXLENBQUM7UUFDakIsVUFBVSxFQUFFLENBQUMsT0FBZSxLQUFLLFdBQVcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDO1FBQ2pFLFNBQVMsRUFBRSxNQUFLO0FBQ2QsWUFBQSxPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7U0FDbEU7QUFDRixLQUFBLENBQUM7QUFDSixDQUFDO0FBRU0sTUFBTSxpQkFBaUIsR0FBRyxNQUFLO0FBQ3BDLElBQUEsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFO0FBQ3BDLElBQUEsT0FBTyxXQUFXLENBQUM7QUFDakIsUUFBQSxVQUFVLEVBQUUsY0FBYztRQUMxQixTQUFTLEVBQUUsTUFBSztBQUNkLFlBQUEsT0FBTyxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1NBQ2xFO0FBQ0YsS0FBQSxDQUFDO0FBQ0osQ0FBQztBQUVNLE1BQU0saUJBQWlCLEdBQUcsTUFBSztBQUNwQyxJQUFBLE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRTtBQUNwQyxJQUFBLE9BQU8sV0FBVyxDQUFDO0FBQ2pCLFFBQUEsVUFBVSxFQUFFLGNBQWM7UUFDMUIsU0FBUyxFQUFFLE1BQUs7QUFDZCxZQUFBLE9BQU8sV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztTQUNsRTtBQUNGLEtBQUEsQ0FBQztBQUNKLENBQUM7O0FDaEdNLE1BQU0sT0FBTyxHQUFHLFlBQVc7QUFDaEMsSUFBQSxJQUFJO1FBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1FBQ3JELE9BQU8sUUFBUSxDQUFDLElBQUk7O0FBQ3BCLElBQUEsT0FBQSxFQUFBLEVBQU07QUFDTixRQUFBLE9BQU8sSUFBSTs7QUFFZixDQUFDO0FBRU0sTUFBTSxLQUFLLEdBQUcsTUFBSztBQUN4QixJQUFBLE9BQU8sUUFBUSxDQUFDO1FBQ2QsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ2hCLFFBQUEsT0FBTyxFQUFFLE9BQU87QUFDakIsS0FBQSxDQUFDO0FBQ0osQ0FBQzs7QUNZRDtBQUNBLE1BQU0sZUFBZSxHQUFHN0MsbUJBQWEsQ0FBQztBQUNwQyxJQUFBLE9BQU8sRUFBRSxFQUFFO0FBQ1gsSUFBQSxTQUFTLEVBQUUsRUFBRTtBQUNiLElBQUEsTUFBTSxFQUFFLEtBQUs7QUFDYixJQUFBLFNBQVMsRUFBRSxFQUFvQztBQUMvQyxJQUFBLFdBQVcsRUFBRSxJQUFnQztBQUM3QyxJQUFBLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUF5QjtBQUN4RCxJQUFBLGdCQUFnQixFQUFFLEVBQTZCO0FBQy9DLElBQUEsbUJBQW1CLEVBQUUsRUFFcEI7QUFDRCxJQUFBLGFBQWEsRUFBRSxNQUFLLEdBQUc7QUFDdkIsSUFBQSxvQkFBb0IsRUFBRSxNQUFLLEdBQUc7QUFDOUIsSUFBQSxzQkFBc0IsRUFBRSxNQUFLLEdBQUc7QUFDaEMsSUFBQSxtQkFBbUIsRUFBRSxNQUFLLEdBQUc7QUFDN0IsSUFBQSxvQkFBb0IsRUFBRSxNQUFLLEdBQUc7QUFDOUIsSUFBQSxRQUFRLEVBQUUsQ0FBQyxJQUFZLEtBQUk7UUFFekI7S0FDRDtBQUNGLENBQUEsQ0FBQztBQUVGO0FBQ08sTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQy9CLE9BQU8sRUFDUCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFFBQVEsR0FNVCxLQUFJO0lBQ0gsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBR2dDLGNBQVEsQ0FBQyxLQUFLLENBQUM7SUFDM0MsTUFBTSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsR0FBR0EsY0FBUSxDQUM1QyxJQUFJLENBQ0w7SUFDRCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUF3QixJQUFJLENBQUM7SUFDaEUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLEdBQzNDQSxjQUFRLENBQTBCLElBQUksQ0FBQztJQUN6QyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7SUFDbkQsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUU7QUFFNUIsSUFBQSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUV4QixNQUFNLGNBQWMsR0FBRyxFQUFFLEtBQUYsSUFBQSxJQUFBLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGNBQWMsQ0FBQyxJQUFJLENBQzVDLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FDMUQ7SUFFRCxNQUFNLG1CQUFtQixHQUFHLE1BQUs7UUFDL0IsU0FBUyxDQUFDLElBQUksQ0FBQztBQUNqQixLQUFDO0lBRUQsTUFBTSxvQkFBb0IsR0FBRyxNQUFLO1FBQ2hDLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDbEIsS0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE1BQUs7UUFDekIsY0FBYyxDQUFDLElBQUksQ0FBQztBQUNwQixRQUFBLG9CQUFvQixFQUFFO0FBQ3hCLEtBQUM7QUFFRCxJQUFBLE1BQU0sY0FBYyxHQUFHSSxpQkFBVyxDQUNoQyxDQUFDLENBQWEsS0FBSTtBQUNoQixRQUFBLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFxQjtBQUN0QyxRQUFBLE1BQU0sU0FBUyxHQUFHLENBQUEsTUFBTSxhQUFOLE1BQU0sS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFOLE1BQU0sQ0FBRSxPQUFPLENBQUMsSUFBSSxLQUFJLEVBQUU7UUFDNUMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUMzQyxDQUFlLFlBQUEsRUFBQSxTQUFTLENBQUksRUFBQSxDQUFBLENBQzdCO1FBRUQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFOUMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFFbkQsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTztBQUNuQixRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPO0FBQ25CLFFBQUEsTUFBTSxZQUFZLEdBQUcsQ0FBQSxNQUFNLEtBQU4sSUFBQSxJQUFBLE1BQU0sS0FBTixNQUFBLEdBQUEsTUFBQSxHQUFBLE1BQU0sQ0FBRSxXQUFXLEtBQUksQ0FBQztBQUM3QyxRQUFBLE1BQU0sYUFBYSxHQUFHLENBQUEsTUFBTSxLQUFOLElBQUEsSUFBQSxNQUFNLEtBQU4sTUFBQSxHQUFBLE1BQUEsR0FBQSxNQUFNLENBQUUsWUFBWSxLQUFJLENBQUM7QUFFL0MsUUFBQSxjQUFjLENBQUM7WUFDYixDQUFDO1lBQ0QsQ0FBQztZQUNELFlBQVk7WUFDWixhQUFhO0FBQ2IsWUFBQSxPQUFPLEVBQUUsRUFBRTtBQUNYLFlBQUEsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUTtZQUM5QixTQUFTO1lBQ1QsWUFBWTtZQUNaLFNBQVM7QUFDVixTQUFBLENBQUM7QUFDSixLQUFDLEVBQ0QsQ0FBQyxTQUFTLENBQUMsQ0FDWjtBQUVELElBQUEsTUFBTSx1QkFBdUIsR0FBR0EsaUJBQVcsQ0FBQyxDQUFDLE1BQW1CLEtBQUk7UUFDbEUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUUzRCxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBYyxDQUFDO0FBQUUsWUFBQSxPQUFPLElBQUk7UUFFN0QsTUFBTSxnQkFBZ0IsR0FBRzthQUN0QixnQkFBZ0IsQ0FBYyxnQkFBZ0I7QUFDOUMsYUFBQSxNQUFNLEVBQUU7QUFFWCxRQUFBLEtBQUssTUFBTSxlQUFlLElBQUksZ0JBQWdCLEVBQUU7QUFDOUMsWUFBQSxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEMsZ0JBQUEsT0FBTyxJQUFJOzs7QUFHZixRQUFBLE9BQU8sS0FBSztLQUNiLEVBQUUsRUFBRSxDQUFDO0FBRU4sSUFBQSxNQUFNLG9CQUFvQixHQUFHQSxpQkFBVyxDQUN0QyxDQUFDLENBQWEsS0FBSTtBQUNoQixRQUFBLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFxQjtBQUN0QyxRQUFBLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRTtZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzVDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksdUJBQXVCLENBQUMsTUFBTSxDQUFDO0FBQUUsb0JBQUEsT0FBTyxLQUFLO2dCQUNqRCxDQUFDLENBQUMsZUFBZSxFQUFFO2dCQUNuQixDQUFDLENBQUMsY0FBYyxFQUFFOztBQUVwQixZQUFBLE9BQU8sS0FBSzs7QUFHZCxRQUFBLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7QUFDekMsS0FBQyxFQUNELENBQUMsdUJBQXVCLENBQUMsQ0FDMUI7QUFFRCxJQUFBLE1BQU0saUJBQWlCLEdBQUdBLGlCQUFXLENBQ25DLENBQUMsQ0FBYSxLQUFJO0FBQ2hCLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUFFO1FBQzlCLENBQUMsQ0FBQyxlQUFlLEVBQUU7UUFDbkIsQ0FBQyxDQUFDLGNBQWMsRUFBRTtRQUVsQixtQkFBbUIsQ0FBQyxJQUFJLENBQUM7UUFDekIsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUVqQixRQUFBLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUM7QUFDMUQsS0FBQyxFQUNELENBQUMsb0JBQW9CLEVBQUUsY0FBYyxDQUFDLENBQ3ZDO0FBRUQsSUFBQSxNQUFNLG9CQUFvQixHQUFHQSxpQkFBVyxDQUFDLE1BQUs7UUFDNUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1FBQzdDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO0FBQzdELEtBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFdkIsSUFBQSxNQUFNLHNCQUFzQixHQUFHQSxpQkFBVyxDQUFDLE1BQUs7UUFDOUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDOUQsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0FBQ2xELEtBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFdkIsSUFBQSxNQUFNLGlCQUFpQixHQUFHQSxpQkFBVyxDQUNuQyxDQUFDLEtBQW9CLEtBQUk7QUFDdkIsUUFBQSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzFCLElBQUksV0FBVyxFQUFFO0FBQ2YsZ0JBQUEsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQztnQkFDckQsY0FBYyxDQUFDLElBQUksQ0FBQzs7aUJBQ2Y7QUFDTCxnQkFBQSxzQkFBc0IsRUFBRTtnQkFDeEIsU0FBUyxDQUFDLEtBQUssQ0FBQzs7O0tBR3JCLEVBQ0QsQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUMsQ0FDekQ7QUFDRCxJQUFBLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFZLEtBQUk7UUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFFMUQsUUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNuQixNQUFNLE1BQU0sR0FBRyxDQUFBLEVBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUEsRUFDeEMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUM1QixDQUFHLEVBQUEsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUU7UUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUM7QUFDL0MsS0FBQztJQUVEOUIsZUFBUyxDQUFDLE1BQUs7QUFDYixRQUFBLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUM7QUFDckQsUUFBQSxPQUFPLE1BQUs7QUFDVixZQUFBLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUM7QUFDMUQsU0FBQztBQUNILEtBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFdkJBLGVBQVMsQ0FBQyxNQUFLO1FBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFFMUQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDO1FBQ2pFLElBQUkscUJBQXFCLEVBQUU7QUFDekIsWUFBQSxZQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLHFCQUFxQixDQUFDO1lBQ3BFLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDOztBQUU3QyxLQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUVyQ0EsZUFBUyxDQUFDLE1BQUs7QUFDYixRQUFBLElBQUksTUFBTSxJQUFJLFdBQVcsSUFBSSxjQUFjO0FBQUUsWUFBQSxvQkFBb0IsRUFBRTs7QUFDOUQsWUFBQSxzQkFBc0IsRUFBRTtBQUMvQixLQUFDLEVBQUU7UUFDRCxNQUFNO1FBQ04sV0FBVztRQUNYLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsc0JBQXNCO0FBQ3ZCLEtBQUEsQ0FBQztBQUVGLElBQUEsTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPO1FBQ1AsU0FBUztRQUNULE1BQU07UUFDTixTQUFTO1FBQ1QsV0FBVztRQUNYLGNBQWM7UUFDZCxnQkFBZ0I7UUFDaEIsbUJBQW1CO1FBQ25CLGFBQWE7UUFDYixvQkFBb0I7UUFDcEIsc0JBQXNCO1FBQ3RCLG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIsUUFBUTtLQUNUO0FBQ0QsSUFBQSxRQUNFd0MsY0FBQSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUEsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFBLFFBQUEsRUFDbkMsUUFBUSxFQUFBLENBQ2dCO0FBRS9CLENBQUM7QUFFTSxNQUFNLGtCQUFrQixHQUFHLE1BQU0zQyxnQkFBVSxDQUFDLGVBQWUsQ0FBQzs7QUNuUTVELE1BQU0sTUFBTSxHQUFHLENBQUMsRUFDckIsSUFBSSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1IsSUFBSSxHQU1MLEtBQUk7QUFDSCxJQUFBLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDaEMsSUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssT0FBTyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQ3pELElBQUEsTUFBTSxZQUFZLEdBQUcsSUFBSSxLQUFLLE9BQU8sR0FBRyxZQUFZLEdBQUcsZ0JBQWdCO0FBQ3ZFLElBQUEsUUFDRTRDLGVBQ0UsQ0FBQSxRQUFBLEVBQUEsRUFBQSxPQUFPLEVBQUUsT0FBTyxFQUNoQixTQUFTLEVBQUUsQ0FBbUQsZ0RBQUEsRUFBQSxPQUFPLElBQUksWUFBWSxDQUFBLGdDQUFBLENBQWtDLGFBRXRILFFBQVEsSUFBSUQsd0JBQUssR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUMsU0FBUyxHQUFHLEVBQ3RELElBQUksSUFBSUEsY0FBTSxDQUFBLE1BQUEsRUFBQSxFQUFBLFNBQVMsRUFBRSxDQUFBLEVBQUcsUUFBUSxDQUFnQixjQUFBLENBQUEsRUFBQSxRQUFBLEVBQUcsSUFBSSxFQUFRLENBQUEsQ0FBQSxFQUFBLENBQzdEO0FBRWIsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBbUMsS0FBSTtJQUN6RCxRQUFRLElBQUk7QUFDVixRQUFBLEtBQUssT0FBTztBQUNWLFlBQUEsT0FBTyxXQUFXO0FBQ3BCLFFBQUEsS0FBSyxRQUFRO0FBQ1gsWUFBQSxPQUFPLEtBQUs7QUFDZCxRQUFBLEtBQUssT0FBTztBQUNWLFlBQUEsT0FBTyxLQUFLO0FBQ2QsUUFBQTtBQUNFLFlBQUEsT0FBTyxLQUFLOztBQUVsQixDQUFDOztBQ3BDRCxJQUFJRSxLQUFHLEdBQUcsNmhEQUE2aEQ7O0FDSWhpRCxNQUFNLGtCQUFrQixHQUFHLE1BQUs7SUFDckMsTUFBTSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLGtCQUFrQixFQUFFO0FBRTVELElBQUEsSUFBSSxNQUFNO0FBQUUsUUFBQSxPQUFPLElBQUk7SUFFdkIsUUFDRUYsY0FDRSxDQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUssRUFBRTtBQUNMLFlBQUEsUUFBUSxFQUFFLE9BQU87QUFDakIsWUFBQSxHQUFHLEVBQUUsb0JBQW9CO0FBQ3pCLFlBQUEsSUFBSSxFQUFFLG9CQUFvQjtBQUMxQixZQUFBLE1BQU0sRUFBRSxPQUFPO0FBQ2hCLFNBQUEsRUFBQSxRQUFBLEVBRURBLGVBQUMsTUFBTSxFQUFBLEVBQUMsUUFBUSxFQUFFRyxLQUFJLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBQyxRQUFRLEVBQUcsQ0FBQSxFQUFBLENBQ2xFO0FBRVYsQ0FBQzs7QUNyQk0sTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUkzQixLQUFJO0FBQ0gsSUFBQSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3pDLFFBQUEsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOztJQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO0FBQUUsUUFBQSxPQUFPLEVBQUU7SUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUV4QyxPQUFPLENBQUEsRUFBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUcsRUFBQSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUEsQ0FBRTtBQUM5RCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1JDLEVBQUEsQ0FBVTdnQixVQUFBQSxNQUFNLEVBQUU4Z0IsT0FBTyxFQUFFO0FBQ3pCLElBQStEQyxNQUFpQkQsQ0FBQUEsT0FBQUEsR0FBQUEsT0FBTyxFQUFFLENBRWhFO0dBQzVCLEVBQUNFLFFBQUksRUFBRyxZQUFZOztBQUVqQixJQUFBLElBQUlDLFlBQVk7SUFFaEIsU0FBU0MsS0FBS0EsR0FBRztNQUNiLE9BQU9ELFlBQVksQ0FBQ0UsS0FBSyxDQUFDLElBQUksRUFBRUMsU0FBUyxDQUFDO0FBQzlDOztBQUVBO0FBQ0E7SUFDQSxTQUFTQyxlQUFlQSxDQUFDcFYsUUFBUSxFQUFFO01BQy9CZ1YsWUFBWSxHQUFHaFYsUUFBUTtBQUMzQjtJQUVBLFNBQVMvRyxPQUFPQSxDQUFDL0QsS0FBSyxFQUFFO0FBQ3BCLE1BQUEsT0FDSUEsS0FBSyxZQUFZOEQsS0FBSyxJQUN0QnRCLE1BQU0sQ0FBQzRCLFNBQVMsQ0FBQ0csUUFBUSxDQUFDQyxJQUFJLENBQUN4RSxLQUFLLENBQUMsS0FBSyxnQkFBZ0I7QUFFbEU7SUFFQSxTQUFTbWdCLFFBQVFBLENBQUNuZ0IsS0FBSyxFQUFFO0FBQ3JCO0FBQ0E7QUFDQSxNQUFBLE9BQ0lBLEtBQUssSUFBSSxJQUFJLElBQ2J3QyxNQUFNLENBQUM0QixTQUFTLENBQUNHLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDeEUsS0FBSyxDQUFDLEtBQUssaUJBQWlCO0FBRW5FO0FBRUEsSUFBQSxTQUFTb2dCLFVBQVVBLENBQUN0ZCxDQUFDLEVBQUVDLENBQUMsRUFBRTtNQUN0QixPQUFPUCxNQUFNLENBQUM0QixTQUFTLENBQUNDLGNBQWMsQ0FBQ0csSUFBSSxDQUFDMUIsQ0FBQyxFQUFFQyxDQUFDLENBQUM7QUFDckQ7SUFFQSxTQUFTc2QsYUFBYUEsQ0FBQ0MsR0FBRyxFQUFFO01BQ3hCLElBQUk5ZCxNQUFNLENBQUMrZCxtQkFBbUIsRUFBRTtRQUM1QixPQUFPL2QsTUFBTSxDQUFDK2QsbUJBQW1CLENBQUNELEdBQUcsQ0FBQyxDQUFDaGQsTUFBTSxLQUFLLENBQUM7QUFDdkQsT0FBQyxNQUFNO0FBQ0gsUUFBQSxJQUFJa2QsQ0FBQztRQUNMLEtBQUtBLENBQUMsSUFBSUYsR0FBRyxFQUFFO0FBQ1gsVUFBQSxJQUFJRixVQUFVLENBQUNFLEdBQUcsRUFBRUUsQ0FBQyxDQUFDLEVBQUU7QUFDcEIsWUFBQSxPQUFPLEtBQUs7QUFDaEI7QUFDSjtBQUNBLFFBQUEsT0FBTyxJQUFJO0FBQ2Y7QUFDSjtJQUVBLFNBQVNDLFdBQVdBLENBQUN6Z0IsS0FBSyxFQUFFO01BQ3hCLE9BQU9BLEtBQUssS0FBSyxNQUFNO0FBQzNCO0lBRUEsU0FBUzBnQixRQUFRQSxDQUFDMWdCLEtBQUssRUFBRTtBQUNyQixNQUFBLE9BQ0ksT0FBT0EsS0FBSyxLQUFLLFFBQVEsSUFDekJ3QyxNQUFNLENBQUM0QixTQUFTLENBQUNHLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDeEUsS0FBSyxDQUFDLEtBQUssaUJBQWlCO0FBRW5FO0lBRUEsU0FBUzJnQixNQUFNQSxDQUFDM2dCLEtBQUssRUFBRTtBQUNuQixNQUFBLE9BQ0lBLEtBQUssWUFBWVQsSUFBSSxJQUNyQmlELE1BQU0sQ0FBQzRCLFNBQVMsQ0FBQ0csUUFBUSxDQUFDQyxJQUFJLENBQUN4RSxLQUFLLENBQUMsS0FBSyxlQUFlO0FBRWpFO0FBRUEsSUFBQSxTQUFTaVQsR0FBR0EsQ0FBQzJOLEdBQUcsRUFBRTNXLEVBQUUsRUFBRTtNQUNsQixJQUFJNFcsR0FBRyxHQUFHLEVBQUU7UUFDUmxkLENBQUM7UUFDRG1kLE1BQU0sR0FBR0YsR0FBRyxDQUFDdGQsTUFBTTtNQUN2QixLQUFLSyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdtZCxNQUFNLEVBQUUsRUFBRW5kLENBQUMsRUFBRTtBQUN6QmtkLFFBQUFBLEdBQUcsQ0FBQzFWLElBQUksQ0FBQ2xCLEVBQUUsQ0FBQzJXLEdBQUcsQ0FBQ2pkLENBQUMsQ0FBQyxFQUFFQSxDQUFDLENBQUMsQ0FBQztBQUMzQjtBQUNBLE1BQUEsT0FBT2tkLEdBQUc7QUFDZDtBQUVBLElBQUEsU0FBU0UsTUFBTUEsQ0FBQ2plLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0FBQ2xCLE1BQUEsS0FBSyxJQUFJWSxDQUFDLElBQUlaLENBQUMsRUFBRTtBQUNiLFFBQUEsSUFBSXFkLFVBQVUsQ0FBQ3JkLENBQUMsRUFBRVksQ0FBQyxDQUFDLEVBQUU7VUFDbEJiLENBQUMsQ0FBQ2EsQ0FBQyxDQUFDLEdBQUdaLENBQUMsQ0FBQ1ksQ0FBQyxDQUFDO0FBQ2Y7QUFDSjtBQUVBLE1BQUEsSUFBSXljLFVBQVUsQ0FBQ3JkLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMzQkQsUUFBQUEsQ0FBQyxDQUFDeUIsUUFBUSxHQUFHeEIsQ0FBQyxDQUFDd0IsUUFBUTtBQUMzQjtBQUVBLE1BQUEsSUFBSTZiLFVBQVUsQ0FBQ3JkLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUMxQkQsUUFBQUEsQ0FBQyxDQUFDa2UsT0FBTyxHQUFHamUsQ0FBQyxDQUFDaWUsT0FBTztBQUN6QjtBQUVBLE1BQUEsT0FBT2xlLENBQUM7QUFDWjtJQUVBLFNBQVNtZSxTQUFTQSxDQUFDamhCLEtBQUssRUFBRWtoQixNQUFNLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxFQUFFO0FBQzlDLE1BQUEsT0FBT0MsZ0JBQWdCLENBQUNyaEIsS0FBSyxFQUFFa2hCLE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUNFLEdBQUcsRUFBRTtBQUN0RTtJQUVBLFNBQVNDLG1CQUFtQkEsR0FBRztBQUMzQjtNQUNBLE9BQU87UUFDSEMsS0FBSyxFQUFFLEtBQUs7UUFDWkMsWUFBWSxFQUFFLEVBQUU7UUFDaEJDLFdBQVcsRUFBRSxFQUFFO1FBQ2ZDLFFBQVEsRUFBRSxFQUFFO1FBQ1pDLGFBQWEsRUFBRSxDQUFDO1FBQ2hCQyxTQUFTLEVBQUUsS0FBSztRQUNoQkMsVUFBVSxFQUFFLElBQUk7UUFDaEJDLFlBQVksRUFBRSxJQUFJO1FBQ2xCQyxhQUFhLEVBQUUsS0FBSztRQUNwQkMsZUFBZSxFQUFFLEtBQUs7UUFDdEJDLEdBQUcsRUFBRSxLQUFLO1FBQ1ZDLGVBQWUsRUFBRSxFQUFFO1FBQ25CQyxHQUFHLEVBQUUsSUFBSTtRQUNUQyxRQUFRLEVBQUUsSUFBSTtRQUNkQyxPQUFPLEVBQUUsS0FBSztBQUNkQyxRQUFBQSxlQUFlLEVBQUU7T0FDcEI7QUFDTDtJQUVBLFNBQVNDLGVBQWVBLENBQUM3UCxDQUFDLEVBQUU7QUFDeEIsTUFBQSxJQUFJQSxDQUFDLENBQUM4UCxHQUFHLElBQUksSUFBSSxFQUFFO0FBQ2Y5UCxRQUFBQSxDQUFDLENBQUM4UCxHQUFHLEdBQUdsQixtQkFBbUIsRUFBRTtBQUNqQztNQUNBLE9BQU81TyxDQUFDLENBQUM4UCxHQUFHO0FBQ2hCO0FBRUEsSUFBQSxJQUFJemYsSUFBSTtBQUNSLElBQUEsSUFBSWMsS0FBSyxDQUFDTSxTQUFTLENBQUNwQixJQUFJLEVBQUU7QUFDdEJBLE1BQUFBLElBQUksR0FBR2MsS0FBSyxDQUFDTSxTQUFTLENBQUNwQixJQUFJO0FBQy9CLEtBQUMsTUFBTTtBQUNIQSxNQUFBQSxJQUFJLEdBQUcsVUFBVTBmLEdBQUcsRUFBRTtBQUNsQixRQUFBLElBQUlDLENBQUMsR0FBR25nQixNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2hCb2dCLFVBQUFBLEdBQUcsR0FBR0QsQ0FBQyxDQUFDcmYsTUFBTSxLQUFLLENBQUM7VUFDcEJLLENBQUM7UUFFTCxLQUFLQSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdpZixHQUFHLEVBQUVqZixDQUFDLEVBQUUsRUFBRTtVQUN0QixJQUFJQSxDQUFDLElBQUlnZixDQUFDLElBQUlELEdBQUcsQ0FBQ2xlLElBQUksQ0FBQyxJQUFJLEVBQUVtZSxDQUFDLENBQUNoZixDQUFDLENBQUMsRUFBRUEsQ0FBQyxFQUFFZ2YsQ0FBQyxDQUFDLEVBQUU7QUFDdEMsWUFBQSxPQUFPLElBQUk7QUFDZjtBQUNKO0FBRUEsUUFBQSxPQUFPLEtBQUs7T0FDZjtBQUNMO0lBRUEsU0FBU0UsT0FBT0EsQ0FBQ2xRLENBQUMsRUFBRTtNQUNoQixJQUFJbVEsS0FBSyxHQUFHLElBQUk7UUFDWkMsV0FBVyxHQUFHLEtBQUs7QUFDbkJDLFFBQUFBLFVBQVUsR0FBR3JRLENBQUMsQ0FBQ3NRLEVBQUUsSUFBSSxDQUFDQyxLQUFLLENBQUN2USxDQUFDLENBQUNzUSxFQUFFLENBQUN6akIsT0FBTyxFQUFFLENBQUM7TUFDL0MsSUFBSXdqQixVQUFVLEVBQUU7QUFDWkYsUUFBQUEsS0FBSyxHQUFHTixlQUFlLENBQUM3UCxDQUFDLENBQUM7UUFDMUJvUSxXQUFXLEdBQUcvZixJQUFJLENBQUN3QixJQUFJLENBQUNzZSxLQUFLLENBQUNYLGVBQWUsRUFBRSxVQUFVeGUsQ0FBQyxFQUFFO1VBQ3hELE9BQU9BLENBQUMsSUFBSSxJQUFJO0FBQ3BCLFNBQUMsQ0FBQztRQUNGcWYsVUFBVSxHQUNORixLQUFLLENBQUNuQixRQUFRLEdBQUcsQ0FBQyxJQUNsQixDQUFDbUIsS0FBSyxDQUFDdEIsS0FBSyxJQUNaLENBQUNzQixLQUFLLENBQUNoQixVQUFVLElBQ2pCLENBQUNnQixLQUFLLENBQUNmLFlBQVksSUFDbkIsQ0FBQ2UsS0FBSyxDQUFDSyxjQUFjLElBQ3JCLENBQUNMLEtBQUssQ0FBQ1AsZUFBZSxJQUN0QixDQUFDTyxLQUFLLENBQUNqQixTQUFTLElBQ2hCLENBQUNpQixLQUFLLENBQUNkLGFBQWEsSUFDcEIsQ0FBQ2MsS0FBSyxDQUFDYixlQUFlLEtBQ3JCLENBQUNhLEtBQUssQ0FBQ1QsUUFBUSxJQUFLUyxLQUFLLENBQUNULFFBQVEsSUFBSVUsV0FBWSxDQUFDO1FBQ3hELElBQUlwUSxDQUFDLENBQUN5USxPQUFPLEVBQUU7VUFDWEosVUFBVSxHQUNOQSxVQUFVLElBQ1ZGLEtBQUssQ0FBQ2xCLGFBQWEsS0FBSyxDQUFDLElBQ3pCa0IsS0FBSyxDQUFDckIsWUFBWSxDQUFDbmUsTUFBTSxLQUFLLENBQUMsSUFDL0J3ZixLQUFLLENBQUNPLE9BQU8sS0FBS0MsU0FBUztBQUNuQztBQUNKO0FBQ0EsTUFBQSxJQUFJOWdCLE1BQU0sQ0FBQytnQixRQUFRLElBQUksSUFBSSxJQUFJLENBQUMvZ0IsTUFBTSxDQUFDK2dCLFFBQVEsQ0FBQzVRLENBQUMsQ0FBQyxFQUFFO1FBQ2hEQSxDQUFDLENBQUM2USxRQUFRLEdBQUdSLFVBQVU7QUFDM0IsT0FBQyxNQUFNO0FBQ0gsUUFBQSxPQUFPQSxVQUFVO0FBQ3JCO01BQ0EsT0FBT3JRLENBQUMsQ0FBQzZRLFFBQVE7QUFDckI7SUFFQSxTQUFTQyxhQUFhQSxDQUFDWCxLQUFLLEVBQUU7QUFDMUIsTUFBQSxJQUFJblEsQ0FBQyxHQUFHc08sU0FBUyxDQUFDeUMsR0FBRyxDQUFDO01BQ3RCLElBQUlaLEtBQUssSUFBSSxJQUFJLEVBQUU7UUFDZi9CLE1BQU0sQ0FBQ3lCLGVBQWUsQ0FBQzdQLENBQUMsQ0FBQyxFQUFFbVEsS0FBSyxDQUFDO0FBQ3JDLE9BQUMsTUFBTTtBQUNITixRQUFBQSxlQUFlLENBQUM3UCxDQUFDLENBQUMsQ0FBQ3NQLGVBQWUsR0FBRyxJQUFJO0FBQzdDO0FBRUEsTUFBQSxPQUFPdFAsQ0FBQztBQUNaOztBQUVBO0FBQ0E7QUFDQSxJQUFBLElBQUlnUixnQkFBZ0IsR0FBSTVELEtBQUssQ0FBQzRELGdCQUFnQixHQUFHLEVBQUc7TUFDaERDLGdCQUFnQixHQUFHLEtBQUs7QUFFNUIsSUFBQSxTQUFTQyxVQUFVQSxDQUFDQyxFQUFFLEVBQUVqUixJQUFJLEVBQUU7QUFDMUIsTUFBQSxJQUFJbFAsQ0FBQztRQUNEb2dCLElBQUk7UUFDSnpoQixHQUFHO1FBQ0gwaEIsbUJBQW1CLEdBQUdMLGdCQUFnQixDQUFDcmdCLE1BQU07TUFFakQsSUFBSSxDQUFDbWQsV0FBVyxDQUFDNU4sSUFBSSxDQUFDb1IsZ0JBQWdCLENBQUMsRUFBRTtBQUNyQ0gsUUFBQUEsRUFBRSxDQUFDRyxnQkFBZ0IsR0FBR3BSLElBQUksQ0FBQ29SLGdCQUFnQjtBQUMvQztNQUNBLElBQUksQ0FBQ3hELFdBQVcsQ0FBQzVOLElBQUksQ0FBQ3FSLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZCSixRQUFBQSxFQUFFLENBQUNJLEVBQUUsR0FBR3JSLElBQUksQ0FBQ3FSLEVBQUU7QUFDbkI7TUFDQSxJQUFJLENBQUN6RCxXQUFXLENBQUM1TixJQUFJLENBQUNzUixFQUFFLENBQUMsRUFBRTtBQUN2QkwsUUFBQUEsRUFBRSxDQUFDSyxFQUFFLEdBQUd0UixJQUFJLENBQUNzUixFQUFFO0FBQ25CO01BQ0EsSUFBSSxDQUFDMUQsV0FBVyxDQUFDNU4sSUFBSSxDQUFDdVIsRUFBRSxDQUFDLEVBQUU7QUFDdkJOLFFBQUFBLEVBQUUsQ0FBQ00sRUFBRSxHQUFHdlIsSUFBSSxDQUFDdVIsRUFBRTtBQUNuQjtNQUNBLElBQUksQ0FBQzNELFdBQVcsQ0FBQzVOLElBQUksQ0FBQ3VRLE9BQU8sQ0FBQyxFQUFFO0FBQzVCVSxRQUFBQSxFQUFFLENBQUNWLE9BQU8sR0FBR3ZRLElBQUksQ0FBQ3VRLE9BQU87QUFDN0I7TUFDQSxJQUFJLENBQUMzQyxXQUFXLENBQUM1TixJQUFJLENBQUN3UixJQUFJLENBQUMsRUFBRTtBQUN6QlAsUUFBQUEsRUFBRSxDQUFDTyxJQUFJLEdBQUd4UixJQUFJLENBQUN3UixJQUFJO0FBQ3ZCO01BQ0EsSUFBSSxDQUFDNUQsV0FBVyxDQUFDNU4sSUFBSSxDQUFDeVIsTUFBTSxDQUFDLEVBQUU7QUFDM0JSLFFBQUFBLEVBQUUsQ0FBQ1EsTUFBTSxHQUFHelIsSUFBSSxDQUFDeVIsTUFBTTtBQUMzQjtNQUNBLElBQUksQ0FBQzdELFdBQVcsQ0FBQzVOLElBQUksQ0FBQzBSLE9BQU8sQ0FBQyxFQUFFO0FBQzVCVCxRQUFBQSxFQUFFLENBQUNTLE9BQU8sR0FBRzFSLElBQUksQ0FBQzBSLE9BQU87QUFDN0I7TUFDQSxJQUFJLENBQUM5RCxXQUFXLENBQUM1TixJQUFJLENBQUM0UCxHQUFHLENBQUMsRUFBRTtBQUN4QnFCLFFBQUFBLEVBQUUsQ0FBQ3JCLEdBQUcsR0FBR0QsZUFBZSxDQUFDM1AsSUFBSSxDQUFDO0FBQ2xDO01BQ0EsSUFBSSxDQUFDNE4sV0FBVyxDQUFDNU4sSUFBSSxDQUFDMlIsT0FBTyxDQUFDLEVBQUU7QUFDNUJWLFFBQUFBLEVBQUUsQ0FBQ1UsT0FBTyxHQUFHM1IsSUFBSSxDQUFDMlIsT0FBTztBQUM3QjtNQUVBLElBQUlSLG1CQUFtQixHQUFHLENBQUMsRUFBRTtRQUN6QixLQUFLcmdCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3FnQixtQkFBbUIsRUFBRXJnQixDQUFDLEVBQUUsRUFBRTtBQUN0Q29nQixVQUFBQSxJQUFJLEdBQUdKLGdCQUFnQixDQUFDaGdCLENBQUMsQ0FBQztBQUMxQnJCLFVBQUFBLEdBQUcsR0FBR3VRLElBQUksQ0FBQ2tSLElBQUksQ0FBQztBQUNoQixVQUFBLElBQUksQ0FBQ3RELFdBQVcsQ0FBQ25lLEdBQUcsQ0FBQyxFQUFFO0FBQ25Cd2hCLFlBQUFBLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDLEdBQUd6aEIsR0FBRztBQUNsQjtBQUNKO0FBQ0o7QUFFQSxNQUFBLE9BQU93aEIsRUFBRTtBQUNiOztBQUVBO0lBQ0EsU0FBU1csTUFBTUEsQ0FBQzdiLE1BQU0sRUFBRTtBQUNwQmliLE1BQUFBLFVBQVUsQ0FBQyxJQUFJLEVBQUVqYixNQUFNLENBQUM7TUFDeEIsSUFBSSxDQUFDcWEsRUFBRSxHQUFHLElBQUkxakIsSUFBSSxDQUFDcUosTUFBTSxDQUFDcWEsRUFBRSxJQUFJLElBQUksR0FBR3JhLE1BQU0sQ0FBQ3FhLEVBQUUsQ0FBQ3pqQixPQUFPLEVBQUUsR0FBR2trQixHQUFHLENBQUM7QUFDakUsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDYixPQUFPLEVBQUUsRUFBRTtRQUNqQixJQUFJLENBQUNJLEVBQUUsR0FBRyxJQUFJMWpCLElBQUksQ0FBQ21rQixHQUFHLENBQUM7QUFDM0I7QUFDQTtBQUNBO01BQ0EsSUFBSUUsZ0JBQWdCLEtBQUssS0FBSyxFQUFFO1FBQzVCQSxnQkFBZ0IsR0FBRyxJQUFJO0FBQ3ZCN0QsUUFBQUEsS0FBSyxDQUFDMkUsWUFBWSxDQUFDLElBQUksQ0FBQztRQUN4QmQsZ0JBQWdCLEdBQUcsS0FBSztBQUM1QjtBQUNKO0lBRUEsU0FBU2UsUUFBUUEsQ0FBQ3JFLEdBQUcsRUFBRTtBQUNuQixNQUFBLE9BQ0lBLEdBQUcsWUFBWW1FLE1BQU0sSUFBS25FLEdBQUcsSUFBSSxJQUFJLElBQUlBLEdBQUcsQ0FBQzJELGdCQUFnQixJQUFJLElBQUs7QUFFOUU7SUFFQSxTQUFTVyxJQUFJQSxDQUFDQyxHQUFHLEVBQUU7QUFDZixNQUFBLElBQ0k5RSxLQUFLLENBQUMrRSwyQkFBMkIsS0FBSyxLQUFLLElBQzNDLE9BQU96ZixPQUFPLEtBQUssV0FBVyxJQUM5QkEsT0FBTyxDQUFDdWYsSUFBSSxFQUNkO0FBQ0V2ZixRQUFBQSxPQUFPLENBQUN1ZixJQUFJLENBQUMsdUJBQXVCLEdBQUdDLEdBQUcsQ0FBQztBQUMvQztBQUNKO0FBRUEsSUFBQSxTQUFTRSxTQUFTQSxDQUFDRixHQUFHLEVBQUU1YSxFQUFFLEVBQUU7TUFDeEIsSUFBSSthLFNBQVMsR0FBRyxJQUFJO01BRXBCLE9BQU9qRSxNQUFNLENBQUMsWUFBWTtBQUN0QixRQUFBLElBQUloQixLQUFLLENBQUNrRixrQkFBa0IsSUFBSSxJQUFJLEVBQUU7QUFDbENsRixVQUFBQSxLQUFLLENBQUNrRixrQkFBa0IsQ0FBQyxJQUFJLEVBQUVKLEdBQUcsQ0FBQztBQUN2QztRQUNBLElBQUlHLFNBQVMsRUFBRTtVQUNYLElBQUl4WixJQUFJLEdBQUcsRUFBRTtZQUNUMFosR0FBRztZQUNIdmhCLENBQUM7WUFDRGQsR0FBRztZQUNIc2lCLE1BQU0sR0FBR2xGLFNBQVMsQ0FBQzNjLE1BQU07VUFDN0IsS0FBS0ssQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHd2hCLE1BQU0sRUFBRXhoQixDQUFDLEVBQUUsRUFBRTtZQUN6QnVoQixHQUFHLEdBQUcsRUFBRTtZQUNSLElBQUksT0FBT2pGLFNBQVMsQ0FBQ3RjLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUNsQ3VoQixjQUFBQSxHQUFHLElBQUksS0FBSyxHQUFHdmhCLENBQUMsR0FBRyxJQUFJO0FBQ3ZCLGNBQUEsS0FBS2QsR0FBRyxJQUFJb2QsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN0QixJQUFJRyxVQUFVLENBQUNILFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRXBkLEdBQUcsQ0FBQyxFQUFFO0FBQy9CcWlCLGtCQUFBQSxHQUFHLElBQUlyaUIsR0FBRyxHQUFHLElBQUksR0FBR29kLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BkLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDaEQ7QUFDSjtjQUNBcWlCLEdBQUcsR0FBR0EsR0FBRyxDQUFDeGYsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzQixhQUFDLE1BQU07QUFDSHdmLGNBQUFBLEdBQUcsR0FBR2pGLFNBQVMsQ0FBQ3RjLENBQUMsQ0FBQztBQUN0QjtBQUNBNkgsWUFBQUEsSUFBSSxDQUFDTCxJQUFJLENBQUMrWixHQUFHLENBQUM7QUFDbEI7QUFDQU4sVUFBQUEsSUFBSSxDQUNBQyxHQUFHLEdBQ0MsZUFBZSxHQUNmL2dCLEtBQUssQ0FBQ00sU0FBUyxDQUFDc0IsS0FBSyxDQUFDbEIsSUFBSSxDQUFDZ0gsSUFBSSxDQUFDLENBQUM0WixJQUFJLENBQUMsRUFBRSxDQUFDLEdBQ3pDLElBQUksR0FDSixJQUFJamYsS0FBSyxFQUFFLENBQUNrZixLQUNwQixDQUFDO1VBQ0RMLFNBQVMsR0FBRyxLQUFLO0FBQ3JCO1FBQ0EsT0FBTy9hLEVBQUUsQ0FBQytWLEtBQUssQ0FBQyxJQUFJLEVBQUVDLFNBQVMsQ0FBQztPQUNuQyxFQUFFaFcsRUFBRSxDQUFDO0FBQ1Y7SUFFQSxJQUFJcWIsWUFBWSxHQUFHLEVBQUU7QUFFckIsSUFBQSxTQUFTQyxlQUFlQSxDQUFDQyxJQUFJLEVBQUVYLEdBQUcsRUFBRTtBQUNoQyxNQUFBLElBQUk5RSxLQUFLLENBQUNrRixrQkFBa0IsSUFBSSxJQUFJLEVBQUU7QUFDbENsRixRQUFBQSxLQUFLLENBQUNrRixrQkFBa0IsQ0FBQ08sSUFBSSxFQUFFWCxHQUFHLENBQUM7QUFDdkM7QUFDQSxNQUFBLElBQUksQ0FBQ1MsWUFBWSxDQUFDRSxJQUFJLENBQUMsRUFBRTtRQUNyQlosSUFBSSxDQUFDQyxHQUFHLENBQUM7QUFDVFMsUUFBQUEsWUFBWSxDQUFDRSxJQUFJLENBQUMsR0FBRyxJQUFJO0FBQzdCO0FBQ0o7SUFFQXpGLEtBQUssQ0FBQytFLDJCQUEyQixHQUFHLEtBQUs7SUFDekMvRSxLQUFLLENBQUNrRixrQkFBa0IsR0FBRyxJQUFJO0lBRS9CLFNBQVNRLFVBQVVBLENBQUN6bEIsS0FBSyxFQUFFO01BQ3ZCLE9BQ0ssT0FBTzBsQixRQUFRLEtBQUssV0FBVyxJQUFJMWxCLEtBQUssWUFBWTBsQixRQUFRLElBQzdEbGpCLE1BQU0sQ0FBQzRCLFNBQVMsQ0FBQ0csUUFBUSxDQUFDQyxJQUFJLENBQUN4RSxLQUFLLENBQUMsS0FBSyxtQkFBbUI7QUFFckU7SUFFQSxTQUFTMlEsR0FBR0EsQ0FBQy9ILE1BQU0sRUFBRTtNQUNqQixJQUFJbWIsSUFBSSxFQUFFcGdCLENBQUM7TUFDWCxLQUFLQSxDQUFDLElBQUlpRixNQUFNLEVBQUU7QUFDZCxRQUFBLElBQUl3WCxVQUFVLENBQUN4WCxNQUFNLEVBQUVqRixDQUFDLENBQUMsRUFBRTtBQUN2Qm9nQixVQUFBQSxJQUFJLEdBQUduYixNQUFNLENBQUNqRixDQUFDLENBQUM7QUFDaEIsVUFBQSxJQUFJOGhCLFVBQVUsQ0FBQzFCLElBQUksQ0FBQyxFQUFFO0FBQ2xCLFlBQUEsSUFBSSxDQUFDcGdCLENBQUMsQ0FBQyxHQUFHb2dCLElBQUk7QUFDbEIsV0FBQyxNQUFNO0FBQ0gsWUFBQSxJQUFJLENBQUMsR0FBRyxHQUFHcGdCLENBQUMsQ0FBQyxHQUFHb2dCLElBQUk7QUFDeEI7QUFDSjtBQUNKO01BQ0EsSUFBSSxDQUFDNEIsT0FBTyxHQUFHL2MsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7TUFDQSxJQUFJLENBQUNnZCw4QkFBOEIsR0FBRyxJQUFJQyxNQUFNLENBQzVDLENBQUMsSUFBSSxDQUFDQyx1QkFBdUIsQ0FBQ0MsTUFBTSxJQUFJLElBQUksQ0FBQ0MsYUFBYSxDQUFDRCxNQUFNLElBQzdELEdBQUcsR0FDSCxTQUFTLENBQUNBLE1BQ2xCLENBQUM7QUFDTDtBQUVBLElBQUEsU0FBU0UsWUFBWUEsQ0FBQ0MsWUFBWSxFQUFFQyxXQUFXLEVBQUU7TUFDN0MsSUFBSXRGLEdBQUcsR0FBR0UsTUFBTSxDQUFDLEVBQUUsRUFBRW1GLFlBQVksQ0FBQztRQUM5Qm5DLElBQUk7TUFDUixLQUFLQSxJQUFJLElBQUlvQyxXQUFXLEVBQUU7QUFDdEIsUUFBQSxJQUFJL0YsVUFBVSxDQUFDK0YsV0FBVyxFQUFFcEMsSUFBSSxDQUFDLEVBQUU7QUFDL0IsVUFBQSxJQUFJNUQsUUFBUSxDQUFDK0YsWUFBWSxDQUFDbkMsSUFBSSxDQUFDLENBQUMsSUFBSTVELFFBQVEsQ0FBQ2dHLFdBQVcsQ0FBQ3BDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDN0RsRCxZQUFBQSxHQUFHLENBQUNrRCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2RoRCxNQUFNLENBQUNGLEdBQUcsQ0FBQ2tELElBQUksQ0FBQyxFQUFFbUMsWUFBWSxDQUFDbkMsSUFBSSxDQUFDLENBQUM7WUFDckNoRCxNQUFNLENBQUNGLEdBQUcsQ0FBQ2tELElBQUksQ0FBQyxFQUFFb0MsV0FBVyxDQUFDcEMsSUFBSSxDQUFDLENBQUM7V0FDdkMsTUFBTSxJQUFJb0MsV0FBVyxDQUFDcEMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ2xDbEQsR0FBRyxDQUFDa0QsSUFBSSxDQUFDLEdBQUdvQyxXQUFXLENBQUNwQyxJQUFJLENBQUM7QUFDakMsV0FBQyxNQUFNO1lBQ0gsT0FBT2xELEdBQUcsQ0FBQ2tELElBQUksQ0FBQztBQUNwQjtBQUNKO0FBQ0o7TUFDQSxLQUFLQSxJQUFJLElBQUltQyxZQUFZLEVBQUU7UUFDdkIsSUFDSTlGLFVBQVUsQ0FBQzhGLFlBQVksRUFBRW5DLElBQUksQ0FBQyxJQUM5QixDQUFDM0QsVUFBVSxDQUFDK0YsV0FBVyxFQUFFcEMsSUFBSSxDQUFDLElBQzlCNUQsUUFBUSxDQUFDK0YsWUFBWSxDQUFDbkMsSUFBSSxDQUFDLENBQUMsRUFDOUI7QUFDRTtBQUNBbEQsVUFBQUEsR0FBRyxDQUFDa0QsSUFBSSxDQUFDLEdBQUdoRCxNQUFNLENBQUMsRUFBRSxFQUFFRixHQUFHLENBQUNrRCxJQUFJLENBQUMsQ0FBQztBQUNyQztBQUNKO0FBQ0EsTUFBQSxPQUFPbEQsR0FBRztBQUNkO0lBRUEsU0FBU3VGLE1BQU1BLENBQUN4ZCxNQUFNLEVBQUU7TUFDcEIsSUFBSUEsTUFBTSxJQUFJLElBQUksRUFBRTtBQUNoQixRQUFBLElBQUksQ0FBQytILEdBQUcsQ0FBQy9ILE1BQU0sQ0FBQztBQUNwQjtBQUNKO0FBRUEsSUFBQSxJQUFJbkcsSUFBSTtJQUVSLElBQUlELE1BQU0sQ0FBQ0MsSUFBSSxFQUFFO01BQ2JBLElBQUksR0FBR0QsTUFBTSxDQUFDQyxJQUFJO0FBQ3RCLEtBQUMsTUFBTTtBQUNIQSxNQUFBQSxJQUFJLEdBQUcsVUFBVTZkLEdBQUcsRUFBRTtBQUNsQixRQUFBLElBQUkzYyxDQUFDO1VBQ0RrZCxHQUFHLEdBQUcsRUFBRTtRQUNaLEtBQUtsZCxDQUFDLElBQUkyYyxHQUFHLEVBQUU7QUFDWCxVQUFBLElBQUlGLFVBQVUsQ0FBQ0UsR0FBRyxFQUFFM2MsQ0FBQyxDQUFDLEVBQUU7QUFDcEJrZCxZQUFBQSxHQUFHLENBQUMxVixJQUFJLENBQUN4SCxDQUFDLENBQUM7QUFDZjtBQUNKO0FBQ0EsUUFBQSxPQUFPa2QsR0FBRztPQUNiO0FBQ0w7SUFFQSxJQUFJd0YsZUFBZSxHQUFHO01BQ2xCQyxPQUFPLEVBQUUsZUFBZTtNQUN4QkMsT0FBTyxFQUFFLGtCQUFrQjtNQUMzQkMsUUFBUSxFQUFFLGNBQWM7TUFDeEJDLE9BQU8sRUFBRSxtQkFBbUI7TUFDNUJDLFFBQVEsRUFBRSxxQkFBcUI7QUFDL0JDLE1BQUFBLFFBQVEsRUFBRTtLQUNiO0lBRUQsU0FBU0MsUUFBUUEsQ0FBQy9qQixHQUFHLEVBQUVna0IsR0FBRyxFQUFFM25CLEdBQUcsRUFBRTtBQUM3QixNQUFBLElBQUk0bkIsTUFBTSxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFDbGtCLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQ2trQixTQUFTLENBQUMsVUFBVSxDQUFDO0FBQzlELE1BQUEsT0FBT3RCLFVBQVUsQ0FBQ3FCLE1BQU0sQ0FBQyxHQUFHQSxNQUFNLENBQUN0aUIsSUFBSSxDQUFDcWlCLEdBQUcsRUFBRTNuQixHQUFHLENBQUMsR0FBRzRuQixNQUFNO0FBQzlEO0lBRUEsU0FBU0UsUUFBUUEsQ0FBQ0MsTUFBTSxFQUFFQyxZQUFZLEVBQUVDLFNBQVMsRUFBRTtNQUMvQyxJQUFJQyxTQUFTLEdBQUcsRUFBRSxHQUFHN21CLElBQUksQ0FBQzhtQixHQUFHLENBQUNKLE1BQU0sQ0FBQztBQUNqQ0ssUUFBQUEsV0FBVyxHQUFHSixZQUFZLEdBQUdFLFNBQVMsQ0FBQzlqQixNQUFNO1FBQzdDaWtCLElBQUksR0FBR04sTUFBTSxJQUFJLENBQUM7QUFDdEIsTUFBQSxPQUNJLENBQUNNLElBQUksR0FBSUosU0FBUyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUksR0FBRyxJQUNwQzVtQixJQUFJLENBQUNpbkIsR0FBRyxDQUFDLEVBQUUsRUFBRWpuQixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUU4bUIsV0FBVyxDQUFDLENBQUMsQ0FBQy9pQixRQUFRLEVBQUUsQ0FBQ2tqQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQzNETCxTQUFTO0FBRWpCO0lBRUEsSUFBSU0sZ0JBQWdCLEdBQ1osd01BQXdNO01BQzVNQyxxQkFBcUIsR0FBRyw0Q0FBNEM7TUFDcEVDLGVBQWUsR0FBRyxFQUFFO01BQ3BCQyxvQkFBb0IsR0FBRyxFQUFFOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtJQUNBLFNBQVNDLGNBQWNBLENBQUNDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxPQUFPLEVBQUVuZCxRQUFRLEVBQUU7TUFDdEQsSUFBSW9kLElBQUksR0FBR3BkLFFBQVE7QUFDbkIsTUFBQSxJQUFJLE9BQU9BLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDOUJvZCxJQUFJLEdBQUcsWUFBWTtBQUNmLFVBQUEsT0FBTyxJQUFJLENBQUNwZCxRQUFRLENBQUMsRUFBRTtTQUMxQjtBQUNMO01BQ0EsSUFBSWlkLEtBQUssRUFBRTtBQUNQRixRQUFBQSxvQkFBb0IsQ0FBQ0UsS0FBSyxDQUFDLEdBQUdHLElBQUk7QUFDdEM7TUFDQSxJQUFJRixNQUFNLEVBQUU7UUFDUkgsb0JBQW9CLENBQUNHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVk7VUFDMUMsT0FBT2hCLFFBQVEsQ0FBQ2tCLElBQUksQ0FBQ2xJLEtBQUssQ0FBQyxJQUFJLEVBQUVDLFNBQVMsQ0FBQyxFQUFFK0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckU7QUFDTDtNQUNBLElBQUlDLE9BQU8sRUFBRTtBQUNUSixRQUFBQSxvQkFBb0IsQ0FBQ0ksT0FBTyxDQUFDLEdBQUcsWUFBWTtBQUN4QyxVQUFBLE9BQU8sSUFBSSxDQUFDRSxVQUFVLEVBQUUsQ0FBQ0YsT0FBTyxDQUM1QkMsSUFBSSxDQUFDbEksS0FBSyxDQUFDLElBQUksRUFBRUMsU0FBUyxDQUFDLEVBQzNCOEgsS0FDSixDQUFDO1NBQ0o7QUFDTDtBQUNKO0lBRUEsU0FBU0ssc0JBQXNCQSxDQUFDcG9CLEtBQUssRUFBRTtBQUNuQyxNQUFBLElBQUlBLEtBQUssQ0FBQ3FvQixLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDekIsT0FBT3JvQixLQUFLLENBQUNzb0IsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7QUFDeEM7TUFDQSxPQUFPdG9CLEtBQUssQ0FBQ3NvQixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUNuQztJQUVBLFNBQVNDLGtCQUFrQkEsQ0FBQ3JILE1BQU0sRUFBRTtNQUNoQyxJQUFJaGUsS0FBSyxHQUFHZ2UsTUFBTSxDQUFDbUgsS0FBSyxDQUFDWCxnQkFBZ0IsQ0FBQztRQUN0Qy9qQixDQUFDO1FBQ0RMLE1BQU07QUFFVixNQUFBLEtBQUtLLENBQUMsR0FBRyxDQUFDLEVBQUVMLE1BQU0sR0FBR0osS0FBSyxDQUFDSSxNQUFNLEVBQUVLLENBQUMsR0FBR0wsTUFBTSxFQUFFSyxDQUFDLEVBQUUsRUFBRTtRQUNoRCxJQUFJa2tCLG9CQUFvQixDQUFDM2tCLEtBQUssQ0FBQ1MsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUNoQ1QsS0FBSyxDQUFDUyxDQUFDLENBQUMsR0FBR2trQixvQkFBb0IsQ0FBQzNrQixLQUFLLENBQUNTLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFNBQUMsTUFBTTtVQUNIVCxLQUFLLENBQUNTLENBQUMsQ0FBQyxHQUFHeWtCLHNCQUFzQixDQUFDbGxCLEtBQUssQ0FBQ1MsQ0FBQyxDQUFDLENBQUM7QUFDL0M7QUFDSjtNQUVBLE9BQU8sVUFBVWtqQixHQUFHLEVBQUU7UUFDbEIsSUFBSUMsTUFBTSxHQUFHLEVBQUU7VUFDWG5qQixDQUFDO1FBQ0wsS0FBS0EsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHTCxNQUFNLEVBQUVLLENBQUMsRUFBRSxFQUFFO1VBQ3pCbWpCLE1BQU0sSUFBSXJCLFVBQVUsQ0FBQ3ZpQixLQUFLLENBQUNTLENBQUMsQ0FBQyxDQUFDLEdBQ3hCVCxLQUFLLENBQUNTLENBQUMsQ0FBQyxDQUFDYSxJQUFJLENBQUNxaUIsR0FBRyxFQUFFM0YsTUFBTSxDQUFDLEdBQzFCaGUsS0FBSyxDQUFDUyxDQUFDLENBQUM7QUFDbEI7QUFDQSxRQUFBLE9BQU9takIsTUFBTTtPQUNoQjtBQUNMOztBQUVBO0FBQ0EsSUFBQSxTQUFTMEIsWUFBWUEsQ0FBQzdWLENBQUMsRUFBRXVPLE1BQU0sRUFBRTtBQUM3QixNQUFBLElBQUksQ0FBQ3ZPLENBQUMsQ0FBQ2tRLE9BQU8sRUFBRSxFQUFFO1FBQ2QsT0FBT2xRLENBQUMsQ0FBQ3dWLFVBQVUsRUFBRSxDQUFDTSxXQUFXLEVBQUU7QUFDdkM7TUFFQXZILE1BQU0sR0FBR3dILFlBQVksQ0FBQ3hILE1BQU0sRUFBRXZPLENBQUMsQ0FBQ3dWLFVBQVUsRUFBRSxDQUFDO0FBQzdDUCxNQUFBQSxlQUFlLENBQUMxRyxNQUFNLENBQUMsR0FDbkIwRyxlQUFlLENBQUMxRyxNQUFNLENBQUMsSUFBSXFILGtCQUFrQixDQUFDckgsTUFBTSxDQUFDO0FBRXpELE1BQUEsT0FBTzBHLGVBQWUsQ0FBQzFHLE1BQU0sQ0FBQyxDQUFDdk8sQ0FBQyxDQUFDO0FBQ3JDO0FBRUEsSUFBQSxTQUFTK1YsWUFBWUEsQ0FBQ3hILE1BQU0sRUFBRUMsTUFBTSxFQUFFO01BQ2xDLElBQUl4ZCxDQUFDLEdBQUcsQ0FBQztNQUVULFNBQVNnbEIsMkJBQTJCQSxDQUFDM29CLEtBQUssRUFBRTtRQUN4QyxPQUFPbWhCLE1BQU0sQ0FBQ3lILGNBQWMsQ0FBQzVvQixLQUFLLENBQUMsSUFBSUEsS0FBSztBQUNoRDtNQUVBMm5CLHFCQUFxQixDQUFDalQsU0FBUyxHQUFHLENBQUM7TUFDbkMsT0FBTy9RLENBQUMsSUFBSSxDQUFDLElBQUlna0IscUJBQXFCLENBQUNrQixJQUFJLENBQUMzSCxNQUFNLENBQUMsRUFBRTtRQUNqREEsTUFBTSxHQUFHQSxNQUFNLENBQUNvSCxPQUFPLENBQ25CWCxxQkFBcUIsRUFDckJnQiwyQkFDSixDQUFDO1FBQ0RoQixxQkFBcUIsQ0FBQ2pULFNBQVMsR0FBRyxDQUFDO1FBQ25DL1EsQ0FBQyxJQUFJLENBQUM7QUFDVjtBQUVBLE1BQUEsT0FBT3VkLE1BQU07QUFDakI7SUFFQSxJQUFJNEgscUJBQXFCLEdBQUc7TUFDeEJDLEdBQUcsRUFBRSxXQUFXO01BQ2hCQyxFQUFFLEVBQUUsUUFBUTtNQUNaQyxDQUFDLEVBQUUsWUFBWTtNQUNmQyxFQUFFLEVBQUUsY0FBYztNQUNsQkMsR0FBRyxFQUFFLHFCQUFxQjtBQUMxQkMsTUFBQUEsSUFBSSxFQUFFO0tBQ1Q7SUFFRCxTQUFTUixjQUFjQSxDQUFDL2xCLEdBQUcsRUFBRTtNQUN6QixJQUFJcWUsTUFBTSxHQUFHLElBQUksQ0FBQ21JLGVBQWUsQ0FBQ3htQixHQUFHLENBQUM7UUFDbEN5bUIsV0FBVyxHQUFHLElBQUksQ0FBQ0QsZUFBZSxDQUFDeG1CLEdBQUcsQ0FBQzBtQixXQUFXLEVBQUUsQ0FBQztBQUV6RCxNQUFBLElBQUlySSxNQUFNLElBQUksQ0FBQ29JLFdBQVcsRUFBRTtBQUN4QixRQUFBLE9BQU9wSSxNQUFNO0FBQ2pCO0FBRUEsTUFBQSxJQUFJLENBQUNtSSxlQUFlLENBQUN4bUIsR0FBRyxDQUFDLEdBQUd5bUIsV0FBVyxDQUNsQ2pCLEtBQUssQ0FBQ1gsZ0JBQWdCLENBQUMsQ0FDdkJ6VSxHQUFHLENBQUMsVUFBVXVXLEdBQUcsRUFBRTtBQUNoQixRQUFBLElBQ0lBLEdBQUcsS0FBSyxNQUFNLElBQ2RBLEdBQUcsS0FBSyxJQUFJLElBQ1pBLEdBQUcsS0FBSyxJQUFJLElBQ1pBLEdBQUcsS0FBSyxNQUFNLEVBQ2hCO0FBQ0UsVUFBQSxPQUFPQSxHQUFHLENBQUM5akIsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQUEsT0FBTzhqQixHQUFHO0FBQ2QsT0FBQyxDQUFDLENBQ0RwRSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBRWIsTUFBQSxPQUFPLElBQUksQ0FBQ2lFLGVBQWUsQ0FBQ3htQixHQUFHLENBQUM7QUFDcEM7SUFFQSxJQUFJNG1CLGtCQUFrQixHQUFHLGNBQWM7SUFFdkMsU0FBU2hCLFdBQVdBLEdBQUc7TUFDbkIsT0FBTyxJQUFJLENBQUNpQixZQUFZO0FBQzVCO0lBRUEsSUFBSUMsY0FBYyxHQUFHLElBQUk7TUFDckJDLDZCQUE2QixHQUFHLFNBQVM7SUFFN0MsU0FBUzNCLE9BQU9BLENBQUNoQixNQUFNLEVBQUU7TUFDckIsT0FBTyxJQUFJLENBQUM0QyxRQUFRLENBQUN2QixPQUFPLENBQUMsSUFBSSxFQUFFckIsTUFBTSxDQUFDO0FBQzlDO0lBRUEsSUFBSTZDLG1CQUFtQixHQUFHO01BQ3RCQyxNQUFNLEVBQUUsT0FBTztNQUNmQyxJQUFJLEVBQUUsUUFBUTtNQUNkQyxDQUFDLEVBQUUsZUFBZTtNQUNsQkMsRUFBRSxFQUFFLFlBQVk7TUFDaEJ2WCxDQUFDLEVBQUUsVUFBVTtNQUNid1gsRUFBRSxFQUFFLFlBQVk7TUFDaEJDLENBQUMsRUFBRSxTQUFTO01BQ1pDLEVBQUUsRUFBRSxVQUFVO01BQ2RDLENBQUMsRUFBRSxPQUFPO01BQ1ZDLEVBQUUsRUFBRSxTQUFTO01BQ2JDLENBQUMsRUFBRSxRQUFRO01BQ1hDLEVBQUUsRUFBRSxVQUFVO01BQ2RDLENBQUMsRUFBRSxTQUFTO01BQ1pDLEVBQUUsRUFBRSxXQUFXO01BQ2ZDLENBQUMsRUFBRSxRQUFRO0FBQ1hDLE1BQUFBLEVBQUUsRUFBRTtLQUNQO0lBRUQsU0FBU0MsWUFBWUEsQ0FBQzdELE1BQU0sRUFBRThELGFBQWEsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUU7TUFDM0QsSUFBSW5FLE1BQU0sR0FBRyxJQUFJLENBQUNvRSxhQUFhLENBQUNGLE1BQU0sQ0FBQztNQUN2QyxPQUFPdkYsVUFBVSxDQUFDcUIsTUFBTSxDQUFDLEdBQ25CQSxNQUFNLENBQUNHLE1BQU0sRUFBRThELGFBQWEsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLENBQUMsR0FDL0NuRSxNQUFNLENBQUN3QixPQUFPLENBQUMsS0FBSyxFQUFFckIsTUFBTSxDQUFDO0FBQ3ZDO0FBRUEsSUFBQSxTQUFTa0UsVUFBVUEsQ0FBQ0MsSUFBSSxFQUFFdEUsTUFBTSxFQUFFO0FBQzlCLE1BQUEsSUFBSTVGLE1BQU0sR0FBRyxJQUFJLENBQUNnSyxhQUFhLENBQUNFLElBQUksR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM3RCxNQUFBLE9BQU8zRixVQUFVLENBQUN2RSxNQUFNLENBQUMsR0FBR0EsTUFBTSxDQUFDNEYsTUFBTSxDQUFDLEdBQUc1RixNQUFNLENBQUNvSCxPQUFPLENBQUMsS0FBSyxFQUFFeEIsTUFBTSxDQUFDO0FBQzlFO0lBRUEsSUFBSXVFLE9BQU8sR0FBRztNQUNWQyxDQUFDLEVBQUUsTUFBTTtNQUNUQyxLQUFLLEVBQUUsTUFBTTtNQUNiQyxJQUFJLEVBQUUsTUFBTTtNQUNabEIsQ0FBQyxFQUFFLEtBQUs7TUFDUm1CLElBQUksRUFBRSxLQUFLO01BQ1hDLEdBQUcsRUFBRSxLQUFLO01BQ1ZDLENBQUMsRUFBRSxTQUFTO01BQ1pDLFFBQVEsRUFBRSxTQUFTO01BQ25CQyxPQUFPLEVBQUUsU0FBUztNQUNsQkMsQ0FBQyxFQUFFLFlBQVk7TUFDZkMsV0FBVyxFQUFFLFlBQVk7TUFDekJDLFVBQVUsRUFBRSxZQUFZO01BQ3hCQyxHQUFHLEVBQUUsV0FBVztNQUNoQkMsVUFBVSxFQUFFLFdBQVc7TUFDdkJDLFNBQVMsRUFBRSxXQUFXO01BQ3RCL0IsQ0FBQyxFQUFFLE1BQU07TUFDVGdDLEtBQUssRUFBRSxNQUFNO01BQ2JDLElBQUksRUFBRSxNQUFNO01BQ1pDLEVBQUUsRUFBRSxhQUFhO01BQ2pCQyxZQUFZLEVBQUUsYUFBYTtNQUMzQkMsV0FBVyxFQUFFLGFBQWE7TUFDMUI3WixDQUFDLEVBQUUsUUFBUTtNQUNYOFosT0FBTyxFQUFFLFFBQVE7TUFDakJDLE1BQU0sRUFBRSxRQUFRO01BQ2hCaEMsQ0FBQyxFQUFFLE9BQU87TUFDVmlDLE1BQU0sRUFBRSxPQUFPO01BQ2ZDLEtBQUssRUFBRSxPQUFPO01BQ2RDLENBQUMsRUFBRSxTQUFTO01BQ1pDLFFBQVEsRUFBRSxTQUFTO01BQ25CQyxPQUFPLEVBQUUsU0FBUztNQUNsQjlDLENBQUMsRUFBRSxRQUFRO01BQ1grQyxPQUFPLEVBQUUsUUFBUTtNQUNqQkMsTUFBTSxFQUFFLFFBQVE7TUFDaEJDLEVBQUUsRUFBRSxVQUFVO01BQ2RDLFNBQVMsRUFBRSxVQUFVO01BQ3JCQyxRQUFRLEVBQUUsVUFBVTtNQUNwQkMsRUFBRSxFQUFFLGFBQWE7TUFDakJDLFlBQVksRUFBRSxhQUFhO01BQzNCQyxXQUFXLEVBQUUsYUFBYTtNQUMxQi9DLENBQUMsRUFBRSxNQUFNO01BQ1RnRCxLQUFLLEVBQUUsTUFBTTtNQUNiQyxJQUFJLEVBQUUsTUFBTTtNQUNaQyxDQUFDLEVBQUUsU0FBUztNQUNaQyxRQUFRLEVBQUUsU0FBUztNQUNuQkMsT0FBTyxFQUFFLFNBQVM7TUFDbEJoRCxDQUFDLEVBQUUsTUFBTTtNQUNUaUQsS0FBSyxFQUFFLE1BQU07QUFDYkMsTUFBQUEsSUFBSSxFQUFFO0tBQ1Q7SUFFRCxTQUFTQyxjQUFjQSxDQUFDQyxLQUFLLEVBQUU7QUFDM0IsTUFBQSxPQUFPLE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQzFCM0MsT0FBTyxDQUFDMkMsS0FBSyxDQUFDLElBQUkzQyxPQUFPLENBQUMyQyxLQUFLLENBQUNDLFdBQVcsRUFBRSxDQUFDLEdBQzlDM0ssU0FBUztBQUNuQjtJQUVBLFNBQVM0SyxvQkFBb0JBLENBQUNDLFdBQVcsRUFBRTtNQUN2QyxJQUFJQyxlQUFlLEdBQUcsRUFBRTtRQUNwQkMsY0FBYztRQUNkdEssSUFBSTtNQUVSLEtBQUtBLElBQUksSUFBSW9LLFdBQVcsRUFBRTtBQUN0QixRQUFBLElBQUkvTixVQUFVLENBQUMrTixXQUFXLEVBQUVwSyxJQUFJLENBQUMsRUFBRTtBQUMvQnNLLFVBQUFBLGNBQWMsR0FBR04sY0FBYyxDQUFDaEssSUFBSSxDQUFDO1VBQ3JDLElBQUlzSyxjQUFjLEVBQUU7WUFDaEJELGVBQWUsQ0FBQ0MsY0FBYyxDQUFDLEdBQUdGLFdBQVcsQ0FBQ3BLLElBQUksQ0FBQztBQUN2RDtBQUNKO0FBQ0o7QUFFQSxNQUFBLE9BQU9xSyxlQUFlO0FBQzFCO0lBRUEsSUFBSUUsVUFBVSxHQUFHO01BQ2I5QyxJQUFJLEVBQUUsQ0FBQztNQUNQRSxHQUFHLEVBQUUsRUFBRTtNQUNQRyxPQUFPLEVBQUUsRUFBRTtNQUNYMEMsVUFBVSxFQUFFLEVBQUU7TUFDZEMsU0FBUyxFQUFFLENBQUM7TUFDWm5DLElBQUksRUFBRSxFQUFFO01BQ1JHLFdBQVcsRUFBRSxFQUFFO01BQ2ZFLE1BQU0sRUFBRSxFQUFFO01BQ1ZFLEtBQUssRUFBRSxDQUFDO01BQ1JHLE9BQU8sRUFBRSxDQUFDO01BQ1ZFLE1BQU0sRUFBRSxFQUFFO01BQ1Z3QixRQUFRLEVBQUUsQ0FBQztNQUNYQyxXQUFXLEVBQUUsQ0FBQztNQUNkakIsSUFBSSxFQUFFLENBQUM7TUFDUGtCLE9BQU8sRUFBRSxDQUFDO0FBQ1ZiLE1BQUFBLElBQUksRUFBRTtLQUNUO0lBRUQsU0FBU2MsbUJBQW1CQSxDQUFDQyxRQUFRLEVBQUU7TUFDbkMsSUFBSWIsS0FBSyxHQUFHLEVBQUU7UUFDVmMsQ0FBQztNQUNMLEtBQUtBLENBQUMsSUFBSUQsUUFBUSxFQUFFO0FBQ2hCLFFBQUEsSUFBSXpPLFVBQVUsQ0FBQ3lPLFFBQVEsRUFBRUMsQ0FBQyxDQUFDLEVBQUU7VUFDekJkLEtBQUssQ0FBQzdpQixJQUFJLENBQUM7WUFBRTRqQixJQUFJLEVBQUVELENBQUM7WUFBRUUsUUFBUSxFQUFFVixVQUFVLENBQUNRLENBQUM7QUFBRSxXQUFDLENBQUM7QUFDcEQ7QUFDSjtNQUNBZCxLQUFLLENBQUN0ckIsSUFBSSxDQUFDLFVBQVVJLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0FBQ3ZCLFFBQUEsT0FBT0QsQ0FBQyxDQUFDa3NCLFFBQVEsR0FBR2pzQixDQUFDLENBQUNpc0IsUUFBUTtBQUNsQyxPQUFDLENBQUM7QUFDRixNQUFBLE9BQU9oQixLQUFLO0FBQ2hCO0lBRUEsSUFBSWlCLE1BQU0sR0FBRyxJQUFJO0FBQUU7TUFDZkMsTUFBTSxHQUFHLE1BQU07QUFBRTtNQUNqQkMsTUFBTSxHQUFHLE9BQU87QUFBRTtNQUNsQkMsTUFBTSxHQUFHLE9BQU87QUFBRTtNQUNsQkMsTUFBTSxHQUFHLFlBQVk7QUFBRTtNQUN2QkMsU0FBUyxHQUFHLE9BQU87QUFBRTtNQUNyQkMsU0FBUyxHQUFHLFdBQVc7QUFBRTtNQUN6QkMsU0FBUyxHQUFHLGVBQWU7QUFBRTtNQUM3QkMsU0FBUyxHQUFHLFNBQVM7QUFBRTtNQUN2QkMsU0FBUyxHQUFHLFNBQVM7QUFBRTtNQUN2QkMsU0FBUyxHQUFHLGNBQWM7QUFBRTtNQUM1QkMsYUFBYSxHQUFHLEtBQUs7QUFBRTtNQUN2QkMsV0FBVyxHQUFHLFVBQVU7QUFBRTtNQUMxQkMsV0FBVyxHQUFHLG9CQUFvQjtBQUFFO01BQ3BDQyxnQkFBZ0IsR0FBRyx5QkFBeUI7QUFBRTtNQUM5Q0MsY0FBYyxHQUFHLHNCQUFzQjtBQUFFO0FBQ3pDO0FBQ0E7TUFDQUMsU0FBUyxHQUNMLHVKQUF1SjtNQUMzSkMsc0JBQXNCLEdBQUcsV0FBVztBQUFFO01BQ3RDQyxnQkFBZ0IsR0FBRyxlQUFlO0FBQUU7TUFDcENDLE9BQU87SUFFWEEsT0FBTyxHQUFHLEVBQUU7SUFFWixTQUFTQyxhQUFhQSxDQUFDdEksS0FBSyxFQUFFdUksS0FBSyxFQUFFQyxXQUFXLEVBQUU7QUFDOUNILE1BQUFBLE9BQU8sQ0FBQ3JJLEtBQUssQ0FBQyxHQUFHdEMsVUFBVSxDQUFDNkssS0FBSyxDQUFDLEdBQzVCQSxLQUFLLEdBQ0wsVUFBVUUsUUFBUSxFQUFFckksVUFBVSxFQUFFO0FBQzVCLFFBQUEsT0FBT3FJLFFBQVEsSUFBSUQsV0FBVyxHQUFHQSxXQUFXLEdBQUdELEtBQUs7T0FDdkQ7QUFDWDtBQUVBLElBQUEsU0FBU0cscUJBQXFCQSxDQUFDMUksS0FBSyxFQUFFbmYsTUFBTSxFQUFFO01BQzFDLElBQUksQ0FBQ3dYLFVBQVUsQ0FBQ2dRLE9BQU8sRUFBRXJJLEtBQUssQ0FBQyxFQUFFO1FBQzdCLE9BQU8sSUFBSWxDLE1BQU0sQ0FBQzZLLGNBQWMsQ0FBQzNJLEtBQUssQ0FBQyxDQUFDO0FBQzVDO0FBRUEsTUFBQSxPQUFPcUksT0FBTyxDQUFDckksS0FBSyxDQUFDLENBQUNuZixNQUFNLENBQUN3YSxPQUFPLEVBQUV4YSxNQUFNLENBQUM0YixPQUFPLENBQUM7QUFDekQ7O0FBRUE7SUFDQSxTQUFTa00sY0FBY0EsQ0FBQ3pHLENBQUMsRUFBRTtNQUN2QixPQUFPMEcsV0FBVyxDQUNkMUcsQ0FBQyxDQUNJM0IsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FDakJBLE9BQU8sQ0FDSixxQ0FBcUMsRUFDckMsVUFBVXNJLE9BQU8sRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFO0FBQy9CLFFBQUEsT0FBT0gsRUFBRSxJQUFJQyxFQUFFLElBQUlDLEVBQUUsSUFBSUMsRUFBRTtBQUMvQixPQUNKLENBQ1IsQ0FBQztBQUNMO0lBRUEsU0FBU0wsV0FBV0EsQ0FBQzFHLENBQUMsRUFBRTtNQUNwQixPQUFPQSxDQUFDLENBQUMzQixPQUFPLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDO0FBQ3REO0lBRUEsU0FBUzJJLFFBQVFBLENBQUNoSyxNQUFNLEVBQUU7TUFDdEIsSUFBSUEsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNaO1FBQ0EsT0FBTzFtQixJQUFJLENBQUMyd0IsSUFBSSxDQUFDakssTUFBTSxDQUFDLElBQUksQ0FBQztBQUNqQyxPQUFDLE1BQU07QUFDSCxRQUFBLE9BQU8xbUIsSUFBSSxDQUFDNHdCLEtBQUssQ0FBQ2xLLE1BQU0sQ0FBQztBQUM3QjtBQUNKO0lBRUEsU0FBU21LLEtBQUtBLENBQUNDLG1CQUFtQixFQUFFO01BQ2hDLElBQUlDLGFBQWEsR0FBRyxDQUFDRCxtQkFBbUI7UUFDcENueEIsS0FBSyxHQUFHLENBQUM7TUFFYixJQUFJb3hCLGFBQWEsS0FBSyxDQUFDLElBQUlDLFFBQVEsQ0FBQ0QsYUFBYSxDQUFDLEVBQUU7QUFDaERweEIsUUFBQUEsS0FBSyxHQUFHK3dCLFFBQVEsQ0FBQ0ssYUFBYSxDQUFDO0FBQ25DO0FBRUEsTUFBQSxPQUFPcHhCLEtBQUs7QUFDaEI7SUFFQSxJQUFJc3hCLE1BQU0sR0FBRyxFQUFFO0FBRWYsSUFBQSxTQUFTQyxhQUFhQSxDQUFDMUosS0FBSyxFQUFFamQsUUFBUSxFQUFFO0FBQ3BDLE1BQUEsSUFBSW5ILENBQUM7UUFDRHVrQixJQUFJLEdBQUdwZCxRQUFRO1FBQ2Y0bUIsUUFBUTtBQUNaLE1BQUEsSUFBSSxPQUFPM0osS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUMzQkEsS0FBSyxHQUFHLENBQUNBLEtBQUssQ0FBQztBQUNuQjtBQUNBLE1BQUEsSUFBSXJILFFBQVEsQ0FBQzVWLFFBQVEsQ0FBQyxFQUFFO0FBQ3BCb2QsUUFBQUEsSUFBSSxHQUFHLFVBQVVsb0IsS0FBSyxFQUFFa0QsS0FBSyxFQUFFO1VBQzNCQSxLQUFLLENBQUM0SCxRQUFRLENBQUMsR0FBR3NtQixLQUFLLENBQUNweEIsS0FBSyxDQUFDO1NBQ2pDO0FBQ0w7TUFDQTB4QixRQUFRLEdBQUczSixLQUFLLENBQUN6a0IsTUFBTTtNQUN2QixLQUFLSyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcrdEIsUUFBUSxFQUFFL3RCLENBQUMsRUFBRSxFQUFFO1FBQzNCNnRCLE1BQU0sQ0FBQ3pKLEtBQUssQ0FBQ3BrQixDQUFDLENBQUMsQ0FBQyxHQUFHdWtCLElBQUk7QUFDM0I7QUFDSjtBQUVBLElBQUEsU0FBU3lKLGlCQUFpQkEsQ0FBQzVKLEtBQUssRUFBRWpkLFFBQVEsRUFBRTtNQUN4QzJtQixhQUFhLENBQUMxSixLQUFLLEVBQUUsVUFBVS9uQixLQUFLLEVBQUVrRCxLQUFLLEVBQUUwRixNQUFNLEVBQUVtZixLQUFLLEVBQUU7UUFDeERuZixNQUFNLENBQUNncEIsRUFBRSxHQUFHaHBCLE1BQU0sQ0FBQ2dwQixFQUFFLElBQUksRUFBRTtRQUMzQjltQixRQUFRLENBQUM5SyxLQUFLLEVBQUU0SSxNQUFNLENBQUNncEIsRUFBRSxFQUFFaHBCLE1BQU0sRUFBRW1mLEtBQUssQ0FBQztBQUM3QyxPQUFDLENBQUM7QUFDTjtJQUVBLFNBQVM4Six1QkFBdUJBLENBQUM5SixLQUFLLEVBQUUvbkIsS0FBSyxFQUFFNEksTUFBTSxFQUFFO01BQ25ELElBQUk1SSxLQUFLLElBQUksSUFBSSxJQUFJb2dCLFVBQVUsQ0FBQ29SLE1BQU0sRUFBRXpKLEtBQUssQ0FBQyxFQUFFO0FBQzVDeUosUUFBQUEsTUFBTSxDQUFDekosS0FBSyxDQUFDLENBQUMvbkIsS0FBSyxFQUFFNEksTUFBTSxDQUFDa3BCLEVBQUUsRUFBRWxwQixNQUFNLEVBQUVtZixLQUFLLENBQUM7QUFDbEQ7QUFDSjtJQUVBLFNBQVNnSyxVQUFVQSxDQUFDakUsSUFBSSxFQUFFO0FBQ3RCLE1BQUEsT0FBUUEsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUlBLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFLQSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDbkU7SUFFQSxJQUFJa0UsSUFBSSxHQUFHLENBQUM7TUFDUkMsS0FBSyxHQUFHLENBQUM7TUFDVEMsSUFBSSxHQUFHLENBQUM7TUFDUkMsSUFBSSxHQUFHLENBQUM7TUFDUkMsTUFBTSxHQUFHLENBQUM7TUFDVkMsTUFBTSxHQUFHLENBQUM7TUFDVkMsV0FBVyxHQUFHLENBQUM7TUFDZkMsSUFBSSxHQUFHLENBQUM7TUFDUkMsT0FBTyxHQUFHLENBQUM7O0FBRWY7O0lBRUExSyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtBQUNsQyxNQUFBLElBQUk4QyxDQUFDLEdBQUcsSUFBSSxDQUFDa0QsSUFBSSxFQUFFO0FBQ25CLE1BQUEsT0FBT2xELENBQUMsSUFBSSxJQUFJLEdBQUc1RCxRQUFRLENBQUM0RCxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHQSxDQUFDO0FBQy9DLEtBQUMsQ0FBQztJQUVGOUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtBQUN4QyxNQUFBLE9BQU8sSUFBSSxDQUFDZ0csSUFBSSxFQUFFLEdBQUcsR0FBRztBQUM1QixLQUFDLENBQUM7QUFFRmhHLElBQUFBLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztBQUN6Q0EsSUFBQUEsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQzFDQSxJQUFBQSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDOztBQUVqRDs7QUFFQXVJLElBQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUVSLFdBQVcsQ0FBQztBQUMvQlEsSUFBQUEsYUFBYSxDQUFDLElBQUksRUFBRWYsU0FBUyxFQUFFSixNQUFNLENBQUM7QUFDdENtQixJQUFBQSxhQUFhLENBQUMsTUFBTSxFQUFFWCxTQUFTLEVBQUVOLE1BQU0sQ0FBQztBQUN4Q2lCLElBQUFBLGFBQWEsQ0FBQyxPQUFPLEVBQUVWLFNBQVMsRUFBRU4sTUFBTSxDQUFDO0FBQ3pDZ0IsSUFBQUEsYUFBYSxDQUFDLFFBQVEsRUFBRVYsU0FBUyxFQUFFTixNQUFNLENBQUM7SUFFMUNvQyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUVPLElBQUksQ0FBQztJQUN4Q1AsYUFBYSxDQUFDLE1BQU0sRUFBRSxVQUFVenhCLEtBQUssRUFBRWtELEtBQUssRUFBRTtNQUMxQ0EsS0FBSyxDQUFDOHVCLElBQUksQ0FBQyxHQUNQaHlCLEtBQUssQ0FBQ3NELE1BQU0sS0FBSyxDQUFDLEdBQUd5YyxLQUFLLENBQUMwUyxpQkFBaUIsQ0FBQ3p5QixLQUFLLENBQUMsR0FBR294QixLQUFLLENBQUNweEIsS0FBSyxDQUFDO0FBQzFFLEtBQUMsQ0FBQztJQUNGeXhCLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVXp4QixLQUFLLEVBQUVrRCxLQUFLLEVBQUU7TUFDeENBLEtBQUssQ0FBQzh1QixJQUFJLENBQUMsR0FBR2pTLEtBQUssQ0FBQzBTLGlCQUFpQixDQUFDenlCLEtBQUssQ0FBQztBQUNoRCxLQUFDLENBQUM7SUFDRnl4QixhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVV6eEIsS0FBSyxFQUFFa0QsS0FBSyxFQUFFO01BQ3ZDQSxLQUFLLENBQUM4dUIsSUFBSSxDQUFDLEdBQUdVLFFBQVEsQ0FBQzF5QixLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQ3JDLEtBQUMsQ0FBQzs7QUFFRjs7SUFFQSxTQUFTMnlCLFVBQVVBLENBQUM3RSxJQUFJLEVBQUU7TUFDdEIsT0FBT2lFLFVBQVUsQ0FBQ2pFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ3ZDOztBQUVBOztBQUVBL04sSUFBQUEsS0FBSyxDQUFDMFMsaUJBQWlCLEdBQUcsVUFBVXp5QixLQUFLLEVBQUU7QUFDdkMsTUFBQSxPQUFPb3hCLEtBQUssQ0FBQ3B4QixLQUFLLENBQUMsSUFBSW94QixLQUFLLENBQUNweEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7S0FDMUQ7O0FBRUQ7O0lBRUEsSUFBSTR5QixVQUFVLEdBQUdDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO0lBRTdDLFNBQVNDLGFBQWFBLEdBQUc7QUFDckIsTUFBQSxPQUFPZixVQUFVLENBQUMsSUFBSSxDQUFDakUsSUFBSSxFQUFFLENBQUM7QUFDbEM7QUFFQSxJQUFBLFNBQVMrRSxVQUFVQSxDQUFDOUQsSUFBSSxFQUFFZ0UsUUFBUSxFQUFFO01BQ2hDLE9BQU8sVUFBVTd5QixLQUFLLEVBQUU7UUFDcEIsSUFBSUEsS0FBSyxJQUFJLElBQUksRUFBRTtBQUNmOHlCLFVBQUFBLEtBQUssQ0FBQyxJQUFJLEVBQUVqRSxJQUFJLEVBQUU3dUIsS0FBSyxDQUFDO0FBQ3hCNmYsVUFBQUEsS0FBSyxDQUFDMkUsWUFBWSxDQUFDLElBQUksRUFBRXFPLFFBQVEsQ0FBQztBQUNsQyxVQUFBLE9BQU8sSUFBSTtBQUNmLFNBQUMsTUFBTTtBQUNILFVBQUEsT0FBT2hrQixHQUFHLENBQUMsSUFBSSxFQUFFZ2dCLElBQUksQ0FBQztBQUMxQjtPQUNIO0FBQ0w7QUFFQSxJQUFBLFNBQVNoZ0IsR0FBR0EsQ0FBQzhYLEdBQUcsRUFBRWtJLElBQUksRUFBRTtBQUNwQixNQUFBLElBQUksQ0FBQ2xJLEdBQUcsQ0FBQ2hFLE9BQU8sRUFBRSxFQUFFO0FBQ2hCLFFBQUEsT0FBT2EsR0FBRztBQUNkO0FBRUEsTUFBQSxJQUFJNEcsQ0FBQyxHQUFHekQsR0FBRyxDQUFDNUQsRUFBRTtRQUNWZ1EsS0FBSyxHQUFHcE0sR0FBRyxDQUFDdkMsTUFBTTtBQUV0QixNQUFBLFFBQVF5SyxJQUFJO0FBQ1IsUUFBQSxLQUFLLGNBQWM7VUFDZixPQUFPa0UsS0FBSyxHQUFHM0ksQ0FBQyxDQUFDNEksa0JBQWtCLEVBQUUsR0FBRzVJLENBQUMsQ0FBQzZJLGVBQWUsRUFBRTtBQUMvRCxRQUFBLEtBQUssU0FBUztVQUNWLE9BQU9GLEtBQUssR0FBRzNJLENBQUMsQ0FBQzhJLGFBQWEsRUFBRSxHQUFHOUksQ0FBQyxDQUFDK0ksVUFBVSxFQUFFO0FBQ3JELFFBQUEsS0FBSyxTQUFTO1VBQ1YsT0FBT0osS0FBSyxHQUFHM0ksQ0FBQyxDQUFDZ0osYUFBYSxFQUFFLEdBQUdoSixDQUFDLENBQUNpSixVQUFVLEVBQUU7QUFDckQsUUFBQSxLQUFLLE9BQU87VUFDUixPQUFPTixLQUFLLEdBQUczSSxDQUFDLENBQUNrSixXQUFXLEVBQUUsR0FBR2xKLENBQUMsQ0FBQ21KLFFBQVEsRUFBRTtBQUNqRCxRQUFBLEtBQUssTUFBTTtVQUNQLE9BQU9SLEtBQUssR0FBRzNJLENBQUMsQ0FBQ29KLFVBQVUsRUFBRSxHQUFHcEosQ0FBQyxDQUFDcUosT0FBTyxFQUFFO0FBQy9DLFFBQUEsS0FBSyxLQUFLO1VBQ04sT0FBT1YsS0FBSyxHQUFHM0ksQ0FBQyxDQUFDc0osU0FBUyxFQUFFLEdBQUd0SixDQUFDLENBQUN1SixNQUFNLEVBQUU7QUFDN0MsUUFBQSxLQUFLLE9BQU87VUFDUixPQUFPWixLQUFLLEdBQUczSSxDQUFDLENBQUN3SixXQUFXLEVBQUUsR0FBR3hKLENBQUMsQ0FBQ3lKLFFBQVEsRUFBRTtBQUNqRCxRQUFBLEtBQUssVUFBVTtVQUNYLE9BQU9kLEtBQUssR0FBRzNJLENBQUMsQ0FBQzBKLGNBQWMsRUFBRSxHQUFHMUosQ0FBQyxDQUFDMkosV0FBVyxFQUFFO1FBQ3ZEO0FBQ0ksVUFBQSxPQUFPdlEsR0FBRztBQUFFO0FBQ3BCO0FBQ0o7SUFFQSxTQUFTc1AsS0FBS0EsQ0FBQ25NLEdBQUcsRUFBRWtJLElBQUksRUFBRTd1QixLQUFLLEVBQUU7TUFDN0IsSUFBSW9xQixDQUFDLEVBQUUySSxLQUFLLEVBQUVuRixJQUFJLEVBQUVsQixLQUFLLEVBQUVwQixJQUFJO01BRS9CLElBQUksQ0FBQzNFLEdBQUcsQ0FBQ2hFLE9BQU8sRUFBRSxJQUFJSyxLQUFLLENBQUNoakIsS0FBSyxDQUFDLEVBQUU7UUFDaEM7QUFDSjtNQUVBb3FCLENBQUMsR0FBR3pELEdBQUcsQ0FBQzVELEVBQUU7TUFDVmdRLEtBQUssR0FBR3BNLEdBQUcsQ0FBQ3ZDLE1BQU07QUFFbEIsTUFBQSxRQUFReUssSUFBSTtBQUNSLFFBQUEsS0FBSyxjQUFjO0FBQ2YsVUFBQSxPQUFPLE1BQU1rRSxLQUFLLEdBQ1ozSSxDQUFDLENBQUM0SixrQkFBa0IsQ0FBQ2gwQixLQUFLLENBQUMsR0FDM0JvcUIsQ0FBQyxDQUFDNkosZUFBZSxDQUFDajBCLEtBQUssQ0FBQyxDQUFDO0FBQ25DLFFBQUEsS0FBSyxTQUFTO0FBQ1YsVUFBQSxPQUFPLE1BQU0reUIsS0FBSyxHQUFHM0ksQ0FBQyxDQUFDOEosYUFBYSxDQUFDbDBCLEtBQUssQ0FBQyxHQUFHb3FCLENBQUMsQ0FBQytKLFVBQVUsQ0FBQ24wQixLQUFLLENBQUMsQ0FBQztBQUN0RSxRQUFBLEtBQUssU0FBUztBQUNWLFVBQUEsT0FBTyxNQUFNK3lCLEtBQUssR0FBRzNJLENBQUMsQ0FBQ2dLLGFBQWEsQ0FBQ3AwQixLQUFLLENBQUMsR0FBR29xQixDQUFDLENBQUNpSyxVQUFVLENBQUNyMEIsS0FBSyxDQUFDLENBQUM7QUFDdEUsUUFBQSxLQUFLLE9BQU87QUFDUixVQUFBLE9BQU8sTUFBTSt5QixLQUFLLEdBQUczSSxDQUFDLENBQUNrSyxXQUFXLENBQUN0MEIsS0FBSyxDQUFDLEdBQUdvcUIsQ0FBQyxDQUFDbUssUUFBUSxDQUFDdjBCLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsS0FBSyxNQUFNO0FBQ1AsVUFBQSxPQUFPLE1BQU0reUIsS0FBSyxHQUFHM0ksQ0FBQyxDQUFDb0ssVUFBVSxDQUFDeDBCLEtBQUssQ0FBQyxHQUFHb3FCLENBQUMsQ0FBQ3FLLE9BQU8sQ0FBQ3owQixLQUFLLENBQUMsQ0FBQztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQUEsS0FBSyxVQUFVO1VBQ1g7QUFBTztRQUNYO1VBQ0k7QUFBUTtBQUNoQjtNQUVBNHRCLElBQUksR0FBRzV0QixLQUFLO0FBQ1owc0IsTUFBQUEsS0FBSyxHQUFHL0YsR0FBRyxDQUFDK0YsS0FBSyxFQUFFO0FBQ25CcEIsTUFBQUEsSUFBSSxHQUFHM0UsR0FBRyxDQUFDMkUsSUFBSSxFQUFFO0FBQ2pCQSxNQUFBQSxJQUFJLEdBQUdBLElBQUksS0FBSyxFQUFFLElBQUlvQixLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUNtRixVQUFVLENBQUNqRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUd0QyxJQUFJO01BQ2xFLE1BQU15SCxLQUFLLEdBQ0wzSSxDQUFDLENBQUNzSyxjQUFjLENBQUM5RyxJQUFJLEVBQUVsQixLQUFLLEVBQUVwQixJQUFJLENBQUMsR0FDbkNsQixDQUFDLENBQUN1SyxXQUFXLENBQUMvRyxJQUFJLEVBQUVsQixLQUFLLEVBQUVwQixJQUFJLENBQUMsQ0FBQztBQUMzQzs7QUFFQTs7SUFFQSxTQUFTc0osU0FBU0EsQ0FBQzlHLEtBQUssRUFBRTtBQUN0QkEsTUFBQUEsS0FBSyxHQUFHRCxjQUFjLENBQUNDLEtBQUssQ0FBQztNQUM3QixJQUFJdkksVUFBVSxDQUFDLElBQUksQ0FBQ3VJLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDekIsUUFBQSxPQUFPLElBQUksQ0FBQ0EsS0FBSyxDQUFDLEVBQUU7QUFDeEI7QUFDQSxNQUFBLE9BQU8sSUFBSTtBQUNmO0FBRUEsSUFBQSxTQUFTK0csU0FBU0EsQ0FBQy9HLEtBQUssRUFBRTl0QixLQUFLLEVBQUU7QUFDN0IsTUFBQSxJQUFJLE9BQU84dEIsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMzQkEsUUFBQUEsS0FBSyxHQUFHRSxvQkFBb0IsQ0FBQ0YsS0FBSyxDQUFDO0FBQ25DLFFBQUEsSUFBSWdILFdBQVcsR0FBR3BHLG1CQUFtQixDQUFDWixLQUFLLENBQUM7VUFDeENycUIsQ0FBQztVQUNEc3hCLGNBQWMsR0FBR0QsV0FBVyxDQUFDMXhCLE1BQU07UUFDdkMsS0FBS0ssQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc3hCLGNBQWMsRUFBRXR4QixDQUFDLEVBQUUsRUFBRTtBQUNqQyxVQUFBLElBQUksQ0FBQ3F4QixXQUFXLENBQUNyeEIsQ0FBQyxDQUFDLENBQUNvckIsSUFBSSxDQUFDLENBQUNmLEtBQUssQ0FBQ2dILFdBQVcsQ0FBQ3J4QixDQUFDLENBQUMsQ0FBQ29yQixJQUFJLENBQUMsQ0FBQztBQUN6RDtBQUNKLE9BQUMsTUFBTTtBQUNIZixRQUFBQSxLQUFLLEdBQUdELGNBQWMsQ0FBQ0MsS0FBSyxDQUFDO1FBQzdCLElBQUl2SSxVQUFVLENBQUMsSUFBSSxDQUFDdUksS0FBSyxDQUFDLENBQUMsRUFBRTtBQUN6QixVQUFBLE9BQU8sSUFBSSxDQUFDQSxLQUFLLENBQUMsQ0FBQzl0QixLQUFLLENBQUM7QUFDN0I7QUFDSjtBQUNBLE1BQUEsT0FBTyxJQUFJO0FBQ2Y7QUFFQSxJQUFBLFNBQVNnMUIsR0FBR0EsQ0FBQ0MsQ0FBQyxFQUFFcm5CLENBQUMsRUFBRTtNQUNmLE9BQU8sQ0FBRXFuQixDQUFDLEdBQUdybkIsQ0FBQyxHQUFJQSxDQUFDLElBQUlBLENBQUM7QUFDNUI7QUFFQSxJQUFBLElBQUl5RSxPQUFPO0FBRVgsSUFBQSxJQUFJek8sS0FBSyxDQUFDTSxTQUFTLENBQUNtTyxPQUFPLEVBQUU7QUFDekJBLE1BQUFBLE9BQU8sR0FBR3pPLEtBQUssQ0FBQ00sU0FBUyxDQUFDbU8sT0FBTztBQUNyQyxLQUFDLE1BQU07QUFDSEEsTUFBQUEsT0FBTyxHQUFHLFVBQVV2TyxDQUFDLEVBQUU7QUFDbkI7QUFDQSxRQUFBLElBQUlMLENBQUM7QUFDTCxRQUFBLEtBQUtBLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxJQUFJLENBQUNMLE1BQU0sRUFBRSxFQUFFSyxDQUFDLEVBQUU7QUFDOUIsVUFBQSxJQUFJLElBQUksQ0FBQ0EsQ0FBQyxDQUFDLEtBQUtLLENBQUMsRUFBRTtBQUNmLFlBQUEsT0FBT0wsQ0FBQztBQUNaO0FBQ0o7UUFDQSxPQUFPLEVBQUU7T0FDWjtBQUNMO0FBRUEsSUFBQSxTQUFTeXhCLFdBQVdBLENBQUN0SCxJQUFJLEVBQUVsQixLQUFLLEVBQUU7TUFDOUIsSUFBSTFKLEtBQUssQ0FBQzRLLElBQUksQ0FBQyxJQUFJNUssS0FBSyxDQUFDMEosS0FBSyxDQUFDLEVBQUU7QUFDN0IsUUFBQSxPQUFPbEosR0FBRztBQUNkO01BQ0EsSUFBSTJSLFFBQVEsR0FBR0gsR0FBRyxDQUFDdEksS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUM3QmtCLE1BQUFBLElBQUksSUFBSSxDQUFDbEIsS0FBSyxHQUFHeUksUUFBUSxJQUFJLEVBQUU7TUFDL0IsT0FBT0EsUUFBUSxLQUFLLENBQUMsR0FDZnRELFVBQVUsQ0FBQ2pFLElBQUksQ0FBQyxHQUNaLEVBQUUsR0FDRixFQUFFLEdBQ04sRUFBRSxHQUFLdUgsUUFBUSxHQUFHLENBQUMsR0FBSSxDQUFFO0FBQ25DOztBQUVBOztJQUVBdk4sY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWTtBQUM3QyxNQUFBLE9BQU8sSUFBSSxDQUFDOEUsS0FBSyxFQUFFLEdBQUcsQ0FBQztBQUMzQixLQUFDLENBQUM7SUFFRjlFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVNUcsTUFBTSxFQUFFO01BQzFDLE9BQU8sSUFBSSxDQUFDaUgsVUFBVSxFQUFFLENBQUNtTixXQUFXLENBQUMsSUFBSSxFQUFFcFUsTUFBTSxDQUFDO0FBQ3RELEtBQUMsQ0FBQztJQUVGNEcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVU1RyxNQUFNLEVBQUU7TUFDM0MsT0FBTyxJQUFJLENBQUNpSCxVQUFVLEVBQUUsQ0FBQ3dFLE1BQU0sQ0FBQyxJQUFJLEVBQUV6TCxNQUFNLENBQUM7QUFDakQsS0FBQyxDQUFDOztBQUVGOztBQUVBbVAsSUFBQUEsYUFBYSxDQUFDLEdBQUcsRUFBRWYsU0FBUyxFQUFFWSxzQkFBc0IsQ0FBQztBQUNyREcsSUFBQUEsYUFBYSxDQUFDLElBQUksRUFBRWYsU0FBUyxFQUFFSixNQUFNLENBQUM7SUFDdENtQixhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVVHLFFBQVEsRUFBRXJQLE1BQU0sRUFBRTtBQUM3QyxNQUFBLE9BQU9BLE1BQU0sQ0FBQ29VLGdCQUFnQixDQUFDL0UsUUFBUSxDQUFDO0FBQzVDLEtBQUMsQ0FBQztJQUNGSCxhQUFhLENBQUMsTUFBTSxFQUFFLFVBQVVHLFFBQVEsRUFBRXJQLE1BQU0sRUFBRTtBQUM5QyxNQUFBLE9BQU9BLE1BQU0sQ0FBQ3FVLFdBQVcsQ0FBQ2hGLFFBQVEsQ0FBQztBQUN2QyxLQUFDLENBQUM7SUFFRmlCLGFBQWEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxVQUFVenhCLEtBQUssRUFBRWtELEtBQUssRUFBRTtNQUMvQ0EsS0FBSyxDQUFDK3VCLEtBQUssQ0FBQyxHQUFHYixLQUFLLENBQUNweEIsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUNuQyxLQUFDLENBQUM7QUFFRnl4QixJQUFBQSxhQUFhLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsVUFBVXp4QixLQUFLLEVBQUVrRCxLQUFLLEVBQUUwRixNQUFNLEVBQUVtZixLQUFLLEVBQUU7QUFDbEUsTUFBQSxJQUFJNkUsS0FBSyxHQUFHaGtCLE1BQU0sQ0FBQzRiLE9BQU8sQ0FBQ2lSLFdBQVcsQ0FBQ3oxQixLQUFLLEVBQUUrbkIsS0FBSyxFQUFFbmYsTUFBTSxDQUFDd2EsT0FBTyxDQUFDO0FBQ3BFO01BQ0EsSUFBSXdKLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDZjFwQixRQUFBQSxLQUFLLENBQUMrdUIsS0FBSyxDQUFDLEdBQUdyRixLQUFLO0FBQ3hCLE9BQUMsTUFBTTtBQUNIcEssUUFBQUEsZUFBZSxDQUFDNVosTUFBTSxDQUFDLENBQUNtWixZQUFZLEdBQUcvaEIsS0FBSztBQUNoRDtBQUNKLEtBQUMsQ0FBQzs7QUFFRjs7SUFFQSxJQUFJMDFCLG1CQUFtQixHQUNmLHVGQUF1RixDQUFDQyxLQUFLLENBQ3pGLEdBQ0osQ0FBQztBQUNMQyxNQUFBQSx3QkFBd0IsR0FDcEIsaURBQWlELENBQUNELEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDaEVFLGdCQUFnQixHQUFHLCtCQUErQjtNQUNsREMsdUJBQXVCLEdBQUc3RixTQUFTO01BQ25DOEYsa0JBQWtCLEdBQUc5RixTQUFTO0FBRWxDLElBQUEsU0FBUytGLFlBQVlBLENBQUNyakIsQ0FBQyxFQUFFdU8sTUFBTSxFQUFFO01BQzdCLElBQUksQ0FBQ3ZPLENBQUMsRUFBRTtBQUNKLFFBQUEsT0FBTzVPLE9BQU8sQ0FBQyxJQUFJLENBQUNreUIsT0FBTyxDQUFDLEdBQ3RCLElBQUksQ0FBQ0EsT0FBTyxHQUNaLElBQUksQ0FBQ0EsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUNwQztNQUNBLE9BQU9seUIsT0FBTyxDQUFDLElBQUksQ0FBQ2t5QixPQUFPLENBQUMsR0FDdEIsSUFBSSxDQUFDQSxPQUFPLENBQUN0akIsQ0FBQyxDQUFDaWEsS0FBSyxFQUFFLENBQUMsR0FDdkIsSUFBSSxDQUFDcUosT0FBTyxDQUNSLENBQUMsSUFBSSxDQUFDQSxPQUFPLENBQUNDLFFBQVEsSUFBSUwsZ0JBQWdCLEVBQUVoTixJQUFJLENBQUMzSCxNQUFNLENBQUMsR0FDbEQsUUFBUSxHQUNSLFlBQVksQ0FDckIsQ0FBQ3ZPLENBQUMsQ0FBQ2lhLEtBQUssRUFBRSxDQUFDO0FBQ3RCO0FBRUEsSUFBQSxTQUFTdUosaUJBQWlCQSxDQUFDeGpCLENBQUMsRUFBRXVPLE1BQU0sRUFBRTtNQUNsQyxJQUFJLENBQUN2TyxDQUFDLEVBQUU7QUFDSixRQUFBLE9BQU81TyxPQUFPLENBQUMsSUFBSSxDQUFDcXlCLFlBQVksQ0FBQyxHQUMzQixJQUFJLENBQUNBLFlBQVksR0FDakIsSUFBSSxDQUFDQSxZQUFZLENBQUMsWUFBWSxDQUFDO0FBQ3pDO0FBQ0EsTUFBQSxPQUFPcnlCLE9BQU8sQ0FBQyxJQUFJLENBQUNxeUIsWUFBWSxDQUFDLEdBQzNCLElBQUksQ0FBQ0EsWUFBWSxDQUFDempCLENBQUMsQ0FBQ2lhLEtBQUssRUFBRSxDQUFDLEdBQzVCLElBQUksQ0FBQ3dKLFlBQVksQ0FDYlAsZ0JBQWdCLENBQUNoTixJQUFJLENBQUMzSCxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsWUFBWSxDQUMxRCxDQUFDdk8sQ0FBQyxDQUFDaWEsS0FBSyxFQUFFLENBQUM7QUFDdEI7SUFFQSxTQUFTeUosaUJBQWlCQSxDQUFDQyxTQUFTLEVBQUVwVixNQUFNLEVBQUVFLE1BQU0sRUFBRTtBQUNsRCxNQUFBLElBQUl6ZCxDQUFDO1FBQ0Q0eUIsRUFBRTtRQUNGMVAsR0FBRztBQUNIMlAsUUFBQUEsR0FBRyxHQUFHRixTQUFTLENBQUNHLGlCQUFpQixFQUFFO0FBQ3ZDLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQ0MsWUFBWSxFQUFFO0FBQ3BCO1FBQ0EsSUFBSSxDQUFDQSxZQUFZLEdBQUcsRUFBRTtRQUN0QixJQUFJLENBQUNDLGdCQUFnQixHQUFHLEVBQUU7UUFDMUIsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxFQUFFO1FBQzNCLEtBQUtqekIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFQSxDQUFDLEVBQUU7VUFDckJrakIsR0FBRyxHQUFHNUYsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFdGQsQ0FBQyxDQUFDLENBQUM7QUFDMUIsVUFBQSxJQUFJLENBQUNpekIsaUJBQWlCLENBQUNqekIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDMnhCLFdBQVcsQ0FDeEN6TyxHQUFHLEVBQ0gsRUFDSixDQUFDLENBQUM0UCxpQkFBaUIsRUFBRTtBQUNyQixVQUFBLElBQUksQ0FBQ0UsZ0JBQWdCLENBQUNoekIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDZ3BCLE1BQU0sQ0FBQzlGLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQzRQLGlCQUFpQixFQUFFO0FBQ3ZFO0FBQ0o7TUFFQSxJQUFJclYsTUFBTSxFQUFFO1FBQ1IsSUFBSUYsTUFBTSxLQUFLLEtBQUssRUFBRTtVQUNsQnFWLEVBQUUsR0FBR2hrQixPQUFPLENBQUMvTixJQUFJLENBQUMsSUFBSSxDQUFDb3lCLGlCQUFpQixFQUFFSixHQUFHLENBQUM7VUFDOUMsT0FBT0QsRUFBRSxLQUFLLEVBQUUsR0FBR0EsRUFBRSxHQUFHLElBQUk7QUFDaEMsU0FBQyxNQUFNO1VBQ0hBLEVBQUUsR0FBR2hrQixPQUFPLENBQUMvTixJQUFJLENBQUMsSUFBSSxDQUFDbXlCLGdCQUFnQixFQUFFSCxHQUFHLENBQUM7VUFDN0MsT0FBT0QsRUFBRSxLQUFLLEVBQUUsR0FBR0EsRUFBRSxHQUFHLElBQUk7QUFDaEM7QUFDSixPQUFDLE1BQU07UUFDSCxJQUFJclYsTUFBTSxLQUFLLEtBQUssRUFBRTtVQUNsQnFWLEVBQUUsR0FBR2hrQixPQUFPLENBQUMvTixJQUFJLENBQUMsSUFBSSxDQUFDb3lCLGlCQUFpQixFQUFFSixHQUFHLENBQUM7QUFDOUMsVUFBQSxJQUFJRCxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ1gsWUFBQSxPQUFPQSxFQUFFO0FBQ2I7VUFDQUEsRUFBRSxHQUFHaGtCLE9BQU8sQ0FBQy9OLElBQUksQ0FBQyxJQUFJLENBQUNteUIsZ0JBQWdCLEVBQUVILEdBQUcsQ0FBQztVQUM3QyxPQUFPRCxFQUFFLEtBQUssRUFBRSxHQUFHQSxFQUFFLEdBQUcsSUFBSTtBQUNoQyxTQUFDLE1BQU07VUFDSEEsRUFBRSxHQUFHaGtCLE9BQU8sQ0FBQy9OLElBQUksQ0FBQyxJQUFJLENBQUNteUIsZ0JBQWdCLEVBQUVILEdBQUcsQ0FBQztBQUM3QyxVQUFBLElBQUlELEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxZQUFBLE9BQU9BLEVBQUU7QUFDYjtVQUNBQSxFQUFFLEdBQUdoa0IsT0FBTyxDQUFDL04sSUFBSSxDQUFDLElBQUksQ0FBQ295QixpQkFBaUIsRUFBRUosR0FBRyxDQUFDO1VBQzlDLE9BQU9ELEVBQUUsS0FBSyxFQUFFLEdBQUdBLEVBQUUsR0FBRyxJQUFJO0FBQ2hDO0FBQ0o7QUFDSjtJQUVBLFNBQVNNLGlCQUFpQkEsQ0FBQ1AsU0FBUyxFQUFFcFYsTUFBTSxFQUFFRSxNQUFNLEVBQUU7QUFDbEQsTUFBQSxJQUFJemQsQ0FBQyxFQUFFa2pCLEdBQUcsRUFBRXlKLEtBQUs7TUFFakIsSUFBSSxJQUFJLENBQUN3RyxpQkFBaUIsRUFBRTtRQUN4QixPQUFPVCxpQkFBaUIsQ0FBQzd4QixJQUFJLENBQUMsSUFBSSxFQUFFOHhCLFNBQVMsRUFBRXBWLE1BQU0sRUFBRUUsTUFBTSxDQUFDO0FBQ2xFO0FBRUEsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDc1YsWUFBWSxFQUFFO1FBQ3BCLElBQUksQ0FBQ0EsWUFBWSxHQUFHLEVBQUU7UUFDdEIsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxFQUFFO1FBQzFCLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsRUFBRTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7TUFDQSxLQUFLanpCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxFQUFFLEVBQUVBLENBQUMsRUFBRSxFQUFFO0FBQ3JCO1FBQ0FrakIsR0FBRyxHQUFHNUYsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFdGQsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSXlkLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQ3VWLGdCQUFnQixDQUFDaHpCLENBQUMsQ0FBQyxFQUFFO0FBQ3JDLFVBQUEsSUFBSSxDQUFDZ3pCLGdCQUFnQixDQUFDaHpCLENBQUMsQ0FBQyxHQUFHLElBQUlraUIsTUFBTSxDQUNqQyxHQUFHLEdBQUcsSUFBSSxDQUFDOEcsTUFBTSxDQUFDOUYsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDeUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQ2pELEdBQ0osQ0FBQztBQUNELFVBQUEsSUFBSSxDQUFDc08saUJBQWlCLENBQUNqekIsQ0FBQyxDQUFDLEdBQUcsSUFBSWtpQixNQUFNLENBQ2xDLEdBQUcsR0FBRyxJQUFJLENBQUN5UCxXQUFXLENBQUN6TyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUN5QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFDdEQsR0FDSixDQUFDO0FBQ0w7UUFDQSxJQUFJLENBQUNsSCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUNzVixZQUFZLENBQUMveUIsQ0FBQyxDQUFDLEVBQUU7VUFDbEMyc0IsS0FBSyxHQUNELEdBQUcsR0FBRyxJQUFJLENBQUMzRCxNQUFNLENBQUM5RixHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQ3lPLFdBQVcsQ0FBQ3pPLEdBQUcsRUFBRSxFQUFFLENBQUM7VUFDakUsSUFBSSxDQUFDNlAsWUFBWSxDQUFDL3lCLENBQUMsQ0FBQyxHQUFHLElBQUlraUIsTUFBTSxDQUFDeUssS0FBSyxDQUFDaEksT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7QUFDbEU7QUFDQTtBQUNBLFFBQUEsSUFDSWxILE1BQU0sSUFDTkYsTUFBTSxLQUFLLE1BQU0sSUFDakIsSUFBSSxDQUFDeVYsZ0JBQWdCLENBQUNoekIsQ0FBQyxDQUFDLENBQUNrbEIsSUFBSSxDQUFDeU4sU0FBUyxDQUFDLEVBQzFDO0FBQ0UsVUFBQSxPQUFPM3lCLENBQUM7QUFDWixTQUFDLE1BQU0sSUFDSHlkLE1BQU0sSUFDTkYsTUFBTSxLQUFLLEtBQUssSUFDaEIsSUFBSSxDQUFDMFYsaUJBQWlCLENBQUNqekIsQ0FBQyxDQUFDLENBQUNrbEIsSUFBSSxDQUFDeU4sU0FBUyxDQUFDLEVBQzNDO0FBQ0UsVUFBQSxPQUFPM3lCLENBQUM7QUFDWixTQUFDLE1BQU0sSUFBSSxDQUFDeWQsTUFBTSxJQUFJLElBQUksQ0FBQ3NWLFlBQVksQ0FBQy95QixDQUFDLENBQUMsQ0FBQ2tsQixJQUFJLENBQUN5TixTQUFTLENBQUMsRUFBRTtBQUN4RCxVQUFBLE9BQU8zeUIsQ0FBQztBQUNaO0FBQ0o7QUFDSjs7QUFFQTs7QUFFQSxJQUFBLFNBQVNvekIsUUFBUUEsQ0FBQ2xRLEdBQUcsRUFBRTNtQixLQUFLLEVBQUU7QUFDMUIsTUFBQSxJQUFJLENBQUMybUIsR0FBRyxDQUFDaEUsT0FBTyxFQUFFLEVBQUU7QUFDaEI7QUFDQSxRQUFBLE9BQU9nRSxHQUFHO0FBQ2Q7QUFFQSxNQUFBLElBQUksT0FBTzNtQixLQUFLLEtBQUssUUFBUSxFQUFFO0FBQzNCLFFBQUEsSUFBSSxPQUFPLENBQUMyb0IsSUFBSSxDQUFDM29CLEtBQUssQ0FBQyxFQUFFO0FBQ3JCQSxVQUFBQSxLQUFLLEdBQUdreEIsS0FBSyxDQUFDbHhCLEtBQUssQ0FBQztBQUN4QixTQUFDLE1BQU07VUFDSEEsS0FBSyxHQUFHMm1CLEdBQUcsQ0FBQ3NCLFVBQVUsRUFBRSxDQUFDc04sV0FBVyxDQUFDdjFCLEtBQUssQ0FBQztBQUMzQztBQUNBLFVBQUEsSUFBSSxDQUFDd2dCLFFBQVEsQ0FBQ3hnQixLQUFLLENBQUMsRUFBRTtBQUNsQixZQUFBLE9BQU8ybUIsR0FBRztBQUNkO0FBQ0o7QUFDSjtNQUVBLElBQUkrRixLQUFLLEdBQUcxc0IsS0FBSztBQUNic3JCLFFBQUFBLElBQUksR0FBRzNFLEdBQUcsQ0FBQzJFLElBQUksRUFBRTtNQUVyQkEsSUFBSSxHQUFHQSxJQUFJLEdBQUcsRUFBRSxHQUFHQSxJQUFJLEdBQUdqckIsSUFBSSxDQUFDNkgsR0FBRyxDQUFDb2pCLElBQUksRUFBRTRKLFdBQVcsQ0FBQ3ZPLEdBQUcsQ0FBQ2lILElBQUksRUFBRSxFQUFFbEIsS0FBSyxDQUFDLENBQUM7TUFDeEUsTUFBTS9GLEdBQUcsQ0FBQ3ZDLE1BQU0sR0FDVnVDLEdBQUcsQ0FBQzVELEVBQUUsQ0FBQytULFdBQVcsQ0FBQ3BLLEtBQUssRUFBRXBCLElBQUksQ0FBQyxHQUMvQjNFLEdBQUcsQ0FBQzVELEVBQUUsQ0FBQzhULFFBQVEsQ0FBQ25LLEtBQUssRUFBRXBCLElBQUksQ0FBQyxDQUFDO0FBQ25DLE1BQUEsT0FBTzNFLEdBQUc7QUFDZDtJQUVBLFNBQVNvUSxXQUFXQSxDQUFDLzJCLEtBQUssRUFBRTtNQUN4QixJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ2Y2MkIsUUFBQUEsUUFBUSxDQUFDLElBQUksRUFBRTcyQixLQUFLLENBQUM7QUFDckI2ZixRQUFBQSxLQUFLLENBQUMyRSxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUM5QixRQUFBLE9BQU8sSUFBSTtBQUNmLE9BQUMsTUFBTTtBQUNILFFBQUEsT0FBTzNWLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO0FBQzdCO0FBQ0o7SUFFQSxTQUFTbW9CLGNBQWNBLEdBQUc7QUFDdEIsTUFBQSxPQUFPOUIsV0FBVyxDQUFDLElBQUksQ0FBQ3RILElBQUksRUFBRSxFQUFFLElBQUksQ0FBQ2xCLEtBQUssRUFBRSxDQUFDO0FBQ2pEO0lBRUEsU0FBUzJJLGdCQUFnQkEsQ0FBQy9FLFFBQVEsRUFBRTtNQUNoQyxJQUFJLElBQUksQ0FBQ3NHLGlCQUFpQixFQUFFO1FBQ3hCLElBQUksQ0FBQzFXLFVBQVUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEVBQUU7QUFDbkMrVyxVQUFBQSxrQkFBa0IsQ0FBQzN5QixJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2pDO1FBQ0EsSUFBSWdzQixRQUFRLEVBQUU7VUFDVixPQUFPLElBQUksQ0FBQzRHLHVCQUF1QjtBQUN2QyxTQUFDLE1BQU07VUFDSCxPQUFPLElBQUksQ0FBQ0MsaUJBQWlCO0FBQ2pDO0FBQ0osT0FBQyxNQUFNO1FBQ0gsSUFBSSxDQUFDalgsVUFBVSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO1VBQ3hDLElBQUksQ0FBQ2lYLGlCQUFpQixHQUFHdkIsdUJBQXVCO0FBQ3BEO0FBQ0EsUUFBQSxPQUFPLElBQUksQ0FBQ3NCLHVCQUF1QixJQUFJNUcsUUFBUSxHQUN6QyxJQUFJLENBQUM0Ryx1QkFBdUIsR0FDNUIsSUFBSSxDQUFDQyxpQkFBaUI7QUFDaEM7QUFDSjtJQUVBLFNBQVM3QixXQUFXQSxDQUFDaEYsUUFBUSxFQUFFO01BQzNCLElBQUksSUFBSSxDQUFDc0csaUJBQWlCLEVBQUU7UUFDeEIsSUFBSSxDQUFDMVcsVUFBVSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRTtBQUNuQytXLFVBQUFBLGtCQUFrQixDQUFDM3lCLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDakM7UUFDQSxJQUFJZ3NCLFFBQVEsRUFBRTtVQUNWLE9BQU8sSUFBSSxDQUFDOEcsa0JBQWtCO0FBQ2xDLFNBQUMsTUFBTTtVQUNILE9BQU8sSUFBSSxDQUFDQyxZQUFZO0FBQzVCO0FBQ0osT0FBQyxNQUFNO1FBQ0gsSUFBSSxDQUFDblgsVUFBVSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRTtVQUNuQyxJQUFJLENBQUNtWCxZQUFZLEdBQUd4QixrQkFBa0I7QUFDMUM7QUFDQSxRQUFBLE9BQU8sSUFBSSxDQUFDdUIsa0JBQWtCLElBQUk5RyxRQUFRLEdBQ3BDLElBQUksQ0FBQzhHLGtCQUFrQixHQUN2QixJQUFJLENBQUNDLFlBQVk7QUFDM0I7QUFDSjtJQUVBLFNBQVNKLGtCQUFrQkEsR0FBRztBQUMxQixNQUFBLFNBQVNLLFNBQVNBLENBQUMxMEIsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7QUFDckIsUUFBQSxPQUFPQSxDQUFDLENBQUNPLE1BQU0sR0FBR1IsQ0FBQyxDQUFDUSxNQUFNO0FBQzlCO01BRUEsSUFBSW0wQixXQUFXLEdBQUcsRUFBRTtRQUNoQkMsVUFBVSxHQUFHLEVBQUU7UUFDZkMsV0FBVyxHQUFHLEVBQUU7UUFDaEJoMEIsQ0FBQztRQUNEa2pCLEdBQUc7UUFDSCtRLE1BQU07UUFDTkMsS0FBSztNQUNULEtBQUtsMEIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLEVBQUUsRUFBRUEsQ0FBQyxFQUFFLEVBQUU7QUFDckI7UUFDQWtqQixHQUFHLEdBQUc1RixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUV0ZCxDQUFDLENBQUMsQ0FBQztRQUMxQmkwQixNQUFNLEdBQUdqSCxXQUFXLENBQUMsSUFBSSxDQUFDMkUsV0FBVyxDQUFDek8sR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9DZ1IsS0FBSyxHQUFHbEgsV0FBVyxDQUFDLElBQUksQ0FBQ2hFLE1BQU0sQ0FBQzlGLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6QzRRLFFBQUFBLFdBQVcsQ0FBQ3RzQixJQUFJLENBQUN5c0IsTUFBTSxDQUFDO0FBQ3hCRixRQUFBQSxVQUFVLENBQUN2c0IsSUFBSSxDQUFDMHNCLEtBQUssQ0FBQztBQUN0QkYsUUFBQUEsV0FBVyxDQUFDeHNCLElBQUksQ0FBQzBzQixLQUFLLENBQUM7QUFDdkJGLFFBQUFBLFdBQVcsQ0FBQ3hzQixJQUFJLENBQUN5c0IsTUFBTSxDQUFDO0FBQzVCO0FBQ0E7QUFDQTtBQUNBSCxNQUFBQSxXQUFXLENBQUMvMEIsSUFBSSxDQUFDODBCLFNBQVMsQ0FBQztBQUMzQkUsTUFBQUEsVUFBVSxDQUFDaDFCLElBQUksQ0FBQzgwQixTQUFTLENBQUM7QUFDMUJHLE1BQUFBLFdBQVcsQ0FBQ2oxQixJQUFJLENBQUM4MEIsU0FBUyxDQUFDO0FBRTNCLE1BQUEsSUFBSSxDQUFDRCxZQUFZLEdBQUcsSUFBSTFSLE1BQU0sQ0FBQyxJQUFJLEdBQUc4UixXQUFXLENBQUN2UyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUN2RSxNQUFBLElBQUksQ0FBQ2lTLGlCQUFpQixHQUFHLElBQUksQ0FBQ0UsWUFBWTtBQUMxQyxNQUFBLElBQUksQ0FBQ0Qsa0JBQWtCLEdBQUcsSUFBSXpSLE1BQU0sQ0FDaEMsSUFBSSxHQUFHNlIsVUFBVSxDQUFDdFMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFDakMsR0FDSixDQUFDO0FBQ0QsTUFBQSxJQUFJLENBQUNnUyx1QkFBdUIsR0FBRyxJQUFJdlIsTUFBTSxDQUNyQyxJQUFJLEdBQUc0UixXQUFXLENBQUNyUyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUNsQyxHQUNKLENBQUM7QUFDTDtBQUVBLElBQUEsU0FBUzBTLFVBQVVBLENBQUNsTixDQUFDLEVBQUVqWSxDQUFDLEVBQUUyWCxDQUFDLEVBQUVGLENBQUMsRUFBRU0sQ0FBQyxFQUFFVCxDQUFDLEVBQUVxQyxFQUFFLEVBQUU7QUFDdEM7QUFDQTtBQUNBLE1BQUEsSUFBSWQsSUFBSTtBQUNSO01BQ0EsSUFBSVosQ0FBQyxHQUFHLEdBQUcsSUFBSUEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuQjtRQUNBWSxJQUFJLEdBQUcsSUFBSWpzQixJQUFJLENBQUNxckIsQ0FBQyxHQUFHLEdBQUcsRUFBRWpZLENBQUMsRUFBRTJYLENBQUMsRUFBRUYsQ0FBQyxFQUFFTSxDQUFDLEVBQUVULENBQUMsRUFBRXFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJaUYsUUFBUSxDQUFDL0YsSUFBSSxDQUFDeUksV0FBVyxFQUFFLENBQUMsRUFBRTtBQUM5QnpJLFVBQUFBLElBQUksQ0FBQ3FKLFdBQVcsQ0FBQ2pLLENBQUMsQ0FBQztBQUN2QjtBQUNKLE9BQUMsTUFBTTtBQUNIWSxRQUFBQSxJQUFJLEdBQUcsSUFBSWpzQixJQUFJLENBQUNxckIsQ0FBQyxFQUFFalksQ0FBQyxFQUFFMlgsQ0FBQyxFQUFFRixDQUFDLEVBQUVNLENBQUMsRUFBRVQsQ0FBQyxFQUFFcUMsRUFBRSxDQUFDO0FBQ3pDO0FBRUEsTUFBQSxPQUFPZCxJQUFJO0FBQ2Y7SUFFQSxTQUFTdU0sYUFBYUEsQ0FBQ25OLENBQUMsRUFBRTtNQUN0QixJQUFJWSxJQUFJLEVBQUVoZ0IsSUFBSTtBQUNkO01BQ0EsSUFBSW9mLENBQUMsR0FBRyxHQUFHLElBQUlBLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDbkJwZixJQUFJLEdBQUcxSCxLQUFLLENBQUNNLFNBQVMsQ0FBQ3NCLEtBQUssQ0FBQ2xCLElBQUksQ0FBQ3liLFNBQVMsQ0FBQztBQUM1QztBQUNBelUsUUFBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHb2YsQ0FBQyxHQUFHLEdBQUc7QUFDakJZLFFBQUFBLElBQUksR0FBRyxJQUFJanNCLElBQUksQ0FBQ0EsSUFBSSxDQUFDeTRCLEdBQUcsQ0FBQ2hZLEtBQUssQ0FBQyxJQUFJLEVBQUV4VSxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJK2xCLFFBQVEsQ0FBQy9GLElBQUksQ0FBQ3dJLGNBQWMsRUFBRSxDQUFDLEVBQUU7QUFDakN4SSxVQUFBQSxJQUFJLENBQUNvSixjQUFjLENBQUNoSyxDQUFDLENBQUM7QUFDMUI7QUFDSixPQUFDLE1BQU07QUFDSFksUUFBQUEsSUFBSSxHQUFHLElBQUlqc0IsSUFBSSxDQUFDQSxJQUFJLENBQUN5NEIsR0FBRyxDQUFDaFksS0FBSyxDQUFDLElBQUksRUFBRUMsU0FBUyxDQUFDLENBQUM7QUFDcEQ7QUFFQSxNQUFBLE9BQU91TCxJQUFJO0FBQ2Y7O0FBRUE7SUFDQSxTQUFTeU0sZUFBZUEsQ0FBQ25LLElBQUksRUFBRW9LLEdBQUcsRUFBRUMsR0FBRyxFQUFFO01BQ3JDO0FBQUk7QUFDQUMsUUFBQUEsR0FBRyxHQUFHLENBQUMsR0FBR0YsR0FBRyxHQUFHQyxHQUFHO0FBQ25CO0FBQ0FFLFFBQUFBLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBR04sYUFBYSxDQUFDakssSUFBSSxFQUFFLENBQUMsRUFBRXNLLEdBQUcsQ0FBQyxDQUFDeEUsU0FBUyxFQUFFLEdBQUdzRSxHQUFHLElBQUksQ0FBQztBQUVuRSxNQUFBLE9BQU8sQ0FBQ0csS0FBSyxHQUFHRCxHQUFHLEdBQUcsQ0FBQztBQUMzQjs7QUFFQTtJQUNBLFNBQVNFLGtCQUFrQkEsQ0FBQ3hLLElBQUksRUFBRUwsSUFBSSxFQUFFNUIsT0FBTyxFQUFFcU0sR0FBRyxFQUFFQyxHQUFHLEVBQUU7TUFDdkQsSUFBSUksWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHMU0sT0FBTyxHQUFHcU0sR0FBRyxJQUFJLENBQUM7UUFDdENNLFVBQVUsR0FBR1AsZUFBZSxDQUFDbkssSUFBSSxFQUFFb0ssR0FBRyxFQUFFQyxHQUFHLENBQUM7QUFDNUMzSixRQUFBQSxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSWYsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHOEssWUFBWSxHQUFHQyxVQUFVO1FBQzFEQyxPQUFPO1FBQ1BDLFlBQVk7TUFFaEIsSUFBSWxLLFNBQVMsSUFBSSxDQUFDLEVBQUU7UUFDaEJpSyxPQUFPLEdBQUczSyxJQUFJLEdBQUcsQ0FBQztBQUNsQjRLLFFBQUFBLFlBQVksR0FBRy9GLFVBQVUsQ0FBQzhGLE9BQU8sQ0FBQyxHQUFHakssU0FBUztPQUNqRCxNQUFNLElBQUlBLFNBQVMsR0FBR21FLFVBQVUsQ0FBQzdFLElBQUksQ0FBQyxFQUFFO1FBQ3JDMkssT0FBTyxHQUFHM0ssSUFBSSxHQUFHLENBQUM7QUFDbEI0SyxRQUFBQSxZQUFZLEdBQUdsSyxTQUFTLEdBQUdtRSxVQUFVLENBQUM3RSxJQUFJLENBQUM7QUFDL0MsT0FBQyxNQUFNO1FBQ0gySyxPQUFPLEdBQUczSyxJQUFJO1FBQ2Q0SyxZQUFZLEdBQUdsSyxTQUFTO0FBQzVCO01BRUEsT0FBTztRQUNIVixJQUFJLEVBQUUySyxPQUFPO0FBQ2JqSyxRQUFBQSxTQUFTLEVBQUVrSztPQUNkO0FBQ0w7SUFFQSxTQUFTQyxVQUFVQSxDQUFDOVIsR0FBRyxFQUFFcVIsR0FBRyxFQUFFQyxHQUFHLEVBQUU7QUFDL0IsTUFBQSxJQUFJSyxVQUFVLEdBQUdQLGVBQWUsQ0FBQ3BSLEdBQUcsQ0FBQ2lILElBQUksRUFBRSxFQUFFb0ssR0FBRyxFQUFFQyxHQUFHLENBQUM7QUFDbEQxSyxRQUFBQSxJQUFJLEdBQUdsdEIsSUFBSSxDQUFDNHdCLEtBQUssQ0FBQyxDQUFDdEssR0FBRyxDQUFDMkgsU0FBUyxFQUFFLEdBQUdnSyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDN0RJLE9BQU87UUFDUEgsT0FBTztNQUVYLElBQUloTCxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQ1ZnTCxRQUFBQSxPQUFPLEdBQUc1UixHQUFHLENBQUNpSCxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQ3hCOEssT0FBTyxHQUFHbkwsSUFBSSxHQUFHb0wsV0FBVyxDQUFDSixPQUFPLEVBQUVQLEdBQUcsRUFBRUMsR0FBRyxDQUFDO0FBQ25ELE9BQUMsTUFBTSxJQUFJMUssSUFBSSxHQUFHb0wsV0FBVyxDQUFDaFMsR0FBRyxDQUFDaUgsSUFBSSxFQUFFLEVBQUVvSyxHQUFHLEVBQUVDLEdBQUcsQ0FBQyxFQUFFO0FBQ2pEUyxRQUFBQSxPQUFPLEdBQUduTCxJQUFJLEdBQUdvTCxXQUFXLENBQUNoUyxHQUFHLENBQUNpSCxJQUFJLEVBQUUsRUFBRW9LLEdBQUcsRUFBRUMsR0FBRyxDQUFDO0FBQ2xETSxRQUFBQSxPQUFPLEdBQUc1UixHQUFHLENBQUNpSCxJQUFJLEVBQUUsR0FBRyxDQUFDO0FBQzVCLE9BQUMsTUFBTTtBQUNIMkssUUFBQUEsT0FBTyxHQUFHNVIsR0FBRyxDQUFDaUgsSUFBSSxFQUFFO1FBQ3BCOEssT0FBTyxHQUFHbkwsSUFBSTtBQUNsQjtNQUVBLE9BQU87UUFDSEEsSUFBSSxFQUFFbUwsT0FBTztBQUNiOUssUUFBQUEsSUFBSSxFQUFFMks7T0FDVDtBQUNMO0lBRUEsU0FBU0ksV0FBV0EsQ0FBQy9LLElBQUksRUFBRW9LLEdBQUcsRUFBRUMsR0FBRyxFQUFFO01BQ2pDLElBQUlLLFVBQVUsR0FBR1AsZUFBZSxDQUFDbkssSUFBSSxFQUFFb0ssR0FBRyxFQUFFQyxHQUFHLENBQUM7UUFDNUNXLGNBQWMsR0FBR2IsZUFBZSxDQUFDbkssSUFBSSxHQUFHLENBQUMsRUFBRW9LLEdBQUcsRUFBRUMsR0FBRyxDQUFDO01BQ3hELE9BQU8sQ0FBQ3hGLFVBQVUsQ0FBQzdFLElBQUksQ0FBQyxHQUFHMEssVUFBVSxHQUFHTSxjQUFjLElBQUksQ0FBQztBQUMvRDs7QUFFQTs7QUFFQWhSLElBQUFBLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUM1Q0EsSUFBQUEsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDOztBQUUvQzs7QUFFQXVJLElBQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUVmLFNBQVMsRUFBRVksc0JBQXNCLENBQUM7QUFDckRHLElBQUFBLGFBQWEsQ0FBQyxJQUFJLEVBQUVmLFNBQVMsRUFBRUosTUFBTSxDQUFDO0FBQ3RDbUIsSUFBQUEsYUFBYSxDQUFDLEdBQUcsRUFBRWYsU0FBUyxFQUFFWSxzQkFBc0IsQ0FBQztBQUNyREcsSUFBQUEsYUFBYSxDQUFDLElBQUksRUFBRWYsU0FBUyxFQUFFSixNQUFNLENBQUM7SUFFdEN5QyxpQkFBaUIsQ0FDYixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUN0QixVQUFVM3hCLEtBQUssRUFBRXl0QixJQUFJLEVBQUU3a0IsTUFBTSxFQUFFbWYsS0FBSyxFQUFFO0FBQ2xDMEYsTUFBQUEsSUFBSSxDQUFDMUYsS0FBSyxDQUFDTixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcySixLQUFLLENBQUNweEIsS0FBSyxDQUFDO0FBQzNDLEtBQ0osQ0FBQzs7QUFFRDs7QUFFQTs7SUFFQSxTQUFTKzRCLFVBQVVBLENBQUNsUyxHQUFHLEVBQUU7QUFDckIsTUFBQSxPQUFPOFIsVUFBVSxDQUFDOVIsR0FBRyxFQUFFLElBQUksQ0FBQ21TLEtBQUssQ0FBQ2QsR0FBRyxFQUFFLElBQUksQ0FBQ2MsS0FBSyxDQUFDYixHQUFHLENBQUMsQ0FBQzFLLElBQUk7QUFDL0Q7SUFFQSxJQUFJd0wsaUJBQWlCLEdBQUc7TUFDcEJmLEdBQUcsRUFBRSxDQUFDO0FBQUU7TUFDUkMsR0FBRyxFQUFFLENBQUM7S0FDVDtJQUVELFNBQVNlLG9CQUFvQkEsR0FBRztBQUM1QixNQUFBLE9BQU8sSUFBSSxDQUFDRixLQUFLLENBQUNkLEdBQUc7QUFDekI7SUFFQSxTQUFTaUIsb0JBQW9CQSxHQUFHO0FBQzVCLE1BQUEsT0FBTyxJQUFJLENBQUNILEtBQUssQ0FBQ2IsR0FBRztBQUN6Qjs7QUFFQTs7SUFFQSxTQUFTaUIsVUFBVUEsQ0FBQ3A1QixLQUFLLEVBQUU7TUFDdkIsSUFBSXl0QixJQUFJLEdBQUcsSUFBSSxDQUFDdEYsVUFBVSxFQUFFLENBQUNzRixJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3ZDLE1BQUEsT0FBT3p0QixLQUFLLElBQUksSUFBSSxHQUFHeXRCLElBQUksR0FBRyxJQUFJLENBQUNsdkIsR0FBRyxDQUFDLENBQUN5QixLQUFLLEdBQUd5dEIsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUM7QUFDbkU7SUFFQSxTQUFTNEwsYUFBYUEsQ0FBQ3I1QixLQUFLLEVBQUU7TUFDMUIsSUFBSXl0QixJQUFJLEdBQUdrTCxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ2xMLElBQUk7QUFDdEMsTUFBQSxPQUFPenRCLEtBQUssSUFBSSxJQUFJLEdBQUd5dEIsSUFBSSxHQUFHLElBQUksQ0FBQ2x2QixHQUFHLENBQUMsQ0FBQ3lCLEtBQUssR0FBR3l0QixJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQztBQUNuRTs7QUFFQTs7SUFFQTNGLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7SUFFbkNBLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVNUcsTUFBTSxFQUFFO01BQ3pDLE9BQU8sSUFBSSxDQUFDaUgsVUFBVSxFQUFFLENBQUNtUixXQUFXLENBQUMsSUFBSSxFQUFFcFksTUFBTSxDQUFDO0FBQ3RELEtBQUMsQ0FBQztJQUVGNEcsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVU1RyxNQUFNLEVBQUU7TUFDMUMsT0FBTyxJQUFJLENBQUNpSCxVQUFVLEVBQUUsQ0FBQ29SLGFBQWEsQ0FBQyxJQUFJLEVBQUVyWSxNQUFNLENBQUM7QUFDeEQsS0FBQyxDQUFDO0lBRUY0RyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVTVHLE1BQU0sRUFBRTtNQUMzQyxPQUFPLElBQUksQ0FBQ2lILFVBQVUsRUFBRSxDQUFDeUQsUUFBUSxDQUFDLElBQUksRUFBRTFLLE1BQU0sQ0FBQztBQUNuRCxLQUFDLENBQUM7SUFFRjRHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDcENBLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUM7O0FBRXZDOztBQUVBdUksSUFBQUEsYUFBYSxDQUFDLEdBQUcsRUFBRWYsU0FBUyxDQUFDO0FBQzdCZSxJQUFBQSxhQUFhLENBQUMsR0FBRyxFQUFFZixTQUFTLENBQUM7QUFDN0JlLElBQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUVmLFNBQVMsQ0FBQztJQUM3QmUsYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVRyxRQUFRLEVBQUVyUCxNQUFNLEVBQUU7QUFDNUMsTUFBQSxPQUFPQSxNQUFNLENBQUNxWSxnQkFBZ0IsQ0FBQ2hKLFFBQVEsQ0FBQztBQUM1QyxLQUFDLENBQUM7SUFDRkgsYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVRyxRQUFRLEVBQUVyUCxNQUFNLEVBQUU7QUFDN0MsTUFBQSxPQUFPQSxNQUFNLENBQUNzWSxrQkFBa0IsQ0FBQ2pKLFFBQVEsQ0FBQztBQUM5QyxLQUFDLENBQUM7SUFDRkgsYUFBYSxDQUFDLE1BQU0sRUFBRSxVQUFVRyxRQUFRLEVBQUVyUCxNQUFNLEVBQUU7QUFDOUMsTUFBQSxPQUFPQSxNQUFNLENBQUN1WSxhQUFhLENBQUNsSixRQUFRLENBQUM7QUFDekMsS0FBQyxDQUFDO0FBRUZtQixJQUFBQSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsVUFBVTN4QixLQUFLLEVBQUV5dEIsSUFBSSxFQUFFN2tCLE1BQU0sRUFBRW1mLEtBQUssRUFBRTtBQUMzRSxNQUFBLElBQUk4RCxPQUFPLEdBQUdqakIsTUFBTSxDQUFDNGIsT0FBTyxDQUFDbVYsYUFBYSxDQUFDMzVCLEtBQUssRUFBRStuQixLQUFLLEVBQUVuZixNQUFNLENBQUN3YSxPQUFPLENBQUM7QUFDeEU7TUFDQSxJQUFJeUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNqQjRCLElBQUksQ0FBQ25ELENBQUMsR0FBR3VCLE9BQU87QUFDcEIsT0FBQyxNQUFNO0FBQ0hySixRQUFBQSxlQUFlLENBQUM1WixNQUFNLENBQUMsQ0FBQ3VhLGNBQWMsR0FBR25qQixLQUFLO0FBQ2xEO0FBQ0osS0FBQyxDQUFDO0FBRUYyeEIsSUFBQUEsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUzeEIsS0FBSyxFQUFFeXRCLElBQUksRUFBRTdrQixNQUFNLEVBQUVtZixLQUFLLEVBQUU7TUFDckUwRixJQUFJLENBQUMxRixLQUFLLENBQUMsR0FBR3FKLEtBQUssQ0FBQ3B4QixLQUFLLENBQUM7QUFDOUIsS0FBQyxDQUFDOztBQUVGOztBQUVBLElBQUEsU0FBUzQ1QixZQUFZQSxDQUFDNTVCLEtBQUssRUFBRW1oQixNQUFNLEVBQUU7QUFDakMsTUFBQSxJQUFJLE9BQU9uaEIsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMzQixRQUFBLE9BQU9BLEtBQUs7QUFDaEI7QUFFQSxNQUFBLElBQUksQ0FBQ2tqQixLQUFLLENBQUNsakIsS0FBSyxDQUFDLEVBQUU7QUFDZixRQUFBLE9BQU8weUIsUUFBUSxDQUFDMXlCLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDOUI7QUFFQUEsTUFBQUEsS0FBSyxHQUFHbWhCLE1BQU0sQ0FBQ3dZLGFBQWEsQ0FBQzM1QixLQUFLLENBQUM7QUFDbkMsTUFBQSxJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDM0IsUUFBQSxPQUFPQSxLQUFLO0FBQ2hCO0FBRUEsTUFBQSxPQUFPLElBQUk7QUFDZjtBQUVBLElBQUEsU0FBUzY1QixlQUFlQSxDQUFDNzVCLEtBQUssRUFBRW1oQixNQUFNLEVBQUU7QUFDcEMsTUFBQSxJQUFJLE9BQU9uaEIsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUMzQixPQUFPbWhCLE1BQU0sQ0FBQ3dZLGFBQWEsQ0FBQzM1QixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUMvQztNQUNBLE9BQU9rakIsS0FBSyxDQUFDbGpCLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBR0EsS0FBSztBQUN0Qzs7QUFFQTtBQUNBLElBQUEsU0FBUzg1QixhQUFhQSxDQUFDQyxFQUFFLEVBQUU1RSxDQUFDLEVBQUU7TUFDMUIsT0FBTzRFLEVBQUUsQ0FBQ3IwQixLQUFLLENBQUN5dkIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDNkUsTUFBTSxDQUFDRCxFQUFFLENBQUNyMEIsS0FBSyxDQUFDLENBQUMsRUFBRXl2QixDQUFDLENBQUMsQ0FBQztBQUNoRDtJQUVBLElBQUk4RSxxQkFBcUIsR0FDakIsMERBQTBELENBQUN0RSxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3pFdUUsTUFBQUEsMEJBQTBCLEdBQUcsNkJBQTZCLENBQUN2RSxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3JFd0UsTUFBQUEsd0JBQXdCLEdBQUcsc0JBQXNCLENBQUN4RSxLQUFLLENBQUMsR0FBRyxDQUFDO01BQzVEeUUsb0JBQW9CLEdBQUduSyxTQUFTO01BQ2hDb0sseUJBQXlCLEdBQUdwSyxTQUFTO01BQ3JDcUssdUJBQXVCLEdBQUdySyxTQUFTO0FBRXZDLElBQUEsU0FBU3NLLGNBQWNBLENBQUM1bkIsQ0FBQyxFQUFFdU8sTUFBTSxFQUFFO0FBQy9CLE1BQUEsSUFBSTBLLFFBQVEsR0FBRzduQixPQUFPLENBQUMsSUFBSSxDQUFDeTJCLFNBQVMsQ0FBQyxHQUNoQyxJQUFJLENBQUNBLFNBQVMsR0FDZCxJQUFJLENBQUNBLFNBQVMsQ0FDVjduQixDQUFDLElBQUlBLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDNm5CLFNBQVMsQ0FBQ3RFLFFBQVEsQ0FBQ3JOLElBQUksQ0FBQzNILE1BQU0sQ0FBQyxHQUNqRCxRQUFRLEdBQ1IsWUFBWSxDQUNyQjtNQUNQLE9BQU92TyxDQUFDLEtBQUssSUFBSSxHQUNYbW5CLGFBQWEsQ0FBQ2xPLFFBQVEsRUFBRSxJQUFJLENBQUNvTixLQUFLLENBQUNkLEdBQUcsQ0FBQyxHQUN2Q3ZsQixDQUFDLEdBQ0NpWixRQUFRLENBQUNqWixDQUFDLENBQUMrWSxHQUFHLEVBQUUsQ0FBQyxHQUNqQkUsUUFBUTtBQUNwQjtJQUVBLFNBQVM2TyxtQkFBbUJBLENBQUM5bkIsQ0FBQyxFQUFFO0FBQzVCLE1BQUEsT0FBT0EsQ0FBQyxLQUFLLElBQUksR0FDWG1uQixhQUFhLENBQUMsSUFBSSxDQUFDWSxjQUFjLEVBQUUsSUFBSSxDQUFDMUIsS0FBSyxDQUFDZCxHQUFHLENBQUMsR0FDbER2bEIsQ0FBQyxHQUNDLElBQUksQ0FBQytuQixjQUFjLENBQUMvbkIsQ0FBQyxDQUFDK1ksR0FBRyxFQUFFLENBQUMsR0FDNUIsSUFBSSxDQUFDZ1AsY0FBYztBQUMvQjtJQUVBLFNBQVNDLGlCQUFpQkEsQ0FBQ2hvQixDQUFDLEVBQUU7QUFDMUIsTUFBQSxPQUFPQSxDQUFDLEtBQUssSUFBSSxHQUNYbW5CLGFBQWEsQ0FBQyxJQUFJLENBQUNjLFlBQVksRUFBRSxJQUFJLENBQUM1QixLQUFLLENBQUNkLEdBQUcsQ0FBQyxHQUNoRHZsQixDQUFDLEdBQ0MsSUFBSSxDQUFDaW9CLFlBQVksQ0FBQ2pvQixDQUFDLENBQUMrWSxHQUFHLEVBQUUsQ0FBQyxHQUMxQixJQUFJLENBQUNrUCxZQUFZO0FBQzdCO0lBRUEsU0FBU0MsbUJBQW1CQSxDQUFDQyxXQUFXLEVBQUU1WixNQUFNLEVBQUVFLE1BQU0sRUFBRTtBQUN0RCxNQUFBLElBQUl6ZCxDQUFDO1FBQ0Q0eUIsRUFBRTtRQUNGMVAsR0FBRztBQUNIMlAsUUFBQUEsR0FBRyxHQUFHc0UsV0FBVyxDQUFDckUsaUJBQWlCLEVBQUU7QUFDekMsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDc0UsY0FBYyxFQUFFO1FBQ3RCLElBQUksQ0FBQ0EsY0FBYyxHQUFHLEVBQUU7UUFDeEIsSUFBSSxDQUFDQyxtQkFBbUIsR0FBRyxFQUFFO1FBQzdCLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsRUFBRTtRQUUzQixLQUFLdDNCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRUEsQ0FBQyxFQUFFO0FBQ3BCa2pCLFVBQUFBLEdBQUcsR0FBRzVGLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDeUssR0FBRyxDQUFDL25CLENBQUMsQ0FBQztBQUNqQyxVQUFBLElBQUksQ0FBQ3MzQixpQkFBaUIsQ0FBQ3QzQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMyMUIsV0FBVyxDQUN4Q3pTLEdBQUcsRUFDSCxFQUNKLENBQUMsQ0FBQzRQLGlCQUFpQixFQUFFO0FBQ3JCLFVBQUEsSUFBSSxDQUFDdUUsbUJBQW1CLENBQUNyM0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDNDFCLGFBQWEsQ0FDNUMxUyxHQUFHLEVBQ0gsRUFDSixDQUFDLENBQUM0UCxpQkFBaUIsRUFBRTtBQUNyQixVQUFBLElBQUksQ0FBQ3NFLGNBQWMsQ0FBQ3AzQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNpb0IsUUFBUSxDQUFDL0UsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDNFAsaUJBQWlCLEVBQUU7QUFDdkU7QUFDSjtNQUVBLElBQUlyVixNQUFNLEVBQUU7UUFDUixJQUFJRixNQUFNLEtBQUssTUFBTSxFQUFFO1VBQ25CcVYsRUFBRSxHQUFHaGtCLE9BQU8sQ0FBQy9OLElBQUksQ0FBQyxJQUFJLENBQUN1MkIsY0FBYyxFQUFFdkUsR0FBRyxDQUFDO1VBQzNDLE9BQU9ELEVBQUUsS0FBSyxFQUFFLEdBQUdBLEVBQUUsR0FBRyxJQUFJO0FBQ2hDLFNBQUMsTUFBTSxJQUFJclYsTUFBTSxLQUFLLEtBQUssRUFBRTtVQUN6QnFWLEVBQUUsR0FBR2hrQixPQUFPLENBQUMvTixJQUFJLENBQUMsSUFBSSxDQUFDdzJCLG1CQUFtQixFQUFFeEUsR0FBRyxDQUFDO1VBQ2hELE9BQU9ELEVBQUUsS0FBSyxFQUFFLEdBQUdBLEVBQUUsR0FBRyxJQUFJO0FBQ2hDLFNBQUMsTUFBTTtVQUNIQSxFQUFFLEdBQUdoa0IsT0FBTyxDQUFDL04sSUFBSSxDQUFDLElBQUksQ0FBQ3kyQixpQkFBaUIsRUFBRXpFLEdBQUcsQ0FBQztVQUM5QyxPQUFPRCxFQUFFLEtBQUssRUFBRSxHQUFHQSxFQUFFLEdBQUcsSUFBSTtBQUNoQztBQUNKLE9BQUMsTUFBTTtRQUNILElBQUlyVixNQUFNLEtBQUssTUFBTSxFQUFFO1VBQ25CcVYsRUFBRSxHQUFHaGtCLE9BQU8sQ0FBQy9OLElBQUksQ0FBQyxJQUFJLENBQUN1MkIsY0FBYyxFQUFFdkUsR0FBRyxDQUFDO0FBQzNDLFVBQUEsSUFBSUQsRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUNYLFlBQUEsT0FBT0EsRUFBRTtBQUNiO1VBQ0FBLEVBQUUsR0FBR2hrQixPQUFPLENBQUMvTixJQUFJLENBQUMsSUFBSSxDQUFDdzJCLG1CQUFtQixFQUFFeEUsR0FBRyxDQUFDO0FBQ2hELFVBQUEsSUFBSUQsRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUNYLFlBQUEsT0FBT0EsRUFBRTtBQUNiO1VBQ0FBLEVBQUUsR0FBR2hrQixPQUFPLENBQUMvTixJQUFJLENBQUMsSUFBSSxDQUFDeTJCLGlCQUFpQixFQUFFekUsR0FBRyxDQUFDO1VBQzlDLE9BQU9ELEVBQUUsS0FBSyxFQUFFLEdBQUdBLEVBQUUsR0FBRyxJQUFJO0FBQ2hDLFNBQUMsTUFBTSxJQUFJclYsTUFBTSxLQUFLLEtBQUssRUFBRTtVQUN6QnFWLEVBQUUsR0FBR2hrQixPQUFPLENBQUMvTixJQUFJLENBQUMsSUFBSSxDQUFDdzJCLG1CQUFtQixFQUFFeEUsR0FBRyxDQUFDO0FBQ2hELFVBQUEsSUFBSUQsRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUNYLFlBQUEsT0FBT0EsRUFBRTtBQUNiO1VBQ0FBLEVBQUUsR0FBR2hrQixPQUFPLENBQUMvTixJQUFJLENBQUMsSUFBSSxDQUFDdTJCLGNBQWMsRUFBRXZFLEdBQUcsQ0FBQztBQUMzQyxVQUFBLElBQUlELEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxZQUFBLE9BQU9BLEVBQUU7QUFDYjtVQUNBQSxFQUFFLEdBQUdoa0IsT0FBTyxDQUFDL04sSUFBSSxDQUFDLElBQUksQ0FBQ3kyQixpQkFBaUIsRUFBRXpFLEdBQUcsQ0FBQztVQUM5QyxPQUFPRCxFQUFFLEtBQUssRUFBRSxHQUFHQSxFQUFFLEdBQUcsSUFBSTtBQUNoQyxTQUFDLE1BQU07VUFDSEEsRUFBRSxHQUFHaGtCLE9BQU8sQ0FBQy9OLElBQUksQ0FBQyxJQUFJLENBQUN5MkIsaUJBQWlCLEVBQUV6RSxHQUFHLENBQUM7QUFDOUMsVUFBQSxJQUFJRCxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ1gsWUFBQSxPQUFPQSxFQUFFO0FBQ2I7VUFDQUEsRUFBRSxHQUFHaGtCLE9BQU8sQ0FBQy9OLElBQUksQ0FBQyxJQUFJLENBQUN1MkIsY0FBYyxFQUFFdkUsR0FBRyxDQUFDO0FBQzNDLFVBQUEsSUFBSUQsRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUNYLFlBQUEsT0FBT0EsRUFBRTtBQUNiO1VBQ0FBLEVBQUUsR0FBR2hrQixPQUFPLENBQUMvTixJQUFJLENBQUMsSUFBSSxDQUFDdzJCLG1CQUFtQixFQUFFeEUsR0FBRyxDQUFDO1VBQ2hELE9BQU9ELEVBQUUsS0FBSyxFQUFFLEdBQUdBLEVBQUUsR0FBRyxJQUFJO0FBQ2hDO0FBQ0o7QUFDSjtJQUVBLFNBQVMyRSxtQkFBbUJBLENBQUNKLFdBQVcsRUFBRTVaLE1BQU0sRUFBRUUsTUFBTSxFQUFFO0FBQ3RELE1BQUEsSUFBSXpkLENBQUMsRUFBRWtqQixHQUFHLEVBQUV5SixLQUFLO01BRWpCLElBQUksSUFBSSxDQUFDNkssbUJBQW1CLEVBQUU7UUFDMUIsT0FBT04sbUJBQW1CLENBQUNyMkIsSUFBSSxDQUFDLElBQUksRUFBRXMyQixXQUFXLEVBQUU1WixNQUFNLEVBQUVFLE1BQU0sQ0FBQztBQUN0RTtBQUVBLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQzJaLGNBQWMsRUFBRTtRQUN0QixJQUFJLENBQUNBLGNBQWMsR0FBRyxFQUFFO1FBQ3hCLElBQUksQ0FBQ0UsaUJBQWlCLEdBQUcsRUFBRTtRQUMzQixJQUFJLENBQUNELG1CQUFtQixHQUFHLEVBQUU7UUFDN0IsSUFBSSxDQUFDSSxrQkFBa0IsR0FBRyxFQUFFO0FBQ2hDO01BRUEsS0FBS3ozQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEVBQUUsRUFBRTtBQUNwQjs7QUFFQWtqQixRQUFBQSxHQUFHLEdBQUc1RixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ3lLLEdBQUcsQ0FBQy9uQixDQUFDLENBQUM7UUFDakMsSUFBSXlkLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQ2dhLGtCQUFrQixDQUFDejNCLENBQUMsQ0FBQyxFQUFFO0FBQ3ZDLFVBQUEsSUFBSSxDQUFDeTNCLGtCQUFrQixDQUFDejNCLENBQUMsQ0FBQyxHQUFHLElBQUlraUIsTUFBTSxDQUNuQyxHQUFHLEdBQUcsSUFBSSxDQUFDK0YsUUFBUSxDQUFDL0UsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDeUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQ3ZELEdBQ0osQ0FBQztBQUNELFVBQUEsSUFBSSxDQUFDMFMsbUJBQW1CLENBQUNyM0IsQ0FBQyxDQUFDLEdBQUcsSUFBSWtpQixNQUFNLENBQ3BDLEdBQUcsR0FBRyxJQUFJLENBQUMwVCxhQUFhLENBQUMxUyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUN5QixPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFDNUQsR0FDSixDQUFDO0FBQ0QsVUFBQSxJQUFJLENBQUMyUyxpQkFBaUIsQ0FBQ3QzQixDQUFDLENBQUMsR0FBRyxJQUFJa2lCLE1BQU0sQ0FDbEMsR0FBRyxHQUFHLElBQUksQ0FBQ3lULFdBQVcsQ0FBQ3pTLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQ3lCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUMxRCxHQUNKLENBQUM7QUFDTDtRQUNBLElBQUksQ0FBQyxJQUFJLENBQUN5UyxjQUFjLENBQUNwM0IsQ0FBQyxDQUFDLEVBQUU7QUFDekIyc0IsVUFBQUEsS0FBSyxHQUNELEdBQUcsR0FDSCxJQUFJLENBQUMxRSxRQUFRLENBQUMvRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQ3RCLElBQUksR0FDSixJQUFJLENBQUMwUyxhQUFhLENBQUMxUyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQzNCLElBQUksR0FDSixJQUFJLENBQUN5UyxXQUFXLENBQUN6UyxHQUFHLEVBQUUsRUFBRSxDQUFDO1VBQzdCLElBQUksQ0FBQ2tVLGNBQWMsQ0FBQ3AzQixDQUFDLENBQUMsR0FBRyxJQUFJa2lCLE1BQU0sQ0FBQ3lLLEtBQUssQ0FBQ2hJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ3BFO0FBQ0E7QUFDQSxRQUFBLElBQ0lsSCxNQUFNLElBQ05GLE1BQU0sS0FBSyxNQUFNLElBQ2pCLElBQUksQ0FBQ2thLGtCQUFrQixDQUFDejNCLENBQUMsQ0FBQyxDQUFDa2xCLElBQUksQ0FBQ2lTLFdBQVcsQ0FBQyxFQUM5QztBQUNFLFVBQUEsT0FBT24zQixDQUFDO0FBQ1osU0FBQyxNQUFNLElBQ0h5ZCxNQUFNLElBQ05GLE1BQU0sS0FBSyxLQUFLLElBQ2hCLElBQUksQ0FBQzhaLG1CQUFtQixDQUFDcjNCLENBQUMsQ0FBQyxDQUFDa2xCLElBQUksQ0FBQ2lTLFdBQVcsQ0FBQyxFQUMvQztBQUNFLFVBQUEsT0FBT24zQixDQUFDO0FBQ1osU0FBQyxNQUFNLElBQ0h5ZCxNQUFNLElBQ05GLE1BQU0sS0FBSyxJQUFJLElBQ2YsSUFBSSxDQUFDK1osaUJBQWlCLENBQUN0M0IsQ0FBQyxDQUFDLENBQUNrbEIsSUFBSSxDQUFDaVMsV0FBVyxDQUFDLEVBQzdDO0FBQ0UsVUFBQSxPQUFPbjNCLENBQUM7QUFDWixTQUFDLE1BQU0sSUFBSSxDQUFDeWQsTUFBTSxJQUFJLElBQUksQ0FBQzJaLGNBQWMsQ0FBQ3AzQixDQUFDLENBQUMsQ0FBQ2tsQixJQUFJLENBQUNpUyxXQUFXLENBQUMsRUFBRTtBQUM1RCxVQUFBLE9BQU9uM0IsQ0FBQztBQUNaO0FBQ0o7QUFDSjs7QUFFQTs7SUFFQSxTQUFTMDNCLGVBQWVBLENBQUNyN0IsS0FBSyxFQUFFO0FBQzVCLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQzZpQixPQUFPLEVBQUUsRUFBRTtBQUNqQixRQUFBLE9BQU83aUIsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcwakIsR0FBRztBQUNyQztNQUVBLElBQUlnSSxHQUFHLEdBQUczYyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztNQUMxQixJQUFJL08sS0FBSyxJQUFJLElBQUksRUFBRTtRQUNmQSxLQUFLLEdBQUc0NUIsWUFBWSxDQUFDNTVCLEtBQUssRUFBRSxJQUFJLENBQUNtb0IsVUFBVSxFQUFFLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUM1cEIsR0FBRyxDQUFDeUIsS0FBSyxHQUFHMHJCLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDckMsT0FBQyxNQUFNO0FBQ0gsUUFBQSxPQUFPQSxHQUFHO0FBQ2Q7QUFDSjtJQUVBLFNBQVM0UCxxQkFBcUJBLENBQUN0N0IsS0FBSyxFQUFFO0FBQ2xDLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQzZpQixPQUFPLEVBQUUsRUFBRTtBQUNqQixRQUFBLE9BQU83aUIsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcwakIsR0FBRztBQUNyQztNQUNBLElBQUltSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUNILEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUN2RCxVQUFVLEVBQUUsQ0FBQzZRLEtBQUssQ0FBQ2QsR0FBRyxJQUFJLENBQUM7QUFDaEUsTUFBQSxPQUFPbDRCLEtBQUssSUFBSSxJQUFJLEdBQUc2ckIsT0FBTyxHQUFHLElBQUksQ0FBQ3R0QixHQUFHLENBQUN5QixLQUFLLEdBQUc2ckIsT0FBTyxFQUFFLEdBQUcsQ0FBQztBQUNuRTtJQUVBLFNBQVMwUCxrQkFBa0JBLENBQUN2N0IsS0FBSyxFQUFFO0FBQy9CLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQzZpQixPQUFPLEVBQUUsRUFBRTtBQUNqQixRQUFBLE9BQU83aUIsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcwakIsR0FBRztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7O01BRUEsSUFBSTFqQixLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2YsSUFBSTZyQixPQUFPLEdBQUdnTyxlQUFlLENBQUM3NUIsS0FBSyxFQUFFLElBQUksQ0FBQ21vQixVQUFVLEVBQUUsQ0FBQztBQUN2RCxRQUFBLE9BQU8sSUFBSSxDQUFDdUQsR0FBRyxDQUFDLElBQUksQ0FBQ0EsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHRyxPQUFPLEdBQUdBLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDM0QsT0FBQyxNQUFNO0FBQ0gsUUFBQSxPQUFPLElBQUksQ0FBQ0gsR0FBRyxFQUFFLElBQUksQ0FBQztBQUMxQjtBQUNKO0lBRUEsU0FBU2dPLGFBQWFBLENBQUNsSixRQUFRLEVBQUU7TUFDN0IsSUFBSSxJQUFJLENBQUMySyxtQkFBbUIsRUFBRTtRQUMxQixJQUFJLENBQUMvYSxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFDckNvYixVQUFBQSxvQkFBb0IsQ0FBQ2gzQixJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ25DO1FBQ0EsSUFBSWdzQixRQUFRLEVBQUU7VUFDVixPQUFPLElBQUksQ0FBQ2lMLG9CQUFvQjtBQUNwQyxTQUFDLE1BQU07VUFDSCxPQUFPLElBQUksQ0FBQ0MsY0FBYztBQUM5QjtBQUNKLE9BQUMsTUFBTTtRQUNILElBQUksQ0FBQ3RiLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtVQUNyQyxJQUFJLENBQUNzYixjQUFjLEdBQUd0QixvQkFBb0I7QUFDOUM7QUFDQSxRQUFBLE9BQU8sSUFBSSxDQUFDcUIsb0JBQW9CLElBQUlqTCxRQUFRLEdBQ3RDLElBQUksQ0FBQ2lMLG9CQUFvQixHQUN6QixJQUFJLENBQUNDLGNBQWM7QUFDN0I7QUFDSjtJQUVBLFNBQVNqQyxrQkFBa0JBLENBQUNqSixRQUFRLEVBQUU7TUFDbEMsSUFBSSxJQUFJLENBQUMySyxtQkFBbUIsRUFBRTtRQUMxQixJQUFJLENBQUMvYSxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFDckNvYixVQUFBQSxvQkFBb0IsQ0FBQ2gzQixJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ25DO1FBQ0EsSUFBSWdzQixRQUFRLEVBQUU7VUFDVixPQUFPLElBQUksQ0FBQ21MLHlCQUF5QjtBQUN6QyxTQUFDLE1BQU07VUFDSCxPQUFPLElBQUksQ0FBQ0MsbUJBQW1CO0FBQ25DO0FBQ0osT0FBQyxNQUFNO1FBQ0gsSUFBSSxDQUFDeGIsVUFBVSxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxFQUFFO1VBQzFDLElBQUksQ0FBQ3diLG1CQUFtQixHQUFHdkIseUJBQXlCO0FBQ3hEO0FBQ0EsUUFBQSxPQUFPLElBQUksQ0FBQ3NCLHlCQUF5QixJQUFJbkwsUUFBUSxHQUMzQyxJQUFJLENBQUNtTCx5QkFBeUIsR0FDOUIsSUFBSSxDQUFDQyxtQkFBbUI7QUFDbEM7QUFDSjtJQUVBLFNBQVNwQyxnQkFBZ0JBLENBQUNoSixRQUFRLEVBQUU7TUFDaEMsSUFBSSxJQUFJLENBQUMySyxtQkFBbUIsRUFBRTtRQUMxQixJQUFJLENBQUMvYSxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFDckNvYixVQUFBQSxvQkFBb0IsQ0FBQ2gzQixJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ25DO1FBQ0EsSUFBSWdzQixRQUFRLEVBQUU7VUFDVixPQUFPLElBQUksQ0FBQ3FMLHVCQUF1QjtBQUN2QyxTQUFDLE1BQU07VUFDSCxPQUFPLElBQUksQ0FBQ0MsaUJBQWlCO0FBQ2pDO0FBQ0osT0FBQyxNQUFNO1FBQ0gsSUFBSSxDQUFDMWIsVUFBVSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO1VBQ3hDLElBQUksQ0FBQzBiLGlCQUFpQixHQUFHeEIsdUJBQXVCO0FBQ3BEO0FBQ0EsUUFBQSxPQUFPLElBQUksQ0FBQ3VCLHVCQUF1QixJQUFJckwsUUFBUSxHQUN6QyxJQUFJLENBQUNxTCx1QkFBdUIsR0FDNUIsSUFBSSxDQUFDQyxpQkFBaUI7QUFDaEM7QUFDSjtJQUVBLFNBQVNOLG9CQUFvQkEsR0FBRztBQUM1QixNQUFBLFNBQVNoRSxTQUFTQSxDQUFDMTBCLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0FBQ3JCLFFBQUEsT0FBT0EsQ0FBQyxDQUFDTyxNQUFNLEdBQUdSLENBQUMsQ0FBQ1EsTUFBTTtBQUM5QjtNQUVBLElBQUl5NEIsU0FBUyxHQUFHLEVBQUU7UUFDZHRFLFdBQVcsR0FBRyxFQUFFO1FBQ2hCQyxVQUFVLEdBQUcsRUFBRTtRQUNmQyxXQUFXLEdBQUcsRUFBRTtRQUNoQmgwQixDQUFDO1FBQ0RrakIsR0FBRztRQUNIbVYsSUFBSTtRQUNKQyxNQUFNO1FBQ05DLEtBQUs7TUFDVCxLQUFLdjRCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsRUFBRSxFQUFFO0FBQ3BCO0FBQ0FrakIsUUFBQUEsR0FBRyxHQUFHNUYsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUN5SyxHQUFHLENBQUMvbkIsQ0FBQyxDQUFDO1FBQ2pDcTRCLElBQUksR0FBR3JMLFdBQVcsQ0FBQyxJQUFJLENBQUMySSxXQUFXLENBQUN6UyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0NvVixNQUFNLEdBQUd0TCxXQUFXLENBQUMsSUFBSSxDQUFDNEksYUFBYSxDQUFDMVMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pEcVYsS0FBSyxHQUFHdkwsV0FBVyxDQUFDLElBQUksQ0FBQy9FLFFBQVEsQ0FBQy9FLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzQ2tWLFFBQUFBLFNBQVMsQ0FBQzV3QixJQUFJLENBQUM2d0IsSUFBSSxDQUFDO0FBQ3BCdkUsUUFBQUEsV0FBVyxDQUFDdHNCLElBQUksQ0FBQzh3QixNQUFNLENBQUM7QUFDeEJ2RSxRQUFBQSxVQUFVLENBQUN2c0IsSUFBSSxDQUFDK3dCLEtBQUssQ0FBQztBQUN0QnZFLFFBQUFBLFdBQVcsQ0FBQ3hzQixJQUFJLENBQUM2d0IsSUFBSSxDQUFDO0FBQ3RCckUsUUFBQUEsV0FBVyxDQUFDeHNCLElBQUksQ0FBQzh3QixNQUFNLENBQUM7QUFDeEJ0RSxRQUFBQSxXQUFXLENBQUN4c0IsSUFBSSxDQUFDK3dCLEtBQUssQ0FBQztBQUMzQjtBQUNBO0FBQ0E7QUFDQUgsTUFBQUEsU0FBUyxDQUFDcjVCLElBQUksQ0FBQzgwQixTQUFTLENBQUM7QUFDekJDLE1BQUFBLFdBQVcsQ0FBQy8wQixJQUFJLENBQUM4MEIsU0FBUyxDQUFDO0FBQzNCRSxNQUFBQSxVQUFVLENBQUNoMUIsSUFBSSxDQUFDODBCLFNBQVMsQ0FBQztBQUMxQkcsTUFBQUEsV0FBVyxDQUFDajFCLElBQUksQ0FBQzgwQixTQUFTLENBQUM7QUFFM0IsTUFBQSxJQUFJLENBQUNrRSxjQUFjLEdBQUcsSUFBSTdWLE1BQU0sQ0FBQyxJQUFJLEdBQUc4UixXQUFXLENBQUN2UyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUN6RSxNQUFBLElBQUksQ0FBQ3dXLG1CQUFtQixHQUFHLElBQUksQ0FBQ0YsY0FBYztBQUM5QyxNQUFBLElBQUksQ0FBQ0ksaUJBQWlCLEdBQUcsSUFBSSxDQUFDSixjQUFjO0FBRTVDLE1BQUEsSUFBSSxDQUFDRCxvQkFBb0IsR0FBRyxJQUFJNVYsTUFBTSxDQUNsQyxJQUFJLEdBQUc2UixVQUFVLENBQUN0UyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUNqQyxHQUNKLENBQUM7QUFDRCxNQUFBLElBQUksQ0FBQ3VXLHlCQUF5QixHQUFHLElBQUk5VixNQUFNLENBQ3ZDLElBQUksR0FBRzRSLFdBQVcsQ0FBQ3JTLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQ2xDLEdBQ0osQ0FBQztBQUNELE1BQUEsSUFBSSxDQUFDeVcsdUJBQXVCLEdBQUcsSUFBSWhXLE1BQU0sQ0FDckMsSUFBSSxHQUFHa1csU0FBUyxDQUFDM1csSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFDaEMsR0FDSixDQUFDO0FBQ0w7O0FBRUE7O0lBRUEsU0FBUytXLE9BQU9BLEdBQUc7TUFDZixPQUFPLElBQUksQ0FBQy9QLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQ2xDO0lBRUEsU0FBU2dRLE9BQU9BLEdBQUc7QUFDZixNQUFBLE9BQU8sSUFBSSxDQUFDaFEsS0FBSyxFQUFFLElBQUksRUFBRTtBQUM3QjtBQUVBdEUsSUFBQUEsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQ3pDQSxJQUFBQSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRXFVLE9BQU8sQ0FBQztBQUMxQ3JVLElBQUFBLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFc1UsT0FBTyxDQUFDO0lBRTFDdFUsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVk7QUFDcEMsTUFBQSxPQUFPLEVBQUUsR0FBR3FVLE9BQU8sQ0FBQ25jLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBR2dILFFBQVEsQ0FBQyxJQUFJLENBQUN5RixPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakUsS0FBQyxDQUFDO0lBRUYzRSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtBQUN0QyxNQUFBLE9BQ0ksRUFBRSxHQUNGcVUsT0FBTyxDQUFDbmMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUNuQmdILFFBQVEsQ0FBQyxJQUFJLENBQUN5RixPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FDM0J6RixRQUFRLENBQUMsSUFBSSxDQUFDZ0csT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRW5DLEtBQUMsQ0FBQztJQUVGbEYsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVk7QUFDcEMsTUFBQSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUNzRSxLQUFLLEVBQUUsR0FBR3BGLFFBQVEsQ0FBQyxJQUFJLENBQUN5RixPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUQsS0FBQyxDQUFDO0lBRUYzRSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtNQUN0QyxPQUNJLEVBQUUsR0FDRixJQUFJLENBQUNzRSxLQUFLLEVBQUUsR0FDWnBGLFFBQVEsQ0FBQyxJQUFJLENBQUN5RixPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FDM0J6RixRQUFRLENBQUMsSUFBSSxDQUFDZ0csT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRW5DLEtBQUMsQ0FBQztBQUVGLElBQUEsU0FBUzNLLFFBQVFBLENBQUMwRixLQUFLLEVBQUVzVSxTQUFTLEVBQUU7TUFDaEN2VSxjQUFjLENBQUNDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVk7UUFDcEMsT0FBTyxJQUFJLENBQUNJLFVBQVUsRUFBRSxDQUFDOUYsUUFBUSxDQUM3QixJQUFJLENBQUMrSixLQUFLLEVBQUUsRUFDWixJQUFJLENBQUNLLE9BQU8sRUFBRSxFQUNkNFAsU0FDSixDQUFDO0FBQ0wsT0FBQyxDQUFDO0FBQ047QUFFQWhhLElBQUFBLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQ25CQSxJQUFBQSxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQzs7QUFFcEI7O0FBRUEsSUFBQSxTQUFTaWEsYUFBYUEsQ0FBQzlMLFFBQVEsRUFBRXJQLE1BQU0sRUFBRTtNQUNyQyxPQUFPQSxNQUFNLENBQUNvYixjQUFjO0FBQ2hDO0FBRUFsTSxJQUFBQSxhQUFhLENBQUMsR0FBRyxFQUFFaU0sYUFBYSxDQUFDO0FBQ2pDak0sSUFBQUEsYUFBYSxDQUFDLEdBQUcsRUFBRWlNLGFBQWEsQ0FBQztBQUNqQ2pNLElBQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUVmLFNBQVMsRUFBRWEsZ0JBQWdCLENBQUM7QUFDL0NFLElBQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUVmLFNBQVMsRUFBRVksc0JBQXNCLENBQUM7QUFDckRHLElBQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUVmLFNBQVMsRUFBRVksc0JBQXNCLENBQUM7QUFDckRHLElBQUFBLGFBQWEsQ0FBQyxJQUFJLEVBQUVmLFNBQVMsRUFBRUosTUFBTSxDQUFDO0FBQ3RDbUIsSUFBQUEsYUFBYSxDQUFDLElBQUksRUFBRWYsU0FBUyxFQUFFSixNQUFNLENBQUM7QUFDdENtQixJQUFBQSxhQUFhLENBQUMsSUFBSSxFQUFFZixTQUFTLEVBQUVKLE1BQU0sQ0FBQztBQUV0Q21CLElBQUFBLGFBQWEsQ0FBQyxLQUFLLEVBQUVkLFNBQVMsQ0FBQztBQUMvQmMsSUFBQUEsYUFBYSxDQUFDLE9BQU8sRUFBRWIsU0FBUyxDQUFDO0FBQ2pDYSxJQUFBQSxhQUFhLENBQUMsS0FBSyxFQUFFZCxTQUFTLENBQUM7QUFDL0JjLElBQUFBLGFBQWEsQ0FBQyxPQUFPLEVBQUViLFNBQVMsQ0FBQztJQUVqQ2lDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRVUsSUFBSSxDQUFDO0FBQ2hDVixJQUFBQSxhQUFhLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsVUFBVXp4QixLQUFLLEVBQUVrRCxLQUFLLEVBQUUwRixNQUFNLEVBQUU7QUFDdkQsTUFBQSxJQUFJNHpCLE1BQU0sR0FBR3BMLEtBQUssQ0FBQ3B4QixLQUFLLENBQUM7TUFDekJrRCxLQUFLLENBQUNpdkIsSUFBSSxDQUFDLEdBQUdxSyxNQUFNLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBR0EsTUFBTTtBQUM1QyxLQUFDLENBQUM7QUFDRi9LLElBQUFBLGFBQWEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxVQUFVenhCLEtBQUssRUFBRWtELEtBQUssRUFBRTBGLE1BQU0sRUFBRTtNQUN0REEsTUFBTSxDQUFDNnpCLEtBQUssR0FBRzd6QixNQUFNLENBQUM0YixPQUFPLENBQUNrWSxJQUFJLENBQUMxOEIsS0FBSyxDQUFDO01BQ3pDNEksTUFBTSxDQUFDK3pCLFNBQVMsR0FBRzM4QixLQUFLO0FBQzVCLEtBQUMsQ0FBQztBQUNGeXhCLElBQUFBLGFBQWEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxVQUFVenhCLEtBQUssRUFBRWtELEtBQUssRUFBRTBGLE1BQU0sRUFBRTtNQUN2RDFGLEtBQUssQ0FBQ2l2QixJQUFJLENBQUMsR0FBR2YsS0FBSyxDQUFDcHhCLEtBQUssQ0FBQztBQUMxQndpQixNQUFBQSxlQUFlLENBQUM1WixNQUFNLENBQUMsQ0FBQ3lhLE9BQU8sR0FBRyxJQUFJO0FBQzFDLEtBQUMsQ0FBQztJQUNGb08sYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVenhCLEtBQUssRUFBRWtELEtBQUssRUFBRTBGLE1BQU0sRUFBRTtBQUNqRCxNQUFBLElBQUlnMEIsR0FBRyxHQUFHNThCLEtBQUssQ0FBQ3NELE1BQU0sR0FBRyxDQUFDO0FBQzFCSixNQUFBQSxLQUFLLENBQUNpdkIsSUFBSSxDQUFDLEdBQUdmLEtBQUssQ0FBQ3B4QixLQUFLLENBQUN5bkIsTUFBTSxDQUFDLENBQUMsRUFBRW1WLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDMTVCLE1BQUFBLEtBQUssQ0FBQ2t2QixNQUFNLENBQUMsR0FBR2hCLEtBQUssQ0FBQ3B4QixLQUFLLENBQUN5bkIsTUFBTSxDQUFDbVYsR0FBRyxDQUFDLENBQUM7QUFDeENwYSxNQUFBQSxlQUFlLENBQUM1WixNQUFNLENBQUMsQ0FBQ3lhLE9BQU8sR0FBRyxJQUFJO0FBQzFDLEtBQUMsQ0FBQztJQUNGb08sYUFBYSxDQUFDLE9BQU8sRUFBRSxVQUFVenhCLEtBQUssRUFBRWtELEtBQUssRUFBRTBGLE1BQU0sRUFBRTtBQUNuRCxNQUFBLElBQUlpMEIsSUFBSSxHQUFHNzhCLEtBQUssQ0FBQ3NELE1BQU0sR0FBRyxDQUFDO0FBQ3ZCdzVCLFFBQUFBLElBQUksR0FBRzk4QixLQUFLLENBQUNzRCxNQUFNLEdBQUcsQ0FBQztBQUMzQkosTUFBQUEsS0FBSyxDQUFDaXZCLElBQUksQ0FBQyxHQUFHZixLQUFLLENBQUNweEIsS0FBSyxDQUFDeW5CLE1BQU0sQ0FBQyxDQUFDLEVBQUVvVixJQUFJLENBQUMsQ0FBQztBQUMxQzM1QixNQUFBQSxLQUFLLENBQUNrdkIsTUFBTSxDQUFDLEdBQUdoQixLQUFLLENBQUNweEIsS0FBSyxDQUFDeW5CLE1BQU0sQ0FBQ29WLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QzM1QixNQUFBQSxLQUFLLENBQUNtdkIsTUFBTSxDQUFDLEdBQUdqQixLQUFLLENBQUNweEIsS0FBSyxDQUFDeW5CLE1BQU0sQ0FBQ3FWLElBQUksQ0FBQyxDQUFDO0FBQ3pDdGEsTUFBQUEsZUFBZSxDQUFDNVosTUFBTSxDQUFDLENBQUN5YSxPQUFPLEdBQUcsSUFBSTtBQUMxQyxLQUFDLENBQUM7SUFDRm9PLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVXp4QixLQUFLLEVBQUVrRCxLQUFLLEVBQUUwRixNQUFNLEVBQUU7QUFDakQsTUFBQSxJQUFJZzBCLEdBQUcsR0FBRzU4QixLQUFLLENBQUNzRCxNQUFNLEdBQUcsQ0FBQztBQUMxQkosTUFBQUEsS0FBSyxDQUFDaXZCLElBQUksQ0FBQyxHQUFHZixLQUFLLENBQUNweEIsS0FBSyxDQUFDeW5CLE1BQU0sQ0FBQyxDQUFDLEVBQUVtVixHQUFHLENBQUMsQ0FBQztBQUN6QzE1QixNQUFBQSxLQUFLLENBQUNrdkIsTUFBTSxDQUFDLEdBQUdoQixLQUFLLENBQUNweEIsS0FBSyxDQUFDeW5CLE1BQU0sQ0FBQ21WLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLEtBQUMsQ0FBQztJQUNGbkwsYUFBYSxDQUFDLE9BQU8sRUFBRSxVQUFVenhCLEtBQUssRUFBRWtELEtBQUssRUFBRTBGLE1BQU0sRUFBRTtBQUNuRCxNQUFBLElBQUlpMEIsSUFBSSxHQUFHNzhCLEtBQUssQ0FBQ3NELE1BQU0sR0FBRyxDQUFDO0FBQ3ZCdzVCLFFBQUFBLElBQUksR0FBRzk4QixLQUFLLENBQUNzRCxNQUFNLEdBQUcsQ0FBQztBQUMzQkosTUFBQUEsS0FBSyxDQUFDaXZCLElBQUksQ0FBQyxHQUFHZixLQUFLLENBQUNweEIsS0FBSyxDQUFDeW5CLE1BQU0sQ0FBQyxDQUFDLEVBQUVvVixJQUFJLENBQUMsQ0FBQztBQUMxQzM1QixNQUFBQSxLQUFLLENBQUNrdkIsTUFBTSxDQUFDLEdBQUdoQixLQUFLLENBQUNweEIsS0FBSyxDQUFDeW5CLE1BQU0sQ0FBQ29WLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QzM1QixNQUFBQSxLQUFLLENBQUNtdkIsTUFBTSxDQUFDLEdBQUdqQixLQUFLLENBQUNweEIsS0FBSyxDQUFDeW5CLE1BQU0sQ0FBQ3FWLElBQUksQ0FBQyxDQUFDO0FBQzdDLEtBQUMsQ0FBQzs7QUFFRjs7SUFFQSxTQUFTQyxVQUFVQSxDQUFDLzhCLEtBQUssRUFBRTtBQUN2QjtBQUNBO0FBQ0EsTUFBQSxPQUFPLENBQUNBLEtBQUssR0FBRyxFQUFFLEVBQUVpdUIsV0FBVyxFQUFFLENBQUMrTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUN2RDtJQUVBLElBQUlDLDBCQUEwQixHQUFHLGVBQWU7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsTUFBQUEsVUFBVSxHQUFHckssVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7SUFFMUMsU0FBU3NLLGNBQWNBLENBQUMvUSxLQUFLLEVBQUVLLE9BQU8sRUFBRTJRLE9BQU8sRUFBRTtNQUM3QyxJQUFJaFIsS0FBSyxHQUFHLEVBQUUsRUFBRTtBQUNaLFFBQUEsT0FBT2dSLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSTtBQUNoQyxPQUFDLE1BQU07QUFDSCxRQUFBLE9BQU9BLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSTtBQUNoQztBQUNKO0lBRUEsSUFBSUMsVUFBVSxHQUFHO01BQ2J6VyxRQUFRLEVBQUVQLGVBQWU7TUFDekJ1QyxjQUFjLEVBQUVFLHFCQUFxQjtNQUNyQ0wsV0FBVyxFQUFFZ0Isa0JBQWtCO01BQy9CeEIsT0FBTyxFQUFFMEIsY0FBYztNQUN2QjJULHNCQUFzQixFQUFFMVQsNkJBQTZCO01BQ3JEa0IsWUFBWSxFQUFFaEIsbUJBQW1CO01BRWpDNkMsTUFBTSxFQUFFK0ksbUJBQW1CO01BQzNCSixXQUFXLEVBQUVNLHdCQUF3QjtNQUVyQ25JLElBQUksRUFBRXdMLGlCQUFpQjtNQUV2QnJOLFFBQVEsRUFBRXFPLHFCQUFxQjtNQUMvQlgsV0FBVyxFQUFFYSx3QkFBd0I7TUFDckNaLGFBQWEsRUFBRVcsMEJBQTBCO0FBRXpDcUQsTUFBQUEsYUFBYSxFQUFFTjtLQUNsQjs7QUFFRDtJQUNBLElBQUlPLE9BQU8sR0FBRyxFQUFFO01BQ1pDLGNBQWMsR0FBRyxFQUFFO01BQ25CQyxZQUFZO0FBRWhCLElBQUEsU0FBU0MsWUFBWUEsQ0FBQ0MsSUFBSSxFQUFFQyxJQUFJLEVBQUU7QUFDOUIsTUFBQSxJQUFJbDZCLENBQUM7QUFDRG02QixRQUFBQSxJQUFJLEdBQUd2OUIsSUFBSSxDQUFDNkgsR0FBRyxDQUFDdzFCLElBQUksQ0FBQ3Q2QixNQUFNLEVBQUV1NkIsSUFBSSxDQUFDdjZCLE1BQU0sQ0FBQztNQUM3QyxLQUFLSyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdtNkIsSUFBSSxFQUFFbjZCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDMUIsSUFBSWk2QixJQUFJLENBQUNqNkIsQ0FBQyxDQUFDLEtBQUtrNkIsSUFBSSxDQUFDbDZCLENBQUMsQ0FBQyxFQUFFO0FBQ3JCLFVBQUEsT0FBT0EsQ0FBQztBQUNaO0FBQ0o7QUFDQSxNQUFBLE9BQU9tNkIsSUFBSTtBQUNmO0lBRUEsU0FBU0MsZUFBZUEsQ0FBQ2w3QixHQUFHLEVBQUU7QUFDMUIsTUFBQSxPQUFPQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ29yQixXQUFXLEVBQUUsQ0FBQzNGLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUd6bEIsR0FBRztBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7SUFDQSxTQUFTbTdCLFlBQVlBLENBQUNDLEtBQUssRUFBRTtNQUN6QixJQUFJdDZCLENBQUMsR0FBRyxDQUFDO1FBQ0x1NkIsQ0FBQztRQUNEQyxJQUFJO1FBQ0poZCxNQUFNO1FBQ053VSxLQUFLO0FBRVQsTUFBQSxPQUFPaHlCLENBQUMsR0FBR3M2QixLQUFLLENBQUMzNkIsTUFBTSxFQUFFO0FBQ3JCcXlCLFFBQUFBLEtBQUssR0FBR29JLGVBQWUsQ0FBQ0UsS0FBSyxDQUFDdDZCLENBQUMsQ0FBQyxDQUFDLENBQUNneUIsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUM1Q3VJLENBQUMsR0FBR3ZJLEtBQUssQ0FBQ3J5QixNQUFNO1FBQ2hCNjZCLElBQUksR0FBR0osZUFBZSxDQUFDRSxLQUFLLENBQUN0NkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BDdzZCLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLENBQUN4SSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSTtRQUNwQyxPQUFPdUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNWL2MsVUFBQUEsTUFBTSxHQUFHaWQsVUFBVSxDQUFDekksS0FBSyxDQUFDandCLEtBQUssQ0FBQyxDQUFDLEVBQUV3NEIsQ0FBQyxDQUFDLENBQUM5WSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDaEQsSUFBSWpFLE1BQU0sRUFBRTtBQUNSLFlBQUEsT0FBT0EsTUFBTTtBQUNqQjtBQUNBLFVBQUEsSUFDSWdkLElBQUksSUFDSkEsSUFBSSxDQUFDNzZCLE1BQU0sSUFBSTQ2QixDQUFDLElBQ2hCUCxZQUFZLENBQUNoSSxLQUFLLEVBQUV3SSxJQUFJLENBQUMsSUFBSUQsQ0FBQyxHQUFHLENBQUMsRUFDcEM7QUFDRTtZQUNBO0FBQ0o7QUFDQUEsVUFBQUEsQ0FBQyxFQUFFO0FBQ1A7QUFDQXY2QixRQUFBQSxDQUFDLEVBQUU7QUFDUDtBQUNBLE1BQUEsT0FBTys1QixZQUFZO0FBQ3ZCO0lBRUEsU0FBU1csZ0JBQWdCQSxDQUFDN1ksSUFBSSxFQUFFO0FBQzVCO0FBQ0E7TUFDQSxPQUFPLENBQUMsRUFBRUEsSUFBSSxJQUFJQSxJQUFJLENBQUM2QyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDaEQ7SUFFQSxTQUFTK1YsVUFBVUEsQ0FBQzVZLElBQUksRUFBRTtNQUN0QixJQUFJOFksU0FBUyxHQUFHLElBQUk7UUFDaEJDLGNBQWM7QUFDbEI7TUFDQSxJQUNJZixPQUFPLENBQUNoWSxJQUFJLENBQUMsS0FBS2xDLFNBQVMsSUFDM0IsUUFBYSxLQUFLLFdBQVcsSUFDN0IxRCxNQUFNLElBQ05BLE1BQU0sQ0FBQzRlLE9BQU8sSUFDZEgsZ0JBQWdCLENBQUM3WSxJQUFJLENBQUMsRUFDeEI7UUFDRSxJQUFJO1VBQ0E4WSxTQUFTLEdBQUdaLFlBQVksQ0FBQ2UsS0FBSztVQUM5QkYsY0FBYyxHQUFHRyxlQUFPO0FBQ3hCSCxVQUFBQSxjQUFjLENBQUMsV0FBVyxHQUFHL1ksSUFBSSxDQUFDO1VBQ2xDbVosa0JBQWtCLENBQUNMLFNBQVMsQ0FBQztTQUNoQyxDQUFDLE9BQU8zUyxDQUFDLEVBQUU7QUFDUjtBQUNBO0FBQ0E2UixVQUFBQSxPQUFPLENBQUNoWSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekI7QUFDSjtNQUNBLE9BQU9nWSxPQUFPLENBQUNoWSxJQUFJLENBQUM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBQSxTQUFTbVosa0JBQWtCQSxDQUFDOTdCLEdBQUcsRUFBRWtPLE1BQU0sRUFBRTtBQUNyQyxNQUFBLElBQUkvTCxJQUFJO01BQ1IsSUFBSW5DLEdBQUcsRUFBRTtBQUNMLFFBQUEsSUFBSTRkLFdBQVcsQ0FBQzFQLE1BQU0sQ0FBQyxFQUFFO0FBQ3JCL0wsVUFBQUEsSUFBSSxHQUFHNDVCLFNBQVMsQ0FBQy83QixHQUFHLENBQUM7QUFDekIsU0FBQyxNQUFNO0FBQ0htQyxVQUFBQSxJQUFJLEdBQUc2NUIsWUFBWSxDQUFDaDhCLEdBQUcsRUFBRWtPLE1BQU0sQ0FBQztBQUNwQztRQUVBLElBQUkvTCxJQUFJLEVBQUU7QUFDTjtVQUNBMDRCLFlBQVksR0FBRzE0QixJQUFJO0FBQ3ZCLFNBQUMsTUFBTTtVQUNILElBQUksT0FBT0ssT0FBTyxLQUFLLFdBQVcsSUFBSUEsT0FBTyxDQUFDdWYsSUFBSSxFQUFFO0FBQ2hEO1lBQ0F2ZixPQUFPLENBQUN1ZixJQUFJLENBQ1IsU0FBUyxHQUFHL2hCLEdBQUcsR0FBRyx3Q0FDdEIsQ0FBQztBQUNMO0FBQ0o7QUFDSjtNQUVBLE9BQU82NkIsWUFBWSxDQUFDZSxLQUFLO0FBQzdCO0FBRUEsSUFBQSxTQUFTSSxZQUFZQSxDQUFDclosSUFBSSxFQUFFNWMsTUFBTSxFQUFFO01BQ2hDLElBQUlBLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDakIsUUFBQSxJQUFJdVksTUFBTTtVQUNOK0UsWUFBWSxHQUFHbVgsVUFBVTtRQUM3QnowQixNQUFNLENBQUNrMkIsSUFBSSxHQUFHdFosSUFBSTtBQUNsQixRQUFBLElBQUlnWSxPQUFPLENBQUNoWSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7VUFDdkJELGVBQWUsQ0FDWCxzQkFBc0IsRUFDdEIsd0RBQXdELEdBQ3BELHNEQUFzRCxHQUN0RCx3REFBd0QsR0FDeEQseUVBQ1IsQ0FBQztBQUNEVyxVQUFBQSxZQUFZLEdBQUdzWCxPQUFPLENBQUNoWSxJQUFJLENBQUMsQ0FBQ0csT0FBTztBQUN4QyxTQUFDLE1BQU0sSUFBSS9jLE1BQU0sQ0FBQ20yQixZQUFZLElBQUksSUFBSSxFQUFFO1VBQ3BDLElBQUl2QixPQUFPLENBQUM1MEIsTUFBTSxDQUFDbTJCLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRTtZQUN0QzdZLFlBQVksR0FBR3NYLE9BQU8sQ0FBQzUwQixNQUFNLENBQUNtMkIsWUFBWSxDQUFDLENBQUNwWixPQUFPO0FBQ3ZELFdBQUMsTUFBTTtBQUNIeEUsWUFBQUEsTUFBTSxHQUFHaWQsVUFBVSxDQUFDeDFCLE1BQU0sQ0FBQ20yQixZQUFZLENBQUM7WUFDeEMsSUFBSTVkLE1BQU0sSUFBSSxJQUFJLEVBQUU7Y0FDaEIrRSxZQUFZLEdBQUcvRSxNQUFNLENBQUN3RSxPQUFPO0FBQ2pDLGFBQUMsTUFBTTtjQUNILElBQUksQ0FBQzhYLGNBQWMsQ0FBQzcwQixNQUFNLENBQUNtMkIsWUFBWSxDQUFDLEVBQUU7QUFDdEN0QixnQkFBQUEsY0FBYyxDQUFDNzBCLE1BQU0sQ0FBQ20yQixZQUFZLENBQUMsR0FBRyxFQUFFO0FBQzVDO2NBQ0F0QixjQUFjLENBQUM3MEIsTUFBTSxDQUFDbTJCLFlBQVksQ0FBQyxDQUFDNXpCLElBQUksQ0FBQztnQkFDckNxYSxJQUFJLEVBQUVBLElBQUk7QUFDVjVjLGdCQUFBQSxNQUFNLEVBQUVBO0FBQ1osZUFBQyxDQUFDO0FBQ0YsY0FBQSxPQUFPLElBQUk7QUFDZjtBQUNKO0FBQ0o7QUFDQTQwQixRQUFBQSxPQUFPLENBQUNoWSxJQUFJLENBQUMsR0FBRyxJQUFJWSxNQUFNLENBQUNILFlBQVksQ0FBQ0MsWUFBWSxFQUFFdGQsTUFBTSxDQUFDLENBQUM7QUFFOUQsUUFBQSxJQUFJNjBCLGNBQWMsQ0FBQ2pZLElBQUksQ0FBQyxFQUFFO1VBQ3RCaVksY0FBYyxDQUFDalksSUFBSSxDQUFDLENBQUMxZSxPQUFPLENBQUMsVUFBVWdILENBQUMsRUFBRTtZQUN0Qyt3QixZQUFZLENBQUMvd0IsQ0FBQyxDQUFDMFgsSUFBSSxFQUFFMVgsQ0FBQyxDQUFDbEYsTUFBTSxDQUFDO0FBQ2xDLFdBQUMsQ0FBQztBQUNOOztBQUVBO0FBQ0E7QUFDQTtRQUNBKzFCLGtCQUFrQixDQUFDblosSUFBSSxDQUFDO1FBRXhCLE9BQU9nWSxPQUFPLENBQUNoWSxJQUFJLENBQUM7QUFDeEIsT0FBQyxNQUFNO0FBQ0g7UUFDQSxPQUFPZ1ksT0FBTyxDQUFDaFksSUFBSSxDQUFDO0FBQ3BCLFFBQUEsT0FBTyxJQUFJO0FBQ2Y7QUFDSjtBQUVBLElBQUEsU0FBU3daLFlBQVlBLENBQUN4WixJQUFJLEVBQUU1YyxNQUFNLEVBQUU7TUFDaEMsSUFBSUEsTUFBTSxJQUFJLElBQUksRUFBRTtBQUNoQixRQUFBLElBQUl1WSxNQUFNO1VBQ044ZCxTQUFTO1VBQ1QvWSxZQUFZLEdBQUdtWCxVQUFVO0FBRTdCLFFBQUEsSUFBSUcsT0FBTyxDQUFDaFksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJZ1ksT0FBTyxDQUFDaFksSUFBSSxDQUFDLENBQUN1WixZQUFZLElBQUksSUFBSSxFQUFFO0FBQzdEO0FBQ0F2QixVQUFBQSxPQUFPLENBQUNoWSxJQUFJLENBQUMsQ0FBQzdVLEdBQUcsQ0FBQ3NWLFlBQVksQ0FBQ3VYLE9BQU8sQ0FBQ2hZLElBQUksQ0FBQyxDQUFDRyxPQUFPLEVBQUUvYyxNQUFNLENBQUMsQ0FBQztBQUNsRSxTQUFDLE1BQU07QUFDSDtBQUNBcTJCLFVBQUFBLFNBQVMsR0FBR2IsVUFBVSxDQUFDNVksSUFBSSxDQUFDO1VBQzVCLElBQUl5WixTQUFTLElBQUksSUFBSSxFQUFFO1lBQ25CL1ksWUFBWSxHQUFHK1ksU0FBUyxDQUFDdFosT0FBTztBQUNwQztBQUNBL2MsVUFBQUEsTUFBTSxHQUFHcWQsWUFBWSxDQUFDQyxZQUFZLEVBQUV0ZCxNQUFNLENBQUM7VUFDM0MsSUFBSXEyQixTQUFTLElBQUksSUFBSSxFQUFFO0FBQ25CO0FBQ0E7QUFDQTtZQUNBcjJCLE1BQU0sQ0FBQ2syQixJQUFJLEdBQUd0WixJQUFJO0FBQ3RCO0FBQ0FyRSxVQUFBQSxNQUFNLEdBQUcsSUFBSWlGLE1BQU0sQ0FBQ3hkLE1BQU0sQ0FBQztBQUMzQnVZLFVBQUFBLE1BQU0sQ0FBQzRkLFlBQVksR0FBR3ZCLE9BQU8sQ0FBQ2hZLElBQUksQ0FBQztBQUNuQ2dZLFVBQUFBLE9BQU8sQ0FBQ2hZLElBQUksQ0FBQyxHQUFHckUsTUFBTTtBQUMxQjs7QUFFQTtRQUNBd2Qsa0JBQWtCLENBQUNuWixJQUFJLENBQUM7QUFDNUIsT0FBQyxNQUFNO0FBQ0g7QUFDQSxRQUFBLElBQUlnWSxPQUFPLENBQUNoWSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7VUFDdkIsSUFBSWdZLE9BQU8sQ0FBQ2hZLElBQUksQ0FBQyxDQUFDdVosWUFBWSxJQUFJLElBQUksRUFBRTtZQUNwQ3ZCLE9BQU8sQ0FBQ2hZLElBQUksQ0FBQyxHQUFHZ1ksT0FBTyxDQUFDaFksSUFBSSxDQUFDLENBQUN1WixZQUFZO0FBQzFDLFlBQUEsSUFBSXZaLElBQUksS0FBS21aLGtCQUFrQixFQUFFLEVBQUU7Y0FDL0JBLGtCQUFrQixDQUFDblosSUFBSSxDQUFDO0FBQzVCO1dBQ0gsTUFBTSxJQUFJZ1ksT0FBTyxDQUFDaFksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQzlCLE9BQU9nWSxPQUFPLENBQUNoWSxJQUFJLENBQUM7QUFDeEI7QUFDSjtBQUNKO01BQ0EsT0FBT2dZLE9BQU8sQ0FBQ2hZLElBQUksQ0FBQztBQUN4Qjs7QUFFQTtJQUNBLFNBQVNvWixTQUFTQSxDQUFDLzdCLEdBQUcsRUFBRTtBQUNwQixNQUFBLElBQUlzZSxNQUFNO01BRVYsSUFBSXRlLEdBQUcsSUFBSUEsR0FBRyxDQUFDMmhCLE9BQU8sSUFBSTNoQixHQUFHLENBQUMyaEIsT0FBTyxDQUFDaWEsS0FBSyxFQUFFO0FBQ3pDNTdCLFFBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDMmhCLE9BQU8sQ0FBQ2lhLEtBQUs7QUFDM0I7TUFFQSxJQUFJLENBQUM1N0IsR0FBRyxFQUFFO0FBQ04sUUFBQSxPQUFPNjZCLFlBQVk7QUFDdkI7QUFFQSxNQUFBLElBQUksQ0FBQzM1QixPQUFPLENBQUNsQixHQUFHLENBQUMsRUFBRTtBQUNmO0FBQ0FzZSxRQUFBQSxNQUFNLEdBQUdpZCxVQUFVLENBQUN2N0IsR0FBRyxDQUFDO1FBQ3hCLElBQUlzZSxNQUFNLEVBQUU7QUFDUixVQUFBLE9BQU9BLE1BQU07QUFDakI7UUFDQXRlLEdBQUcsR0FBRyxDQUFDQSxHQUFHLENBQUM7QUFDZjtNQUVBLE9BQU9tN0IsWUFBWSxDQUFDbjdCLEdBQUcsQ0FBQztBQUM1QjtJQUVBLFNBQVNxOEIsV0FBV0EsR0FBRztNQUNuQixPQUFPejhCLElBQUksQ0FBQys2QixPQUFPLENBQUM7QUFDeEI7SUFFQSxTQUFTMkIsYUFBYUEsQ0FBQ3hzQixDQUFDLEVBQUU7QUFDdEIsTUFBQSxJQUFJZ1AsUUFBUTtRQUNSN2UsQ0FBQyxHQUFHNlAsQ0FBQyxDQUFDbWYsRUFBRTtNQUVaLElBQUlodkIsQ0FBQyxJQUFJMGYsZUFBZSxDQUFDN1AsQ0FBQyxDQUFDLENBQUNnUCxRQUFRLEtBQUssRUFBRSxFQUFFO0FBQ3pDQSxRQUFBQSxRQUFRLEdBQ0o3ZSxDQUFDLENBQUNtdkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJbnZCLENBQUMsQ0FBQ212QixLQUFLLENBQUMsR0FBRyxFQUFFLEdBQ3ZCQSxLQUFLLEdBQ0xudkIsQ0FBQyxDQUFDb3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSXB2QixDQUFDLENBQUNvdkIsSUFBSSxDQUFDLEdBQUdrRCxXQUFXLENBQUN0eUIsQ0FBQyxDQUFDa3ZCLElBQUksQ0FBQyxFQUFFbHZCLENBQUMsQ0FBQ212QixLQUFLLENBQUMsQ0FBQyxHQUNyREMsSUFBSSxHQUNKcHZCLENBQUMsQ0FBQ3F2QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQ1RydkIsQ0FBQyxDQUFDcXZCLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFDWHJ2QixDQUFDLENBQUNxdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUNWcnZCLENBQUMsQ0FBQ3N2QixNQUFNLENBQUMsS0FBSyxDQUFDLElBQ1p0dkIsQ0FBQyxDQUFDdXZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFDZnZ2QixDQUFDLENBQUN3dkIsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFFLEdBQzlCSCxJQUFJLEdBQ0pydkIsQ0FBQyxDQUFDc3ZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSXR2QixDQUFDLENBQUNzdkIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUM3QkEsTUFBTSxHQUNOdHZCLENBQUMsQ0FBQ3V2QixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUl2dkIsQ0FBQyxDQUFDdXZCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FDN0JBLE1BQU0sR0FDTnZ2QixDQUFDLENBQUN3dkIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJeHZCLENBQUMsQ0FBQ3d2QixXQUFXLENBQUMsR0FBRyxHQUFHLEdBQ3hDQSxXQUFXLEdBQ1gsRUFBRTtBQUV0QixRQUFBLElBQ0k5UCxlQUFlLENBQUM3UCxDQUFDLENBQUMsQ0FBQ3lzQixrQkFBa0IsS0FDcEN6ZCxRQUFRLEdBQUdxUSxJQUFJLElBQUlyUSxRQUFRLEdBQUd1USxJQUFJLENBQUMsRUFDdEM7VUFDRXZRLFFBQVEsR0FBR3VRLElBQUk7QUFDbkI7UUFDQSxJQUFJMVAsZUFBZSxDQUFDN1AsQ0FBQyxDQUFDLENBQUMwc0IsY0FBYyxJQUFJMWQsUUFBUSxLQUFLLEVBQUUsRUFBRTtVQUN0REEsUUFBUSxHQUFHNFEsSUFBSTtBQUNuQjtRQUNBLElBQUkvUCxlQUFlLENBQUM3UCxDQUFDLENBQUMsQ0FBQzJzQixnQkFBZ0IsSUFBSTNkLFFBQVEsS0FBSyxFQUFFLEVBQUU7VUFDeERBLFFBQVEsR0FBRzZRLE9BQU87QUFDdEI7QUFFQWhRLFFBQUFBLGVBQWUsQ0FBQzdQLENBQUMsQ0FBQyxDQUFDZ1AsUUFBUSxHQUFHQSxRQUFRO0FBQzFDO0FBRUEsTUFBQSxPQUFPaFAsQ0FBQztBQUNaOztBQUVBO0FBQ0E7SUFDQSxJQUFJNHNCLGdCQUFnQixHQUNaLGdKQUFnSjtNQUNwSkMsYUFBYSxHQUNULDRJQUE0STtNQUNoSkMsT0FBTyxHQUFHLHVCQUF1QjtBQUNqQ0MsTUFBQUEsUUFBUSxHQUFHLENBQ1AsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsRUFDdkMsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsRUFDakMsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsRUFDbEMsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUNwQyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsRUFDM0IsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUNoQyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsRUFDNUIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQ3JCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUM3QixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQ25DLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUNwQixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQzFCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FDM0I7QUFDRDtNQUNBQyxRQUFRLEdBQUcsQ0FDUCxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyxFQUN4QyxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxFQUN2QyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUM5QixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFDdEIsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsRUFDcEMsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsRUFDbkMsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLEVBQzFCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUNwQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FDakI7TUFDREMsZUFBZSxHQUFHLG9CQUFvQjtBQUN0QztNQUNBdGQsT0FBTyxHQUNILHlMQUF5TDtBQUM3THVkLE1BQUFBLFVBQVUsR0FBRztRQUNUQyxFQUFFLEVBQUUsQ0FBQztRQUNMQyxHQUFHLEVBQUUsQ0FBQztBQUNOQyxRQUFBQSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQ1pDLFFBQUFBLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRTtBQUNaQyxRQUFBQSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQ1pDLFFBQUFBLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRTtBQUNaQyxRQUFBQSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDWkMsR0FBRyxFQUFFLEVBQUUsR0FBRztPQUNiOztBQUVMO0lBQ0EsU0FBU0MsYUFBYUEsQ0FBQzUzQixNQUFNLEVBQUU7QUFDM0IsTUFBQSxJQUFJakYsQ0FBQztRQUNEODhCLENBQUM7UUFDRHpWLE1BQU0sR0FBR3BpQixNQUFNLENBQUNzYixFQUFFO0FBQ2xCbUUsUUFBQUEsS0FBSyxHQUFHa1gsZ0JBQWdCLENBQUNtQixJQUFJLENBQUMxVixNQUFNLENBQUMsSUFBSXdVLGFBQWEsQ0FBQ2tCLElBQUksQ0FBQzFWLE1BQU0sQ0FBQztRQUNuRTJWLFNBQVM7UUFDVEMsVUFBVTtRQUNWQyxVQUFVO1FBQ1ZDLFFBQVE7UUFDUkMsV0FBVyxHQUFHckIsUUFBUSxDQUFDcDhCLE1BQU07UUFDN0IwOUIsV0FBVyxHQUFHckIsUUFBUSxDQUFDcjhCLE1BQU07TUFFakMsSUFBSStrQixLQUFLLEVBQUU7QUFDUDdGLFFBQUFBLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDc1osR0FBRyxHQUFHLElBQUk7QUFDbEMsUUFBQSxLQUFLdmUsQ0FBQyxHQUFHLENBQUMsRUFBRTg4QixDQUFDLEdBQUdNLFdBQVcsRUFBRXA5QixDQUFDLEdBQUc4OEIsQ0FBQyxFQUFFOThCLENBQUMsRUFBRSxFQUFFO0FBQ3JDLFVBQUEsSUFBSSs3QixRQUFRLENBQUMvN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMrOEIsSUFBSSxDQUFDclksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0J1WSxVQUFVLEdBQUdsQixRQUFRLENBQUMvN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCZzlCLFNBQVMsR0FBR2pCLFFBQVEsQ0FBQy83QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLO1lBQ3BDO0FBQ0o7QUFDSjtRQUNBLElBQUlpOUIsVUFBVSxJQUFJLElBQUksRUFBRTtVQUNwQmg0QixNQUFNLENBQUM0YSxRQUFRLEdBQUcsS0FBSztVQUN2QjtBQUNKO0FBQ0EsUUFBQSxJQUFJNkUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ1YsVUFBQSxLQUFLMWtCLENBQUMsR0FBRyxDQUFDLEVBQUU4OEIsQ0FBQyxHQUFHTyxXQUFXLEVBQUVyOUIsQ0FBQyxHQUFHODhCLENBQUMsRUFBRTk4QixDQUFDLEVBQUUsRUFBRTtBQUNyQyxZQUFBLElBQUlnOEIsUUFBUSxDQUFDaDhCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDKzhCLElBQUksQ0FBQ3JZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQy9CO0FBQ0F3WSxjQUFBQSxVQUFVLEdBQUcsQ0FBQ3hZLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUlzWCxRQUFRLENBQUNoOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQy9DO0FBQ0o7QUFDSjtVQUNBLElBQUlrOUIsVUFBVSxJQUFJLElBQUksRUFBRTtZQUNwQmo0QixNQUFNLENBQUM0YSxRQUFRLEdBQUcsS0FBSztZQUN2QjtBQUNKO0FBQ0o7QUFDQSxRQUFBLElBQUksQ0FBQ21kLFNBQVMsSUFBSUUsVUFBVSxJQUFJLElBQUksRUFBRTtVQUNsQ2o0QixNQUFNLENBQUM0YSxRQUFRLEdBQUcsS0FBSztVQUN2QjtBQUNKO0FBQ0EsUUFBQSxJQUFJNkUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ1YsSUFBSW9YLE9BQU8sQ0FBQ2lCLElBQUksQ0FBQ3JZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hCeVksUUFBUSxHQUFHLEdBQUc7QUFDbEIsV0FBQyxNQUFNO1lBQ0hsNEIsTUFBTSxDQUFDNGEsUUFBUSxHQUFHLEtBQUs7WUFDdkI7QUFDSjtBQUNKO0FBQ0E1YSxRQUFBQSxNQUFNLENBQUN1YixFQUFFLEdBQUd5YyxVQUFVLElBQUlDLFVBQVUsSUFBSSxFQUFFLENBQUMsSUFBSUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUM5REcseUJBQXlCLENBQUNyNEIsTUFBTSxDQUFDO0FBQ3JDLE9BQUMsTUFBTTtRQUNIQSxNQUFNLENBQUM0YSxRQUFRLEdBQUcsS0FBSztBQUMzQjtBQUNKO0FBRUEsSUFBQSxTQUFTMGQseUJBQXlCQSxDQUM5QkMsT0FBTyxFQUNQQyxRQUFRLEVBQ1JDLE1BQU0sRUFDTkMsT0FBTyxFQUNQQyxTQUFTLEVBQ1RDLFNBQVMsRUFDWDtBQUNFLE1BQUEsSUFBSTUrQixNQUFNLEdBQUcsQ0FDVDYrQixjQUFjLENBQUNOLE9BQU8sQ0FBQyxFQUN2QnZMLHdCQUF3QixDQUFDcmpCLE9BQU8sQ0FBQzZ1QixRQUFRLENBQUMsRUFDMUMxTyxRQUFRLENBQUMyTyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQ3BCM08sUUFBUSxDQUFDNE8sT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUNyQjVPLFFBQVEsQ0FBQzZPLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FDMUI7TUFFRCxJQUFJQyxTQUFTLEVBQUU7UUFDWDUrQixNQUFNLENBQUN1SSxJQUFJLENBQUN1bkIsUUFBUSxDQUFDOE8sU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDO0FBRUEsTUFBQSxPQUFPNStCLE1BQU07QUFDakI7SUFFQSxTQUFTNitCLGNBQWNBLENBQUNOLE9BQU8sRUFBRTtNQUM3QixJQUFJclQsSUFBSSxHQUFHNEUsUUFBUSxDQUFDeU8sT0FBTyxFQUFFLEVBQUUsQ0FBQztNQUNoQyxJQUFJclQsSUFBSSxJQUFJLEVBQUUsRUFBRTtRQUNaLE9BQU8sSUFBSSxHQUFHQSxJQUFJO0FBQ3RCLE9BQUMsTUFBTSxJQUFJQSxJQUFJLElBQUksR0FBRyxFQUFFO1FBQ3BCLE9BQU8sSUFBSSxHQUFHQSxJQUFJO0FBQ3RCO0FBQ0EsTUFBQSxPQUFPQSxJQUFJO0FBQ2Y7SUFFQSxTQUFTNFQsaUJBQWlCQSxDQUFDelgsQ0FBQyxFQUFFO0FBQzFCO0FBQ0EsTUFBQSxPQUFPQSxDQUFDLENBQ0gzQixPQUFPLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLENBQ2xDQSxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUN4QkEsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FDckJBLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0FBQzlCO0lBRUEsU0FBU3FaLFlBQVlBLENBQUNDLFVBQVUsRUFBRUMsV0FBVyxFQUFFajVCLE1BQU0sRUFBRTtNQUNuRCxJQUFJZzVCLFVBQVUsRUFBRTtBQUNaO1FBQ0EsSUFBSUUsZUFBZSxHQUFHNUgsMEJBQTBCLENBQUMzbkIsT0FBTyxDQUFDcXZCLFVBQVUsQ0FBQztVQUNoRUcsYUFBYSxHQUFHLElBQUl4aUMsSUFBSSxDQUNwQnNpQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQ2RBLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDZEEsV0FBVyxDQUFDLENBQUMsQ0FDakIsQ0FBQyxDQUFDaE8sTUFBTSxFQUFFO1FBQ2QsSUFBSWlPLGVBQWUsS0FBS0MsYUFBYSxFQUFFO0FBQ25DdmYsVUFBQUEsZUFBZSxDQUFDNVosTUFBTSxDQUFDLENBQUMyWixlQUFlLEdBQUcsSUFBSTtVQUM5QzNaLE1BQU0sQ0FBQzRhLFFBQVEsR0FBRyxLQUFLO0FBQ3ZCLFVBQUEsT0FBTyxLQUFLO0FBQ2hCO0FBQ0o7QUFDQSxNQUFBLE9BQU8sSUFBSTtBQUNmO0lBRUEsU0FBU3dlLGVBQWVBLENBQUNDLFNBQVMsRUFBRUMsY0FBYyxFQUFFQyxTQUFTLEVBQUU7TUFDM0QsSUFBSUYsU0FBUyxFQUFFO1FBQ1gsT0FBT3BDLFVBQVUsQ0FBQ29DLFNBQVMsQ0FBQztPQUMvQixNQUFNLElBQUlDLGNBQWMsRUFBRTtBQUN2QjtBQUNBLFFBQUEsT0FBTyxDQUFDO0FBQ1osT0FBQyxNQUFNO1FBQ0gsSUFBSUUsRUFBRSxHQUFHMVAsUUFBUSxDQUFDeVAsU0FBUyxFQUFFLEVBQUUsQ0FBQztVQUM1Qnh2QixDQUFDLEdBQUd5dkIsRUFBRSxHQUFHLEdBQUc7QUFDWmhZLFVBQUFBLENBQUMsR0FBRyxDQUFDZ1ksRUFBRSxHQUFHenZCLENBQUMsSUFBSSxHQUFHO0FBQ3RCLFFBQUEsT0FBT3lYLENBQUMsR0FBRyxFQUFFLEdBQUd6WCxDQUFDO0FBQ3JCO0FBQ0o7O0FBRUE7SUFDQSxTQUFTMHZCLGlCQUFpQkEsQ0FBQ3o1QixNQUFNLEVBQUU7QUFDL0IsTUFBQSxJQUFJeWYsS0FBSyxHQUFHL0YsT0FBTyxDQUFDb2UsSUFBSSxDQUFDZ0IsaUJBQWlCLENBQUM5NEIsTUFBTSxDQUFDc2IsRUFBRSxDQUFDLENBQUM7UUFDbERvZSxXQUFXO01BQ2YsSUFBSWphLEtBQUssRUFBRTtBQUNQaWEsUUFBQUEsV0FBVyxHQUFHcEIseUJBQXlCLENBQ25DN1ksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1JBLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUkEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1JBLEtBQUssQ0FBQyxDQUFDLENBQ1gsQ0FBQztBQUNELFFBQUEsSUFBSSxDQUFDc1osWUFBWSxDQUFDdFosS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFaWEsV0FBVyxFQUFFMTVCLE1BQU0sQ0FBQyxFQUFFO1VBQzlDO0FBQ0o7UUFFQUEsTUFBTSxDQUFDa3BCLEVBQUUsR0FBR3dRLFdBQVc7UUFDdkIxNUIsTUFBTSxDQUFDeWIsSUFBSSxHQUFHMmQsZUFBZSxDQUFDM1osS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUVBLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUU1RHpmLFFBQUFBLE1BQU0sQ0FBQ3FhLEVBQUUsR0FBRzhVLGFBQWEsQ0FBQy9YLEtBQUssQ0FBQyxJQUFJLEVBQUVwWCxNQUFNLENBQUNrcEIsRUFBRSxDQUFDO0FBQ2hEbHBCLFFBQUFBLE1BQU0sQ0FBQ3FhLEVBQUUsQ0FBQ3FSLGFBQWEsQ0FBQzFyQixNQUFNLENBQUNxYSxFQUFFLENBQUNxUSxhQUFhLEVBQUUsR0FBRzFxQixNQUFNLENBQUN5YixJQUFJLENBQUM7QUFFaEU3QixRQUFBQSxlQUFlLENBQUM1WixNQUFNLENBQUMsQ0FBQzBaLE9BQU8sR0FBRyxJQUFJO0FBQzFDLE9BQUMsTUFBTTtRQUNIMVosTUFBTSxDQUFDNGEsUUFBUSxHQUFHLEtBQUs7QUFDM0I7QUFDSjs7QUFFQTtJQUNBLFNBQVMrZSxnQkFBZ0JBLENBQUMzNUIsTUFBTSxFQUFFO01BQzlCLElBQUlnb0IsT0FBTyxHQUFHZ1AsZUFBZSxDQUFDYyxJQUFJLENBQUM5M0IsTUFBTSxDQUFDc2IsRUFBRSxDQUFDO01BQzdDLElBQUkwTSxPQUFPLEtBQUssSUFBSSxFQUFFO1FBQ2xCaG9CLE1BQU0sQ0FBQ3FhLEVBQUUsR0FBRyxJQUFJMWpCLElBQUksQ0FBQyxDQUFDcXhCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQztBQUNKO01BRUE0UCxhQUFhLENBQUM1M0IsTUFBTSxDQUFDO0FBQ3JCLE1BQUEsSUFBSUEsTUFBTSxDQUFDNGEsUUFBUSxLQUFLLEtBQUssRUFBRTtRQUMzQixPQUFPNWEsTUFBTSxDQUFDNGEsUUFBUTtBQUMxQixPQUFDLE1BQU07UUFDSDtBQUNKO01BRUE2ZSxpQkFBaUIsQ0FBQ3o1QixNQUFNLENBQUM7QUFDekIsTUFBQSxJQUFJQSxNQUFNLENBQUM0YSxRQUFRLEtBQUssS0FBSyxFQUFFO1FBQzNCLE9BQU81YSxNQUFNLENBQUM0YSxRQUFRO0FBQzFCLE9BQUMsTUFBTTtRQUNIO0FBQ0o7TUFFQSxJQUFJNWEsTUFBTSxDQUFDd2EsT0FBTyxFQUFFO1FBQ2hCeGEsTUFBTSxDQUFDNGEsUUFBUSxHQUFHLEtBQUs7QUFDM0IsT0FBQyxNQUFNO0FBQ0g7QUFDQXpELFFBQUFBLEtBQUssQ0FBQ3lpQix1QkFBdUIsQ0FBQzU1QixNQUFNLENBQUM7QUFDekM7QUFDSjtBQUVBbVgsSUFBQUEsS0FBSyxDQUFDeWlCLHVCQUF1QixHQUFHemQsU0FBUyxDQUNyQyw0R0FBNEcsR0FDeEcsMkZBQTJGLEdBQzNGLDRGQUE0RixFQUNoRyxVQUFVbmMsTUFBTSxFQUFFO0FBQ2RBLE1BQUFBLE1BQU0sQ0FBQ3FhLEVBQUUsR0FBRyxJQUFJMWpCLElBQUksQ0FBQ3FKLE1BQU0sQ0FBQ3NiLEVBQUUsSUFBSXRiLE1BQU0sQ0FBQzY1QixPQUFPLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLEtBQ0osQ0FBQzs7QUFFRDtJQUNBLFNBQVMzckIsUUFBUUEsQ0FBQ2hVLENBQUMsRUFBRUMsQ0FBQyxFQUFFMi9CLENBQUMsRUFBRTtNQUN2QixJQUFJNS9CLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDWCxRQUFBLE9BQU9BLENBQUM7QUFDWjtNQUNBLElBQUlDLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDWCxRQUFBLE9BQU9BLENBQUM7QUFDWjtBQUNBLE1BQUEsT0FBTzIvQixDQUFDO0FBQ1o7SUFFQSxTQUFTQyxnQkFBZ0JBLENBQUMvNUIsTUFBTSxFQUFFO0FBQzlCO01BQ0EsSUFBSWc2QixRQUFRLEdBQUcsSUFBSXJqQyxJQUFJLENBQUN3Z0IsS0FBSyxDQUFDN2dCLEdBQUcsRUFBRSxDQUFDO01BQ3BDLElBQUkwSixNQUFNLENBQUM2NUIsT0FBTyxFQUFFO0FBQ2hCLFFBQUEsT0FBTyxDQUNIRyxRQUFRLENBQUM1TyxjQUFjLEVBQUUsRUFDekI0TyxRQUFRLENBQUM5TyxXQUFXLEVBQUUsRUFDdEI4TyxRQUFRLENBQUNsUCxVQUFVLEVBQUUsQ0FDeEI7QUFDTDtBQUNBLE1BQUEsT0FBTyxDQUFDa1AsUUFBUSxDQUFDM08sV0FBVyxFQUFFLEVBQUUyTyxRQUFRLENBQUM3TyxRQUFRLEVBQUUsRUFBRTZPLFFBQVEsQ0FBQ2pQLE9BQU8sRUFBRSxDQUFDO0FBQzVFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0lBQ0EsU0FBU2tQLGVBQWVBLENBQUNqNkIsTUFBTSxFQUFFO0FBQzdCLE1BQUEsSUFBSWpGLENBQUM7UUFDRDZuQixJQUFJO1FBQ0p4ckIsS0FBSyxHQUFHLEVBQUU7UUFDVjhpQyxXQUFXO1FBQ1hDLGVBQWU7UUFDZkMsU0FBUztNQUViLElBQUlwNkIsTUFBTSxDQUFDcWEsRUFBRSxFQUFFO1FBQ1g7QUFDSjtBQUVBNmYsTUFBQUEsV0FBVyxHQUFHSCxnQkFBZ0IsQ0FBQy81QixNQUFNLENBQUM7O0FBRXRDO01BQ0EsSUFBSUEsTUFBTSxDQUFDZ3BCLEVBQUUsSUFBSWhwQixNQUFNLENBQUNrcEIsRUFBRSxDQUFDSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUl0cEIsTUFBTSxDQUFDa3BCLEVBQUUsQ0FBQ0csS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO1FBQ2xFZ1IscUJBQXFCLENBQUNyNkIsTUFBTSxDQUFDO0FBQ2pDOztBQUVBO0FBQ0EsTUFBQSxJQUFJQSxNQUFNLENBQUNzNkIsVUFBVSxJQUFJLElBQUksRUFBRTtBQUMzQkYsUUFBQUEsU0FBUyxHQUFHbHNCLFFBQVEsQ0FBQ2xPLE1BQU0sQ0FBQ2twQixFQUFFLENBQUNFLElBQUksQ0FBQyxFQUFFOFEsV0FBVyxDQUFDOVEsSUFBSSxDQUFDLENBQUM7QUFFeEQsUUFBQSxJQUNJcHBCLE1BQU0sQ0FBQ3M2QixVQUFVLEdBQUd2USxVQUFVLENBQUNxUSxTQUFTLENBQUMsSUFDekNwNkIsTUFBTSxDQUFDczZCLFVBQVUsS0FBSyxDQUFDLEVBQ3pCO0FBQ0UxZ0IsVUFBQUEsZUFBZSxDQUFDNVosTUFBTSxDQUFDLENBQUN3MkIsa0JBQWtCLEdBQUcsSUFBSTtBQUNyRDtRQUVBNVQsSUFBSSxHQUFHdU0sYUFBYSxDQUFDaUwsU0FBUyxFQUFFLENBQUMsRUFBRXA2QixNQUFNLENBQUNzNkIsVUFBVSxDQUFDO1FBQ3JEdDZCLE1BQU0sQ0FBQ2twQixFQUFFLENBQUNHLEtBQUssQ0FBQyxHQUFHekcsSUFBSSxDQUFDc0ksV0FBVyxFQUFFO1FBQ3JDbHJCLE1BQU0sQ0FBQ2twQixFQUFFLENBQUNJLElBQUksQ0FBQyxHQUFHMUcsSUFBSSxDQUFDa0ksVUFBVSxFQUFFO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFDQSxLQUFLL3ZCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxDQUFDLElBQUlpRixNQUFNLENBQUNrcEIsRUFBRSxDQUFDbnVCLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFQSxDQUFDLEVBQUU7QUFDNUNpRixRQUFBQSxNQUFNLENBQUNrcEIsRUFBRSxDQUFDbnVCLENBQUMsQ0FBQyxHQUFHM0QsS0FBSyxDQUFDMkQsQ0FBQyxDQUFDLEdBQUdtL0IsV0FBVyxDQUFDbi9CLENBQUMsQ0FBQztBQUM1Qzs7QUFFQTtBQUNBLE1BQUEsT0FBT0EsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxFQUFFLEVBQUU7QUFDZmlGLFFBQUFBLE1BQU0sQ0FBQ2twQixFQUFFLENBQUNudUIsQ0FBQyxDQUFDLEdBQUczRCxLQUFLLENBQUMyRCxDQUFDLENBQUMsR0FDbkJpRixNQUFNLENBQUNrcEIsRUFBRSxDQUFDbnVCLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBSUEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFJaUYsTUFBTSxDQUFDa3BCLEVBQUUsQ0FBQ251QixDQUFDLENBQUM7QUFDL0Q7O0FBRUE7QUFDQSxNQUFBLElBQ0lpRixNQUFNLENBQUNrcEIsRUFBRSxDQUFDSyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQ3RCdnBCLE1BQU0sQ0FBQ2twQixFQUFFLENBQUNNLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFDdkJ4cEIsTUFBTSxDQUFDa3BCLEVBQUUsQ0FBQ08sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUN2QnpwQixNQUFNLENBQUNrcEIsRUFBRSxDQUFDUSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQzlCO1FBQ0UxcEIsTUFBTSxDQUFDdTZCLFFBQVEsR0FBRyxJQUFJO0FBQ3RCdjZCLFFBQUFBLE1BQU0sQ0FBQ2twQixFQUFFLENBQUNLLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDdkI7QUFFQXZwQixNQUFBQSxNQUFNLENBQUNxYSxFQUFFLEdBQUcsQ0FBQ3JhLE1BQU0sQ0FBQzY1QixPQUFPLEdBQUcxSyxhQUFhLEdBQUdELFVBQVUsRUFBRTlYLEtBQUssQ0FDM0QsSUFBSSxFQUNKaGdCLEtBQ0osQ0FBQztBQUNEK2lDLE1BQUFBLGVBQWUsR0FBR242QixNQUFNLENBQUM2NUIsT0FBTyxHQUMxQjc1QixNQUFNLENBQUNxYSxFQUFFLENBQUMyUSxTQUFTLEVBQUUsR0FDckJockIsTUFBTSxDQUFDcWEsRUFBRSxDQUFDNFEsTUFBTSxFQUFFOztBQUV4QjtBQUNBO0FBQ0EsTUFBQSxJQUFJanJCLE1BQU0sQ0FBQ3liLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDckJ6YixRQUFBQSxNQUFNLENBQUNxYSxFQUFFLENBQUNxUixhQUFhLENBQUMxckIsTUFBTSxDQUFDcWEsRUFBRSxDQUFDcVEsYUFBYSxFQUFFLEdBQUcxcUIsTUFBTSxDQUFDeWIsSUFBSSxDQUFDO0FBQ3BFO01BRUEsSUFBSXpiLE1BQU0sQ0FBQ3U2QixRQUFRLEVBQUU7QUFDakJ2NkIsUUFBQUEsTUFBTSxDQUFDa3BCLEVBQUUsQ0FBQ0ssSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUN4Qjs7QUFFQTtNQUNBLElBQ0l2cEIsTUFBTSxDQUFDZ3BCLEVBQUUsSUFDVCxPQUFPaHBCLE1BQU0sQ0FBQ2dwQixFQUFFLENBQUN0SCxDQUFDLEtBQUssV0FBVyxJQUNsQzFoQixNQUFNLENBQUNncEIsRUFBRSxDQUFDdEgsQ0FBQyxLQUFLeVksZUFBZSxFQUNqQztBQUNFdmdCLFFBQUFBLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDMlosZUFBZSxHQUFHLElBQUk7QUFDbEQ7QUFDSjtJQUVBLFNBQVMwZ0IscUJBQXFCQSxDQUFDcjZCLE1BQU0sRUFBRTtBQUNuQyxNQUFBLElBQUk0aEIsQ0FBQyxFQUFFaUUsUUFBUSxFQUFFaEIsSUFBSSxFQUFFNUIsT0FBTyxFQUFFcU0sR0FBRyxFQUFFQyxHQUFHLEVBQUVpTCxJQUFJLEVBQUVDLGVBQWUsRUFBRUMsT0FBTztNQUV4RTlZLENBQUMsR0FBRzVoQixNQUFNLENBQUNncEIsRUFBRTtBQUNiLE1BQUEsSUFBSXBILENBQUMsQ0FBQzZDLEVBQUUsSUFBSSxJQUFJLElBQUk3QyxDQUFDLENBQUNrRCxDQUFDLElBQUksSUFBSSxJQUFJbEQsQ0FBQyxDQUFDc0IsQ0FBQyxJQUFJLElBQUksRUFBRTtRQUM1Q29NLEdBQUcsR0FBRyxDQUFDO1FBQ1BDLEdBQUcsR0FBRyxDQUFDOztBQUVQO0FBQ0E7QUFDQTtBQUNBO1FBQ0ExSixRQUFRLEdBQUczWCxRQUFRLENBQ2YwVCxDQUFDLENBQUM2QyxFQUFFLEVBQ0p6a0IsTUFBTSxDQUFDa3BCLEVBQUUsQ0FBQ0UsSUFBSSxDQUFDLEVBQ2YyRyxVQUFVLENBQUM0SyxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUN6VixJQUNwQyxDQUFDO1FBQ0RMLElBQUksR0FBRzNXLFFBQVEsQ0FBQzBULENBQUMsQ0FBQ2tELENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkI3QixPQUFPLEdBQUcvVSxRQUFRLENBQUMwVCxDQUFDLENBQUNzQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQUlELE9BQU8sR0FBRyxDQUFDLElBQUlBLE9BQU8sR0FBRyxDQUFDLEVBQUU7VUFDNUJ3WCxlQUFlLEdBQUcsSUFBSTtBQUMxQjtBQUNKLE9BQUMsTUFBTTtRQUNIbkwsR0FBRyxHQUFHdHZCLE1BQU0sQ0FBQzRiLE9BQU8sQ0FBQ3dVLEtBQUssQ0FBQ2QsR0FBRztRQUM5QkMsR0FBRyxHQUFHdnZCLE1BQU0sQ0FBQzRiLE9BQU8sQ0FBQ3dVLEtBQUssQ0FBQ2IsR0FBRztRQUU5Qm1MLE9BQU8sR0FBRzNLLFVBQVUsQ0FBQzRLLFdBQVcsRUFBRSxFQUFFckwsR0FBRyxFQUFFQyxHQUFHLENBQUM7QUFFN0MxSixRQUFBQSxRQUFRLEdBQUczWCxRQUFRLENBQUMwVCxDQUFDLENBQUMwQyxFQUFFLEVBQUV0a0IsTUFBTSxDQUFDa3BCLEVBQUUsQ0FBQ0UsSUFBSSxDQUFDLEVBQUVzUixPQUFPLENBQUN4VixJQUFJLENBQUM7O0FBRXhEO1FBQ0FMLElBQUksR0FBRzNXLFFBQVEsQ0FBQzBULENBQUMsQ0FBQ0EsQ0FBQyxFQUFFOFksT0FBTyxDQUFDN1YsSUFBSSxDQUFDO0FBRWxDLFFBQUEsSUFBSWpELENBQUMsQ0FBQ0YsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUNiO1VBQ0F1QixPQUFPLEdBQUdyQixDQUFDLENBQUNGLENBQUM7VUFDYixJQUFJdUIsT0FBTyxHQUFHLENBQUMsSUFBSUEsT0FBTyxHQUFHLENBQUMsRUFBRTtZQUM1QndYLGVBQWUsR0FBRyxJQUFJO0FBQzFCO0FBQ0osU0FBQyxNQUFNLElBQUk3WSxDQUFDLENBQUNtQixDQUFDLElBQUksSUFBSSxFQUFFO0FBQ3BCO0FBQ0FFLFVBQUFBLE9BQU8sR0FBR3JCLENBQUMsQ0FBQ21CLENBQUMsR0FBR3VNLEdBQUc7VUFDbkIsSUFBSTFOLENBQUMsQ0FBQ21CLENBQUMsR0FBRyxDQUFDLElBQUluQixDQUFDLENBQUNtQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCMFgsZUFBZSxHQUFHLElBQUk7QUFDMUI7QUFDSixTQUFDLE1BQU07QUFDSDtVQUNBeFgsT0FBTyxHQUFHcU0sR0FBRztBQUNqQjtBQUNKO0FBQ0EsTUFBQSxJQUFJekssSUFBSSxHQUFHLENBQUMsSUFBSUEsSUFBSSxHQUFHb0wsV0FBVyxDQUFDcEssUUFBUSxFQUFFeUosR0FBRyxFQUFFQyxHQUFHLENBQUMsRUFBRTtBQUNwRDNWLFFBQUFBLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDeTJCLGNBQWMsR0FBRyxJQUFJO0FBQ2pELE9BQUMsTUFBTSxJQUFJZ0UsZUFBZSxJQUFJLElBQUksRUFBRTtBQUNoQzdnQixRQUFBQSxlQUFlLENBQUM1WixNQUFNLENBQUMsQ0FBQzAyQixnQkFBZ0IsR0FBRyxJQUFJO0FBQ25ELE9BQUMsTUFBTTtBQUNIOEQsUUFBQUEsSUFBSSxHQUFHOUssa0JBQWtCLENBQUM3SixRQUFRLEVBQUVoQixJQUFJLEVBQUU1QixPQUFPLEVBQUVxTSxHQUFHLEVBQUVDLEdBQUcsQ0FBQztRQUM1RHZ2QixNQUFNLENBQUNrcEIsRUFBRSxDQUFDRSxJQUFJLENBQUMsR0FBR29SLElBQUksQ0FBQ3RWLElBQUk7QUFDM0JsbEIsUUFBQUEsTUFBTSxDQUFDczZCLFVBQVUsR0FBR0UsSUFBSSxDQUFDNVUsU0FBUztBQUN0QztBQUNKOztBQUVBO0FBQ0F6TyxJQUFBQSxLQUFLLENBQUN5akIsUUFBUSxHQUFHLFlBQVksRUFBRTs7QUFFL0I7QUFDQXpqQixJQUFBQSxLQUFLLENBQUMwakIsUUFBUSxHQUFHLFlBQVksRUFBRTs7QUFFL0I7SUFDQSxTQUFTeEMseUJBQXlCQSxDQUFDcjRCLE1BQU0sRUFBRTtBQUN2QztNQUNBLElBQUlBLE1BQU0sQ0FBQ3ViLEVBQUUsS0FBS3BFLEtBQUssQ0FBQ3lqQixRQUFRLEVBQUU7UUFDOUJoRCxhQUFhLENBQUM1M0IsTUFBTSxDQUFDO1FBQ3JCO0FBQ0o7TUFDQSxJQUFJQSxNQUFNLENBQUN1YixFQUFFLEtBQUtwRSxLQUFLLENBQUMwakIsUUFBUSxFQUFFO1FBQzlCcEIsaUJBQWlCLENBQUN6NUIsTUFBTSxDQUFDO1FBQ3pCO0FBQ0o7TUFDQUEsTUFBTSxDQUFDa3BCLEVBQUUsR0FBRyxFQUFFO0FBQ2R0UCxNQUFBQSxlQUFlLENBQUM1WixNQUFNLENBQUMsQ0FBQzRZLEtBQUssR0FBRyxJQUFJOztBQUVwQztBQUNBLE1BQUEsSUFBSXdKLE1BQU0sR0FBRyxFQUFFLEdBQUdwaUIsTUFBTSxDQUFDc2IsRUFBRTtRQUN2QnZnQixDQUFDO1FBQ0RrK0IsV0FBVztRQUNYclEsTUFBTTtRQUNOekosS0FBSztRQUNMMmIsT0FBTztRQUNQQyxZQUFZLEdBQUczWSxNQUFNLENBQUMxbkIsTUFBTTtRQUM1QnNnQyxzQkFBc0IsR0FBRyxDQUFDO1FBQzFCeGhCLEdBQUc7UUFDSHNQLFFBQVE7QUFFWkYsTUFBQUEsTUFBTSxHQUNGOUksWUFBWSxDQUFDOWYsTUFBTSxDQUFDdWIsRUFBRSxFQUFFdmIsTUFBTSxDQUFDNGIsT0FBTyxDQUFDLENBQUM2RCxLQUFLLENBQUNYLGdCQUFnQixDQUFDLElBQUksRUFBRTtNQUN6RWdLLFFBQVEsR0FBR0YsTUFBTSxDQUFDbHVCLE1BQU07TUFDeEIsS0FBS0ssQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHK3RCLFFBQVEsRUFBRS90QixDQUFDLEVBQUUsRUFBRTtBQUMzQm9rQixRQUFBQSxLQUFLLEdBQUd5SixNQUFNLENBQUM3dEIsQ0FBQyxDQUFDO0FBQ2pCaytCLFFBQUFBLFdBQVcsR0FBRyxDQUFDN1csTUFBTSxDQUFDM0MsS0FBSyxDQUFDb0kscUJBQXFCLENBQUMxSSxLQUFLLEVBQUVuZixNQUFNLENBQUMsQ0FBQyxJQUM3RCxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1YsSUFBSWk1QixXQUFXLEVBQUU7QUFDYjZCLFVBQUFBLE9BQU8sR0FBRzFZLE1BQU0sQ0FBQ3ZELE1BQU0sQ0FBQyxDQUFDLEVBQUV1RCxNQUFNLENBQUN6WSxPQUFPLENBQUNzdkIsV0FBVyxDQUFDLENBQUM7QUFDdkQsVUFBQSxJQUFJNkIsT0FBTyxDQUFDcGdDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEJrZixlQUFlLENBQUM1WixNQUFNLENBQUMsQ0FBQzhZLFdBQVcsQ0FBQ3ZXLElBQUksQ0FBQ3U0QixPQUFPLENBQUM7QUFDckQ7QUFDQTFZLFVBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDdGxCLEtBQUssQ0FDakJzbEIsTUFBTSxDQUFDelksT0FBTyxDQUFDc3ZCLFdBQVcsQ0FBQyxHQUFHQSxXQUFXLENBQUN2K0IsTUFDOUMsQ0FBQztVQUNEc2dDLHNCQUFzQixJQUFJL0IsV0FBVyxDQUFDditCLE1BQU07QUFDaEQ7QUFDQTtBQUNBLFFBQUEsSUFBSXVrQixvQkFBb0IsQ0FBQ0UsS0FBSyxDQUFDLEVBQUU7VUFDN0IsSUFBSThaLFdBQVcsRUFBRTtBQUNicmYsWUFBQUEsZUFBZSxDQUFDNVosTUFBTSxDQUFDLENBQUM0WSxLQUFLLEdBQUcsS0FBSztBQUN6QyxXQUFDLE1BQU07WUFDSGdCLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDNlksWUFBWSxDQUFDdFcsSUFBSSxDQUFDNGMsS0FBSyxDQUFDO0FBQ3BEO0FBQ0E4SixVQUFBQSx1QkFBdUIsQ0FBQzlKLEtBQUssRUFBRThaLFdBQVcsRUFBRWo1QixNQUFNLENBQUM7U0FDdEQsTUFBTSxJQUFJQSxNQUFNLENBQUN3YSxPQUFPLElBQUksQ0FBQ3llLFdBQVcsRUFBRTtVQUN2Q3JmLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDNlksWUFBWSxDQUFDdFcsSUFBSSxDQUFDNGMsS0FBSyxDQUFDO0FBQ3BEO0FBQ0o7O0FBRUE7TUFDQXZGLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDZ1osYUFBYSxHQUNqQytoQixZQUFZLEdBQUdDLHNCQUFzQjtBQUN6QyxNQUFBLElBQUk1WSxNQUFNLENBQUMxbkIsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQmtmLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDOFksV0FBVyxDQUFDdlcsSUFBSSxDQUFDNmYsTUFBTSxDQUFDO0FBQ3BEOztBQUVBO01BQ0EsSUFDSXBpQixNQUFNLENBQUNrcEIsRUFBRSxDQUFDSyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQ3JCM1AsZUFBZSxDQUFDNVosTUFBTSxDQUFDLENBQUN5YSxPQUFPLEtBQUssSUFBSSxJQUN4Q3phLE1BQU0sQ0FBQ2twQixFQUFFLENBQUNLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFDckI7QUFDRTNQLFFBQUFBLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDeWEsT0FBTyxHQUFHQyxTQUFTO0FBQy9DO0FBRUFkLE1BQUFBLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDdVosZUFBZSxHQUFHdlosTUFBTSxDQUFDa3BCLEVBQUUsQ0FBQ3BzQixLQUFLLENBQUMsQ0FBQyxDQUFDO01BQzVEOGMsZUFBZSxDQUFDNVosTUFBTSxDQUFDLENBQUN5WixRQUFRLEdBQUd6WixNQUFNLENBQUMrekIsU0FBUztBQUNuRDtNQUNBL3pCLE1BQU0sQ0FBQ2twQixFQUFFLENBQUNLLElBQUksQ0FBQyxHQUFHMFIsZUFBZSxDQUM3Qmo3QixNQUFNLENBQUM0YixPQUFPLEVBQ2Q1YixNQUFNLENBQUNrcEIsRUFBRSxDQUFDSyxJQUFJLENBQUMsRUFDZnZwQixNQUFNLENBQUMrekIsU0FDWCxDQUFDOztBQUVEO0FBQ0F2YSxNQUFBQSxHQUFHLEdBQUdJLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDd1osR0FBRztNQUNqQyxJQUFJQSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ2R4WixNQUFNLENBQUNrcEIsRUFBRSxDQUFDRSxJQUFJLENBQUMsR0FBR3BwQixNQUFNLENBQUM0YixPQUFPLENBQUNzZixlQUFlLENBQUMxaEIsR0FBRyxFQUFFeFosTUFBTSxDQUFDa3BCLEVBQUUsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7QUFDMUU7TUFFQTZRLGVBQWUsQ0FBQ2o2QixNQUFNLENBQUM7TUFDdkJ1MkIsYUFBYSxDQUFDdjJCLE1BQU0sQ0FBQztBQUN6QjtJQUVBLFNBQVNpN0IsZUFBZUEsQ0FBQzFpQixNQUFNLEVBQUVrTCxJQUFJLEVBQUVoSyxRQUFRLEVBQUU7QUFDN0MsTUFBQSxJQUFJMGhCLElBQUk7TUFFUixJQUFJMWhCLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDbEI7QUFDQSxRQUFBLE9BQU9nSyxJQUFJO0FBQ2Y7QUFDQSxNQUFBLElBQUlsTCxNQUFNLENBQUM2aUIsWUFBWSxJQUFJLElBQUksRUFBRTtRQUM3QixPQUFPN2lCLE1BQU0sQ0FBQzZpQixZQUFZLENBQUMzWCxJQUFJLEVBQUVoSyxRQUFRLENBQUM7QUFDOUMsT0FBQyxNQUFNLElBQUlsQixNQUFNLENBQUN1YixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzVCO0FBQ0FxSCxRQUFBQSxJQUFJLEdBQUc1aUIsTUFBTSxDQUFDdWIsSUFBSSxDQUFDcmEsUUFBUSxDQUFDO0FBQzVCLFFBQUEsSUFBSTBoQixJQUFJLElBQUkxWCxJQUFJLEdBQUcsRUFBRSxFQUFFO1VBQ25CQSxJQUFJLElBQUksRUFBRTtBQUNkO0FBQ0EsUUFBQSxJQUFJLENBQUMwWCxJQUFJLElBQUkxWCxJQUFJLEtBQUssRUFBRSxFQUFFO1VBQ3RCQSxJQUFJLEdBQUcsQ0FBQztBQUNaO0FBQ0EsUUFBQSxPQUFPQSxJQUFJO0FBQ2YsT0FBQyxNQUFNO0FBQ0g7QUFDQSxRQUFBLE9BQU9BLElBQUk7QUFDZjtBQUNKOztBQUVBO0lBQ0EsU0FBUzRYLHdCQUF3QkEsQ0FBQ3I3QixNQUFNLEVBQUU7QUFDdEMsTUFBQSxJQUFJczdCLFVBQVU7UUFDVkMsVUFBVTtRQUNWQyxXQUFXO1FBQ1h6Z0MsQ0FBQztRQUNEMGdDLFlBQVk7UUFDWkMsZ0JBQWdCO1FBQ2hCQyxpQkFBaUIsR0FBRyxLQUFLO0FBQ3pCQyxRQUFBQSxVQUFVLEdBQUc1N0IsTUFBTSxDQUFDdWIsRUFBRSxDQUFDN2dCLE1BQU07TUFFakMsSUFBSWtoQyxVQUFVLEtBQUssQ0FBQyxFQUFFO0FBQ2xCaGlCLFFBQUFBLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDb1osYUFBYSxHQUFHLElBQUk7UUFDNUNwWixNQUFNLENBQUNxYSxFQUFFLEdBQUcsSUFBSTFqQixJQUFJLENBQUNta0IsR0FBRyxDQUFDO1FBQ3pCO0FBQ0o7TUFFQSxLQUFLL2YsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNmdDLFVBQVUsRUFBRTdnQyxDQUFDLEVBQUUsRUFBRTtRQUM3QjBnQyxZQUFZLEdBQUcsQ0FBQztRQUNoQkMsZ0JBQWdCLEdBQUcsS0FBSztBQUN4QkosUUFBQUEsVUFBVSxHQUFHcmdCLFVBQVUsQ0FBQyxFQUFFLEVBQUVqYixNQUFNLENBQUM7QUFDbkMsUUFBQSxJQUFJQSxNQUFNLENBQUM2NUIsT0FBTyxJQUFJLElBQUksRUFBRTtBQUN4QnlCLFVBQUFBLFVBQVUsQ0FBQ3pCLE9BQU8sR0FBRzc1QixNQUFNLENBQUM2NUIsT0FBTztBQUN2QztRQUNBeUIsVUFBVSxDQUFDL2YsRUFBRSxHQUFHdmIsTUFBTSxDQUFDdWIsRUFBRSxDQUFDeGdCLENBQUMsQ0FBQztRQUM1QnM5Qix5QkFBeUIsQ0FBQ2lELFVBQVUsQ0FBQztBQUVyQyxRQUFBLElBQUlyaEIsT0FBTyxDQUFDcWhCLFVBQVUsQ0FBQyxFQUFFO1VBQ3JCSSxnQkFBZ0IsR0FBRyxJQUFJO0FBQzNCOztBQUVBO0FBQ0FELFFBQUFBLFlBQVksSUFBSTdoQixlQUFlLENBQUMwaEIsVUFBVSxDQUFDLENBQUN0aUIsYUFBYTs7QUFFekQ7UUFDQXlpQixZQUFZLElBQUk3aEIsZUFBZSxDQUFDMGhCLFVBQVUsQ0FBQyxDQUFDemlCLFlBQVksQ0FBQ25lLE1BQU0sR0FBRyxFQUFFO0FBRXBFa2YsUUFBQUEsZUFBZSxDQUFDMGhCLFVBQVUsQ0FBQyxDQUFDTyxLQUFLLEdBQUdKLFlBQVk7UUFFaEQsSUFBSSxDQUFDRSxpQkFBaUIsRUFBRTtVQUNwQixJQUNJSCxXQUFXLElBQUksSUFBSSxJQUNuQkMsWUFBWSxHQUFHRCxXQUFXLElBQzFCRSxnQkFBZ0IsRUFDbEI7WUFDRUYsV0FBVyxHQUFHQyxZQUFZO1lBQzFCRixVQUFVLEdBQUdELFVBQVU7WUFDdkIsSUFBSUksZ0JBQWdCLEVBQUU7Y0FDbEJDLGlCQUFpQixHQUFHLElBQUk7QUFDNUI7QUFDSjtBQUNKLFNBQUMsTUFBTTtVQUNILElBQUlGLFlBQVksR0FBR0QsV0FBVyxFQUFFO1lBQzVCQSxXQUFXLEdBQUdDLFlBQVk7WUFDMUJGLFVBQVUsR0FBR0QsVUFBVTtBQUMzQjtBQUNKO0FBQ0o7QUFFQW5qQixNQUFBQSxNQUFNLENBQUNuWSxNQUFNLEVBQUV1N0IsVUFBVSxJQUFJRCxVQUFVLENBQUM7QUFDNUM7SUFFQSxTQUFTUSxnQkFBZ0JBLENBQUM5N0IsTUFBTSxFQUFFO01BQzlCLElBQUlBLE1BQU0sQ0FBQ3FhLEVBQUUsRUFBRTtRQUNYO0FBQ0o7TUFFQSxJQUFJdGYsQ0FBQyxHQUFHdXFCLG9CQUFvQixDQUFDdGxCLE1BQU0sQ0FBQ3NiLEVBQUUsQ0FBQztBQUNuQ3lnQixRQUFBQSxTQUFTLEdBQUdoaEMsQ0FBQyxDQUFDK25CLEdBQUcsS0FBS3BJLFNBQVMsR0FBRzNmLENBQUMsQ0FBQzZuQixJQUFJLEdBQUc3bkIsQ0FBQyxDQUFDK25CLEdBQUc7QUFDcEQ5aUIsTUFBQUEsTUFBTSxDQUFDa3BCLEVBQUUsR0FBRzdlLEdBQUcsQ0FDWCxDQUFDdFAsQ0FBQyxDQUFDbXFCLElBQUksRUFBRW5xQixDQUFDLENBQUNpcEIsS0FBSyxFQUFFK1gsU0FBUyxFQUFFaGhDLENBQUMsQ0FBQzBvQixJQUFJLEVBQUUxb0IsQ0FBQyxDQUFDK29CLE1BQU0sRUFBRS9vQixDQUFDLENBQUNzcEIsTUFBTSxFQUFFdHBCLENBQUMsQ0FBQzZvQixXQUFXLENBQUMsRUFDdkUsVUFBVWxNLEdBQUcsRUFBRTtRQUNYLE9BQU9BLEdBQUcsSUFBSW9TLFFBQVEsQ0FBQ3BTLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDbkMsT0FDSixDQUFDO01BRUR1aUIsZUFBZSxDQUFDajZCLE1BQU0sQ0FBQztBQUMzQjtJQUVBLFNBQVNnOEIsZ0JBQWdCQSxDQUFDaDhCLE1BQU0sRUFBRTtBQUM5QixNQUFBLElBQUlpWSxHQUFHLEdBQUcsSUFBSTRELE1BQU0sQ0FBQzBhLGFBQWEsQ0FBQzBGLGFBQWEsQ0FBQ2o4QixNQUFNLENBQUMsQ0FBQyxDQUFDO01BQzFELElBQUlpWSxHQUFHLENBQUNzaUIsUUFBUSxFQUFFO0FBQ2Q7QUFDQXRpQixRQUFBQSxHQUFHLENBQUN0aUIsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7UUFDZnNpQixHQUFHLENBQUNzaUIsUUFBUSxHQUFHN2YsU0FBUztBQUM1QjtBQUVBLE1BQUEsT0FBT3pDLEdBQUc7QUFDZDtJQUVBLFNBQVNna0IsYUFBYUEsQ0FBQ2o4QixNQUFNLEVBQUU7QUFDM0IsTUFBQSxJQUFJNUksS0FBSyxHQUFHNEksTUFBTSxDQUFDc2IsRUFBRTtRQUNqQmhELE1BQU0sR0FBR3RZLE1BQU0sQ0FBQ3ViLEVBQUU7QUFFdEJ2YixNQUFBQSxNQUFNLENBQUM0YixPQUFPLEdBQUc1YixNQUFNLENBQUM0YixPQUFPLElBQUlvYSxTQUFTLENBQUNoMkIsTUFBTSxDQUFDd2IsRUFBRSxDQUFDO01BRXZELElBQUlwa0IsS0FBSyxLQUFLLElBQUksSUFBS2toQixNQUFNLEtBQUtvQyxTQUFTLElBQUl0akIsS0FBSyxLQUFLLEVBQUcsRUFBRTtRQUMxRCxPQUFPeWpCLGFBQWEsQ0FBQztBQUFFNUIsVUFBQUEsU0FBUyxFQUFFO0FBQUssU0FBQyxDQUFDO0FBQzdDO0FBRUEsTUFBQSxJQUFJLE9BQU83aEIsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMzQjRJLFFBQUFBLE1BQU0sQ0FBQ3NiLEVBQUUsR0FBR2xrQixLQUFLLEdBQUc0SSxNQUFNLENBQUM0YixPQUFPLENBQUNzZ0IsUUFBUSxDQUFDOWtDLEtBQUssQ0FBQztBQUN0RDtBQUVBLE1BQUEsSUFBSTJrQixRQUFRLENBQUMza0IsS0FBSyxDQUFDLEVBQUU7UUFDakIsT0FBTyxJQUFJeWtCLE1BQU0sQ0FBQzBhLGFBQWEsQ0FBQ24vQixLQUFLLENBQUMsQ0FBQztBQUMzQyxPQUFDLE1BQU0sSUFBSTJnQixNQUFNLENBQUMzZ0IsS0FBSyxDQUFDLEVBQUU7UUFDdEI0SSxNQUFNLENBQUNxYSxFQUFFLEdBQUdqakIsS0FBSztBQUNyQixPQUFDLE1BQU0sSUFBSStELE9BQU8sQ0FBQ21kLE1BQU0sQ0FBQyxFQUFFO1FBQ3hCK2lCLHdCQUF3QixDQUFDcjdCLE1BQU0sQ0FBQztPQUNuQyxNQUFNLElBQUlzWSxNQUFNLEVBQUU7UUFDZitmLHlCQUF5QixDQUFDcjRCLE1BQU0sQ0FBQztBQUNyQyxPQUFDLE1BQU07UUFDSG04QixlQUFlLENBQUNuOEIsTUFBTSxDQUFDO0FBQzNCO0FBRUEsTUFBQSxJQUFJLENBQUNpYSxPQUFPLENBQUNqYSxNQUFNLENBQUMsRUFBRTtRQUNsQkEsTUFBTSxDQUFDcWEsRUFBRSxHQUFHLElBQUk7QUFDcEI7QUFFQSxNQUFBLE9BQU9yYSxNQUFNO0FBQ2pCO0lBRUEsU0FBU204QixlQUFlQSxDQUFDbjhCLE1BQU0sRUFBRTtBQUM3QixNQUFBLElBQUk1SSxLQUFLLEdBQUc0SSxNQUFNLENBQUNzYixFQUFFO0FBQ3JCLE1BQUEsSUFBSXpELFdBQVcsQ0FBQ3pnQixLQUFLLENBQUMsRUFBRTtRQUNwQjRJLE1BQU0sQ0FBQ3FhLEVBQUUsR0FBRyxJQUFJMWpCLElBQUksQ0FBQ3dnQixLQUFLLENBQUM3Z0IsR0FBRyxFQUFFLENBQUM7QUFDckMsT0FBQyxNQUFNLElBQUl5aEIsTUFBTSxDQUFDM2dCLEtBQUssQ0FBQyxFQUFFO1FBQ3RCNEksTUFBTSxDQUFDcWEsRUFBRSxHQUFHLElBQUkxakIsSUFBSSxDQUFDUyxLQUFLLENBQUNnaEIsT0FBTyxFQUFFLENBQUM7QUFDekMsT0FBQyxNQUFNLElBQUksT0FBT2hoQixLQUFLLEtBQUssUUFBUSxFQUFFO1FBQ2xDdWlDLGdCQUFnQixDQUFDMzVCLE1BQU0sQ0FBQztBQUM1QixPQUFDLE1BQU0sSUFBSTdFLE9BQU8sQ0FBQy9ELEtBQUssQ0FBQyxFQUFFO0FBQ3ZCNEksUUFBQUEsTUFBTSxDQUFDa3BCLEVBQUUsR0FBRzdlLEdBQUcsQ0FBQ2pULEtBQUssQ0FBQzBGLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVNGEsR0FBRyxFQUFFO0FBQzNDLFVBQUEsT0FBT29TLFFBQVEsQ0FBQ3BTLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDNUIsU0FBQyxDQUFDO1FBQ0Z1aUIsZUFBZSxDQUFDajZCLE1BQU0sQ0FBQztBQUMzQixPQUFDLE1BQU0sSUFBSXVYLFFBQVEsQ0FBQ25nQixLQUFLLENBQUMsRUFBRTtRQUN4QjBrQyxnQkFBZ0IsQ0FBQzk3QixNQUFNLENBQUM7QUFDNUIsT0FBQyxNQUFNLElBQUk4WCxRQUFRLENBQUMxZ0IsS0FBSyxDQUFDLEVBQUU7QUFDeEI7UUFDQTRJLE1BQU0sQ0FBQ3FhLEVBQUUsR0FBRyxJQUFJMWpCLElBQUksQ0FBQ1MsS0FBSyxDQUFDO0FBQy9CLE9BQUMsTUFBTTtBQUNIK2YsUUFBQUEsS0FBSyxDQUFDeWlCLHVCQUF1QixDQUFDNTVCLE1BQU0sQ0FBQztBQUN6QztBQUNKO0lBRUEsU0FBU3lZLGdCQUFnQkEsQ0FBQ3JoQixLQUFLLEVBQUVraEIsTUFBTSxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRTZSLEtBQUssRUFBRTtNQUM1RCxJQUFJeVAsQ0FBQyxHQUFHLEVBQUU7TUFFVixJQUFJeGhCLE1BQU0sS0FBSyxJQUFJLElBQUlBLE1BQU0sS0FBSyxLQUFLLEVBQUU7UUFDckNFLE1BQU0sR0FBR0YsTUFBTTtRQUNmQSxNQUFNLEdBQUdvQyxTQUFTO0FBQ3RCO01BRUEsSUFBSW5DLE1BQU0sS0FBSyxJQUFJLElBQUlBLE1BQU0sS0FBSyxLQUFLLEVBQUU7UUFDckNDLE1BQU0sR0FBR0QsTUFBTTtRQUNmQSxNQUFNLEdBQUdtQyxTQUFTO0FBQ3RCO01BRUEsSUFDS25ELFFBQVEsQ0FBQ25nQixLQUFLLENBQUMsSUFBSXFnQixhQUFhLENBQUNyZ0IsS0FBSyxDQUFDLElBQ3ZDK0QsT0FBTyxDQUFDL0QsS0FBSyxDQUFDLElBQUlBLEtBQUssQ0FBQ3NELE1BQU0sS0FBSyxDQUFFLEVBQ3hDO1FBQ0V0RCxLQUFLLEdBQUdzakIsU0FBUztBQUNyQjtBQUNBO0FBQ0E7TUFDQW9mLENBQUMsQ0FBQ3plLGdCQUFnQixHQUFHLElBQUk7TUFDekJ5ZSxDQUFDLENBQUNELE9BQU8sR0FBR0MsQ0FBQyxDQUFDcGUsTUFBTSxHQUFHMk8sS0FBSztNQUM1QnlQLENBQUMsQ0FBQ3RlLEVBQUUsR0FBR2pELE1BQU07TUFDYnVoQixDQUFDLENBQUN4ZSxFQUFFLEdBQUdsa0IsS0FBSztNQUNaMGlDLENBQUMsQ0FBQ3ZlLEVBQUUsR0FBR2pELE1BQU07TUFDYndoQixDQUFDLENBQUN0ZixPQUFPLEdBQUdoQyxNQUFNO01BRWxCLE9BQU93akIsZ0JBQWdCLENBQUNsQyxDQUFDLENBQUM7QUFDOUI7SUFFQSxTQUFTYSxXQUFXQSxDQUFDdmpDLEtBQUssRUFBRWtoQixNQUFNLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxFQUFFO01BQ2hELE9BQU9DLGdCQUFnQixDQUFDcmhCLEtBQUssRUFBRWtoQixNQUFNLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEtBQUssQ0FBQztBQUNqRTtBQUVBLElBQUEsSUFBSTRqQixZQUFZLEdBQUdqZ0IsU0FBUyxDQUNwQixvR0FBb0csRUFDcEcsWUFBWTtRQUNSLElBQUlrZ0IsS0FBSyxHQUFHMUIsV0FBVyxDQUFDdmpCLEtBQUssQ0FBQyxJQUFJLEVBQUVDLFNBQVMsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQzRDLE9BQU8sRUFBRSxJQUFJb2lCLEtBQUssQ0FBQ3BpQixPQUFPLEVBQUUsRUFBRTtBQUNuQyxVQUFBLE9BQU9vaUIsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUdBLEtBQUs7QUFDdEMsU0FBQyxNQUFNO1VBQ0gsT0FBT3hoQixhQUFhLEVBQUU7QUFDMUI7QUFDSixPQUNKLENBQUM7QUFDRHloQixNQUFBQSxZQUFZLEdBQUduZ0IsU0FBUyxDQUNwQixvR0FBb0csRUFDcEcsWUFBWTtRQUNSLElBQUlrZ0IsS0FBSyxHQUFHMUIsV0FBVyxDQUFDdmpCLEtBQUssQ0FBQyxJQUFJLEVBQUVDLFNBQVMsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQzRDLE9BQU8sRUFBRSxJQUFJb2lCLEtBQUssQ0FBQ3BpQixPQUFPLEVBQUUsRUFBRTtBQUNuQyxVQUFBLE9BQU9vaUIsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUdBLEtBQUs7QUFDdEMsU0FBQyxNQUFNO1VBQ0gsT0FBT3hoQixhQUFhLEVBQUU7QUFDMUI7QUFDSixPQUNKLENBQUM7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUEsU0FBUzBoQixNQUFNQSxDQUFDbDdCLEVBQUUsRUFBRW03QixPQUFPLEVBQUU7TUFDekIsSUFBSXZrQixHQUFHLEVBQUVsZCxDQUFDO0FBQ1YsTUFBQSxJQUFJeWhDLE9BQU8sQ0FBQzloQyxNQUFNLEtBQUssQ0FBQyxJQUFJUyxPQUFPLENBQUNxaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0NBLFFBQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN4QjtBQUNBLE1BQUEsSUFBSSxDQUFDQSxPQUFPLENBQUM5aEMsTUFBTSxFQUFFO1FBQ2pCLE9BQU9pZ0MsV0FBVyxFQUFFO0FBQ3hCO0FBQ0ExaUIsTUFBQUEsR0FBRyxHQUFHdWtCLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBQSxLQUFLemhDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3loQyxPQUFPLENBQUM5aEMsTUFBTSxFQUFFLEVBQUVLLENBQUMsRUFBRTtRQUNqQyxJQUFJLENBQUN5aEMsT0FBTyxDQUFDemhDLENBQUMsQ0FBQyxDQUFDa2YsT0FBTyxFQUFFLElBQUl1aUIsT0FBTyxDQUFDemhDLENBQUMsQ0FBQyxDQUFDc0csRUFBRSxDQUFDLENBQUM0VyxHQUFHLENBQUMsRUFBRTtBQUM5Q0EsVUFBQUEsR0FBRyxHQUFHdWtCLE9BQU8sQ0FBQ3poQyxDQUFDLENBQUM7QUFDcEI7QUFDSjtBQUNBLE1BQUEsT0FBT2tkLEdBQUc7QUFDZDs7QUFFQTtJQUNBLFNBQVN6WSxHQUFHQSxHQUFHO01BQ1gsSUFBSW9ELElBQUksR0FBRyxFQUFFLENBQUM5RixLQUFLLENBQUNsQixJQUFJLENBQUN5YixTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBRXRDLE1BQUEsT0FBT2tsQixNQUFNLENBQUMsVUFBVSxFQUFFMzVCLElBQUksQ0FBQztBQUNuQztJQUVBLFNBQVNoTCxHQUFHQSxHQUFHO01BQ1gsSUFBSWdMLElBQUksR0FBRyxFQUFFLENBQUM5RixLQUFLLENBQUNsQixJQUFJLENBQUN5YixTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBRXRDLE1BQUEsT0FBT2tsQixNQUFNLENBQUMsU0FBUyxFQUFFMzVCLElBQUksQ0FBQztBQUNsQztJQUVBLElBQUl0TSxHQUFHLEdBQUcsWUFBWTtBQUNsQixNQUFBLE9BQU9LLElBQUksQ0FBQ0wsR0FBRyxHQUFHSyxJQUFJLENBQUNMLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSUssSUFBSSxFQUFFO0tBQzdDO0lBRUQsSUFBSThsQyxRQUFRLEdBQUcsQ0FDWCxNQUFNLEVBQ04sU0FBUyxFQUNULE9BQU8sRUFDUCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsUUFBUSxFQUNSLGFBQWEsQ0FDaEI7SUFFRCxTQUFTQyxlQUFlQSxDQUFDM3lCLENBQUMsRUFBRTtBQUN4QixNQUFBLElBQUk5UCxHQUFHO1FBQ0gwaUMsY0FBYyxHQUFHLEtBQUs7UUFDdEI1aEMsQ0FBQztRQUNENmhDLFFBQVEsR0FBR0gsUUFBUSxDQUFDL2hDLE1BQU07TUFDOUIsS0FBS1QsR0FBRyxJQUFJOFAsQ0FBQyxFQUFFO0FBQ1gsUUFBQSxJQUNJeU4sVUFBVSxDQUFDek4sQ0FBQyxFQUFFOVAsR0FBRyxDQUFDLElBQ2xCLEVBQ0kwUCxPQUFPLENBQUMvTixJQUFJLENBQUM2Z0MsUUFBUSxFQUFFeGlDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FDakM4UCxDQUFDLENBQUM5UCxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQ3FnQixLQUFLLENBQUN2USxDQUFDLENBQUM5UCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ3JDLEVBQ0g7QUFDRSxVQUFBLE9BQU8sS0FBSztBQUNoQjtBQUNKO01BRUEsS0FBS2MsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNmhDLFFBQVEsRUFBRSxFQUFFN2hDLENBQUMsRUFBRTtRQUMzQixJQUFJZ1AsQ0FBQyxDQUFDMHlCLFFBQVEsQ0FBQzFoQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ2hCLElBQUk0aEMsY0FBYyxFQUFFO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO0FBQ2pCO1VBQ0EsSUFBSUUsVUFBVSxDQUFDOXlCLENBQUMsQ0FBQzB5QixRQUFRLENBQUMxaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLeXRCLEtBQUssQ0FBQ3plLENBQUMsQ0FBQzB5QixRQUFRLENBQUMxaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3RENGhDLGNBQWMsR0FBRyxJQUFJO0FBQ3pCO0FBQ0o7QUFDSjtBQUVBLE1BQUEsT0FBTyxJQUFJO0FBQ2Y7SUFFQSxTQUFTRyxTQUFTQSxHQUFHO01BQ2pCLE9BQU8sSUFBSSxDQUFDbGlCLFFBQVE7QUFDeEI7SUFFQSxTQUFTbWlCLGVBQWVBLEdBQUc7TUFDdkIsT0FBT0MsY0FBYyxDQUFDbGlCLEdBQUcsQ0FBQztBQUM5QjtJQUVBLFNBQVNtaUIsUUFBUUEsQ0FBQ0MsUUFBUSxFQUFFO0FBQ3hCLE1BQUEsSUFBSTFYLGVBQWUsR0FBR0Ysb0JBQW9CLENBQUM0WCxRQUFRLENBQUM7QUFDaERqWSxRQUFBQSxLQUFLLEdBQUdPLGVBQWUsQ0FBQ04sSUFBSSxJQUFJLENBQUM7QUFDakNoQixRQUFBQSxRQUFRLEdBQUdzQixlQUFlLENBQUNyQixPQUFPLElBQUksQ0FBQztBQUN2Q0osUUFBQUEsTUFBTSxHQUFHeUIsZUFBZSxDQUFDeEIsS0FBSyxJQUFJLENBQUM7UUFDbkNZLEtBQUssR0FBR1ksZUFBZSxDQUFDWCxJQUFJLElBQUlXLGVBQWUsQ0FBQ08sT0FBTyxJQUFJLENBQUM7QUFDNURsRCxRQUFBQSxJQUFJLEdBQUcyQyxlQUFlLENBQUMxQyxHQUFHLElBQUksQ0FBQztBQUMvQlUsUUFBQUEsS0FBSyxHQUFHZ0MsZUFBZSxDQUFDL0IsSUFBSSxJQUFJLENBQUM7QUFDakNJLFFBQUFBLE9BQU8sR0FBRzJCLGVBQWUsQ0FBQzFCLE1BQU0sSUFBSSxDQUFDO0FBQ3JDTSxRQUFBQSxPQUFPLEdBQUdvQixlQUFlLENBQUNuQixNQUFNLElBQUksQ0FBQztBQUNyQ1YsUUFBQUEsWUFBWSxHQUFHNkIsZUFBZSxDQUFDNUIsV0FBVyxJQUFJLENBQUM7QUFFbkQsTUFBQSxJQUFJLENBQUNoSixRQUFRLEdBQUc4aEIsZUFBZSxDQUFDbFgsZUFBZSxDQUFDOztBQUVoRDtNQUNBLElBQUksQ0FBQzJYLGFBQWEsR0FDZCxDQUFDeFosWUFBWSxHQUNiUyxPQUFPLEdBQUcsR0FBRztBQUFHO01BQ2hCUCxPQUFPLEdBQUcsR0FBRztBQUFHO0FBQ2hCTCxNQUFBQSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0I7QUFDQTtNQUNBLElBQUksQ0FBQzRaLEtBQUssR0FBRyxDQUFDdmEsSUFBSSxHQUFHK0IsS0FBSyxHQUFHLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0EsTUFBQSxJQUFJLENBQUN5SSxPQUFPLEdBQUcsQ0FBQ3RKLE1BQU0sR0FBR0csUUFBUSxHQUFHLENBQUMsR0FBR2UsS0FBSyxHQUFHLEVBQUU7QUFFbEQsTUFBQSxJQUFJLENBQUNvWSxLQUFLLEdBQUcsRUFBRTtBQUVmLE1BQUEsSUFBSSxDQUFDemhCLE9BQU8sR0FBR29hLFNBQVMsRUFBRTtNQUUxQixJQUFJLENBQUNzSCxPQUFPLEVBQUU7QUFDbEI7SUFFQSxTQUFTQyxVQUFVQSxDQUFDN2xCLEdBQUcsRUFBRTtNQUNyQixPQUFPQSxHQUFHLFlBQVl1bEIsUUFBUTtBQUNsQztJQUVBLFNBQVNPLFFBQVFBLENBQUNuZixNQUFNLEVBQUU7TUFDdEIsSUFBSUEsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNaLE9BQU8xbUIsSUFBSSxDQUFDOGxDLEtBQUssQ0FBQyxFQUFFLEdBQUdwZixNQUFNLENBQUMsR0FBRyxFQUFFO0FBQ3ZDLE9BQUMsTUFBTTtBQUNILFFBQUEsT0FBTzFtQixJQUFJLENBQUM4bEMsS0FBSyxDQUFDcGYsTUFBTSxDQUFDO0FBQzdCO0FBQ0o7O0FBRUE7SUFDQSxTQUFTcWYsYUFBYUEsQ0FBQ0MsTUFBTSxFQUFFQyxNQUFNLEVBQUVDLFdBQVcsRUFBRTtBQUNoRCxNQUFBLElBQUk3akIsR0FBRyxHQUFHcmlCLElBQUksQ0FBQzZILEdBQUcsQ0FBQ20rQixNQUFNLENBQUNqakMsTUFBTSxFQUFFa2pDLE1BQU0sQ0FBQ2xqQyxNQUFNLENBQUM7QUFDNUNvakMsUUFBQUEsVUFBVSxHQUFHbm1DLElBQUksQ0FBQzhtQixHQUFHLENBQUNrZixNQUFNLENBQUNqakMsTUFBTSxHQUFHa2pDLE1BQU0sQ0FBQ2xqQyxNQUFNLENBQUM7UUFDcERxakMsS0FBSyxHQUFHLENBQUM7UUFDVGhqQyxDQUFDO01BQ0wsS0FBS0EsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHaWYsR0FBRyxFQUFFamYsQ0FBQyxFQUFFLEVBQUU7QUFDdEIsUUFBQSxJQUVxQnl0QixLQUFLLENBQUNtVixNQUFNLENBQUM1aUMsQ0FBQyxDQUFDLENBQUMsS0FBS3l0QixLQUFLLENBQUNvVixNQUFNLENBQUM3aUMsQ0FBQyxDQUFDLENBQUUsRUFDekQ7QUFDRWdqQyxVQUFBQSxLQUFLLEVBQUU7QUFDWDtBQUNKO01BQ0EsT0FBT0EsS0FBSyxHQUFHRCxVQUFVO0FBQzdCOztBQUVBOztBQUVBLElBQUEsU0FBU0UsTUFBTUEsQ0FBQzdlLEtBQUssRUFBRThlLFNBQVMsRUFBRTtNQUM5Qi9lLGNBQWMsQ0FBQ0MsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtBQUNwQyxRQUFBLElBQUk2ZSxNQUFNLEdBQUcsSUFBSSxDQUFDRSxTQUFTLEVBQUU7VUFDekJ2ZixJQUFJLEdBQUcsR0FBRztRQUNkLElBQUlxZixNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ1pBLE1BQU0sR0FBRyxDQUFDQSxNQUFNO1VBQ2hCcmYsSUFBSSxHQUFHLEdBQUc7QUFDZDtRQUNBLE9BQ0lBLElBQUksR0FDSlAsUUFBUSxDQUFDLENBQUMsRUFBRTRmLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FDNUJDLFNBQVMsR0FDVDdmLFFBQVEsQ0FBQyxDQUFDLENBQUM0ZixNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVsQyxPQUFDLENBQUM7QUFDTjtBQUVBQSxJQUFBQSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNoQkEsSUFBQUEsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7O0FBRWhCOztBQUVBdlcsSUFBQUEsYUFBYSxDQUFDLEdBQUcsRUFBRU4sZ0JBQWdCLENBQUM7QUFDcENNLElBQUFBLGFBQWEsQ0FBQyxJQUFJLEVBQUVOLGdCQUFnQixDQUFDO0FBQ3JDMEIsSUFBQUEsYUFBYSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLFVBQVV6eEIsS0FBSyxFQUFFa0QsS0FBSyxFQUFFMEYsTUFBTSxFQUFFO01BQ3ZEQSxNQUFNLENBQUM2NUIsT0FBTyxHQUFHLElBQUk7TUFDckI3NUIsTUFBTSxDQUFDeWIsSUFBSSxHQUFHMGlCLGdCQUFnQixDQUFDaFgsZ0JBQWdCLEVBQUUvdkIsS0FBSyxDQUFDO0FBQzNELEtBQUMsQ0FBQzs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7SUFDQSxJQUFJZ25DLFdBQVcsR0FBRyxpQkFBaUI7QUFFbkMsSUFBQSxTQUFTRCxnQkFBZ0JBLENBQUNFLE9BQU8sRUFBRWpjLE1BQU0sRUFBRTtNQUN2QyxJQUFJa2MsT0FBTyxHQUFHLENBQUNsYyxNQUFNLElBQUksRUFBRSxFQUFFM0MsS0FBSyxDQUFDNGUsT0FBTyxDQUFDO1FBQ3ZDRSxLQUFLO1FBQ0xDLEtBQUs7UUFDTDNhLE9BQU87TUFFWCxJQUFJeWEsT0FBTyxLQUFLLElBQUksRUFBRTtBQUNsQixRQUFBLE9BQU8sSUFBSTtBQUNmO01BRUFDLEtBQUssR0FBR0QsT0FBTyxDQUFDQSxPQUFPLENBQUM1akMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUU7QUFDekM4akMsTUFBQUEsS0FBSyxHQUFHLENBQUNELEtBQUssR0FBRyxFQUFFLEVBQUU5ZSxLQUFLLENBQUMyZSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3REdmEsTUFBQUEsT0FBTyxHQUFHLEVBQUUyYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUdoVyxLQUFLLENBQUNnVyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUMsTUFBQSxPQUFPM2EsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcyYSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHM2EsT0FBTyxHQUFHLENBQUNBLE9BQU87QUFDcEU7O0FBRUE7QUFDQSxJQUFBLFNBQVM0YSxlQUFlQSxDQUFDcm5DLEtBQUssRUFBRXNuQyxLQUFLLEVBQUU7TUFDbkMsSUFBSXptQixHQUFHLEVBQUV1SyxJQUFJO01BQ2IsSUFBSWtjLEtBQUssQ0FBQ2hqQixNQUFNLEVBQUU7QUFDZHpELFFBQUFBLEdBQUcsR0FBR3ltQixLQUFLLENBQUNDLEtBQUssRUFBRTtBQUNuQm5jLFFBQUFBLElBQUksR0FDQSxDQUFDekcsUUFBUSxDQUFDM2tCLEtBQUssQ0FBQyxJQUFJMmdCLE1BQU0sQ0FBQzNnQixLQUFLLENBQUMsR0FDM0JBLEtBQUssQ0FBQ2doQixPQUFPLEVBQUUsR0FDZnVpQixXQUFXLENBQUN2akMsS0FBSyxDQUFDLENBQUNnaEIsT0FBTyxFQUFFLElBQUlILEdBQUcsQ0FBQ0csT0FBTyxFQUFFO0FBQ3ZEO0FBQ0FILFFBQUFBLEdBQUcsQ0FBQ29DLEVBQUUsQ0FBQ3VrQixPQUFPLENBQUMzbUIsR0FBRyxDQUFDb0MsRUFBRSxDQUFDakMsT0FBTyxFQUFFLEdBQUdvSyxJQUFJLENBQUM7QUFDdkNyTCxRQUFBQSxLQUFLLENBQUMyRSxZQUFZLENBQUM3RCxHQUFHLEVBQUUsS0FBSyxDQUFDO0FBQzlCLFFBQUEsT0FBT0EsR0FBRztBQUNkLE9BQUMsTUFBTTtBQUNILFFBQUEsT0FBTzBpQixXQUFXLENBQUN2akMsS0FBSyxDQUFDLENBQUN5bkMsS0FBSyxFQUFFO0FBQ3JDO0FBQ0o7SUFFQSxTQUFTQyxhQUFhQSxDQUFDLzBCLENBQUMsRUFBRTtBQUN0QjtBQUNBO0FBQ0EsTUFBQSxPQUFPLENBQUNwUyxJQUFJLENBQUM4bEMsS0FBSyxDQUFDMXpCLENBQUMsQ0FBQ3NRLEVBQUUsQ0FBQzBrQixpQkFBaUIsRUFBRSxDQUFDO0FBQ2hEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTVuQixJQUFBQSxLQUFLLENBQUMyRSxZQUFZLEdBQUcsWUFBWSxFQUFFOztBQUVuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNBLFNBQVNrakIsWUFBWUEsQ0FBQzVuQyxLQUFLLEVBQUU2bkMsYUFBYSxFQUFFQyxXQUFXLEVBQUU7QUFDckQsTUFBQSxJQUFJbEIsTUFBTSxHQUFHLElBQUksQ0FBQ3JpQixPQUFPLElBQUksQ0FBQztRQUMxQndqQixXQUFXO0FBQ2YsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDbGxCLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLFFBQUEsT0FBTzdpQixLQUFLLElBQUksSUFBSSxHQUFHLElBQUksR0FBRzBqQixHQUFHO0FBQ3JDO01BQ0EsSUFBSTFqQixLQUFLLElBQUksSUFBSSxFQUFFO0FBQ2YsUUFBQSxJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDM0JBLFVBQUFBLEtBQUssR0FBRyttQyxnQkFBZ0IsQ0FBQ2hYLGdCQUFnQixFQUFFL3ZCLEtBQUssQ0FBQztVQUNqRCxJQUFJQSxLQUFLLEtBQUssSUFBSSxFQUFFO0FBQ2hCLFlBQUEsT0FBTyxJQUFJO0FBQ2Y7QUFDSixTQUFDLE1BQU0sSUFBSU8sSUFBSSxDQUFDOG1CLEdBQUcsQ0FBQ3JuQixLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQzhuQyxXQUFXLEVBQUU7VUFDN0M5bkMsS0FBSyxHQUFHQSxLQUFLLEdBQUcsRUFBRTtBQUN0QjtBQUNBLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQ3NrQixNQUFNLElBQUl1akIsYUFBYSxFQUFFO0FBQy9CRSxVQUFBQSxXQUFXLEdBQUdMLGFBQWEsQ0FBQyxJQUFJLENBQUM7QUFDckM7UUFDQSxJQUFJLENBQUNuakIsT0FBTyxHQUFHdmtCLEtBQUs7UUFDcEIsSUFBSSxDQUFDc2tCLE1BQU0sR0FBRyxJQUFJO1FBQ2xCLElBQUl5akIsV0FBVyxJQUFJLElBQUksRUFBRTtBQUNyQixVQUFBLElBQUksQ0FBQ3hwQyxHQUFHLENBQUN3cEMsV0FBVyxFQUFFLEdBQUcsQ0FBQztBQUM5QjtRQUNBLElBQUluQixNQUFNLEtBQUs1bUMsS0FBSyxFQUFFO0FBQ2xCLFVBQUEsSUFBSSxDQUFDNm5DLGFBQWEsSUFBSSxJQUFJLENBQUNHLGlCQUFpQixFQUFFO0FBQzFDQyxZQUFBQSxXQUFXLENBQ1AsSUFBSSxFQUNKckMsY0FBYyxDQUFDNWxDLEtBQUssR0FBRzRtQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQ25DLENBQUMsRUFDRCxLQUNKLENBQUM7QUFDTCxXQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQ29CLGlCQUFpQixFQUFFO1lBQ2hDLElBQUksQ0FBQ0EsaUJBQWlCLEdBQUcsSUFBSTtBQUM3QmpvQixZQUFBQSxLQUFLLENBQUMyRSxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUNzakIsaUJBQWlCLEdBQUcsSUFBSTtBQUNqQztBQUNKO0FBQ0EsUUFBQSxPQUFPLElBQUk7QUFDZixPQUFDLE1BQU07UUFDSCxPQUFPLElBQUksQ0FBQzFqQixNQUFNLEdBQUdzaUIsTUFBTSxHQUFHYyxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQ3JEO0FBQ0o7QUFFQSxJQUFBLFNBQVNRLFVBQVVBLENBQUNsb0MsS0FBSyxFQUFFNm5DLGFBQWEsRUFBRTtNQUN0QyxJQUFJN25DLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDZixRQUFBLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtVQUMzQkEsS0FBSyxHQUFHLENBQUNBLEtBQUs7QUFDbEI7QUFFQSxRQUFBLElBQUksQ0FBQzhtQyxTQUFTLENBQUM5bUMsS0FBSyxFQUFFNm5DLGFBQWEsQ0FBQztBQUVwQyxRQUFBLE9BQU8sSUFBSTtBQUNmLE9BQUMsTUFBTTtBQUNILFFBQUEsT0FBTyxDQUFDLElBQUksQ0FBQ2YsU0FBUyxFQUFFO0FBQzVCO0FBQ0o7SUFFQSxTQUFTcUIsY0FBY0EsQ0FBQ04sYUFBYSxFQUFFO01BQ25DLE9BQU8sSUFBSSxDQUFDZixTQUFTLENBQUMsQ0FBQyxFQUFFZSxhQUFhLENBQUM7QUFDM0M7SUFFQSxTQUFTTyxnQkFBZ0JBLENBQUNQLGFBQWEsRUFBRTtNQUNyQyxJQUFJLElBQUksQ0FBQ3ZqQixNQUFNLEVBQUU7QUFDYixRQUFBLElBQUksQ0FBQ3dpQixTQUFTLENBQUMsQ0FBQyxFQUFFZSxhQUFhLENBQUM7UUFDaEMsSUFBSSxDQUFDdmpCLE1BQU0sR0FBRyxLQUFLO1FBRW5CLElBQUl1akIsYUFBYSxFQUFFO1VBQ2YsSUFBSSxDQUFDUSxRQUFRLENBQUNYLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUM7QUFDM0M7QUFDSjtBQUNBLE1BQUEsT0FBTyxJQUFJO0FBQ2Y7SUFFQSxTQUFTWSx1QkFBdUJBLEdBQUc7QUFDL0IsTUFBQSxJQUFJLElBQUksQ0FBQ2prQixJQUFJLElBQUksSUFBSSxFQUFFO1FBQ25CLElBQUksQ0FBQ3lpQixTQUFTLENBQUMsSUFBSSxDQUFDemlCLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO09BQ3pDLE1BQU0sSUFBSSxPQUFPLElBQUksQ0FBQ0gsRUFBRSxLQUFLLFFBQVEsRUFBRTtRQUNwQyxJQUFJcWtCLEtBQUssR0FBR3hCLGdCQUFnQixDQUFDalgsV0FBVyxFQUFFLElBQUksQ0FBQzVMLEVBQUUsQ0FBQztRQUNsRCxJQUFJcWtCLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDZixVQUFBLElBQUksQ0FBQ3pCLFNBQVMsQ0FBQ3lCLEtBQUssQ0FBQztBQUN6QixTQUFDLE1BQU07QUFDSCxVQUFBLElBQUksQ0FBQ3pCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQzNCO0FBQ0o7QUFDQSxNQUFBLE9BQU8sSUFBSTtBQUNmO0lBRUEsU0FBUzBCLG9CQUFvQkEsQ0FBQ3hvQyxLQUFLLEVBQUU7QUFDakMsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDNmlCLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLFFBQUEsT0FBTyxLQUFLO0FBQ2hCO0FBQ0E3aUIsTUFBQUEsS0FBSyxHQUFHQSxLQUFLLEdBQUd1akMsV0FBVyxDQUFDdmpDLEtBQUssQ0FBQyxDQUFDOG1DLFNBQVMsRUFBRSxHQUFHLENBQUM7TUFFbEQsT0FBTyxDQUFDLElBQUksQ0FBQ0EsU0FBUyxFQUFFLEdBQUc5bUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxDQUFDO0FBQ2hEO0lBRUEsU0FBU3lvQyxvQkFBb0JBLEdBQUc7QUFDNUIsTUFBQSxPQUNJLElBQUksQ0FBQzNCLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQ1MsS0FBSyxFQUFFLENBQUMzYSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNrYSxTQUFTLEVBQUUsSUFDcEQsSUFBSSxDQUFDQSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUNTLEtBQUssRUFBRSxDQUFDM2EsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDa2EsU0FBUyxFQUFFO0FBRTVEO0lBRUEsU0FBUzRCLDJCQUEyQkEsR0FBRztNQUNuQyxJQUFJLENBQUNqb0IsV0FBVyxDQUFDLElBQUksQ0FBQ2tvQixhQUFhLENBQUMsRUFBRTtRQUNsQyxPQUFPLElBQUksQ0FBQ0EsYUFBYTtBQUM3QjtNQUVBLElBQUlqRyxDQUFDLEdBQUcsRUFBRTtRQUNOdUMsS0FBSztBQUVUcGhCLE1BQUFBLFVBQVUsQ0FBQzZlLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDbkJBLE1BQUFBLENBQUMsR0FBR21DLGFBQWEsQ0FBQ25DLENBQUMsQ0FBQztNQUVwQixJQUFJQSxDQUFDLENBQUM1USxFQUFFLEVBQUU7QUFDTm1ULFFBQUFBLEtBQUssR0FBR3ZDLENBQUMsQ0FBQ3BlLE1BQU0sR0FBR3JELFNBQVMsQ0FBQ3loQixDQUFDLENBQUM1USxFQUFFLENBQUMsR0FBR3lSLFdBQVcsQ0FBQ2IsQ0FBQyxDQUFDNVEsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQzZXLGFBQWEsR0FDZCxJQUFJLENBQUM5bEIsT0FBTyxFQUFFLElBQUl5akIsYUFBYSxDQUFDNUQsQ0FBQyxDQUFDNVEsRUFBRSxFQUFFbVQsS0FBSyxDQUFDMkQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ2xFLE9BQUMsTUFBTTtRQUNILElBQUksQ0FBQ0QsYUFBYSxHQUFHLEtBQUs7QUFDOUI7TUFFQSxPQUFPLElBQUksQ0FBQ0EsYUFBYTtBQUM3QjtJQUVBLFNBQVNFLE9BQU9BLEdBQUc7TUFDZixPQUFPLElBQUksQ0FBQ2htQixPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQ3lCLE1BQU0sR0FBRyxLQUFLO0FBQ2hEO0lBRUEsU0FBU3drQixXQUFXQSxHQUFHO01BQ25CLE9BQU8sSUFBSSxDQUFDam1CLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQ3lCLE1BQU0sR0FBRyxLQUFLO0FBQy9DO0lBRUEsU0FBU3lrQixLQUFLQSxHQUFHO0FBQ2IsTUFBQSxPQUFPLElBQUksQ0FBQ2xtQixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUN5QixNQUFNLElBQUksSUFBSSxDQUFDQyxPQUFPLEtBQUssQ0FBQyxHQUFHLEtBQUs7QUFDckU7O0FBRUE7SUFDQSxJQUFJeWtCLFdBQVcsR0FBRyx1REFBdUQ7QUFDckU7QUFDQTtBQUNBO01BQ0FDLFFBQVEsR0FDSixxS0FBcUs7QUFFN0ssSUFBQSxTQUFTckQsY0FBY0EsQ0FBQzVsQyxLQUFLLEVBQUU2QyxHQUFHLEVBQUU7TUFDaEMsSUFBSWlqQyxRQUFRLEdBQUc5bEMsS0FBSztBQUNoQjtRQUNBcW9CLEtBQUssR0FBRyxJQUFJO1FBQ1pkLElBQUk7UUFDSjJoQixHQUFHO1FBQ0hDLE9BQU87QUFFWCxNQUFBLElBQUloRCxVQUFVLENBQUNubUMsS0FBSyxDQUFDLEVBQUU7QUFDbkI4bEMsUUFBQUEsUUFBUSxHQUFHO1VBQ1B4WixFQUFFLEVBQUV0c0IsS0FBSyxDQUFDK2xDLGFBQWE7VUFDdkJ6YixDQUFDLEVBQUV0cUIsS0FBSyxDQUFDZ21DLEtBQUs7VUFDZHRiLENBQUMsRUFBRTFxQixLQUFLLENBQUNpMkI7U0FDWjtBQUNMLE9BQUMsTUFBTSxJQUFJdlYsUUFBUSxDQUFDMWdCLEtBQUssQ0FBQyxJQUFJLENBQUNrakIsS0FBSyxDQUFDLENBQUNsakIsS0FBSyxDQUFDLEVBQUU7UUFDMUM4bEMsUUFBUSxHQUFHLEVBQUU7UUFDYixJQUFJampDLEdBQUcsRUFBRTtBQUNMaWpDLFVBQUFBLFFBQVEsQ0FBQ2pqQyxHQUFHLENBQUMsR0FBRyxDQUFDN0MsS0FBSztBQUMxQixTQUFDLE1BQU07QUFDSDhsQyxVQUFBQSxRQUFRLENBQUN2WixZQUFZLEdBQUcsQ0FBQ3ZzQixLQUFLO0FBQ2xDO09BQ0gsTUFBTSxJQUFLcW9CLEtBQUssR0FBRzJnQixXQUFXLENBQUN0SSxJQUFJLENBQUMxZ0MsS0FBSyxDQUFDLEVBQUc7UUFDMUN1bkIsSUFBSSxHQUFHYyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ2hDeWQsUUFBQUEsUUFBUSxHQUFHO1VBQ1BsYixDQUFDLEVBQUUsQ0FBQztVQUNKTixDQUFDLEVBQUU4RyxLQUFLLENBQUMvSSxLQUFLLENBQUM2SixJQUFJLENBQUMsQ0FBQyxHQUFHM0ssSUFBSTtVQUM1QjZDLENBQUMsRUFBRWdILEtBQUssQ0FBQy9JLEtBQUssQ0FBQzhKLElBQUksQ0FBQyxDQUFDLEdBQUc1SyxJQUFJO1VBQzVCNVUsQ0FBQyxFQUFFeWUsS0FBSyxDQUFDL0ksS0FBSyxDQUFDK0osTUFBTSxDQUFDLENBQUMsR0FBRzdLLElBQUk7VUFDOUIwQyxDQUFDLEVBQUVtSCxLQUFLLENBQUMvSSxLQUFLLENBQUNnSyxNQUFNLENBQUMsQ0FBQyxHQUFHOUssSUFBSTtBQUM5QitFLFVBQUFBLEVBQUUsRUFBRThFLEtBQUssQ0FBQ2dWLFFBQVEsQ0FBQy9kLEtBQUssQ0FBQ2lLLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcvSyxJQUFJO1NBQ3hEO09BQ0osTUFBTSxJQUFLYyxLQUFLLEdBQUc0Z0IsUUFBUSxDQUFDdkksSUFBSSxDQUFDMWdDLEtBQUssQ0FBQyxFQUFHO1FBQ3ZDdW5CLElBQUksR0FBR2MsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNoQ3lkLFFBQUFBLFFBQVEsR0FBRztVQUNQbGIsQ0FBQyxFQUFFd2UsUUFBUSxDQUFDL2dCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRWQsSUFBSSxDQUFDO1VBQzNCbUQsQ0FBQyxFQUFFMGUsUUFBUSxDQUFDL2dCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRWQsSUFBSSxDQUFDO1VBQzNCaUQsQ0FBQyxFQUFFNGUsUUFBUSxDQUFDL2dCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRWQsSUFBSSxDQUFDO1VBQzNCK0MsQ0FBQyxFQUFFOGUsUUFBUSxDQUFDL2dCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRWQsSUFBSSxDQUFDO1VBQzNCNkMsQ0FBQyxFQUFFZ2YsUUFBUSxDQUFDL2dCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRWQsSUFBSSxDQUFDO1VBQzNCNVUsQ0FBQyxFQUFFeTJCLFFBQVEsQ0FBQy9nQixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUVkLElBQUksQ0FBQztVQUMzQjBDLENBQUMsRUFBRW1mLFFBQVEsQ0FBQy9nQixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUVkLElBQUk7U0FDN0I7QUFDTCxPQUFDLE1BQU0sSUFBSXVlLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDekI7UUFDQUEsUUFBUSxHQUFHLEVBQUU7QUFDakIsT0FBQyxNQUFNLElBQ0gsT0FBT0EsUUFBUSxLQUFLLFFBQVEsS0FDM0IsTUFBTSxJQUFJQSxRQUFRLElBQUksSUFBSSxJQUFJQSxRQUFRLENBQUMsRUFDMUM7QUFDRXFELFFBQUFBLE9BQU8sR0FBR0UsaUJBQWlCLENBQ3ZCOUYsV0FBVyxDQUFDdUMsUUFBUSxDQUFDanpCLElBQUksQ0FBQyxFQUMxQjB3QixXQUFXLENBQUN1QyxRQUFRLENBQUNoaUIsRUFBRSxDQUMzQixDQUFDO1FBRURnaUIsUUFBUSxHQUFHLEVBQUU7QUFDYkEsUUFBQUEsUUFBUSxDQUFDeFosRUFBRSxHQUFHNmMsT0FBTyxDQUFDNWMsWUFBWTtBQUNsQ3VaLFFBQUFBLFFBQVEsQ0FBQ3BiLENBQUMsR0FBR3llLE9BQU8sQ0FBQ3hjLE1BQU07QUFDL0I7QUFFQXVjLE1BQUFBLEdBQUcsR0FBRyxJQUFJckQsUUFBUSxDQUFDQyxRQUFRLENBQUM7TUFFNUIsSUFBSUssVUFBVSxDQUFDbm1DLEtBQUssQ0FBQyxJQUFJb2dCLFVBQVUsQ0FBQ3BnQixLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDbkRrcEMsUUFBQUEsR0FBRyxDQUFDMWtCLE9BQU8sR0FBR3hrQixLQUFLLENBQUN3a0IsT0FBTztBQUMvQjtNQUVBLElBQUkyaEIsVUFBVSxDQUFDbm1DLEtBQUssQ0FBQyxJQUFJb2dCLFVBQVUsQ0FBQ3BnQixLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDcERrcEMsUUFBQUEsR0FBRyxDQUFDMWxCLFFBQVEsR0FBR3hqQixLQUFLLENBQUN3akIsUUFBUTtBQUNqQztBQUVBLE1BQUEsT0FBTzBsQixHQUFHO0FBQ2Q7QUFFQXRELElBQUFBLGNBQWMsQ0FBQzM3QixFQUFFLEdBQUc0N0IsUUFBUSxDQUFDemhDLFNBQVM7SUFDdEN3aEMsY0FBYyxDQUFDMEQsT0FBTyxHQUFHM0QsZUFBZTtBQUV4QyxJQUFBLFNBQVN5RCxRQUFRQSxDQUFDRyxHQUFHLEVBQUVoaUIsSUFBSSxFQUFFO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLE1BQUEsSUFBSTFHLEdBQUcsR0FBRzBvQixHQUFHLElBQUk5RCxVQUFVLENBQUM4RCxHQUFHLENBQUNqaEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRDtNQUNBLE9BQU8sQ0FBQ3BGLEtBQUssQ0FBQ3JDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBR0EsR0FBRyxJQUFJMEcsSUFBSTtBQUN4QztBQUVBLElBQUEsU0FBU2lpQix5QkFBeUJBLENBQUNDLElBQUksRUFBRXhFLEtBQUssRUFBRTtNQUM1QyxJQUFJcGtCLEdBQUcsR0FBRyxFQUFFO01BRVpBLEdBQUcsQ0FBQzhMLE1BQU0sR0FDTnNZLEtBQUssQ0FBQ3JZLEtBQUssRUFBRSxHQUFHNmMsSUFBSSxDQUFDN2MsS0FBSyxFQUFFLEdBQUcsQ0FBQ3FZLEtBQUssQ0FBQ25YLElBQUksRUFBRSxHQUFHMmIsSUFBSSxDQUFDM2IsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNwRSxNQUFBLElBQUkyYixJQUFJLENBQUNsQyxLQUFLLEVBQUUsQ0FBQ2hwQyxHQUFHLENBQUNzaUIsR0FBRyxDQUFDOEwsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDK2MsT0FBTyxDQUFDekUsS0FBSyxDQUFDLEVBQUU7UUFDbEQsRUFBRXBrQixHQUFHLENBQUM4TCxNQUFNO0FBQ2hCO01BRUE5TCxHQUFHLENBQUMwTCxZQUFZLEdBQUcsQ0FBQzBZLEtBQUssR0FBRyxDQUFDd0UsSUFBSSxDQUFDbEMsS0FBSyxFQUFFLENBQUNocEMsR0FBRyxDQUFDc2lCLEdBQUcsQ0FBQzhMLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFFOUQsTUFBQSxPQUFPOUwsR0FBRztBQUNkO0FBRUEsSUFBQSxTQUFTd29CLGlCQUFpQkEsQ0FBQ0ksSUFBSSxFQUFFeEUsS0FBSyxFQUFFO0FBQ3BDLE1BQUEsSUFBSXBrQixHQUFHO0FBQ1AsTUFBQSxJQUFJLEVBQUU0b0IsSUFBSSxDQUFDNW1CLE9BQU8sRUFBRSxJQUFJb2lCLEtBQUssQ0FBQ3BpQixPQUFPLEVBQUUsQ0FBQyxFQUFFO1FBQ3RDLE9BQU87VUFBRTBKLFlBQVksRUFBRSxDQUFDO0FBQUVJLFVBQUFBLE1BQU0sRUFBRTtTQUFHO0FBQ3pDO0FBRUFzWSxNQUFBQSxLQUFLLEdBQUdvQyxlQUFlLENBQUNwQyxLQUFLLEVBQUV3RSxJQUFJLENBQUM7QUFDcEMsTUFBQSxJQUFJQSxJQUFJLENBQUNFLFFBQVEsQ0FBQzFFLEtBQUssQ0FBQyxFQUFFO0FBQ3RCcGtCLFFBQUFBLEdBQUcsR0FBRzJvQix5QkFBeUIsQ0FBQ0MsSUFBSSxFQUFFeEUsS0FBSyxDQUFDO0FBQ2hELE9BQUMsTUFBTTtBQUNIcGtCLFFBQUFBLEdBQUcsR0FBRzJvQix5QkFBeUIsQ0FBQ3ZFLEtBQUssRUFBRXdFLElBQUksQ0FBQztBQUM1QzVvQixRQUFBQSxHQUFHLENBQUMwTCxZQUFZLEdBQUcsQ0FBQzFMLEdBQUcsQ0FBQzBMLFlBQVk7QUFDcEMxTCxRQUFBQSxHQUFHLENBQUM4TCxNQUFNLEdBQUcsQ0FBQzlMLEdBQUcsQ0FBQzhMLE1BQU07QUFDNUI7QUFFQSxNQUFBLE9BQU85TCxHQUFHO0FBQ2Q7O0FBRUE7QUFDQSxJQUFBLFNBQVMrb0IsV0FBV0EsQ0FBQ3YyQixTQUFTLEVBQUVtUyxJQUFJLEVBQUU7QUFDbEMsTUFBQSxPQUFPLFVBQVVsakIsR0FBRyxFQUFFdW5DLE1BQU0sRUFBRTtRQUMxQixJQUFJQyxHQUFHLEVBQUVDLEdBQUc7QUFDWjtRQUNBLElBQUlGLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQzNtQixLQUFLLENBQUMsQ0FBQzJtQixNQUFNLENBQUMsRUFBRTtBQUNwQ3RrQixVQUFBQSxlQUFlLENBQ1hDLElBQUksRUFDSixXQUFXLEdBQ1BBLElBQUksR0FDSixzREFBc0QsR0FDdERBLElBQUksR0FDSixvQkFBb0IsR0FDcEIsOEVBQ1IsQ0FBQztVQUNEdWtCLEdBQUcsR0FBR3puQyxHQUFHO1VBQ1RBLEdBQUcsR0FBR3VuQyxNQUFNO1VBQ1pBLE1BQU0sR0FBR0UsR0FBRztBQUNoQjtBQUVBRCxRQUFBQSxHQUFHLEdBQUdsRSxjQUFjLENBQUN0akMsR0FBRyxFQUFFdW5DLE1BQU0sQ0FBQztBQUNqQzVCLFFBQUFBLFdBQVcsQ0FBQyxJQUFJLEVBQUU2QixHQUFHLEVBQUV6MkIsU0FBUyxDQUFDO0FBQ2pDLFFBQUEsT0FBTyxJQUFJO09BQ2Q7QUFDTDtJQUVBLFNBQVM0MEIsV0FBV0EsQ0FBQ3BoQixHQUFHLEVBQUVpZixRQUFRLEVBQUVrRSxRQUFRLEVBQUV0bEIsWUFBWSxFQUFFO0FBQ3hELE1BQUEsSUFBSTZILFlBQVksR0FBR3VaLFFBQVEsQ0FBQ0MsYUFBYTtBQUNyQ3RhLFFBQUFBLElBQUksR0FBRzJhLFFBQVEsQ0FBQ04sUUFBUSxDQUFDRSxLQUFLLENBQUM7QUFDL0JyWixRQUFBQSxNQUFNLEdBQUd5WixRQUFRLENBQUNOLFFBQVEsQ0FBQzdQLE9BQU8sQ0FBQztBQUV2QyxNQUFBLElBQUksQ0FBQ3BQLEdBQUcsQ0FBQ2hFLE9BQU8sRUFBRSxFQUFFO0FBQ2hCO1FBQ0E7QUFDSjtNQUVBNkIsWUFBWSxHQUFHQSxZQUFZLElBQUksSUFBSSxHQUFHLElBQUksR0FBR0EsWUFBWTtNQUV6RCxJQUFJaUksTUFBTSxFQUFFO0FBQ1JvSyxRQUFBQSxRQUFRLENBQUNsUSxHQUFHLEVBQUU5WCxHQUFHLENBQUM4WCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc4RixNQUFNLEdBQUdxZCxRQUFRLENBQUM7QUFDeEQ7TUFDQSxJQUFJdmUsSUFBSSxFQUFFO0FBQ051SCxRQUFBQSxLQUFLLENBQUNuTSxHQUFHLEVBQUUsTUFBTSxFQUFFOVgsR0FBRyxDQUFDOFgsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHNEUsSUFBSSxHQUFHdWUsUUFBUSxDQUFDO0FBQzFEO01BQ0EsSUFBSXpkLFlBQVksRUFBRTtBQUNkMUYsUUFBQUEsR0FBRyxDQUFDNUQsRUFBRSxDQUFDdWtCLE9BQU8sQ0FBQzNnQixHQUFHLENBQUM1RCxFQUFFLENBQUNqQyxPQUFPLEVBQUUsR0FBR3VMLFlBQVksR0FBR3lkLFFBQVEsQ0FBQztBQUM5RDtNQUNBLElBQUl0bEIsWUFBWSxFQUFFO1FBQ2QzRSxLQUFLLENBQUMyRSxZQUFZLENBQUNtQyxHQUFHLEVBQUU0RSxJQUFJLElBQUlrQixNQUFNLENBQUM7QUFDM0M7QUFDSjtJQUVBLElBQUlwdUIsR0FBRyxHQUFHcXJDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO01BQzNCdkIsUUFBUSxHQUFHdUIsV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUM7SUFFMUMsU0FBU0ssUUFBUUEsQ0FBQ2pxQyxLQUFLLEVBQUU7TUFDckIsT0FBTyxPQUFPQSxLQUFLLEtBQUssUUFBUSxJQUFJQSxLQUFLLFlBQVlrcUMsTUFBTTtBQUMvRDs7QUFFQTtJQUNBLFNBQVNDLGFBQWFBLENBQUNucUMsS0FBSyxFQUFFO0FBQzFCLE1BQUEsT0FDSTJrQixRQUFRLENBQUMza0IsS0FBSyxDQUFDLElBQ2YyZ0IsTUFBTSxDQUFDM2dCLEtBQUssQ0FBQyxJQUNiaXFDLFFBQVEsQ0FBQ2pxQyxLQUFLLENBQUMsSUFDZjBnQixRQUFRLENBQUMxZ0IsS0FBSyxDQUFDLElBQ2ZvcUMscUJBQXFCLENBQUNwcUMsS0FBSyxDQUFDLElBQzVCcXFDLG1CQUFtQixDQUFDcnFDLEtBQUssQ0FBQyxJQUMxQkEsS0FBSyxLQUFLLElBQUksSUFDZEEsS0FBSyxLQUFLc2pCLFNBQVM7QUFFM0I7SUFFQSxTQUFTK21CLG1CQUFtQkEsQ0FBQ3JxQyxLQUFLLEVBQUU7TUFDaEMsSUFBSXNxQyxVQUFVLEdBQUducUIsUUFBUSxDQUFDbmdCLEtBQUssQ0FBQyxJQUFJLENBQUNxZ0IsYUFBYSxDQUFDcmdCLEtBQUssQ0FBQztRQUNyRHVxQyxZQUFZLEdBQUcsS0FBSztRQUNwQkMsVUFBVSxHQUFHLENBQ1QsT0FBTyxFQUNQLE1BQU0sRUFDTixHQUFHLEVBQ0gsUUFBUSxFQUNSLE9BQU8sRUFDUCxHQUFHLEVBQ0gsTUFBTSxFQUNOLEtBQUssRUFDTCxHQUFHLEVBQ0gsT0FBTyxFQUNQLE1BQU0sRUFDTixHQUFHLEVBQ0gsT0FBTyxFQUNQLE1BQU0sRUFDTixHQUFHLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixHQUFHLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixHQUFHLEVBQ0gsY0FBYyxFQUNkLGFBQWEsRUFDYixJQUFJLENBQ1A7UUFDRDdtQyxDQUFDO1FBQ0Q4bUMsUUFBUTtRQUNSQyxXQUFXLEdBQUdGLFVBQVUsQ0FBQ2xuQyxNQUFNO01BRW5DLEtBQUtLLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyttQyxXQUFXLEVBQUUvbUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqQzhtQyxRQUFBQSxRQUFRLEdBQUdELFVBQVUsQ0FBQzdtQyxDQUFDLENBQUM7UUFDeEI0bUMsWUFBWSxHQUFHQSxZQUFZLElBQUlucUIsVUFBVSxDQUFDcGdCLEtBQUssRUFBRXlxQyxRQUFRLENBQUM7QUFDOUQ7TUFFQSxPQUFPSCxVQUFVLElBQUlDLFlBQVk7QUFDckM7SUFFQSxTQUFTSCxxQkFBcUJBLENBQUNwcUMsS0FBSyxFQUFFO0FBQ2xDLE1BQUEsSUFBSTJxQyxTQUFTLEdBQUc1bUMsT0FBTyxDQUFDL0QsS0FBSyxDQUFDO1FBQzFCNHFDLFlBQVksR0FBRyxLQUFLO01BQ3hCLElBQUlELFNBQVMsRUFBRTtRQUNYQyxZQUFZLEdBQ1I1cUMsS0FBSyxDQUFDc08sTUFBTSxDQUFDLFVBQVU5SSxJQUFJLEVBQUU7VUFDekIsT0FBTyxDQUFDa2IsUUFBUSxDQUFDbGIsSUFBSSxDQUFDLElBQUl5a0MsUUFBUSxDQUFDanFDLEtBQUssQ0FBQztBQUM3QyxTQUFDLENBQUMsQ0FBQ3NELE1BQU0sS0FBSyxDQUFDO0FBQ3ZCO01BQ0EsT0FBT3FuQyxTQUFTLElBQUlDLFlBQVk7QUFDcEM7SUFFQSxTQUFTQyxjQUFjQSxDQUFDN3FDLEtBQUssRUFBRTtNQUMzQixJQUFJc3FDLFVBQVUsR0FBR25xQixRQUFRLENBQUNuZ0IsS0FBSyxDQUFDLElBQUksQ0FBQ3FnQixhQUFhLENBQUNyZ0IsS0FBSyxDQUFDO1FBQ3JEdXFDLFlBQVksR0FBRyxLQUFLO0FBQ3BCQyxRQUFBQSxVQUFVLEdBQUcsQ0FDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFVBQVUsQ0FDYjtRQUNEN21DLENBQUM7UUFDRDhtQyxRQUFRO0FBRVosTUFBQSxLQUFLOW1DLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzZtQyxVQUFVLENBQUNsbkMsTUFBTSxFQUFFSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3ZDOG1DLFFBQUFBLFFBQVEsR0FBR0QsVUFBVSxDQUFDN21DLENBQUMsQ0FBQztRQUN4QjRtQyxZQUFZLEdBQUdBLFlBQVksSUFBSW5xQixVQUFVLENBQUNwZ0IsS0FBSyxFQUFFeXFDLFFBQVEsQ0FBQztBQUM5RDtNQUVBLE9BQU9ILFVBQVUsSUFBSUMsWUFBWTtBQUNyQztBQUVBLElBQUEsU0FBU08saUJBQWlCQSxDQUFDQyxRQUFRLEVBQUU3ckMsR0FBRyxFQUFFO01BQ3RDLElBQUlrc0IsSUFBSSxHQUFHMmYsUUFBUSxDQUFDM2YsSUFBSSxDQUFDbHNCLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQzNDLE1BQUEsT0FBT2tzQixJQUFJLEdBQUcsRUFBRSxHQUNWLFVBQVUsR0FDVkEsSUFBSSxHQUFHLEVBQUUsR0FDUCxVQUFVLEdBQ1ZBLElBQUksR0FBRyxDQUFDLEdBQ04sU0FBUyxHQUNUQSxJQUFJLEdBQUcsQ0FBQyxHQUNOLFNBQVMsR0FDVEEsSUFBSSxHQUFHLENBQUMsR0FDTixTQUFTLEdBQ1RBLElBQUksR0FBRyxDQUFDLEdBQ04sVUFBVSxHQUNWLFVBQVU7QUFDOUI7QUFFQSxJQUFBLFNBQVM0ZixVQUFVQSxDQUFDanlCLElBQUksRUFBRWt5QixPQUFPLEVBQUU7QUFDL0I7QUFDQSxNQUFBLElBQUlockIsU0FBUyxDQUFDM2MsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN4QixRQUFBLElBQUksQ0FBQzJjLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUNmbEgsSUFBSSxHQUFHdUssU0FBUztVQUNoQjJuQixPQUFPLEdBQUczbkIsU0FBUztTQUN0QixNQUFNLElBQUk2bUIsYUFBYSxDQUFDbHFCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3BDbEgsVUFBQUEsSUFBSSxHQUFHa0gsU0FBUyxDQUFDLENBQUMsQ0FBQztVQUNuQmdyQixPQUFPLEdBQUczbkIsU0FBUztTQUN0QixNQUFNLElBQUl1bkIsY0FBYyxDQUFDNXFCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JDZ3JCLFVBQUFBLE9BQU8sR0FBR2hyQixTQUFTLENBQUMsQ0FBQyxDQUFDO1VBQ3RCbEgsSUFBSSxHQUFHdUssU0FBUztBQUNwQjtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQUEsSUFBSXBrQixHQUFHLEdBQUc2WixJQUFJLElBQUl3cUIsV0FBVyxFQUFFO1FBQzNCMkgsR0FBRyxHQUFHN0QsZUFBZSxDQUFDbm9DLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQ2lzQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQy9DanFCLE1BQU0sR0FBR25CLEtBQUssQ0FBQ3FyQixjQUFjLENBQUMsSUFBSSxFQUFFRixHQUFHLENBQUMsSUFBSSxVQUFVO1FBQ3REcGtCLE1BQU0sR0FDRm1rQixPQUFPLEtBQ054bEIsVUFBVSxDQUFDd2xCLE9BQU8sQ0FBQy9wQixNQUFNLENBQUMsQ0FBQyxHQUN0QitwQixPQUFPLENBQUMvcEIsTUFBTSxDQUFDLENBQUMxYyxJQUFJLENBQUMsSUFBSSxFQUFFdEYsR0FBRyxDQUFDLEdBQy9CK3JDLE9BQU8sQ0FBQy9wQixNQUFNLENBQUMsQ0FBQztNQUU5QixPQUFPLElBQUksQ0FBQ0EsTUFBTSxDQUNkNEYsTUFBTSxJQUFJLElBQUksQ0FBQ3FCLFVBQVUsRUFBRSxDQUFDdkIsUUFBUSxDQUFDMUYsTUFBTSxFQUFFLElBQUksRUFBRXFpQixXQUFXLENBQUNya0MsR0FBRyxDQUFDLENBQ3ZFLENBQUM7QUFDTDtJQUVBLFNBQVNxb0MsS0FBS0EsR0FBRztBQUNiLE1BQUEsT0FBTyxJQUFJOWlCLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDM0I7QUFFQSxJQUFBLFNBQVNpbEIsT0FBT0EsQ0FBQzFwQyxLQUFLLEVBQUVndUIsS0FBSyxFQUFFO0FBQzNCLE1BQUEsSUFBSXFkLFVBQVUsR0FBRzFtQixRQUFRLENBQUMza0IsS0FBSyxDQUFDLEdBQUdBLEtBQUssR0FBR3VqQyxXQUFXLENBQUN2akMsS0FBSyxDQUFDO0FBQzdELE1BQUEsSUFBSSxFQUFFLElBQUksQ0FBQzZpQixPQUFPLEVBQUUsSUFBSXdvQixVQUFVLENBQUN4b0IsT0FBTyxFQUFFLENBQUMsRUFBRTtBQUMzQyxRQUFBLE9BQU8sS0FBSztBQUNoQjtBQUNBbUwsTUFBQUEsS0FBSyxHQUFHRCxjQUFjLENBQUNDLEtBQUssQ0FBQyxJQUFJLGFBQWE7TUFDOUMsSUFBSUEsS0FBSyxLQUFLLGFBQWEsRUFBRTtRQUN6QixPQUFPLElBQUksQ0FBQ2hOLE9BQU8sRUFBRSxHQUFHcXFCLFVBQVUsQ0FBQ3JxQixPQUFPLEVBQUU7QUFDaEQsT0FBQyxNQUFNO0FBQ0gsUUFBQSxPQUFPcXFCLFVBQVUsQ0FBQ3JxQixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUN1bUIsS0FBSyxFQUFFLENBQUM0RCxPQUFPLENBQUNuZCxLQUFLLENBQUMsQ0FBQ2hOLE9BQU8sRUFBRTtBQUN2RTtBQUNKO0FBRUEsSUFBQSxTQUFTMm9CLFFBQVFBLENBQUMzcEMsS0FBSyxFQUFFZ3VCLEtBQUssRUFBRTtBQUM1QixNQUFBLElBQUlxZCxVQUFVLEdBQUcxbUIsUUFBUSxDQUFDM2tCLEtBQUssQ0FBQyxHQUFHQSxLQUFLLEdBQUd1akMsV0FBVyxDQUFDdmpDLEtBQUssQ0FBQztBQUM3RCxNQUFBLElBQUksRUFBRSxJQUFJLENBQUM2aUIsT0FBTyxFQUFFLElBQUl3b0IsVUFBVSxDQUFDeG9CLE9BQU8sRUFBRSxDQUFDLEVBQUU7QUFDM0MsUUFBQSxPQUFPLEtBQUs7QUFDaEI7QUFDQW1MLE1BQUFBLEtBQUssR0FBR0QsY0FBYyxDQUFDQyxLQUFLLENBQUMsSUFBSSxhQUFhO01BQzlDLElBQUlBLEtBQUssS0FBSyxhQUFhLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUNoTixPQUFPLEVBQUUsR0FBR3FxQixVQUFVLENBQUNycUIsT0FBTyxFQUFFO0FBQ2hELE9BQUMsTUFBTTtBQUNILFFBQUEsT0FBTyxJQUFJLENBQUN1bUIsS0FBSyxFQUFFLENBQUMrRCxLQUFLLENBQUN0ZCxLQUFLLENBQUMsQ0FBQ2hOLE9BQU8sRUFBRSxHQUFHcXFCLFVBQVUsQ0FBQ3JxQixPQUFPLEVBQUU7QUFDckU7QUFDSjtJQUVBLFNBQVN1cUIsU0FBU0EsQ0FBQzE0QixJQUFJLEVBQUVpUixFQUFFLEVBQUVrSyxLQUFLLEVBQUV3ZCxXQUFXLEVBQUU7QUFDN0MsTUFBQSxJQUFJQyxTQUFTLEdBQUc5bUIsUUFBUSxDQUFDOVIsSUFBSSxDQUFDLEdBQUdBLElBQUksR0FBRzB3QixXQUFXLENBQUMxd0IsSUFBSSxDQUFDO1FBQ3JENjRCLE9BQU8sR0FBRy9tQixRQUFRLENBQUNiLEVBQUUsQ0FBQyxHQUFHQSxFQUFFLEdBQUd5ZixXQUFXLENBQUN6ZixFQUFFLENBQUM7QUFDakQsTUFBQSxJQUFJLEVBQUUsSUFBSSxDQUFDakIsT0FBTyxFQUFFLElBQUk0b0IsU0FBUyxDQUFDNW9CLE9BQU8sRUFBRSxJQUFJNm9CLE9BQU8sQ0FBQzdvQixPQUFPLEVBQUUsQ0FBQyxFQUFFO0FBQy9ELFFBQUEsT0FBTyxLQUFLO0FBQ2hCO01BQ0Eyb0IsV0FBVyxHQUFHQSxXQUFXLElBQUksSUFBSTtNQUNqQyxPQUNJLENBQUNBLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQ2pCLElBQUksQ0FBQzlCLE9BQU8sQ0FBQytCLFNBQVMsRUFBRXpkLEtBQUssQ0FBQyxHQUM5QixDQUFDLElBQUksQ0FBQzJiLFFBQVEsQ0FBQzhCLFNBQVMsRUFBRXpkLEtBQUssQ0FBQyxNQUNyQ3dkLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQ2pCLElBQUksQ0FBQzdCLFFBQVEsQ0FBQytCLE9BQU8sRUFBRTFkLEtBQUssQ0FBQyxHQUM3QixDQUFDLElBQUksQ0FBQzBiLE9BQU8sQ0FBQ2dDLE9BQU8sRUFBRTFkLEtBQUssQ0FBQyxDQUFDO0FBRTVDO0FBRUEsSUFBQSxTQUFTMmQsTUFBTUEsQ0FBQzNyQyxLQUFLLEVBQUVndUIsS0FBSyxFQUFFO0FBQzFCLE1BQUEsSUFBSXFkLFVBQVUsR0FBRzFtQixRQUFRLENBQUMza0IsS0FBSyxDQUFDLEdBQUdBLEtBQUssR0FBR3VqQyxXQUFXLENBQUN2akMsS0FBSyxDQUFDO1FBQ3pENHJDLE9BQU87QUFDWCxNQUFBLElBQUksRUFBRSxJQUFJLENBQUMvb0IsT0FBTyxFQUFFLElBQUl3b0IsVUFBVSxDQUFDeG9CLE9BQU8sRUFBRSxDQUFDLEVBQUU7QUFDM0MsUUFBQSxPQUFPLEtBQUs7QUFDaEI7QUFDQW1MLE1BQUFBLEtBQUssR0FBR0QsY0FBYyxDQUFDQyxLQUFLLENBQUMsSUFBSSxhQUFhO01BQzlDLElBQUlBLEtBQUssS0FBSyxhQUFhLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUNoTixPQUFPLEVBQUUsS0FBS3FxQixVQUFVLENBQUNycUIsT0FBTyxFQUFFO0FBQ2xELE9BQUMsTUFBTTtBQUNINHFCLFFBQUFBLE9BQU8sR0FBR1AsVUFBVSxDQUFDcnFCLE9BQU8sRUFBRTtBQUM5QixRQUFBLE9BQ0ksSUFBSSxDQUFDdW1CLEtBQUssRUFBRSxDQUFDNEQsT0FBTyxDQUFDbmQsS0FBSyxDQUFDLENBQUNoTixPQUFPLEVBQUUsSUFBSTRxQixPQUFPLElBQ2hEQSxPQUFPLElBQUksSUFBSSxDQUFDckUsS0FBSyxFQUFFLENBQUMrRCxLQUFLLENBQUN0ZCxLQUFLLENBQUMsQ0FBQ2hOLE9BQU8sRUFBRTtBQUV0RDtBQUNKO0FBRUEsSUFBQSxTQUFTNnFCLGFBQWFBLENBQUM3ckMsS0FBSyxFQUFFZ3VCLEtBQUssRUFBRTtBQUNqQyxNQUFBLE9BQU8sSUFBSSxDQUFDMmQsTUFBTSxDQUFDM3JDLEtBQUssRUFBRWd1QixLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMwYixPQUFPLENBQUMxcEMsS0FBSyxFQUFFZ3VCLEtBQUssQ0FBQztBQUNsRTtBQUVBLElBQUEsU0FBUzhkLGNBQWNBLENBQUM5ckMsS0FBSyxFQUFFZ3VCLEtBQUssRUFBRTtBQUNsQyxNQUFBLE9BQU8sSUFBSSxDQUFDMmQsTUFBTSxDQUFDM3JDLEtBQUssRUFBRWd1QixLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMyYixRQUFRLENBQUMzcEMsS0FBSyxFQUFFZ3VCLEtBQUssQ0FBQztBQUNuRTtJQUVBLFNBQVM1QyxJQUFJQSxDQUFDcHJCLEtBQUssRUFBRWd1QixLQUFLLEVBQUUrZCxPQUFPLEVBQUU7QUFDakMsTUFBQSxJQUFJQyxJQUFJLEVBQUVDLFNBQVMsRUFBRW5sQixNQUFNO0FBRTNCLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQ2pFLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLFFBQUEsT0FBT2EsR0FBRztBQUNkO0FBRUFzb0IsTUFBQUEsSUFBSSxHQUFHM0UsZUFBZSxDQUFDcm5DLEtBQUssRUFBRSxJQUFJLENBQUM7QUFFbkMsTUFBQSxJQUFJLENBQUNnc0MsSUFBSSxDQUFDbnBCLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLFFBQUEsT0FBT2EsR0FBRztBQUNkO0FBRUF1b0IsTUFBQUEsU0FBUyxHQUFHLENBQUNELElBQUksQ0FBQ2xGLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQ0EsU0FBUyxFQUFFLElBQUksR0FBRztBQUV2RDlZLE1BQUFBLEtBQUssR0FBR0QsY0FBYyxDQUFDQyxLQUFLLENBQUM7QUFFN0IsTUFBQSxRQUFRQSxLQUFLO0FBQ1QsUUFBQSxLQUFLLE1BQU07VUFDUGxILE1BQU0sR0FBR29sQixTQUFTLENBQUMsSUFBSSxFQUFFRixJQUFJLENBQUMsR0FBRyxFQUFFO1VBQ25DO0FBQ0osUUFBQSxLQUFLLE9BQU87QUFDUmxsQixVQUFBQSxNQUFNLEdBQUdvbEIsU0FBUyxDQUFDLElBQUksRUFBRUYsSUFBSSxDQUFDO1VBQzlCO0FBQ0osUUFBQSxLQUFLLFNBQVM7VUFDVmxsQixNQUFNLEdBQUdvbEIsU0FBUyxDQUFDLElBQUksRUFBRUYsSUFBSSxDQUFDLEdBQUcsQ0FBQztVQUNsQztBQUNKLFFBQUEsS0FBSyxRQUFRO0FBQ1RsbEIsVUFBQUEsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHa2xCLElBQUksSUFBSSxHQUFHO1VBQzVCO0FBQU87QUFDWCxRQUFBLEtBQUssUUFBUTtBQUNUbGxCLFVBQUFBLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBR2tsQixJQUFJLElBQUksR0FBRztVQUM1QjtBQUFPO0FBQ1gsUUFBQSxLQUFLLE1BQU07QUFDUGxsQixVQUFBQSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEdBQUdrbEIsSUFBSSxJQUFJLElBQUk7VUFDN0I7QUFBTztBQUNYLFFBQUEsS0FBSyxLQUFLO1VBQ05sbEIsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHa2xCLElBQUksR0FBR0MsU0FBUyxJQUFJLEtBQUs7VUFDMUM7QUFBTztBQUNYLFFBQUEsS0FBSyxNQUFNO1VBQ1BubEIsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHa2xCLElBQUksR0FBR0MsU0FBUyxJQUFJLE1BQU07VUFDM0M7QUFBTztRQUNYO1VBQ0lubEIsTUFBTSxHQUFHLElBQUksR0FBR2tsQixJQUFJO0FBQzVCO01BRUEsT0FBT0QsT0FBTyxHQUFHamxCLE1BQU0sR0FBR21LLFFBQVEsQ0FBQ25LLE1BQU0sQ0FBQztBQUM5QztBQUVBLElBQUEsU0FBU29sQixTQUFTQSxDQUFDcHBDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO01BQ3JCLElBQUlELENBQUMsQ0FBQzBvQixJQUFJLEVBQUUsR0FBR3pvQixDQUFDLENBQUN5b0IsSUFBSSxFQUFFLEVBQUU7QUFDckI7QUFDQTtBQUNBLFFBQUEsT0FBTyxDQUFDMGdCLFNBQVMsQ0FBQ25wQyxDQUFDLEVBQUVELENBQUMsQ0FBQztBQUMzQjtBQUNBO01BQ0EsSUFBSXFwQyxjQUFjLEdBQUcsQ0FBQ3BwQyxDQUFDLENBQUMrcUIsSUFBSSxFQUFFLEdBQUdockIsQ0FBQyxDQUFDZ3JCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSS9xQixDQUFDLENBQUM2cEIsS0FBSyxFQUFFLEdBQUc5cEIsQ0FBQyxDQUFDOHBCLEtBQUssRUFBRSxDQUFDO0FBQ3JFO0FBQ0F3ZixRQUFBQSxNQUFNLEdBQUd0cEMsQ0FBQyxDQUFDeWtDLEtBQUssRUFBRSxDQUFDaHBDLEdBQUcsQ0FBQzR0QyxjQUFjLEVBQUUsUUFBUSxDQUFDO1FBQ2hERSxPQUFPO1FBQ1BDLE1BQU07QUFFVixNQUFBLElBQUl2cEMsQ0FBQyxHQUFHcXBDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDaEJDLFFBQUFBLE9BQU8sR0FBR3ZwQyxDQUFDLENBQUN5a0MsS0FBSyxFQUFFLENBQUNocEMsR0FBRyxDQUFDNHRDLGNBQWMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDO0FBQ3JEO1FBQ0FHLE1BQU0sR0FBRyxDQUFDdnBDLENBQUMsR0FBR3FwQyxNQUFNLEtBQUtBLE1BQU0sR0FBR0MsT0FBTyxDQUFDO0FBQzlDLE9BQUMsTUFBTTtBQUNIQSxRQUFBQSxPQUFPLEdBQUd2cEMsQ0FBQyxDQUFDeWtDLEtBQUssRUFBRSxDQUFDaHBDLEdBQUcsQ0FBQzR0QyxjQUFjLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQztBQUNyRDtRQUNBRyxNQUFNLEdBQUcsQ0FBQ3ZwQyxDQUFDLEdBQUdxcEMsTUFBTSxLQUFLQyxPQUFPLEdBQUdELE1BQU0sQ0FBQztBQUM5Qzs7QUFFQTtBQUNBLE1BQUEsT0FBTyxFQUFFRCxjQUFjLEdBQUdHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDMUM7SUFFQXZzQixLQUFLLENBQUN3c0IsYUFBYSxHQUFHLHNCQUFzQjtJQUM1Q3hzQixLQUFLLENBQUN5c0IsZ0JBQWdCLEdBQUcsd0JBQXdCO0lBRWpELFNBQVNqb0MsUUFBUUEsR0FBRztBQUNoQixNQUFBLE9BQU8sSUFBSSxDQUFDZ2pDLEtBQUssRUFBRSxDQUFDcG1CLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQ0QsTUFBTSxDQUFDLGtDQUFrQyxDQUFDO0FBQy9FO0lBRUEsU0FBU3VyQixXQUFXQSxDQUFDQyxVQUFVLEVBQUU7QUFDN0IsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDN3BCLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLFFBQUEsT0FBTyxJQUFJO0FBQ2Y7QUFDQSxNQUFBLElBQUl2QixHQUFHLEdBQUdvckIsVUFBVSxLQUFLLElBQUk7QUFDekIvNUIsUUFBQUEsQ0FBQyxHQUFHMk8sR0FBRyxHQUFHLElBQUksQ0FBQ2ltQixLQUFLLEVBQUUsQ0FBQ2ptQixHQUFHLEVBQUUsR0FBRyxJQUFJO0FBQ3ZDLE1BQUEsSUFBSTNPLENBQUMsQ0FBQ21iLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSW5iLENBQUMsQ0FBQ21iLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtRQUNqQyxPQUFPdEYsWUFBWSxDQUNmN1YsQ0FBQyxFQUNEMk8sR0FBRyxHQUNHLGdDQUFnQyxHQUNoQyw4QkFDVixDQUFDO0FBQ0w7TUFDQSxJQUFJbUUsVUFBVSxDQUFDbG1CLElBQUksQ0FBQzZFLFNBQVMsQ0FBQ3FvQyxXQUFXLENBQUMsRUFBRTtBQUN4QztRQUNBLElBQUluckIsR0FBRyxFQUFFO1VBQ0wsT0FBTyxJQUFJLENBQUNxckIsTUFBTSxFQUFFLENBQUNGLFdBQVcsRUFBRTtBQUN0QyxTQUFDLE1BQU07QUFDSCxVQUFBLE9BQU8sSUFBSWx0QyxJQUFJLENBQUMsSUFBSSxDQUFDeWhCLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQzhsQixTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQ3pEMkYsV0FBVyxFQUFFLENBQ2Jua0IsT0FBTyxDQUFDLEdBQUcsRUFBRUUsWUFBWSxDQUFDN1YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDO0FBQ0o7TUFDQSxPQUFPNlYsWUFBWSxDQUNmN1YsQ0FBQyxFQUNEMk8sR0FBRyxHQUFHLDhCQUE4QixHQUFHLDRCQUMzQyxDQUFDO0FBQ0w7O0FBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0ksU0FBU3NyQixPQUFPQSxHQUFHO0FBQ2YsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDL3BCLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLFFBQUEsT0FBTyxvQkFBb0IsR0FBRyxJQUFJLENBQUNxQixFQUFFLEdBQUcsTUFBTTtBQUNsRDtNQUNBLElBQUlnRSxJQUFJLEdBQUcsUUFBUTtRQUNmMmtCLElBQUksR0FBRyxFQUFFO1FBQ1RDLE1BQU07UUFDTmhmLElBQUk7UUFDSmlmLFFBQVE7UUFDUkMsTUFBTTtBQUNWLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQ25FLE9BQU8sRUFBRSxFQUFFO1FBQ2pCM2dCLElBQUksR0FBRyxJQUFJLENBQUM0ZSxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsWUFBWSxHQUFHLGtCQUFrQjtRQUNqRStGLElBQUksR0FBRyxHQUFHO0FBQ2Q7QUFDQUMsTUFBQUEsTUFBTSxHQUFHLEdBQUcsR0FBRzVrQixJQUFJLEdBQUcsS0FBSztBQUMzQjRGLE1BQUFBLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDQSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUNBLElBQUksRUFBRSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsUUFBUTtNQUNsRWlmLFFBQVEsR0FBRyx1QkFBdUI7TUFDbENDLE1BQU0sR0FBR0gsSUFBSSxHQUFHLE1BQU07TUFFdEIsT0FBTyxJQUFJLENBQUMzckIsTUFBTSxDQUFDNHJCLE1BQU0sR0FBR2hmLElBQUksR0FBR2lmLFFBQVEsR0FBR0MsTUFBTSxDQUFDO0FBQ3pEO0lBRUEsU0FBUzlyQixNQUFNQSxDQUFDK3JCLFdBQVcsRUFBRTtNQUN6QixJQUFJLENBQUNBLFdBQVcsRUFBRTtBQUNkQSxRQUFBQSxXQUFXLEdBQUcsSUFBSSxDQUFDbEUsS0FBSyxFQUFFLEdBQ3BCaHBCLEtBQUssQ0FBQ3lzQixnQkFBZ0IsR0FDdEJ6c0IsS0FBSyxDQUFDd3NCLGFBQWE7QUFDN0I7TUFDQSxJQUFJemxCLE1BQU0sR0FBRzBCLFlBQVksQ0FBQyxJQUFJLEVBQUV5a0IsV0FBVyxDQUFDO01BQzVDLE9BQU8sSUFBSSxDQUFDOWtCLFVBQVUsRUFBRSxDQUFDK2tCLFVBQVUsQ0FBQ3BtQixNQUFNLENBQUM7QUFDL0M7QUFFQSxJQUFBLFNBQVNqVSxJQUFJQSxDQUFDa0csSUFBSSxFQUFFZ1MsYUFBYSxFQUFFO01BQy9CLElBQ0ksSUFBSSxDQUFDbEksT0FBTyxFQUFFLEtBQ1o4QixRQUFRLENBQUM1TCxJQUFJLENBQUMsSUFBSUEsSUFBSSxDQUFDOEosT0FBTyxFQUFFLElBQUswZ0IsV0FBVyxDQUFDeHFCLElBQUksQ0FBQyxDQUFDOEosT0FBTyxFQUFFLENBQUMsRUFDckU7UUFDRSxPQUFPK2lCLGNBQWMsQ0FBQztVQUFFOWhCLEVBQUUsRUFBRSxJQUFJO0FBQUVqUixVQUFBQSxJQUFJLEVBQUVrRztBQUFLLFNBQUMsQ0FBQyxDQUMxQ29JLE1BQU0sQ0FBQyxJQUFJLENBQUNBLE1BQU0sRUFBRSxDQUFDLENBQ3JCZ3NCLFFBQVEsQ0FBQyxDQUFDcGlCLGFBQWEsQ0FBQztBQUNqQyxPQUFDLE1BQU07UUFDSCxPQUFPLElBQUksQ0FBQzVDLFVBQVUsRUFBRSxDQUFDTSxXQUFXLEVBQUU7QUFDMUM7QUFDSjtJQUVBLFNBQVMya0IsT0FBT0EsQ0FBQ3JpQixhQUFhLEVBQUU7TUFDNUIsT0FBTyxJQUFJLENBQUNsWSxJQUFJLENBQUMwd0IsV0FBVyxFQUFFLEVBQUV4WSxhQUFhLENBQUM7QUFDbEQ7QUFFQSxJQUFBLFNBQVNqSCxFQUFFQSxDQUFDL0ssSUFBSSxFQUFFZ1MsYUFBYSxFQUFFO01BQzdCLElBQ0ksSUFBSSxDQUFDbEksT0FBTyxFQUFFLEtBQ1o4QixRQUFRLENBQUM1TCxJQUFJLENBQUMsSUFBSUEsSUFBSSxDQUFDOEosT0FBTyxFQUFFLElBQUswZ0IsV0FBVyxDQUFDeHFCLElBQUksQ0FBQyxDQUFDOEosT0FBTyxFQUFFLENBQUMsRUFDckU7UUFDRSxPQUFPK2lCLGNBQWMsQ0FBQztVQUFFL3lCLElBQUksRUFBRSxJQUFJO0FBQUVpUixVQUFBQSxFQUFFLEVBQUUvSztBQUFLLFNBQUMsQ0FBQyxDQUMxQ29JLE1BQU0sQ0FBQyxJQUFJLENBQUNBLE1BQU0sRUFBRSxDQUFDLENBQ3JCZ3NCLFFBQVEsQ0FBQyxDQUFDcGlCLGFBQWEsQ0FBQztBQUNqQyxPQUFDLE1BQU07UUFDSCxPQUFPLElBQUksQ0FBQzVDLFVBQVUsRUFBRSxDQUFDTSxXQUFXLEVBQUU7QUFDMUM7QUFDSjtJQUVBLFNBQVM0a0IsS0FBS0EsQ0FBQ3RpQixhQUFhLEVBQUU7TUFDMUIsT0FBTyxJQUFJLENBQUNqSCxFQUFFLENBQUN5ZixXQUFXLEVBQUUsRUFBRXhZLGFBQWEsQ0FBQztBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7SUFDQSxTQUFTNUosTUFBTUEsQ0FBQ3RlLEdBQUcsRUFBRTtBQUNqQixNQUFBLElBQUl5cUMsYUFBYTtNQUVqQixJQUFJenFDLEdBQUcsS0FBS3lnQixTQUFTLEVBQUU7QUFDbkIsUUFBQSxPQUFPLElBQUksQ0FBQ2tCLE9BQU8sQ0FBQ2lhLEtBQUs7QUFDN0IsT0FBQyxNQUFNO0FBQ0g2TyxRQUFBQSxhQUFhLEdBQUcxTyxTQUFTLENBQUMvN0IsR0FBRyxDQUFDO1FBQzlCLElBQUl5cUMsYUFBYSxJQUFJLElBQUksRUFBRTtVQUN2QixJQUFJLENBQUM5b0IsT0FBTyxHQUFHOG9CLGFBQWE7QUFDaEM7QUFDQSxRQUFBLE9BQU8sSUFBSTtBQUNmO0FBQ0o7SUFFQSxJQUFJQyxJQUFJLEdBQUd4b0IsU0FBUyxDQUNoQixpSkFBaUosRUFDakosVUFBVWxpQixHQUFHLEVBQUU7TUFDWCxJQUFJQSxHQUFHLEtBQUt5Z0IsU0FBUyxFQUFFO0FBQ25CLFFBQUEsT0FBTyxJQUFJLENBQUM2RSxVQUFVLEVBQUU7QUFDNUIsT0FBQyxNQUFNO0FBQ0gsUUFBQSxPQUFPLElBQUksQ0FBQ2hILE1BQU0sQ0FBQ3RlLEdBQUcsQ0FBQztBQUMzQjtBQUNKLEtBQ0osQ0FBQztJQUVELFNBQVNzbEIsVUFBVUEsR0FBRztNQUNsQixPQUFPLElBQUksQ0FBQzNELE9BQU87QUFDdkI7SUFFQSxJQUFJZ3BCLGFBQWEsR0FBRyxJQUFJO01BQ3BCQyxhQUFhLEdBQUcsRUFBRSxHQUFHRCxhQUFhO01BQ2xDRSxXQUFXLEdBQUcsRUFBRSxHQUFHRCxhQUFhO01BQ2hDRSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBR0QsV0FBVzs7QUFFMUQ7QUFDQSxJQUFBLFNBQVNFLEtBQUtBLENBQUNDLFFBQVEsRUFBRUMsT0FBTyxFQUFFO01BQzlCLE9BQU8sQ0FBRUQsUUFBUSxHQUFHQyxPQUFPLEdBQUlBLE9BQU8sSUFBSUEsT0FBTztBQUNyRDtJQUVBLFNBQVNDLGdCQUFnQkEsQ0FBQ25qQixDQUFDLEVBQUVqWSxDQUFDLEVBQUUyWCxDQUFDLEVBQUU7QUFDL0I7TUFDQSxJQUFJTSxDQUFDLEdBQUcsR0FBRyxJQUFJQSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ25CO0FBQ0EsUUFBQSxPQUFPLElBQUlyckIsSUFBSSxDQUFDcXJCLENBQUMsR0FBRyxHQUFHLEVBQUVqWSxDQUFDLEVBQUUyWCxDQUFDLENBQUMsR0FBR3FqQixnQkFBZ0I7QUFDckQsT0FBQyxNQUFNO0FBQ0gsUUFBQSxPQUFPLElBQUlwdUMsSUFBSSxDQUFDcXJCLENBQUMsRUFBRWpZLENBQUMsRUFBRTJYLENBQUMsQ0FBQyxDQUFDdEosT0FBTyxFQUFFO0FBQ3RDO0FBQ0o7SUFFQSxTQUFTZ3RCLGNBQWNBLENBQUNwakIsQ0FBQyxFQUFFalksQ0FBQyxFQUFFMlgsQ0FBQyxFQUFFO0FBQzdCO01BQ0EsSUFBSU0sQ0FBQyxHQUFHLEdBQUcsSUFBSUEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuQjtBQUNBLFFBQUEsT0FBT3JyQixJQUFJLENBQUN5NEIsR0FBRyxDQUFDcE4sQ0FBQyxHQUFHLEdBQUcsRUFBRWpZLENBQUMsRUFBRTJYLENBQUMsQ0FBQyxHQUFHcWpCLGdCQUFnQjtBQUNyRCxPQUFDLE1BQU07UUFDSCxPQUFPcHVDLElBQUksQ0FBQ3k0QixHQUFHLENBQUNwTixDQUFDLEVBQUVqWSxDQUFDLEVBQUUyWCxDQUFDLENBQUM7QUFDNUI7QUFDSjtJQUVBLFNBQVM2Z0IsT0FBT0EsQ0FBQ25kLEtBQUssRUFBRTtNQUNwQixJQUFJalYsSUFBSSxFQUFFazFCLFdBQVc7QUFDckJqZ0IsTUFBQUEsS0FBSyxHQUFHRCxjQUFjLENBQUNDLEtBQUssQ0FBQztBQUM3QixNQUFBLElBQUlBLEtBQUssS0FBSzFLLFNBQVMsSUFBSTBLLEtBQUssS0FBSyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUNuTCxPQUFPLEVBQUUsRUFBRTtBQUNuRSxRQUFBLE9BQU8sSUFBSTtBQUNmO01BRUFvckIsV0FBVyxHQUFHLElBQUksQ0FBQzNwQixNQUFNLEdBQUcwcEIsY0FBYyxHQUFHRCxnQkFBZ0I7QUFFN0QsTUFBQSxRQUFRL2YsS0FBSztBQUNULFFBQUEsS0FBSyxNQUFNO0FBQ1BqVixVQUFBQSxJQUFJLEdBQUdrMUIsV0FBVyxDQUFDLElBQUksQ0FBQ25nQixJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1VBQ3JDO0FBQ0osUUFBQSxLQUFLLFNBQVM7VUFDVi9VLElBQUksR0FBR2sxQixXQUFXLENBQ2QsSUFBSSxDQUFDbmdCLElBQUksRUFBRSxFQUNYLElBQUksQ0FBQ2xCLEtBQUssRUFBRSxHQUFJLElBQUksQ0FBQ0EsS0FBSyxFQUFFLEdBQUcsQ0FBRSxFQUNqQyxDQUNKLENBQUM7VUFDRDtBQUNKLFFBQUEsS0FBSyxPQUFPO0FBQ1I3VCxVQUFBQSxJQUFJLEdBQUdrMUIsV0FBVyxDQUFDLElBQUksQ0FBQ25nQixJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUNsQixLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDaEQ7QUFDSixRQUFBLEtBQUssTUFBTTtVQUNQN1QsSUFBSSxHQUFHazFCLFdBQVcsQ0FDZCxJQUFJLENBQUNuZ0IsSUFBSSxFQUFFLEVBQ1gsSUFBSSxDQUFDbEIsS0FBSyxFQUFFLEVBQ1osSUFBSSxDQUFDcEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDSyxPQUFPLEVBQzlCLENBQUM7VUFDRDtBQUNKLFFBQUEsS0FBSyxTQUFTO1VBQ1Y5UyxJQUFJLEdBQUdrMUIsV0FBVyxDQUNkLElBQUksQ0FBQ25nQixJQUFJLEVBQUUsRUFDWCxJQUFJLENBQUNsQixLQUFLLEVBQUUsRUFDWixJQUFJLENBQUNwQixJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMrQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQ3hDLENBQUM7VUFDRDtBQUNKLFFBQUEsS0FBSyxLQUFLO0FBQ1YsUUFBQSxLQUFLLE1BQU07VUFDUHhWLElBQUksR0FBR2sxQixXQUFXLENBQUMsSUFBSSxDQUFDbmdCLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQ2xCLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQ3BCLElBQUksRUFBRSxDQUFDO1VBQzFEO0FBQ0osUUFBQSxLQUFLLE1BQU07QUFDUHpTLFVBQUFBLElBQUksR0FBRyxJQUFJLENBQUNrSyxFQUFFLENBQUNqQyxPQUFPLEVBQUU7VUFDeEJqSSxJQUFJLElBQUk2MEIsS0FBSyxDQUNUNzBCLElBQUksSUFBSSxJQUFJLENBQUN1TCxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQ3dpQixTQUFTLEVBQUUsR0FBRzJHLGFBQWEsQ0FBQyxFQUMzREMsV0FDSixDQUFDO1VBQ0Q7QUFDSixRQUFBLEtBQUssUUFBUTtBQUNUMzBCLFVBQUFBLElBQUksR0FBRyxJQUFJLENBQUNrSyxFQUFFLENBQUNqQyxPQUFPLEVBQUU7QUFDeEJqSSxVQUFBQSxJQUFJLElBQUk2MEIsS0FBSyxDQUFDNzBCLElBQUksRUFBRTAwQixhQUFhLENBQUM7VUFDbEM7QUFDSixRQUFBLEtBQUssUUFBUTtBQUNUMTBCLFVBQUFBLElBQUksR0FBRyxJQUFJLENBQUNrSyxFQUFFLENBQUNqQyxPQUFPLEVBQUU7QUFDeEJqSSxVQUFBQSxJQUFJLElBQUk2MEIsS0FBSyxDQUFDNzBCLElBQUksRUFBRXkwQixhQUFhLENBQUM7VUFDbEM7QUFDUjtBQUVBLE1BQUEsSUFBSSxDQUFDdnFCLEVBQUUsQ0FBQ3VrQixPQUFPLENBQUN6dUIsSUFBSSxDQUFDO0FBQ3JCZ0gsTUFBQUEsS0FBSyxDQUFDMkUsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDOUIsTUFBQSxPQUFPLElBQUk7QUFDZjtJQUVBLFNBQVM0bUIsS0FBS0EsQ0FBQ3RkLEtBQUssRUFBRTtNQUNsQixJQUFJalYsSUFBSSxFQUFFazFCLFdBQVc7QUFDckJqZ0IsTUFBQUEsS0FBSyxHQUFHRCxjQUFjLENBQUNDLEtBQUssQ0FBQztBQUM3QixNQUFBLElBQUlBLEtBQUssS0FBSzFLLFNBQVMsSUFBSTBLLEtBQUssS0FBSyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUNuTCxPQUFPLEVBQUUsRUFBRTtBQUNuRSxRQUFBLE9BQU8sSUFBSTtBQUNmO01BRUFvckIsV0FBVyxHQUFHLElBQUksQ0FBQzNwQixNQUFNLEdBQUcwcEIsY0FBYyxHQUFHRCxnQkFBZ0I7QUFFN0QsTUFBQSxRQUFRL2YsS0FBSztBQUNULFFBQUEsS0FBSyxNQUFNO0FBQ1BqVixVQUFBQSxJQUFJLEdBQUdrMUIsV0FBVyxDQUFDLElBQUksQ0FBQ25nQixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7VUFDN0M7QUFDSixRQUFBLEtBQUssU0FBUztVQUNWL1UsSUFBSSxHQUNBazFCLFdBQVcsQ0FDUCxJQUFJLENBQUNuZ0IsSUFBSSxFQUFFLEVBQ1gsSUFBSSxDQUFDbEIsS0FBSyxFQUFFLEdBQUksSUFBSSxDQUFDQSxLQUFLLEVBQUUsR0FBRyxDQUFFLEdBQUcsQ0FBQyxFQUNyQyxDQUNKLENBQUMsR0FBRyxDQUFDO1VBQ1Q7QUFDSixRQUFBLEtBQUssT0FBTztVQUNSN1QsSUFBSSxHQUFHazFCLFdBQVcsQ0FBQyxJQUFJLENBQUNuZ0IsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDbEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7VUFDeEQ7QUFDSixRQUFBLEtBQUssTUFBTTtVQUNQN1QsSUFBSSxHQUNBazFCLFdBQVcsQ0FDUCxJQUFJLENBQUNuZ0IsSUFBSSxFQUFFLEVBQ1gsSUFBSSxDQUFDbEIsS0FBSyxFQUFFLEVBQ1osSUFBSSxDQUFDcEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDSyxPQUFPLEVBQUUsR0FBRyxDQUNuQyxDQUFDLEdBQUcsQ0FBQztVQUNUO0FBQ0osUUFBQSxLQUFLLFNBQVM7QUFDVjlTLFVBQUFBLElBQUksR0FDQWsxQixXQUFXLENBQ1AsSUFBSSxDQUFDbmdCLElBQUksRUFBRSxFQUNYLElBQUksQ0FBQ2xCLEtBQUssRUFBRSxFQUNaLElBQUksQ0FBQ3BCLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQytDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQzVDLENBQUMsR0FBRyxDQUFDO1VBQ1Q7QUFDSixRQUFBLEtBQUssS0FBSztBQUNWLFFBQUEsS0FBSyxNQUFNO1VBQ1B4VixJQUFJLEdBQUdrMUIsV0FBVyxDQUFDLElBQUksQ0FBQ25nQixJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUNsQixLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO1VBQ2xFO0FBQ0osUUFBQSxLQUFLLE1BQU07QUFDUHpTLFVBQUFBLElBQUksR0FBRyxJQUFJLENBQUNrSyxFQUFFLENBQUNqQyxPQUFPLEVBQUU7VUFDeEJqSSxJQUFJLElBQ0EyMEIsV0FBVyxHQUNYRSxLQUFLLENBQ0Q3MEIsSUFBSSxJQUFJLElBQUksQ0FBQ3VMLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDd2lCLFNBQVMsRUFBRSxHQUFHMkcsYUFBYSxDQUFDLEVBQzNEQyxXQUNKLENBQUMsR0FDRCxDQUFDO1VBQ0w7QUFDSixRQUFBLEtBQUssUUFBUTtBQUNUMzBCLFVBQUFBLElBQUksR0FBRyxJQUFJLENBQUNrSyxFQUFFLENBQUNqQyxPQUFPLEVBQUU7VUFDeEJqSSxJQUFJLElBQUkwMEIsYUFBYSxHQUFHRyxLQUFLLENBQUM3MEIsSUFBSSxFQUFFMDBCLGFBQWEsQ0FBQyxHQUFHLENBQUM7VUFDdEQ7QUFDSixRQUFBLEtBQUssUUFBUTtBQUNUMTBCLFVBQUFBLElBQUksR0FBRyxJQUFJLENBQUNrSyxFQUFFLENBQUNqQyxPQUFPLEVBQUU7VUFDeEJqSSxJQUFJLElBQUl5MEIsYUFBYSxHQUFHSSxLQUFLLENBQUM3MEIsSUFBSSxFQUFFeTBCLGFBQWEsQ0FBQyxHQUFHLENBQUM7VUFDdEQ7QUFDUjtBQUVBLE1BQUEsSUFBSSxDQUFDdnFCLEVBQUUsQ0FBQ3VrQixPQUFPLENBQUN6dUIsSUFBSSxDQUFDO0FBQ3JCZ0gsTUFBQUEsS0FBSyxDQUFDMkUsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDOUIsTUFBQSxPQUFPLElBQUk7QUFDZjtJQUVBLFNBQVMxRCxPQUFPQSxHQUFHO0FBQ2YsTUFBQSxPQUFPLElBQUksQ0FBQ2lDLEVBQUUsQ0FBQ2pDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDdUQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLO0FBQzFEO0lBRUEsU0FBUzJwQixJQUFJQSxHQUFHO01BQ1osT0FBTzN0QyxJQUFJLENBQUM0d0IsS0FBSyxDQUFDLElBQUksQ0FBQ25RLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztBQUM1QztJQUVBLFNBQVMyckIsTUFBTUEsR0FBRztNQUNkLE9BQU8sSUFBSXB0QyxJQUFJLENBQUMsSUFBSSxDQUFDeWhCLE9BQU8sRUFBRSxDQUFDO0FBQ25DO0lBRUEsU0FBUzRuQixPQUFPQSxHQUFHO01BQ2YsSUFBSWoyQixDQUFDLEdBQUcsSUFBSTtBQUNaLE1BQUEsT0FBTyxDQUNIQSxDQUFDLENBQUNtYixJQUFJLEVBQUUsRUFDUm5iLENBQUMsQ0FBQ2lhLEtBQUssRUFBRSxFQUNUamEsQ0FBQyxDQUFDNlksSUFBSSxFQUFFLEVBQ1I3WSxDQUFDLENBQUMwWixJQUFJLEVBQUUsRUFDUjFaLENBQUMsQ0FBQytaLE1BQU0sRUFBRSxFQUNWL1osQ0FBQyxDQUFDc2EsTUFBTSxFQUFFLEVBQ1Z0YSxDQUFDLENBQUM2WixXQUFXLEVBQUUsQ0FDbEI7QUFDTDtJQUVBLFNBQVMyaEIsUUFBUUEsR0FBRztNQUNoQixJQUFJeDdCLENBQUMsR0FBRyxJQUFJO01BQ1osT0FBTztBQUNIa2IsUUFBQUEsS0FBSyxFQUFFbGIsQ0FBQyxDQUFDbWIsSUFBSSxFQUFFO0FBQ2ZuQixRQUFBQSxNQUFNLEVBQUVoYSxDQUFDLENBQUNpYSxLQUFLLEVBQUU7QUFDakJwQixRQUFBQSxJQUFJLEVBQUU3WSxDQUFDLENBQUM2WSxJQUFJLEVBQUU7QUFDZFksUUFBQUEsS0FBSyxFQUFFelosQ0FBQyxDQUFDeVosS0FBSyxFQUFFO0FBQ2hCSyxRQUFBQSxPQUFPLEVBQUU5WixDQUFDLENBQUM4WixPQUFPLEVBQUU7QUFDcEJPLFFBQUFBLE9BQU8sRUFBRXJhLENBQUMsQ0FBQ3FhLE9BQU8sRUFBRTtBQUNwQlQsUUFBQUEsWUFBWSxFQUFFNVosQ0FBQyxDQUFDNFosWUFBWTtPQUMvQjtBQUNMO0lBRUEsU0FBUzZoQixNQUFNQSxHQUFHO0FBQ2Q7TUFDQSxPQUFPLElBQUksQ0FBQ3ZyQixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM0cEIsV0FBVyxFQUFFLEdBQUcsSUFBSTtBQUNyRDtJQUVBLFNBQVM0QixTQUFTQSxHQUFHO01BQ2pCLE9BQU94ckIsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QjtJQUVBLFNBQVN5ckIsWUFBWUEsR0FBRztNQUNwQixPQUFPdnRCLE1BQU0sQ0FBQyxFQUFFLEVBQUV5QixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUM7SUFFQSxTQUFTK3JCLFNBQVNBLEdBQUc7QUFDakIsTUFBQSxPQUFPL3JCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQ2IsUUFBUTtBQUN6QztJQUVBLFNBQVM2c0IsWUFBWUEsR0FBRztNQUNwQixPQUFPO1FBQ0h4dUMsS0FBSyxFQUFFLElBQUksQ0FBQ2trQixFQUFFO1FBQ2RoRCxNQUFNLEVBQUUsSUFBSSxDQUFDaUQsRUFBRTtRQUNmaEQsTUFBTSxFQUFFLElBQUksQ0FBQ3FELE9BQU87UUFDcEJ5TyxLQUFLLEVBQUUsSUFBSSxDQUFDM08sTUFBTTtRQUNsQmxELE1BQU0sRUFBRSxJQUFJLENBQUNnQztPQUNoQjtBQUNMO0lBRUEwRSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDO0lBQ3BDQSxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDO0lBQ3JDQSxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDO0lBQ3RDQSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDO0lBQ3ZDQSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDO0FBRTFDQSxJQUFBQSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUM7QUFDOUNBLElBQUFBLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQztBQUM1Q0EsSUFBQUEsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDO0FBQzdDQSxJQUFBQSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUM7QUFFOUN1SSxJQUFBQSxhQUFhLENBQUMsR0FBRyxFQUFFb2UsWUFBWSxDQUFDO0FBQ2hDcGUsSUFBQUEsYUFBYSxDQUFDLElBQUksRUFBRW9lLFlBQVksQ0FBQztBQUNqQ3BlLElBQUFBLGFBQWEsQ0FBQyxLQUFLLEVBQUVvZSxZQUFZLENBQUM7QUFDbENwZSxJQUFBQSxhQUFhLENBQUMsTUFBTSxFQUFFcWUsWUFBWSxDQUFDO0FBQ25DcmUsSUFBQUEsYUFBYSxDQUFDLE9BQU8sRUFBRXNlLGNBQWMsQ0FBQztJQUV0Q2xkLGFBQWEsQ0FDVCxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFDbkMsVUFBVXp4QixLQUFLLEVBQUVrRCxLQUFLLEVBQUUwRixNQUFNLEVBQUVtZixLQUFLLEVBQUU7QUFDbkMsTUFBQSxJQUFJM0YsR0FBRyxHQUFHeFosTUFBTSxDQUFDNGIsT0FBTyxDQUFDb3FCLFNBQVMsQ0FBQzV1QyxLQUFLLEVBQUUrbkIsS0FBSyxFQUFFbmYsTUFBTSxDQUFDd2EsT0FBTyxDQUFDO01BQ2hFLElBQUloQixHQUFHLEVBQUU7QUFDTEksUUFBQUEsZUFBZSxDQUFDNVosTUFBTSxDQUFDLENBQUN3WixHQUFHLEdBQUdBLEdBQUc7QUFDckMsT0FBQyxNQUFNO0FBQ0hJLFFBQUFBLGVBQWUsQ0FBQzVaLE1BQU0sQ0FBQyxDQUFDa1osVUFBVSxHQUFHOWhCLEtBQUs7QUFDOUM7QUFDSixLQUNKLENBQUM7QUFFRHF3QixJQUFBQSxhQUFhLENBQUMsR0FBRyxFQUFFVCxhQUFhLENBQUM7QUFDakNTLElBQUFBLGFBQWEsQ0FBQyxJQUFJLEVBQUVULGFBQWEsQ0FBQztBQUNsQ1MsSUFBQUEsYUFBYSxDQUFDLEtBQUssRUFBRVQsYUFBYSxDQUFDO0FBQ25DUyxJQUFBQSxhQUFhLENBQUMsTUFBTSxFQUFFVCxhQUFhLENBQUM7QUFDcENTLElBQUFBLGFBQWEsQ0FBQyxJQUFJLEVBQUV3ZSxtQkFBbUIsQ0FBQztBQUV4Q3BkLElBQUFBLGFBQWEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFTyxJQUFJLENBQUM7QUFDL0NQLElBQUFBLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVV6eEIsS0FBSyxFQUFFa0QsS0FBSyxFQUFFMEYsTUFBTSxFQUFFbWYsS0FBSyxFQUFFO0FBQ3pELE1BQUEsSUFBSU0sS0FBSztBQUNULE1BQUEsSUFBSXpmLE1BQU0sQ0FBQzRiLE9BQU8sQ0FBQ3NxQixvQkFBb0IsRUFBRTtRQUNyQ3ptQixLQUFLLEdBQUdyb0IsS0FBSyxDQUFDcW9CLEtBQUssQ0FBQ3pmLE1BQU0sQ0FBQzRiLE9BQU8sQ0FBQ3NxQixvQkFBb0IsQ0FBQztBQUM1RDtBQUVBLE1BQUEsSUFBSWxtQyxNQUFNLENBQUM0YixPQUFPLENBQUN1cUIsbUJBQW1CLEVBQUU7QUFDcEM3ckMsUUFBQUEsS0FBSyxDQUFDOHVCLElBQUksQ0FBQyxHQUFHcHBCLE1BQU0sQ0FBQzRiLE9BQU8sQ0FBQ3VxQixtQkFBbUIsQ0FBQy91QyxLQUFLLEVBQUVxb0IsS0FBSyxDQUFDO0FBQ2xFLE9BQUMsTUFBTTtRQUNIbmxCLEtBQUssQ0FBQzh1QixJQUFJLENBQUMsR0FBR1UsUUFBUSxDQUFDMXlCLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDckM7QUFDSixLQUFDLENBQUM7QUFFRixJQUFBLFNBQVNndkMsVUFBVUEsQ0FBQ3I4QixDQUFDLEVBQUV1TyxNQUFNLEVBQUU7QUFDM0IsTUFBQSxJQUFJdmQsQ0FBQztRQUNEODhCLENBQUM7UUFDRGpWLElBQUk7UUFDSnlqQixJQUFJLEdBQUcsSUFBSSxDQUFDQyxLQUFLLElBQUl0USxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUNzUSxLQUFLO0FBQzlDLE1BQUEsS0FBS3ZyQyxDQUFDLEdBQUcsQ0FBQyxFQUFFODhCLENBQUMsR0FBR3dPLElBQUksQ0FBQzNyQyxNQUFNLEVBQUVLLENBQUMsR0FBRzg4QixDQUFDLEVBQUUsRUFBRTk4QixDQUFDLEVBQUU7QUFDckMsUUFBQSxRQUFRLE9BQU9zckMsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDd3JDLEtBQUs7QUFDeEIsVUFBQSxLQUFLLFFBQVE7QUFDVDtBQUNBM2pCLFlBQUFBLElBQUksR0FBR3pMLEtBQUssQ0FBQ2t2QixJQUFJLENBQUN0ckMsQ0FBQyxDQUFDLENBQUN3ckMsS0FBSyxDQUFDLENBQUNoRSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQzFDOEQsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDd3JDLEtBQUssR0FBRzNqQixJQUFJLENBQUN4SyxPQUFPLEVBQUU7WUFDOUI7QUFDUjtBQUVBLFFBQUEsUUFBUSxPQUFPaXVCLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3lyQyxLQUFLO0FBQ3hCLFVBQUEsS0FBSyxXQUFXO1lBQ1pILElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3lyQyxLQUFLLEdBQUcsQ0FBQ2p2QyxRQUFRO1lBQ3pCO0FBQ0osVUFBQSxLQUFLLFFBQVE7QUFDVDtBQUNBcXJCLFlBQUFBLElBQUksR0FBR3pMLEtBQUssQ0FBQ2t2QixJQUFJLENBQUN0ckMsQ0FBQyxDQUFDLENBQUN5ckMsS0FBSyxDQUFDLENBQUNqRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUNucUIsT0FBTyxFQUFFO1lBQ3BEaXVCLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3lyQyxLQUFLLEdBQUc1akIsSUFBSSxDQUFDeEssT0FBTyxFQUFFO1lBQzlCO0FBQ1I7QUFDSjtBQUNBLE1BQUEsT0FBT2l1QixJQUFJO0FBQ2Y7SUFFQSxTQUFTSSxlQUFlQSxDQUFDQyxPQUFPLEVBQUVwdUIsTUFBTSxFQUFFRSxNQUFNLEVBQUU7QUFDOUMsTUFBQSxJQUFJemQsQ0FBQztRQUNEODhCLENBQUM7QUFDRHdPLFFBQUFBLElBQUksR0FBRyxJQUFJLENBQUNBLElBQUksRUFBRTtRQUNsQnpwQixJQUFJO1FBQ0pzWixJQUFJO1FBQ0p5USxNQUFNO0FBQ1ZELE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDL2xCLFdBQVcsRUFBRTtBQUUvQixNQUFBLEtBQUs1bEIsQ0FBQyxHQUFHLENBQUMsRUFBRTg4QixDQUFDLEdBQUd3TyxJQUFJLENBQUMzckMsTUFBTSxFQUFFSyxDQUFDLEdBQUc4OEIsQ0FBQyxFQUFFLEVBQUU5OEIsQ0FBQyxFQUFFO1FBQ3JDNmhCLElBQUksR0FBR3lwQixJQUFJLENBQUN0ckMsQ0FBQyxDQUFDLENBQUM2aEIsSUFBSSxDQUFDK0QsV0FBVyxFQUFFO1FBQ2pDdVYsSUFBSSxHQUFHbVEsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDbTdCLElBQUksQ0FBQ3ZWLFdBQVcsRUFBRTtRQUNqQ2dtQixNQUFNLEdBQUdOLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQzRyQyxNQUFNLENBQUNobUIsV0FBVyxFQUFFO1FBRXJDLElBQUluSSxNQUFNLEVBQUU7QUFDUixVQUFBLFFBQVFGLE1BQU07QUFDVixZQUFBLEtBQUssR0FBRztBQUNSLFlBQUEsS0FBSyxJQUFJO0FBQ1QsWUFBQSxLQUFLLEtBQUs7Y0FDTixJQUFJNGQsSUFBSSxLQUFLd1EsT0FBTyxFQUFFO2dCQUNsQixPQUFPTCxJQUFJLENBQUN0ckMsQ0FBQyxDQUFDO0FBQ2xCO2NBQ0E7QUFFSixZQUFBLEtBQUssTUFBTTtjQUNQLElBQUk2aEIsSUFBSSxLQUFLOHBCLE9BQU8sRUFBRTtnQkFDbEIsT0FBT0wsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQztBQUNsQjtjQUNBO0FBRUosWUFBQSxLQUFLLE9BQU87Y0FDUixJQUFJNHJDLE1BQU0sS0FBS0QsT0FBTyxFQUFFO2dCQUNwQixPQUFPTCxJQUFJLENBQUN0ckMsQ0FBQyxDQUFDO0FBQ2xCO2NBQ0E7QUFDUjtBQUNKLFNBQUMsTUFBTSxJQUFJLENBQUM2aEIsSUFBSSxFQUFFc1osSUFBSSxFQUFFeVEsTUFBTSxDQUFDLENBQUNoOUIsT0FBTyxDQUFDKzhCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtVQUNuRCxPQUFPTCxJQUFJLENBQUN0ckMsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0o7QUFDSjtBQUVBLElBQUEsU0FBUzZyQyxxQkFBcUJBLENBQUNwdEIsR0FBRyxFQUFFMEwsSUFBSSxFQUFFO0FBQ3RDLE1BQUEsSUFBSTJoQixHQUFHLEdBQUdydEIsR0FBRyxDQUFDK3NCLEtBQUssSUFBSS9zQixHQUFHLENBQUNndEIsS0FBSyxHQUFHLENBQUUsR0FBRyxFQUFFO01BQzFDLElBQUl0aEIsSUFBSSxLQUFLeEssU0FBUyxFQUFFO1FBQ3BCLE9BQU92RCxLQUFLLENBQUNxQyxHQUFHLENBQUMrc0IsS0FBSyxDQUFDLENBQUNyaEIsSUFBSSxFQUFFO0FBQ2xDLE9BQUMsTUFBTTtBQUNILFFBQUEsT0FBTy9OLEtBQUssQ0FBQ3FDLEdBQUcsQ0FBQytzQixLQUFLLENBQUMsQ0FBQ3JoQixJQUFJLEVBQUUsR0FBRyxDQUFDQSxJQUFJLEdBQUcxTCxHQUFHLENBQUN3a0IsTUFBTSxJQUFJNkksR0FBRztBQUM5RDtBQUNKO0lBRUEsU0FBU0MsVUFBVUEsR0FBRztBQUNsQixNQUFBLElBQUkvckMsQ0FBQztRQUNEODhCLENBQUM7UUFDRG4rQixHQUFHO1FBQ0gyc0MsSUFBSSxHQUFHLElBQUksQ0FBQzltQixVQUFVLEVBQUUsQ0FBQzhtQixJQUFJLEVBQUU7QUFDbkMsTUFBQSxLQUFLdHJDLENBQUMsR0FBRyxDQUFDLEVBQUU4OEIsQ0FBQyxHQUFHd08sSUFBSSxDQUFDM3JDLE1BQU0sRUFBRUssQ0FBQyxHQUFHODhCLENBQUMsRUFBRSxFQUFFOThCLENBQUMsRUFBRTtBQUNyQztBQUNBckIsUUFBQUEsR0FBRyxHQUFHLElBQUksQ0FBQ2lsQyxLQUFLLEVBQUUsQ0FBQzRELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQ25xQixPQUFPLEVBQUU7QUFFM0MsUUFBQSxJQUFJaXVCLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3dyQyxLQUFLLElBQUk3c0MsR0FBRyxJQUFJQSxHQUFHLElBQUkyc0MsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDeXJDLEtBQUssRUFBRTtBQUM5QyxVQUFBLE9BQU9ILElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQzZoQixJQUFJO0FBQ3ZCO0FBQ0EsUUFBQSxJQUFJeXBCLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3lyQyxLQUFLLElBQUk5c0MsR0FBRyxJQUFJQSxHQUFHLElBQUkyc0MsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDd3JDLEtBQUssRUFBRTtBQUM5QyxVQUFBLE9BQU9GLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQzZoQixJQUFJO0FBQ3ZCO0FBQ0o7QUFFQSxNQUFBLE9BQU8sRUFBRTtBQUNiO0lBRUEsU0FBU21xQixZQUFZQSxHQUFHO0FBQ3BCLE1BQUEsSUFBSWhzQyxDQUFDO1FBQ0Q4OEIsQ0FBQztRQUNEbitCLEdBQUc7UUFDSDJzQyxJQUFJLEdBQUcsSUFBSSxDQUFDOW1CLFVBQVUsRUFBRSxDQUFDOG1CLElBQUksRUFBRTtBQUNuQyxNQUFBLEtBQUt0ckMsQ0FBQyxHQUFHLENBQUMsRUFBRTg4QixDQUFDLEdBQUd3TyxJQUFJLENBQUMzckMsTUFBTSxFQUFFSyxDQUFDLEdBQUc4OEIsQ0FBQyxFQUFFLEVBQUU5OEIsQ0FBQyxFQUFFO0FBQ3JDO0FBQ0FyQixRQUFBQSxHQUFHLEdBQUcsSUFBSSxDQUFDaWxDLEtBQUssRUFBRSxDQUFDNEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDbnFCLE9BQU8sRUFBRTtBQUUzQyxRQUFBLElBQUlpdUIsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDd3JDLEtBQUssSUFBSTdzQyxHQUFHLElBQUlBLEdBQUcsSUFBSTJzQyxJQUFJLENBQUN0ckMsQ0FBQyxDQUFDLENBQUN5ckMsS0FBSyxFQUFFO0FBQzlDLFVBQUEsT0FBT0gsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDNHJDLE1BQU07QUFDekI7QUFDQSxRQUFBLElBQUlOLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3lyQyxLQUFLLElBQUk5c0MsR0FBRyxJQUFJQSxHQUFHLElBQUkyc0MsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDd3JDLEtBQUssRUFBRTtBQUM5QyxVQUFBLE9BQU9GLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQzRyQyxNQUFNO0FBQ3pCO0FBQ0o7QUFFQSxNQUFBLE9BQU8sRUFBRTtBQUNiO0lBRUEsU0FBU0ssVUFBVUEsR0FBRztBQUNsQixNQUFBLElBQUlqc0MsQ0FBQztRQUNEODhCLENBQUM7UUFDRG4rQixHQUFHO1FBQ0gyc0MsSUFBSSxHQUFHLElBQUksQ0FBQzltQixVQUFVLEVBQUUsQ0FBQzhtQixJQUFJLEVBQUU7QUFDbkMsTUFBQSxLQUFLdHJDLENBQUMsR0FBRyxDQUFDLEVBQUU4OEIsQ0FBQyxHQUFHd08sSUFBSSxDQUFDM3JDLE1BQU0sRUFBRUssQ0FBQyxHQUFHODhCLENBQUMsRUFBRSxFQUFFOThCLENBQUMsRUFBRTtBQUNyQztBQUNBckIsUUFBQUEsR0FBRyxHQUFHLElBQUksQ0FBQ2lsQyxLQUFLLEVBQUUsQ0FBQzRELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQ25xQixPQUFPLEVBQUU7QUFFM0MsUUFBQSxJQUFJaXVCLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3dyQyxLQUFLLElBQUk3c0MsR0FBRyxJQUFJQSxHQUFHLElBQUkyc0MsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDeXJDLEtBQUssRUFBRTtBQUM5QyxVQUFBLE9BQU9ILElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ203QixJQUFJO0FBQ3ZCO0FBQ0EsUUFBQSxJQUFJbVEsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDeXJDLEtBQUssSUFBSTlzQyxHQUFHLElBQUlBLEdBQUcsSUFBSTJzQyxJQUFJLENBQUN0ckMsQ0FBQyxDQUFDLENBQUN3ckMsS0FBSyxFQUFFO0FBQzlDLFVBQUEsT0FBT0YsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDbTdCLElBQUk7QUFDdkI7QUFDSjtBQUVBLE1BQUEsT0FBTyxFQUFFO0FBQ2I7SUFFQSxTQUFTK1EsVUFBVUEsR0FBRztBQUNsQixNQUFBLElBQUlsc0MsQ0FBQztRQUNEODhCLENBQUM7UUFDRGdQLEdBQUc7UUFDSG50QyxHQUFHO1FBQ0gyc0MsSUFBSSxHQUFHLElBQUksQ0FBQzltQixVQUFVLEVBQUUsQ0FBQzhtQixJQUFJLEVBQUU7QUFDbkMsTUFBQSxLQUFLdHJDLENBQUMsR0FBRyxDQUFDLEVBQUU4OEIsQ0FBQyxHQUFHd08sSUFBSSxDQUFDM3JDLE1BQU0sRUFBRUssQ0FBQyxHQUFHODhCLENBQUMsRUFBRSxFQUFFOThCLENBQUMsRUFBRTtRQUNyQzhyQyxHQUFHLEdBQUdSLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3dyQyxLQUFLLElBQUlGLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3lyQyxLQUFLLEdBQUcsQ0FBRSxHQUFHLEVBQUU7O0FBRTlDO0FBQ0E5c0MsUUFBQUEsR0FBRyxHQUFHLElBQUksQ0FBQ2lsQyxLQUFLLEVBQUUsQ0FBQzRELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQ25xQixPQUFPLEVBQUU7QUFFM0MsUUFBQSxJQUNLaXVCLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3dyQyxLQUFLLElBQUk3c0MsR0FBRyxJQUFJQSxHQUFHLElBQUkyc0MsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDeXJDLEtBQUssSUFDNUNILElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3lyQyxLQUFLLElBQUk5c0MsR0FBRyxJQUFJQSxHQUFHLElBQUkyc0MsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDd3JDLEtBQU0sRUFDaEQ7VUFDRSxPQUNJLENBQUMsSUFBSSxDQUFDcmhCLElBQUksRUFBRSxHQUFHL04sS0FBSyxDQUFDa3ZCLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQ3dyQyxLQUFLLENBQUMsQ0FBQ3JoQixJQUFJLEVBQUUsSUFBSTJoQixHQUFHLEdBQ2pEUixJQUFJLENBQUN0ckMsQ0FBQyxDQUFDLENBQUNpakMsTUFBTTtBQUV0QjtBQUNKO0FBRUEsTUFBQSxPQUFPLElBQUksQ0FBQzlZLElBQUksRUFBRTtBQUN0QjtJQUVBLFNBQVNnaUIsYUFBYUEsQ0FBQ3RmLFFBQVEsRUFBRTtNQUM3QixJQUFJLENBQUNwUSxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFDckMydkIsUUFBQUEsZ0JBQWdCLENBQUN2ckMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMvQjtNQUNBLE9BQU9nc0IsUUFBUSxHQUFHLElBQUksQ0FBQ3dmLGNBQWMsR0FBRyxJQUFJLENBQUNDLFVBQVU7QUFDM0Q7SUFFQSxTQUFTQyxhQUFhQSxDQUFDMWYsUUFBUSxFQUFFO01BQzdCLElBQUksQ0FBQ3BRLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtBQUNyQzJ2QixRQUFBQSxnQkFBZ0IsQ0FBQ3ZyQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQy9CO01BQ0EsT0FBT2dzQixRQUFRLEdBQUcsSUFBSSxDQUFDMmYsY0FBYyxHQUFHLElBQUksQ0FBQ0YsVUFBVTtBQUMzRDtJQUVBLFNBQVNHLGVBQWVBLENBQUM1ZixRQUFRLEVBQUU7TUFDL0IsSUFBSSxDQUFDcFEsVUFBVSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO0FBQ3ZDMnZCLFFBQUFBLGdCQUFnQixDQUFDdnJDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDL0I7TUFDQSxPQUFPZ3NCLFFBQVEsR0FBRyxJQUFJLENBQUM2ZixnQkFBZ0IsR0FBRyxJQUFJLENBQUNKLFVBQVU7QUFDN0Q7QUFFQSxJQUFBLFNBQVN4QixZQUFZQSxDQUFDamUsUUFBUSxFQUFFclAsTUFBTSxFQUFFO0FBQ3BDLE1BQUEsT0FBT0EsTUFBTSxDQUFDK3VCLGFBQWEsQ0FBQzFmLFFBQVEsQ0FBQztBQUN6QztBQUVBLElBQUEsU0FBU2tlLFlBQVlBLENBQUNsZSxRQUFRLEVBQUVyUCxNQUFNLEVBQUU7QUFDcEMsTUFBQSxPQUFPQSxNQUFNLENBQUMydUIsYUFBYSxDQUFDdGYsUUFBUSxDQUFDO0FBQ3pDO0FBRUEsSUFBQSxTQUFTbWUsY0FBY0EsQ0FBQ25lLFFBQVEsRUFBRXJQLE1BQU0sRUFBRTtBQUN0QyxNQUFBLE9BQU9BLE1BQU0sQ0FBQ2l2QixlQUFlLENBQUM1ZixRQUFRLENBQUM7QUFDM0M7QUFFQSxJQUFBLFNBQVNxZSxtQkFBbUJBLENBQUNyZSxRQUFRLEVBQUVyUCxNQUFNLEVBQUU7QUFDM0MsTUFBQSxPQUFPQSxNQUFNLENBQUMydEIsb0JBQW9CLElBQUlsZixhQUFhO0FBQ3ZEO0lBRUEsU0FBU21nQixnQkFBZ0JBLEdBQUc7TUFDeEIsSUFBSU8sVUFBVSxHQUFHLEVBQUU7UUFDZkMsVUFBVSxHQUFHLEVBQUU7UUFDZkMsWUFBWSxHQUFHLEVBQUU7UUFDakI3WSxXQUFXLEdBQUcsRUFBRTtRQUNoQmgwQixDQUFDO1FBQ0Q4OEIsQ0FBQztRQUNEZ1EsUUFBUTtRQUNSQyxRQUFRO1FBQ1JDLFVBQVU7QUFDVjFCLFFBQUFBLElBQUksR0FBRyxJQUFJLENBQUNBLElBQUksRUFBRTtBQUV0QixNQUFBLEtBQUt0ckMsQ0FBQyxHQUFHLENBQUMsRUFBRTg4QixDQUFDLEdBQUd3TyxJQUFJLENBQUMzckMsTUFBTSxFQUFFSyxDQUFDLEdBQUc4OEIsQ0FBQyxFQUFFLEVBQUU5OEIsQ0FBQyxFQUFFO1FBQ3JDOHNDLFFBQVEsR0FBRzlmLFdBQVcsQ0FBQ3NlLElBQUksQ0FBQ3RyQyxDQUFDLENBQUMsQ0FBQzZoQixJQUFJLENBQUM7UUFDcENrckIsUUFBUSxHQUFHL2YsV0FBVyxDQUFDc2UsSUFBSSxDQUFDdHJDLENBQUMsQ0FBQyxDQUFDbTdCLElBQUksQ0FBQztRQUNwQzZSLFVBQVUsR0FBR2hnQixXQUFXLENBQUNzZSxJQUFJLENBQUN0ckMsQ0FBQyxDQUFDLENBQUM0ckMsTUFBTSxDQUFDO0FBRXhDZ0IsUUFBQUEsVUFBVSxDQUFDcGxDLElBQUksQ0FBQ3NsQyxRQUFRLENBQUM7QUFDekJILFFBQUFBLFVBQVUsQ0FBQ25sQyxJQUFJLENBQUN1bEMsUUFBUSxDQUFDO0FBQ3pCRixRQUFBQSxZQUFZLENBQUNybEMsSUFBSSxDQUFDd2xDLFVBQVUsQ0FBQztBQUM3QmhaLFFBQUFBLFdBQVcsQ0FBQ3hzQixJQUFJLENBQUNzbEMsUUFBUSxDQUFDO0FBQzFCOVksUUFBQUEsV0FBVyxDQUFDeHNCLElBQUksQ0FBQ3VsQyxRQUFRLENBQUM7QUFDMUIvWSxRQUFBQSxXQUFXLENBQUN4c0IsSUFBSSxDQUFDd2xDLFVBQVUsQ0FBQztBQUNoQztBQUVBLE1BQUEsSUFBSSxDQUFDVixVQUFVLEdBQUcsSUFBSXBxQixNQUFNLENBQUMsSUFBSSxHQUFHOFIsV0FBVyxDQUFDdlMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDckUsTUFBQSxJQUFJLENBQUM0cUIsY0FBYyxHQUFHLElBQUlucUIsTUFBTSxDQUFDLElBQUksR0FBRzBxQixVQUFVLENBQUNuckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDeEUsTUFBQSxJQUFJLENBQUMrcUIsY0FBYyxHQUFHLElBQUl0cUIsTUFBTSxDQUFDLElBQUksR0FBR3lxQixVQUFVLENBQUNsckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDeEUsTUFBQSxJQUFJLENBQUNpckIsZ0JBQWdCLEdBQUcsSUFBSXhxQixNQUFNLENBQzlCLElBQUksR0FBRzJxQixZQUFZLENBQUNwckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFDbkMsR0FDSixDQUFDO0FBQ0w7O0FBRUE7O0lBRUEwQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZO0FBQ3hDLE1BQUEsT0FBTyxJQUFJLENBQUMyRyxRQUFRLEVBQUUsR0FBRyxHQUFHO0FBQ2hDLEtBQUMsQ0FBQztJQUVGM0csY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtBQUN4QyxNQUFBLE9BQU8sSUFBSSxDQUFDNEcsV0FBVyxFQUFFLEdBQUcsR0FBRztBQUNuQyxLQUFDLENBQUM7QUFFRixJQUFBLFNBQVNraUIsc0JBQXNCQSxDQUFDN29CLEtBQUssRUFBRThvQixNQUFNLEVBQUU7QUFDM0Mvb0IsTUFBQUEsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDQyxLQUFLLEVBQUVBLEtBQUssQ0FBQ3prQixNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUV1dEMsTUFBTSxDQUFDO0FBQ3ZEO0FBRUFELElBQUFBLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7QUFDMUNBLElBQUFBLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7QUFDM0NBLElBQUFBLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUM7QUFDN0NBLElBQUFBLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7O0FBRTlDOztBQUVBOztBQUVBdmdCLElBQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUVSLFdBQVcsQ0FBQztBQUMvQlEsSUFBQUEsYUFBYSxDQUFDLEdBQUcsRUFBRVIsV0FBVyxDQUFDO0FBQy9CUSxJQUFBQSxhQUFhLENBQUMsSUFBSSxFQUFFZixTQUFTLEVBQUVKLE1BQU0sQ0FBQztBQUN0Q21CLElBQUFBLGFBQWEsQ0FBQyxJQUFJLEVBQUVmLFNBQVMsRUFBRUosTUFBTSxDQUFDO0FBQ3RDbUIsSUFBQUEsYUFBYSxDQUFDLE1BQU0sRUFBRVgsU0FBUyxFQUFFTixNQUFNLENBQUM7QUFDeENpQixJQUFBQSxhQUFhLENBQUMsTUFBTSxFQUFFWCxTQUFTLEVBQUVOLE1BQU0sQ0FBQztBQUN4Q2lCLElBQUFBLGFBQWEsQ0FBQyxPQUFPLEVBQUVWLFNBQVMsRUFBRU4sTUFBTSxDQUFDO0FBQ3pDZ0IsSUFBQUEsYUFBYSxDQUFDLE9BQU8sRUFBRVYsU0FBUyxFQUFFTixNQUFNLENBQUM7SUFFekNzQyxpQkFBaUIsQ0FDYixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUNsQyxVQUFVM3hCLEtBQUssRUFBRXl0QixJQUFJLEVBQUU3a0IsTUFBTSxFQUFFbWYsS0FBSyxFQUFFO0FBQ2xDMEYsTUFBQUEsSUFBSSxDQUFDMUYsS0FBSyxDQUFDTixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcySixLQUFLLENBQUNweEIsS0FBSyxDQUFDO0FBQzNDLEtBQ0osQ0FBQztBQUVEMnhCLElBQUFBLGlCQUFpQixDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLFVBQVUzeEIsS0FBSyxFQUFFeXRCLElBQUksRUFBRTdrQixNQUFNLEVBQUVtZixLQUFLLEVBQUU7TUFDbEUwRixJQUFJLENBQUMxRixLQUFLLENBQUMsR0FBR2hJLEtBQUssQ0FBQzBTLGlCQUFpQixDQUFDenlCLEtBQUssQ0FBQztBQUNoRCxLQUFDLENBQUM7O0FBRUY7O0lBRUEsU0FBUzh3QyxjQUFjQSxDQUFDOXdDLEtBQUssRUFBRTtNQUMzQixPQUFPK3dDLG9CQUFvQixDQUFDdnNDLElBQUksQ0FDNUIsSUFBSSxFQUNKeEUsS0FBSyxFQUNMLElBQUksQ0FBQ3l0QixJQUFJLEVBQUUsRUFDWCxJQUFJLENBQUM1QixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMxRCxVQUFVLEVBQUUsQ0FBQzZRLEtBQUssQ0FBQ2QsR0FBRyxFQUM1QyxJQUFJLENBQUMvUCxVQUFVLEVBQUUsQ0FBQzZRLEtBQUssQ0FBQ2QsR0FBRyxFQUMzQixJQUFJLENBQUMvUCxVQUFVLEVBQUUsQ0FBQzZRLEtBQUssQ0FBQ2IsR0FDNUIsQ0FBQztBQUNMO0lBRUEsU0FBUzZZLGlCQUFpQkEsQ0FBQ2h4QyxLQUFLLEVBQUU7TUFDOUIsT0FBTyt3QyxvQkFBb0IsQ0FBQ3ZzQyxJQUFJLENBQzVCLElBQUksRUFDSnhFLEtBQUssRUFDTCxJQUFJLENBQUMydUIsT0FBTyxFQUFFLEVBQ2QsSUFBSSxDQUFDSixVQUFVLEVBQUUsRUFDakIsQ0FBQyxFQUNELENBQ0osQ0FBQztBQUNMO0lBRUEsU0FBUzBpQixpQkFBaUJBLEdBQUc7TUFDekIsT0FBT3BZLFdBQVcsQ0FBQyxJQUFJLENBQUMvSyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDO0lBRUEsU0FBU29qQix3QkFBd0JBLEdBQUc7TUFDaEMsT0FBT3JZLFdBQVcsQ0FBQyxJQUFJLENBQUNuSyxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hEO0lBRUEsU0FBU3lpQixjQUFjQSxHQUFHO01BQ3RCLElBQUlDLFFBQVEsR0FBRyxJQUFJLENBQUNqcEIsVUFBVSxFQUFFLENBQUM2USxLQUFLO0FBQ3RDLE1BQUEsT0FBT0gsV0FBVyxDQUFDLElBQUksQ0FBQy9LLElBQUksRUFBRSxFQUFFc2pCLFFBQVEsQ0FBQ2xaLEdBQUcsRUFBRWtaLFFBQVEsQ0FBQ2paLEdBQUcsQ0FBQztBQUMvRDtJQUVBLFNBQVNrWixrQkFBa0JBLEdBQUc7TUFDMUIsSUFBSUQsUUFBUSxHQUFHLElBQUksQ0FBQ2pwQixVQUFVLEVBQUUsQ0FBQzZRLEtBQUs7QUFDdEMsTUFBQSxPQUFPSCxXQUFXLENBQUMsSUFBSSxDQUFDcEssUUFBUSxFQUFFLEVBQUUyaUIsUUFBUSxDQUFDbFosR0FBRyxFQUFFa1osUUFBUSxDQUFDalosR0FBRyxDQUFDO0FBQ25FO0lBRUEsU0FBUzRZLG9CQUFvQkEsQ0FBQy93QyxLQUFLLEVBQUV5dEIsSUFBSSxFQUFFNUIsT0FBTyxFQUFFcU0sR0FBRyxFQUFFQyxHQUFHLEVBQUU7QUFDMUQsTUFBQSxJQUFJbVosV0FBVztNQUNmLElBQUl0eEMsS0FBSyxJQUFJLElBQUksRUFBRTtRQUNmLE9BQU8yNEIsVUFBVSxDQUFDLElBQUksRUFBRVQsR0FBRyxFQUFFQyxHQUFHLENBQUMsQ0FBQ3JLLElBQUk7QUFDMUMsT0FBQyxNQUFNO1FBQ0h3akIsV0FBVyxHQUFHelksV0FBVyxDQUFDNzRCLEtBQUssRUFBRWs0QixHQUFHLEVBQUVDLEdBQUcsQ0FBQztRQUMxQyxJQUFJMUssSUFBSSxHQUFHNmpCLFdBQVcsRUFBRTtVQUNwQjdqQixJQUFJLEdBQUc2akIsV0FBVztBQUN0QjtBQUNBLFFBQUEsT0FBT0MsVUFBVSxDQUFDL3NDLElBQUksQ0FBQyxJQUFJLEVBQUV4RSxLQUFLLEVBQUV5dEIsSUFBSSxFQUFFNUIsT0FBTyxFQUFFcU0sR0FBRyxFQUFFQyxHQUFHLENBQUM7QUFDaEU7QUFDSjtJQUVBLFNBQVNvWixVQUFVQSxDQUFDOWlCLFFBQVEsRUFBRWhCLElBQUksRUFBRTVCLE9BQU8sRUFBRXFNLEdBQUcsRUFBRUMsR0FBRyxFQUFFO0FBQ25ELE1BQUEsSUFBSXFaLGFBQWEsR0FBR2xaLGtCQUFrQixDQUFDN0osUUFBUSxFQUFFaEIsSUFBSSxFQUFFNUIsT0FBTyxFQUFFcU0sR0FBRyxFQUFFQyxHQUFHLENBQUM7QUFDckUzTSxRQUFBQSxJQUFJLEdBQUd1TSxhQUFhLENBQUN5WixhQUFhLENBQUMxakIsSUFBSSxFQUFFLENBQUMsRUFBRTBqQixhQUFhLENBQUNoakIsU0FBUyxDQUFDO01BRXhFLElBQUksQ0FBQ1YsSUFBSSxDQUFDdEMsSUFBSSxDQUFDd0ksY0FBYyxFQUFFLENBQUM7TUFDaEMsSUFBSSxDQUFDcEgsS0FBSyxDQUFDcEIsSUFBSSxDQUFDc0ksV0FBVyxFQUFFLENBQUM7TUFDOUIsSUFBSSxDQUFDdEksSUFBSSxDQUFDQSxJQUFJLENBQUNrSSxVQUFVLEVBQUUsQ0FBQztBQUM1QixNQUFBLE9BQU8sSUFBSTtBQUNmOztBQUVBOztJQUVBNUwsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQzs7QUFFdkM7O0FBRUF1SSxJQUFBQSxhQUFhLENBQUMsR0FBRyxFQUFFcEIsTUFBTSxDQUFDO0lBQzFCd0MsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVenhCLEtBQUssRUFBRWtELEtBQUssRUFBRTtBQUN2Q0EsTUFBQUEsS0FBSyxDQUFDK3VCLEtBQUssQ0FBQyxHQUFHLENBQUNiLEtBQUssQ0FBQ3B4QixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUN6QyxLQUFDLENBQUM7O0FBRUY7O0lBRUEsU0FBU3l4QyxhQUFhQSxDQUFDenhDLEtBQUssRUFBRTtBQUMxQixNQUFBLE9BQU9BLEtBQUssSUFBSSxJQUFJLEdBQ2RPLElBQUksQ0FBQzJ3QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUN0RSxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQ2pDLElBQUksQ0FBQ0EsS0FBSyxDQUFDLENBQUM1c0IsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUksSUFBSSxDQUFDNHNCLEtBQUssRUFBRSxHQUFHLENBQUUsQ0FBQztBQUMxRDs7QUFFQTs7QUFFQTlFLElBQUFBLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQzs7QUFFNUM7O0FBRUF1SSxJQUFBQSxhQUFhLENBQUMsR0FBRyxFQUFFZixTQUFTLEVBQUVZLHNCQUFzQixDQUFDO0FBQ3JERyxJQUFBQSxhQUFhLENBQUMsSUFBSSxFQUFFZixTQUFTLEVBQUVKLE1BQU0sQ0FBQztJQUN0Q21CLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVUcsUUFBUSxFQUFFclAsTUFBTSxFQUFFO0FBQzVDO0FBQ0EsTUFBQSxPQUFPcVAsUUFBUSxHQUNUclAsTUFBTSxDQUFDMkUsdUJBQXVCLElBQUkzRSxNQUFNLENBQUM2RSxhQUFhLEdBQ3REN0UsTUFBTSxDQUFDeUUsOEJBQThCO0FBQy9DLEtBQUMsQ0FBQztJQUVGNkwsYUFBYSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFUyxJQUFJLENBQUM7SUFDaENULGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVXp4QixLQUFLLEVBQUVrRCxLQUFLLEVBQUU7QUFDeENBLE1BQUFBLEtBQUssQ0FBQ2d2QixJQUFJLENBQUMsR0FBR2QsS0FBSyxDQUFDcHhCLEtBQUssQ0FBQ3FvQixLQUFLLENBQUNpSCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxLQUFDLENBQUM7O0FBRUY7O0lBRUEsSUFBSW9pQixnQkFBZ0IsR0FBRzdlLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDOztBQUUvQzs7QUFFQS9LLElBQUFBLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQzs7QUFFdkQ7O0FBRUF1SSxJQUFBQSxhQUFhLENBQUMsS0FBSyxFQUFFWixTQUFTLENBQUM7QUFDL0JZLElBQUFBLGFBQWEsQ0FBQyxNQUFNLEVBQUVsQixNQUFNLENBQUM7QUFDN0JzQyxJQUFBQSxhQUFhLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsVUFBVXp4QixLQUFLLEVBQUVrRCxLQUFLLEVBQUUwRixNQUFNLEVBQUU7QUFDM0RBLE1BQUFBLE1BQU0sQ0FBQ3M2QixVQUFVLEdBQUc5UixLQUFLLENBQUNweEIsS0FBSyxDQUFDO0FBQ3BDLEtBQUMsQ0FBQzs7QUFFRjs7QUFFQTs7SUFFQSxTQUFTMnhDLGVBQWVBLENBQUMzeEMsS0FBSyxFQUFFO0FBQzVCLE1BQUEsSUFBSXd1QixTQUFTLEdBQ1RqdUIsSUFBSSxDQUFDOGxDLEtBQUssQ0FDTixDQUFDLElBQUksQ0FBQ2tCLEtBQUssRUFBRSxDQUFDNEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQzVELEtBQUssRUFBRSxDQUFDNEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQ25FLENBQUMsR0FBRyxDQUFDO0FBQ1QsTUFBQSxPQUFPbnJDLEtBQUssSUFBSSxJQUFJLEdBQUd3dUIsU0FBUyxHQUFHLElBQUksQ0FBQ2p3QixHQUFHLENBQUN5QixLQUFLLEdBQUd3dUIsU0FBUyxFQUFFLEdBQUcsQ0FBQztBQUN2RTs7QUFFQTs7QUFFQTFHLElBQUFBLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQzs7QUFFM0M7O0FBRUF1SSxJQUFBQSxhQUFhLENBQUMsR0FBRyxFQUFFZixTQUFTLEVBQUVhLGdCQUFnQixDQUFDO0FBQy9DRSxJQUFBQSxhQUFhLENBQUMsSUFBSSxFQUFFZixTQUFTLEVBQUVKLE1BQU0sQ0FBQztJQUN0Q3VDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRVcsTUFBTSxDQUFDOztBQUVsQzs7SUFFQSxJQUFJd2YsWUFBWSxHQUFHL2UsVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7O0FBRS9DOztBQUVBL0ssSUFBQUEsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDOztBQUUzQzs7QUFFQXVJLElBQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUVmLFNBQVMsRUFBRWEsZ0JBQWdCLENBQUM7QUFDL0NFLElBQUFBLGFBQWEsQ0FBQyxJQUFJLEVBQUVmLFNBQVMsRUFBRUosTUFBTSxDQUFDO0lBQ3RDdUMsYUFBYSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFWSxNQUFNLENBQUM7O0FBRWxDOztJQUVBLElBQUl3ZixZQUFZLEdBQUdoZixVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQzs7QUFFL0M7O0lBRUEvSyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtNQUNsQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMwRSxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDdkMsS0FBQyxDQUFDO0lBRUYxRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZO01BQ3hDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQzBFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxLQUFDLENBQUM7QUFFRjFFLElBQUFBLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQztJQUMvQ0EsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtBQUMxQyxNQUFBLE9BQU8sSUFBSSxDQUFDMEUsV0FBVyxFQUFFLEdBQUcsRUFBRTtBQUNsQyxLQUFDLENBQUM7SUFDRjFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVk7QUFDM0MsTUFBQSxPQUFPLElBQUksQ0FBQzBFLFdBQVcsRUFBRSxHQUFHLEdBQUc7QUFDbkMsS0FBQyxDQUFDO0lBQ0YxRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZO0FBQzVDLE1BQUEsT0FBTyxJQUFJLENBQUMwRSxXQUFXLEVBQUUsR0FBRyxJQUFJO0FBQ3BDLEtBQUMsQ0FBQztJQUNGMUUsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWTtBQUM3QyxNQUFBLE9BQU8sSUFBSSxDQUFDMEUsV0FBVyxFQUFFLEdBQUcsS0FBSztBQUNyQyxLQUFDLENBQUM7SUFDRjFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVk7QUFDOUMsTUFBQSxPQUFPLElBQUksQ0FBQzBFLFdBQVcsRUFBRSxHQUFHLE1BQU07QUFDdEMsS0FBQyxDQUFDO0lBQ0YxRSxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZO0FBQy9DLE1BQUEsT0FBTyxJQUFJLENBQUMwRSxXQUFXLEVBQUUsR0FBRyxPQUFPO0FBQ3ZDLEtBQUMsQ0FBQzs7QUFFRjs7QUFFQTZELElBQUFBLGFBQWEsQ0FBQyxHQUFHLEVBQUVaLFNBQVMsRUFBRVIsTUFBTSxDQUFDO0FBQ3JDb0IsSUFBQUEsYUFBYSxDQUFDLElBQUksRUFBRVosU0FBUyxFQUFFUCxNQUFNLENBQUM7QUFDdENtQixJQUFBQSxhQUFhLENBQUMsS0FBSyxFQUFFWixTQUFTLEVBQUVOLE1BQU0sQ0FBQztJQUV2QyxJQUFJcEgsS0FBSyxFQUFFK3BCLGlCQUFpQjtBQUM1QixJQUFBLEtBQUsvcEIsS0FBSyxHQUFHLE1BQU0sRUFBRUEsS0FBSyxDQUFDemtCLE1BQU0sSUFBSSxDQUFDLEVBQUV5a0IsS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNsRHNJLE1BQUFBLGFBQWEsQ0FBQ3RJLEtBQUssRUFBRTZILGFBQWEsQ0FBQztBQUN2QztBQUVBLElBQUEsU0FBU21pQixPQUFPQSxDQUFDL3hDLEtBQUssRUFBRWtELEtBQUssRUFBRTtBQUMzQkEsTUFBQUEsS0FBSyxDQUFDb3ZCLFdBQVcsQ0FBQyxHQUFHbEIsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHcHhCLEtBQUssSUFBSSxJQUFJLENBQUM7QUFDckQ7QUFFQSxJQUFBLEtBQUsrbkIsS0FBSyxHQUFHLEdBQUcsRUFBRUEsS0FBSyxDQUFDemtCLE1BQU0sSUFBSSxDQUFDLEVBQUV5a0IsS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUMvQzBKLE1BQUFBLGFBQWEsQ0FBQzFKLEtBQUssRUFBRWdxQixPQUFPLENBQUM7QUFDakM7QUFFQUQsSUFBQUEsaUJBQWlCLEdBQUdqZixVQUFVLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQzs7QUFFckQ7O0lBRUEvSyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQ3JDQSxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDOztBQUV0Qzs7SUFFQSxTQUFTa3FCLFdBQVdBLEdBQUc7QUFDbkIsTUFBQSxPQUFPLElBQUksQ0FBQzF0QixNQUFNLEdBQUcsS0FBSyxHQUFHLEVBQUU7QUFDbkM7SUFFQSxTQUFTMnRCLFdBQVdBLEdBQUc7QUFDbkIsTUFBQSxPQUFPLElBQUksQ0FBQzN0QixNQUFNLEdBQUcsNEJBQTRCLEdBQUcsRUFBRTtBQUMxRDtBQUVBLElBQUEsSUFBSTR0QixLQUFLLEdBQUd6dEIsTUFBTSxDQUFDcmdCLFNBQVM7SUFFNUI4dEMsS0FBSyxDQUFDM3pDLEdBQUcsR0FBR0EsR0FBRztJQUNmMnpDLEtBQUssQ0FBQ3RyQixRQUFRLEdBQUdva0IsVUFBVTtJQUMzQmtILEtBQUssQ0FBQzNLLEtBQUssR0FBR0EsS0FBSztJQUNuQjJLLEtBQUssQ0FBQzltQixJQUFJLEdBQUdBLElBQUk7SUFDakI4bUIsS0FBSyxDQUFDNUcsS0FBSyxHQUFHQSxLQUFLO0lBQ25CNEcsS0FBSyxDQUFDaHhCLE1BQU0sR0FBR0EsTUFBTTtJQUNyQmd4QixLQUFLLENBQUNyL0IsSUFBSSxHQUFHQSxJQUFJO0lBQ2pCcS9CLEtBQUssQ0FBQzlFLE9BQU8sR0FBR0EsT0FBTztJQUN2QjhFLEtBQUssQ0FBQ3B1QixFQUFFLEdBQUdBLEVBQUU7SUFDYm91QixLQUFLLENBQUM3RSxLQUFLLEdBQUdBLEtBQUs7SUFDbkI2RSxLQUFLLENBQUNuakMsR0FBRyxHQUFHK2xCLFNBQVM7SUFDckJvZCxLQUFLLENBQUMzRCxTQUFTLEdBQUdBLFNBQVM7SUFDM0IyRCxLQUFLLENBQUN4SSxPQUFPLEdBQUdBLE9BQU87SUFDdkJ3SSxLQUFLLENBQUN2SSxRQUFRLEdBQUdBLFFBQVE7SUFDekJ1SSxLQUFLLENBQUMzRyxTQUFTLEdBQUdBLFNBQVM7SUFDM0IyRyxLQUFLLENBQUN2RyxNQUFNLEdBQUdBLE1BQU07SUFDckJ1RyxLQUFLLENBQUNyRyxhQUFhLEdBQUdBLGFBQWE7SUFDbkNxRyxLQUFLLENBQUNwRyxjQUFjLEdBQUdBLGNBQWM7SUFDckNvRyxLQUFLLENBQUNydkIsT0FBTyxHQUFHd3JCLFNBQVM7SUFDekI2RCxLQUFLLENBQUMzRSxJQUFJLEdBQUdBLElBQUk7SUFDakIyRSxLQUFLLENBQUMvd0IsTUFBTSxHQUFHQSxNQUFNO0lBQ3JCK3dCLEtBQUssQ0FBQy9wQixVQUFVLEdBQUdBLFVBQVU7SUFDN0IrcEIsS0FBSyxDQUFDMXhDLEdBQUcsR0FBRzBrQyxZQUFZO0lBQ3hCZ04sS0FBSyxDQUFDOXBDLEdBQUcsR0FBRzQ4QixZQUFZO0lBQ3hCa04sS0FBSyxDQUFDNUQsWUFBWSxHQUFHQSxZQUFZO0lBQ2pDNEQsS0FBSyxDQUFDdmhDLEdBQUcsR0FBR29rQixTQUFTO0lBQ3JCbWQsS0FBSyxDQUFDL0csT0FBTyxHQUFHQSxPQUFPO0lBQ3ZCK0csS0FBSyxDQUFDN0osUUFBUSxHQUFHQSxRQUFRO0lBQ3pCNkosS0FBSyxDQUFDdEosT0FBTyxHQUFHQSxPQUFPO0lBQ3ZCc0osS0FBSyxDQUFDL0QsUUFBUSxHQUFHQSxRQUFRO0lBQ3pCK0QsS0FBSyxDQUFDdkYsTUFBTSxHQUFHQSxNQUFNO0lBQ3JCdUYsS0FBSyxDQUFDekYsV0FBVyxHQUFHQSxXQUFXO0lBQy9CeUYsS0FBSyxDQUFDdEYsT0FBTyxHQUFHQSxPQUFPO0lBQ3ZCLElBQUksT0FBTy9tQyxNQUFNLEtBQUssV0FBVyxJQUFJQSxNQUFNLENBQUNzc0MsR0FBRyxJQUFJLElBQUksRUFBRTtNQUNyREQsS0FBSyxDQUFDcnNDLE1BQU0sQ0FBQ3NzQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxHQUFHLFlBQVk7UUFDMUQsT0FBTyxTQUFTLEdBQUcsSUFBSSxDQUFDanhCLE1BQU0sRUFBRSxHQUFHLEdBQUc7T0FDekM7QUFDTDtJQUNBZ3hCLEtBQUssQ0FBQzlELE1BQU0sR0FBR0EsTUFBTTtJQUNyQjhELEtBQUssQ0FBQzN0QyxRQUFRLEdBQUdBLFFBQVE7SUFDekIydEMsS0FBSyxDQUFDaEUsSUFBSSxHQUFHQSxJQUFJO0lBQ2pCZ0UsS0FBSyxDQUFDbHhCLE9BQU8sR0FBR0EsT0FBTztJQUN2Qmt4QixLQUFLLENBQUMxRCxZQUFZLEdBQUdBLFlBQVk7SUFDakMwRCxLQUFLLENBQUM1QyxPQUFPLEdBQUdJLFVBQVU7SUFDMUJ3QyxLQUFLLENBQUNFLFNBQVMsR0FBR3pDLFlBQVk7SUFDOUJ1QyxLQUFLLENBQUNHLE9BQU8sR0FBR3pDLFVBQVU7SUFDMUJzQyxLQUFLLENBQUNJLE9BQU8sR0FBR3pDLFVBQVU7SUFDMUJxQyxLQUFLLENBQUNwa0IsSUFBSSxHQUFHOEUsVUFBVTtJQUN2QnNmLEtBQUssQ0FBQ25nQixVQUFVLEdBQUdlLGFBQWE7SUFDaENvZixLQUFLLENBQUN6akIsUUFBUSxHQUFHcWlCLGNBQWM7SUFDL0JvQixLQUFLLENBQUN4akIsV0FBVyxHQUFHc2lCLGlCQUFpQjtJQUNyQ2tCLEtBQUssQ0FBQ25sQixPQUFPLEdBQUdtbEIsS0FBSyxDQUFDcGxCLFFBQVEsR0FBRzJrQixhQUFhO0lBQzlDUyxLQUFLLENBQUN0bEIsS0FBSyxHQUFHcUssV0FBVztJQUN6QmliLEtBQUssQ0FBQzljLFdBQVcsR0FBRzhCLGNBQWM7SUFDbENnYixLQUFLLENBQUN6a0IsSUFBSSxHQUFHeWtCLEtBQUssQ0FBQzFrQixLQUFLLEdBQUc0TCxVQUFVO0lBQ3JDOFksS0FBSyxDQUFDdmpCLE9BQU8sR0FBR3VqQixLQUFLLENBQUNLLFFBQVEsR0FBR2xaLGFBQWE7SUFDOUM2WSxLQUFLLENBQUNyWixXQUFXLEdBQUdzWSxjQUFjO0lBQ2xDZSxLQUFLLENBQUNNLGVBQWUsR0FBR25CLGtCQUFrQjtJQUMxQ2EsS0FBSyxDQUFDTyxjQUFjLEdBQUd4QixpQkFBaUI7SUFDeENpQixLQUFLLENBQUNRLHFCQUFxQixHQUFHeEIsd0JBQXdCO0lBQ3REZ0IsS0FBSyxDQUFDMW1CLElBQUksR0FBR2ttQixnQkFBZ0I7SUFDN0JRLEtBQUssQ0FBQ3htQixHQUFHLEdBQUd3bUIsS0FBSyxDQUFDem1CLElBQUksR0FBRzRQLGVBQWU7SUFDeEM2VyxLQUFLLENBQUNybUIsT0FBTyxHQUFHeVAscUJBQXFCO0lBQ3JDNFcsS0FBSyxDQUFDM2pCLFVBQVUsR0FBR2dOLGtCQUFrQjtJQUNyQzJXLEtBQUssQ0FBQzFqQixTQUFTLEdBQUdtakIsZUFBZTtJQUNqQ08sS0FBSyxDQUFDN2xCLElBQUksR0FBRzZsQixLQUFLLENBQUM5bEIsS0FBSyxHQUFHOFEsVUFBVTtJQUNyQ2dWLEtBQUssQ0FBQ3hsQixNQUFNLEdBQUd3bEIsS0FBSyxDQUFDemxCLE9BQU8sR0FBR21sQixZQUFZO0lBQzNDTSxLQUFLLENBQUNqbEIsTUFBTSxHQUFHaWxCLEtBQUssQ0FBQ2xsQixPQUFPLEdBQUc2a0IsWUFBWTtJQUMzQ0ssS0FBSyxDQUFDMWxCLFdBQVcsR0FBRzBsQixLQUFLLENBQUMzbEIsWUFBWSxHQUFHdWxCLGlCQUFpQjtJQUMxREksS0FBSyxDQUFDcEwsU0FBUyxHQUFHYyxZQUFZO0lBQzlCc0ssS0FBSyxDQUFDNXdCLEdBQUcsR0FBRzZtQixjQUFjO0lBQzFCK0osS0FBSyxDQUFDekssS0FBSyxHQUFHVyxnQkFBZ0I7SUFDOUI4SixLQUFLLENBQUNTLFNBQVMsR0FBR3JLLHVCQUF1QjtJQUN6QzRKLEtBQUssQ0FBQzFKLG9CQUFvQixHQUFHQSxvQkFBb0I7SUFDakQwSixLQUFLLENBQUNVLEtBQUssR0FBR25LLG9CQUFvQjtJQUNsQ3lKLEtBQUssQ0FBQ3JKLE9BQU8sR0FBR0EsT0FBTztJQUN2QnFKLEtBQUssQ0FBQ3BKLFdBQVcsR0FBR0EsV0FBVztJQUMvQm9KLEtBQUssQ0FBQ25KLEtBQUssR0FBR0EsS0FBSztJQUNuQm1KLEtBQUssQ0FBQ2pmLEtBQUssR0FBRzhWLEtBQUs7SUFDbkJtSixLQUFLLENBQUNXLFFBQVEsR0FBR2IsV0FBVztJQUM1QkUsS0FBSyxDQUFDWSxRQUFRLEdBQUdiLFdBQVc7SUFDNUJDLEtBQUssQ0FBQzNtQixLQUFLLEdBQUd4RyxTQUFTLENBQ25CLGlEQUFpRCxFQUNqRDJzQixnQkFDSixDQUFDO0lBQ0RRLEtBQUssQ0FBQ3ZsQixNQUFNLEdBQUc1SCxTQUFTLENBQ3BCLGtEQUFrRCxFQUNsRGtTLFdBQ0osQ0FBQztJQUNEaWIsS0FBSyxDQUFDcmtCLEtBQUssR0FBRzlJLFNBQVMsQ0FDbkIsZ0RBQWdELEVBQ2hENk4sVUFDSixDQUFDO0lBQ0RzZixLQUFLLENBQUNyRixJQUFJLEdBQUc5bkIsU0FBUyxDQUNsQiwwR0FBMEcsRUFDMUdtakIsVUFDSixDQUFDO0lBQ0RnSyxLQUFLLENBQUNhLFlBQVksR0FBR2h1QixTQUFTLENBQzFCLHlHQUF5RyxFQUN6RzJqQiwyQkFDSixDQUFDO0lBRUQsU0FBU3NLLFVBQVVBLENBQUNoekMsS0FBSyxFQUFFO0FBQ3ZCLE1BQUEsT0FBT3VqQyxXQUFXLENBQUN2akMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQztJQUVBLFNBQVNpekMsWUFBWUEsR0FBRztNQUNwQixPQUFPMVAsV0FBVyxDQUFDdmpCLEtBQUssQ0FBQyxJQUFJLEVBQUVDLFNBQVMsQ0FBQyxDQUFDMHlCLFNBQVMsRUFBRTtBQUN6RDtJQUVBLFNBQVNPLGtCQUFrQkEsQ0FBQ2xvQixNQUFNLEVBQUU7QUFDaEMsTUFBQSxPQUFPQSxNQUFNO0FBQ2pCO0FBRUEsSUFBQSxJQUFJbW9CLE9BQU8sR0FBRy9zQixNQUFNLENBQUNoaUIsU0FBUztJQUU5Qit1QyxPQUFPLENBQUN2c0IsUUFBUSxHQUFHQSxRQUFRO0lBQzNCdXNCLE9BQU8sQ0FBQ3ZxQixjQUFjLEdBQUdBLGNBQWM7SUFDdkN1cUIsT0FBTyxDQUFDMXFCLFdBQVcsR0FBR0EsV0FBVztJQUNqQzBxQixPQUFPLENBQUNsckIsT0FBTyxHQUFHQSxPQUFPO0lBQ3pCa3JCLE9BQU8sQ0FBQ3JPLFFBQVEsR0FBR29PLGtCQUFrQjtJQUNyQ0MsT0FBTyxDQUFDakcsVUFBVSxHQUFHZ0csa0JBQWtCO0lBQ3ZDQyxPQUFPLENBQUNyb0IsWUFBWSxHQUFHQSxZQUFZO0lBQ25DcW9CLE9BQU8sQ0FBQ2hvQixVQUFVLEdBQUdBLFVBQVU7SUFDL0Jnb0IsT0FBTyxDQUFDeGlDLEdBQUcsR0FBR0EsR0FBRztJQUNqQndpQyxPQUFPLENBQUNsRSxJQUFJLEdBQUdELFVBQVU7SUFDekJtRSxPQUFPLENBQUN2RSxTQUFTLEdBQUdTLGVBQWU7SUFDbkM4RCxPQUFPLENBQUNyUCxlQUFlLEdBQUcwTCxxQkFBcUI7SUFDL0MyRCxPQUFPLENBQUNqRCxhQUFhLEdBQUdBLGFBQWE7SUFDckNpRCxPQUFPLENBQUNyRCxhQUFhLEdBQUdBLGFBQWE7SUFDckNxRCxPQUFPLENBQUMvQyxlQUFlLEdBQUdBLGVBQWU7SUFFekMrQyxPQUFPLENBQUN4bUIsTUFBTSxHQUFHcUosWUFBWTtJQUM3Qm1kLE9BQU8sQ0FBQzdkLFdBQVcsR0FBR2EsaUJBQWlCO0lBQ3ZDZ2QsT0FBTyxDQUFDMWQsV0FBVyxHQUFHb0IsaUJBQWlCO0lBQ3ZDc2MsT0FBTyxDQUFDM2QsV0FBVyxHQUFHQSxXQUFXO0lBQ2pDMmQsT0FBTyxDQUFDNWQsZ0JBQWdCLEdBQUdBLGdCQUFnQjtJQUMzQzRkLE9BQU8sQ0FBQzFsQixJQUFJLEdBQUdzTCxVQUFVO0lBQ3pCb2EsT0FBTyxDQUFDQyxjQUFjLEdBQUdqYSxvQkFBb0I7SUFDN0NnYSxPQUFPLENBQUNFLGNBQWMsR0FBR25hLG9CQUFvQjtJQUU3Q2lhLE9BQU8sQ0FBQ3ZuQixRQUFRLEdBQUcyTyxjQUFjO0lBQ2pDNFksT0FBTyxDQUFDN1osV0FBVyxHQUFHcUIsaUJBQWlCO0lBQ3ZDd1ksT0FBTyxDQUFDNVosYUFBYSxHQUFHa0IsbUJBQW1CO0lBQzNDMFksT0FBTyxDQUFDeFosYUFBYSxHQUFHdUIsbUJBQW1CO0lBRTNDaVksT0FBTyxDQUFDelosYUFBYSxHQUFHQSxhQUFhO0lBQ3JDeVosT0FBTyxDQUFDMVosa0JBQWtCLEdBQUdBLGtCQUFrQjtJQUMvQzBaLE9BQU8sQ0FBQzNaLGdCQUFnQixHQUFHQSxnQkFBZ0I7SUFFM0MyWixPQUFPLENBQUN6VyxJQUFJLEdBQUdLLFVBQVU7SUFDekJvVyxPQUFPLENBQUM5d0IsUUFBUSxHQUFHOGEsY0FBYztJQUVqQyxTQUFTbVcsS0FBS0EsQ0FBQ3B5QixNQUFNLEVBQUU1TyxLQUFLLEVBQUUySixLQUFLLEVBQUVzM0IsTUFBTSxFQUFFO0FBQ3pDLE1BQUEsSUFBSXB5QixNQUFNLEdBQUd5ZCxTQUFTLEVBQUU7UUFDcEJ0ZCxHQUFHLEdBQUdMLFNBQVMsRUFBRSxDQUFDdFEsR0FBRyxDQUFDNGlDLE1BQU0sRUFBRWpoQyxLQUFLLENBQUM7TUFDeEMsT0FBTzZPLE1BQU0sQ0FBQ2xGLEtBQUssQ0FBQyxDQUFDcUYsR0FBRyxFQUFFSixNQUFNLENBQUM7QUFDckM7SUFFQSxTQUFTc3lCLGNBQWNBLENBQUN0eUIsTUFBTSxFQUFFNU8sS0FBSyxFQUFFMkosS0FBSyxFQUFFO0FBQzFDLE1BQUEsSUFBSXlFLFFBQVEsQ0FBQ1EsTUFBTSxDQUFDLEVBQUU7UUFDbEI1TyxLQUFLLEdBQUc0TyxNQUFNO1FBQ2RBLE1BQU0sR0FBR29DLFNBQVM7QUFDdEI7TUFFQXBDLE1BQU0sR0FBR0EsTUFBTSxJQUFJLEVBQUU7TUFFckIsSUFBSTVPLEtBQUssSUFBSSxJQUFJLEVBQUU7UUFDZixPQUFPZ2hDLEtBQUssQ0FBQ3B5QixNQUFNLEVBQUU1TyxLQUFLLEVBQUUySixLQUFLLEVBQUUsT0FBTyxDQUFDO0FBQy9DO0FBRUEsTUFBQSxJQUFJdFksQ0FBQztRQUNEOHZDLEdBQUcsR0FBRyxFQUFFO01BQ1osS0FBSzl2QyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsRUFBRSxFQUFFQSxDQUFDLEVBQUUsRUFBRTtBQUNyQjh2QyxRQUFBQSxHQUFHLENBQUM5dkMsQ0FBQyxDQUFDLEdBQUcydkMsS0FBSyxDQUFDcHlCLE1BQU0sRUFBRXZkLENBQUMsRUFBRXNZLEtBQUssRUFBRSxPQUFPLENBQUM7QUFDN0M7QUFDQSxNQUFBLE9BQU93M0IsR0FBRztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQSxTQUFTQyxnQkFBZ0JBLENBQUNDLFlBQVksRUFBRXp5QixNQUFNLEVBQUU1TyxLQUFLLEVBQUUySixLQUFLLEVBQUU7QUFDMUQsTUFBQSxJQUFJLE9BQU8wM0IsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUNuQyxRQUFBLElBQUlqekIsUUFBUSxDQUFDUSxNQUFNLENBQUMsRUFBRTtVQUNsQjVPLEtBQUssR0FBRzRPLE1BQU07VUFDZEEsTUFBTSxHQUFHb0MsU0FBUztBQUN0QjtRQUVBcEMsTUFBTSxHQUFHQSxNQUFNLElBQUksRUFBRTtBQUN6QixPQUFDLE1BQU07UUFDSEEsTUFBTSxHQUFHeXlCLFlBQVk7UUFDckJyaEMsS0FBSyxHQUFHNE8sTUFBTTtRQUNkeXlCLFlBQVksR0FBRyxLQUFLO0FBRXBCLFFBQUEsSUFBSWp6QixRQUFRLENBQUNRLE1BQU0sQ0FBQyxFQUFFO1VBQ2xCNU8sS0FBSyxHQUFHNE8sTUFBTTtVQUNkQSxNQUFNLEdBQUdvQyxTQUFTO0FBQ3RCO1FBRUFwQyxNQUFNLEdBQUdBLE1BQU0sSUFBSSxFQUFFO0FBQ3pCO0FBRUEsTUFBQSxJQUFJQyxNQUFNLEdBQUd5ZCxTQUFTLEVBQUU7UUFDcEJnVixLQUFLLEdBQUdELFlBQVksR0FBR3h5QixNQUFNLENBQUM2WCxLQUFLLENBQUNkLEdBQUcsR0FBRyxDQUFDO1FBQzNDdjBCLENBQUM7UUFDRDh2QyxHQUFHLEdBQUcsRUFBRTtNQUVaLElBQUluaEMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUNmLFFBQUEsT0FBT2doQyxLQUFLLENBQUNweUIsTUFBTSxFQUFFLENBQUM1TyxLQUFLLEdBQUdzaEMsS0FBSyxJQUFJLENBQUMsRUFBRTMzQixLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQzNEO01BRUEsS0FBS3RZLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsRUFBRSxFQUFFO0FBQ3BCOHZDLFFBQUFBLEdBQUcsQ0FBQzl2QyxDQUFDLENBQUMsR0FBRzJ2QyxLQUFLLENBQUNweUIsTUFBTSxFQUFFLENBQUN2ZCxDQUFDLEdBQUdpd0MsS0FBSyxJQUFJLENBQUMsRUFBRTMzQixLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQ3pEO0FBQ0EsTUFBQSxPQUFPdzNCLEdBQUc7QUFDZDtBQUVBLElBQUEsU0FBU0ksVUFBVUEsQ0FBQzN5QixNQUFNLEVBQUU1TyxLQUFLLEVBQUU7TUFDL0IsT0FBT2toQyxjQUFjLENBQUN0eUIsTUFBTSxFQUFFNU8sS0FBSyxFQUFFLFFBQVEsQ0FBQztBQUNsRDtBQUVBLElBQUEsU0FBU3doQyxlQUFlQSxDQUFDNXlCLE1BQU0sRUFBRTVPLEtBQUssRUFBRTtNQUNwQyxPQUFPa2hDLGNBQWMsQ0FBQ3R5QixNQUFNLEVBQUU1TyxLQUFLLEVBQUUsYUFBYSxDQUFDO0FBQ3ZEO0lBRUEsU0FBU3loQyxZQUFZQSxDQUFDSixZQUFZLEVBQUV6eUIsTUFBTSxFQUFFNU8sS0FBSyxFQUFFO01BQy9DLE9BQU9vaEMsZ0JBQWdCLENBQUNDLFlBQVksRUFBRXp5QixNQUFNLEVBQUU1TyxLQUFLLEVBQUUsVUFBVSxDQUFDO0FBQ3BFO0lBRUEsU0FBUzBoQyxpQkFBaUJBLENBQUNMLFlBQVksRUFBRXp5QixNQUFNLEVBQUU1TyxLQUFLLEVBQUU7TUFDcEQsT0FBT29oQyxnQkFBZ0IsQ0FBQ0MsWUFBWSxFQUFFenlCLE1BQU0sRUFBRTVPLEtBQUssRUFBRSxlQUFlLENBQUM7QUFDekU7SUFFQSxTQUFTMmhDLGVBQWVBLENBQUNOLFlBQVksRUFBRXp5QixNQUFNLEVBQUU1TyxLQUFLLEVBQUU7TUFDbEQsT0FBT29oQyxnQkFBZ0IsQ0FBQ0MsWUFBWSxFQUFFenlCLE1BQU0sRUFBRTVPLEtBQUssRUFBRSxhQUFhLENBQUM7QUFDdkU7SUFFQXFzQixrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7TUFDckJzUSxJQUFJLEVBQUUsQ0FDRjtRQUNJRSxLQUFLLEVBQUUsWUFBWTtRQUNuQkMsS0FBSyxFQUFFLENBQUNqdkMsUUFBUTtRQUNoQnltQyxNQUFNLEVBQUUsQ0FBQztRQUNUcGhCLElBQUksRUFBRSxhQUFhO1FBQ25CK3BCLE1BQU0sRUFBRSxJQUFJO0FBQ1p6USxRQUFBQSxJQUFJLEVBQUU7QUFDVixPQUFDLEVBQ0Q7UUFDSXFRLEtBQUssRUFBRSxZQUFZO1FBQ25CQyxLQUFLLEVBQUUsQ0FBQ2p2QyxRQUFRO1FBQ2hCeW1DLE1BQU0sRUFBRSxDQUFDO1FBQ1RwaEIsSUFBSSxFQUFFLGVBQWU7UUFDckIrcEIsTUFBTSxFQUFFLElBQUk7QUFDWnpRLFFBQUFBLElBQUksRUFBRTtBQUNWLE9BQUMsQ0FDSjtNQUNEeEIsc0JBQXNCLEVBQUUsc0JBQXNCO0FBQzlDclYsTUFBQUEsT0FBTyxFQUFFLFVBQVVoQixNQUFNLEVBQUU7QUFDdkIsUUFBQSxJQUFJbGtCLENBQUMsR0FBR2trQixNQUFNLEdBQUcsRUFBRTtBQUNmSCxVQUFBQSxNQUFNLEdBQ0ZzSyxLQUFLLENBQUVuSyxNQUFNLEdBQUcsR0FBRyxHQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FDMUIsSUFBSSxHQUNKbGtCLENBQUMsS0FBSyxDQUFDLEdBQ0wsSUFBSSxHQUNKQSxDQUFDLEtBQUssQ0FBQyxHQUNMLElBQUksR0FDSkEsQ0FBQyxLQUFLLENBQUMsR0FDTCxJQUFJLEdBQ0osSUFBSTtRQUN4QixPQUFPa2tCLE1BQU0sR0FBR0gsTUFBTTtBQUMxQjtBQUNKLEtBQUMsQ0FBQzs7QUFFRjs7SUFFQS9HLEtBQUssQ0FBQ3d0QixJQUFJLEdBQUd4b0IsU0FBUyxDQUNsQix1REFBdUQsRUFDdkQ0WixrQkFDSixDQUFDO0lBQ0Q1ZSxLQUFLLENBQUNtMEIsUUFBUSxHQUFHbnZCLFNBQVMsQ0FDdEIsK0RBQStELEVBQy9ENlosU0FDSixDQUFDO0FBRUQsSUFBQSxJQUFJdVYsT0FBTyxHQUFHNXpDLElBQUksQ0FBQzhtQixHQUFHO0lBRXRCLFNBQVNBLEdBQUdBLEdBQUc7QUFDWCxNQUFBLElBQUlyaUIsSUFBSSxHQUFHLElBQUksQ0FBQ2loQyxLQUFLO01BRXJCLElBQUksQ0FBQ0YsYUFBYSxHQUFHb08sT0FBTyxDQUFDLElBQUksQ0FBQ3BPLGFBQWEsQ0FBQztNQUNoRCxJQUFJLENBQUNDLEtBQUssR0FBR21PLE9BQU8sQ0FBQyxJQUFJLENBQUNuTyxLQUFLLENBQUM7TUFDaEMsSUFBSSxDQUFDL1AsT0FBTyxHQUFHa2UsT0FBTyxDQUFDLElBQUksQ0FBQ2xlLE9BQU8sQ0FBQztNQUVwQ2p4QixJQUFJLENBQUN1bkIsWUFBWSxHQUFHNG5CLE9BQU8sQ0FBQ252QyxJQUFJLENBQUN1bkIsWUFBWSxDQUFDO01BQzlDdm5CLElBQUksQ0FBQ2dvQixPQUFPLEdBQUdtbkIsT0FBTyxDQUFDbnZDLElBQUksQ0FBQ2dvQixPQUFPLENBQUM7TUFDcENob0IsSUFBSSxDQUFDeW5CLE9BQU8sR0FBRzBuQixPQUFPLENBQUNudkMsSUFBSSxDQUFDeW5CLE9BQU8sQ0FBQztNQUNwQ3puQixJQUFJLENBQUNvbkIsS0FBSyxHQUFHK25CLE9BQU8sQ0FBQ252QyxJQUFJLENBQUNvbkIsS0FBSyxDQUFDO01BQ2hDcG5CLElBQUksQ0FBQzJuQixNQUFNLEdBQUd3bkIsT0FBTyxDQUFDbnZDLElBQUksQ0FBQzJuQixNQUFNLENBQUM7TUFDbEMzbkIsSUFBSSxDQUFDNm9CLEtBQUssR0FBR3NtQixPQUFPLENBQUNudkMsSUFBSSxDQUFDNm9CLEtBQUssQ0FBQztBQUVoQyxNQUFBLE9BQU8sSUFBSTtBQUNmO0lBRUEsU0FBU3VtQixhQUFhQSxDQUFDdE8sUUFBUSxFQUFFOWxDLEtBQUssRUFBRUUsS0FBSyxFQUFFbVQsU0FBUyxFQUFFO01BQ3RELElBQUk0eEIsS0FBSyxHQUFHVyxjQUFjLENBQUM1bEMsS0FBSyxFQUFFRSxLQUFLLENBQUM7TUFFeEM0bEMsUUFBUSxDQUFDQyxhQUFhLElBQUkxeUIsU0FBUyxHQUFHNHhCLEtBQUssQ0FBQ2MsYUFBYTtNQUN6REQsUUFBUSxDQUFDRSxLQUFLLElBQUkzeUIsU0FBUyxHQUFHNHhCLEtBQUssQ0FBQ2UsS0FBSztNQUN6Q0YsUUFBUSxDQUFDN1AsT0FBTyxJQUFJNWlCLFNBQVMsR0FBRzR4QixLQUFLLENBQUNoUCxPQUFPO0FBRTdDLE1BQUEsT0FBTzZQLFFBQVEsQ0FBQ0ksT0FBTyxFQUFFO0FBQzdCOztBQUVBO0FBQ0EsSUFBQSxTQUFTbU8sS0FBS0EsQ0FBQ3IwQyxLQUFLLEVBQUVFLEtBQUssRUFBRTtNQUN6QixPQUFPazBDLGFBQWEsQ0FBQyxJQUFJLEVBQUVwMEMsS0FBSyxFQUFFRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQy9DOztBQUVBO0FBQ0EsSUFBQSxTQUFTbzBDLFVBQVVBLENBQUN0MEMsS0FBSyxFQUFFRSxLQUFLLEVBQUU7TUFDOUIsT0FBT2swQyxhQUFhLENBQUMsSUFBSSxFQUFFcDBDLEtBQUssRUFBRUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztBQUNoRDtJQUVBLFNBQVNxMEMsT0FBT0EsQ0FBQ3R0QixNQUFNLEVBQUU7TUFDckIsSUFBSUEsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNaLFFBQUEsT0FBTzFtQixJQUFJLENBQUM0d0IsS0FBSyxDQUFDbEssTUFBTSxDQUFDO0FBQzdCLE9BQUMsTUFBTTtBQUNILFFBQUEsT0FBTzFtQixJQUFJLENBQUMyd0IsSUFBSSxDQUFDakssTUFBTSxDQUFDO0FBQzVCO0FBQ0o7SUFFQSxTQUFTdXRCLE1BQU1BLEdBQUc7QUFDZCxNQUFBLElBQUlqb0IsWUFBWSxHQUFHLElBQUksQ0FBQ3daLGFBQWE7UUFDakN0YSxJQUFJLEdBQUcsSUFBSSxDQUFDdWEsS0FBSztRQUNqQnJaLE1BQU0sR0FBRyxJQUFJLENBQUNzSixPQUFPO1FBQ3JCanhCLElBQUksR0FBRyxJQUFJLENBQUNpaEMsS0FBSztRQUNqQmpaLE9BQU87UUFDUFAsT0FBTztRQUNQTCxLQUFLO1FBQ0x5QixLQUFLO1FBQ0w0bUIsY0FBYzs7QUFFbEI7QUFDQTtNQUNBLElBQ0ksRUFDS2xvQixZQUFZLElBQUksQ0FBQyxJQUFJZCxJQUFJLElBQUksQ0FBQyxJQUFJa0IsTUFBTSxJQUFJLENBQUMsSUFDN0NKLFlBQVksSUFBSSxDQUFDLElBQUlkLElBQUksSUFBSSxDQUFDLElBQUlrQixNQUFNLElBQUksQ0FBRSxDQUNsRCxFQUNIO1FBQ0VKLFlBQVksSUFBSWdvQixPQUFPLENBQUNHLFlBQVksQ0FBQy9uQixNQUFNLENBQUMsR0FBR2xCLElBQUksQ0FBQyxHQUFHLEtBQUs7UUFDNURBLElBQUksR0FBRyxDQUFDO1FBQ1JrQixNQUFNLEdBQUcsQ0FBQztBQUNkOztBQUVBO0FBQ0E7QUFDQTNuQixNQUFBQSxJQUFJLENBQUN1bkIsWUFBWSxHQUFHQSxZQUFZLEdBQUcsSUFBSTtBQUV2Q1MsTUFBQUEsT0FBTyxHQUFHaUUsUUFBUSxDQUFDMUUsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN2Q3ZuQixNQUFBQSxJQUFJLENBQUNnb0IsT0FBTyxHQUFHQSxPQUFPLEdBQUcsRUFBRTtBQUUzQlAsTUFBQUEsT0FBTyxHQUFHd0UsUUFBUSxDQUFDakUsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNoQ2hvQixNQUFBQSxJQUFJLENBQUN5bkIsT0FBTyxHQUFHQSxPQUFPLEdBQUcsRUFBRTtBQUUzQkwsTUFBQUEsS0FBSyxHQUFHNkUsUUFBUSxDQUFDeEUsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUM5QnpuQixNQUFBQSxJQUFJLENBQUNvbkIsS0FBSyxHQUFHQSxLQUFLLEdBQUcsRUFBRTtBQUV2QlgsTUFBQUEsSUFBSSxJQUFJd0YsUUFBUSxDQUFDN0UsS0FBSyxHQUFHLEVBQUUsQ0FBQzs7QUFFNUI7TUFDQXFvQixjQUFjLEdBQUd4akIsUUFBUSxDQUFDMGpCLFlBQVksQ0FBQ2xwQixJQUFJLENBQUMsQ0FBQztNQUM3Q2tCLE1BQU0sSUFBSThuQixjQUFjO01BQ3hCaHBCLElBQUksSUFBSThvQixPQUFPLENBQUNHLFlBQVksQ0FBQ0QsY0FBYyxDQUFDLENBQUM7O0FBRTdDO0FBQ0E1bUIsTUFBQUEsS0FBSyxHQUFHb0QsUUFBUSxDQUFDdEUsTUFBTSxHQUFHLEVBQUUsQ0FBQztNQUM3QkEsTUFBTSxJQUFJLEVBQUU7TUFFWjNuQixJQUFJLENBQUN5bUIsSUFBSSxHQUFHQSxJQUFJO01BQ2hCem1CLElBQUksQ0FBQzJuQixNQUFNLEdBQUdBLE1BQU07TUFDcEIzbkIsSUFBSSxDQUFDNm9CLEtBQUssR0FBR0EsS0FBSztBQUVsQixNQUFBLE9BQU8sSUFBSTtBQUNmO0lBRUEsU0FBUzhtQixZQUFZQSxDQUFDbHBCLElBQUksRUFBRTtBQUN4QjtBQUNBO0FBQ0EsTUFBQSxPQUFRQSxJQUFJLEdBQUcsSUFBSSxHQUFJLE1BQU07QUFDakM7SUFFQSxTQUFTaXBCLFlBQVlBLENBQUMvbkIsTUFBTSxFQUFFO0FBQzFCO0FBQ0EsTUFBQSxPQUFRQSxNQUFNLEdBQUcsTUFBTSxHQUFJLElBQUk7QUFDbkM7SUFFQSxTQUFTaW9CLEVBQUVBLENBQUM1bUIsS0FBSyxFQUFFO0FBQ2YsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDbkwsT0FBTyxFQUFFLEVBQUU7QUFDakIsUUFBQSxPQUFPYSxHQUFHO0FBQ2Q7QUFDQSxNQUFBLElBQUkrSCxJQUFJO1FBQ0prQixNQUFNO1FBQ05KLFlBQVksR0FBRyxJQUFJLENBQUN3WixhQUFhO0FBRXJDL1gsTUFBQUEsS0FBSyxHQUFHRCxjQUFjLENBQUNDLEtBQUssQ0FBQztNQUU3QixJQUFJQSxLQUFLLEtBQUssT0FBTyxJQUFJQSxLQUFLLEtBQUssU0FBUyxJQUFJQSxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQzlEdkMsSUFBSSxHQUFHLElBQUksQ0FBQ3VhLEtBQUssR0FBR3paLFlBQVksR0FBRyxLQUFLO1FBQ3hDSSxNQUFNLEdBQUcsSUFBSSxDQUFDc0osT0FBTyxHQUFHMGUsWUFBWSxDQUFDbHBCLElBQUksQ0FBQztBQUMxQyxRQUFBLFFBQVF1QyxLQUFLO0FBQ1QsVUFBQSxLQUFLLE9BQU87QUFDUixZQUFBLE9BQU9yQixNQUFNO0FBQ2pCLFVBQUEsS0FBSyxTQUFTO1lBQ1YsT0FBT0EsTUFBTSxHQUFHLENBQUM7QUFDckIsVUFBQSxLQUFLLE1BQU07WUFDUCxPQUFPQSxNQUFNLEdBQUcsRUFBRTtBQUMxQjtBQUNKLE9BQUMsTUFBTTtBQUNIO0FBQ0FsQixRQUFBQSxJQUFJLEdBQUcsSUFBSSxDQUFDdWEsS0FBSyxHQUFHemxDLElBQUksQ0FBQzhsQyxLQUFLLENBQUNxTyxZQUFZLENBQUMsSUFBSSxDQUFDemUsT0FBTyxDQUFDLENBQUM7QUFDMUQsUUFBQSxRQUFRakksS0FBSztBQUNULFVBQUEsS0FBSyxNQUFNO0FBQ1AsWUFBQSxPQUFPdkMsSUFBSSxHQUFHLENBQUMsR0FBR2MsWUFBWSxHQUFHLE1BQU07QUFDM0MsVUFBQSxLQUFLLEtBQUs7QUFDTixZQUFBLE9BQU9kLElBQUksR0FBR2MsWUFBWSxHQUFHLEtBQUs7QUFDdEMsVUFBQSxLQUFLLE1BQU07QUFDUCxZQUFBLE9BQU9kLElBQUksR0FBRyxFQUFFLEdBQUdjLFlBQVksR0FBRyxJQUFJO0FBQzFDLFVBQUEsS0FBSyxRQUFRO0FBQ1QsWUFBQSxPQUFPZCxJQUFJLEdBQUcsSUFBSSxHQUFHYyxZQUFZLEdBQUcsR0FBRztBQUMzQyxVQUFBLEtBQUssUUFBUTtBQUNULFlBQUEsT0FBT2QsSUFBSSxHQUFHLEtBQUssR0FBR2MsWUFBWSxHQUFHLElBQUk7QUFDN0M7QUFDQSxVQUFBLEtBQUssYUFBYTtZQUNkLE9BQU9oc0IsSUFBSSxDQUFDNHdCLEtBQUssQ0FBQzFGLElBQUksR0FBRyxLQUFLLENBQUMsR0FBR2MsWUFBWTtVQUNsRDtBQUNJLFlBQUEsTUFBTSxJQUFJcG1CLEtBQUssQ0FBQyxlQUFlLEdBQUc2bkIsS0FBSyxDQUFDO0FBQ2hEO0FBQ0o7QUFDSjtJQUVBLFNBQVM2bUIsTUFBTUEsQ0FBQ0MsS0FBSyxFQUFFO0FBQ25CLE1BQUEsT0FBTyxZQUFZO0FBQ2YsUUFBQSxPQUFPLElBQUksQ0FBQ0YsRUFBRSxDQUFDRSxLQUFLLENBQUM7T0FDeEI7QUFDTDtBQUVBLElBQUEsSUFBSUMsY0FBYyxHQUFHRixNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzdCRyxNQUFBQSxTQUFTLEdBQUdILE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDdkJJLE1BQUFBLFNBQVMsR0FBR0osTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUN2QkssTUFBQUEsT0FBTyxHQUFHTCxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3JCTSxNQUFBQSxNQUFNLEdBQUdOLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDcEJPLE1BQUFBLE9BQU8sR0FBR1AsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNyQlEsTUFBQUEsUUFBUSxHQUFHUixNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3RCUyxNQUFBQSxVQUFVLEdBQUdULE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDeEJVLE1BQUFBLE9BQU8sR0FBR1YsTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUNyQlcsU0FBUyxHQUFHVCxjQUFjO0lBRTlCLFNBQVNVLE9BQU9BLEdBQUc7TUFDZixPQUFPN1AsY0FBYyxDQUFDLElBQUksQ0FBQztBQUMvQjtJQUVBLFNBQVM4UCxLQUFLQSxDQUFDMW5CLEtBQUssRUFBRTtBQUNsQkEsTUFBQUEsS0FBSyxHQUFHRCxjQUFjLENBQUNDLEtBQUssQ0FBQztBQUM3QixNQUFBLE9BQU8sSUFBSSxDQUFDbkwsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDbUwsS0FBSyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUd0SyxHQUFHO0FBQ3JEO0lBRUEsU0FBU2l5QixVQUFVQSxDQUFDbndCLElBQUksRUFBRTtBQUN0QixNQUFBLE9BQU8sWUFBWTtBQUNmLFFBQUEsT0FBTyxJQUFJLENBQUMzQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUNvakIsS0FBSyxDQUFDemdCLElBQUksQ0FBQyxHQUFHOUIsR0FBRztPQUNqRDtBQUNMO0FBRUEsSUFBQSxJQUFJNkksWUFBWSxHQUFHb3BCLFVBQVUsQ0FBQyxjQUFjLENBQUM7QUFDekMzb0IsTUFBQUEsT0FBTyxHQUFHMm9CLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDL0JscEIsTUFBQUEsT0FBTyxHQUFHa3BCLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDL0J2cEIsTUFBQUEsS0FBSyxHQUFHdXBCLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDM0JscUIsTUFBQUEsSUFBSSxHQUFHa3FCLFVBQVUsQ0FBQyxNQUFNLENBQUM7QUFDekJocEIsTUFBQUEsTUFBTSxHQUFHZ3BCLFVBQVUsQ0FBQyxRQUFRLENBQUM7QUFDN0I5bkIsTUFBQUEsS0FBSyxHQUFHOG5CLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFFL0IsU0FBU25vQixLQUFLQSxHQUFHO01BQ2IsT0FBT3lELFFBQVEsQ0FBQyxJQUFJLENBQUN4RixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEM7QUFFQSxJQUFBLElBQUk0YSxLQUFLLEdBQUc5bEMsSUFBSSxDQUFDOGxDLEtBQUs7QUFDbEJ1UCxNQUFBQSxVQUFVLEdBQUc7UUFDVDFyQixFQUFFLEVBQUUsRUFBRTtBQUFFO1FBQ1JELENBQUMsRUFBRSxFQUFFO0FBQUU7UUFDUHRYLENBQUMsRUFBRSxFQUFFO0FBQUU7UUFDUHlYLENBQUMsRUFBRSxFQUFFO0FBQUU7UUFDUEUsQ0FBQyxFQUFFLEVBQUU7QUFBRTtRQUNQRSxDQUFDLEVBQUUsSUFBSTtBQUFFO1FBQ1RFLENBQUMsRUFBRSxFQUFFO09BQ1I7O0FBRUw7SUFDQSxTQUFTbXJCLGlCQUFpQkEsQ0FBQzdxQixNQUFNLEVBQUUvRCxNQUFNLEVBQUU4RCxhQUFhLEVBQUVFLFFBQVEsRUFBRTlKLE1BQU0sRUFBRTtBQUN4RSxNQUFBLE9BQU9BLE1BQU0sQ0FBQzJKLFlBQVksQ0FBQzdELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOEQsYUFBYSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsQ0FBQztBQUM5RTtJQUVBLFNBQVM2cUIsY0FBY0EsQ0FBQ0MsY0FBYyxFQUFFaHJCLGFBQWEsRUFBRTZxQixVQUFVLEVBQUV6MEIsTUFBTSxFQUFFO01BQ3ZFLElBQUkya0IsUUFBUSxHQUFHRixjQUFjLENBQUNtUSxjQUFjLENBQUMsQ0FBQzF1QixHQUFHLEVBQUU7UUFDL0MyRixPQUFPLEdBQUdxWixLQUFLLENBQUNQLFFBQVEsQ0FBQzhPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQ25vQixPQUFPLEdBQUc0WixLQUFLLENBQUNQLFFBQVEsQ0FBQzhPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQ3hvQixLQUFLLEdBQUdpYSxLQUFLLENBQUNQLFFBQVEsQ0FBQzhPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQm5wQixJQUFJLEdBQUc0YSxLQUFLLENBQUNQLFFBQVEsQ0FBQzhPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QmpvQixNQUFNLEdBQUcwWixLQUFLLENBQUNQLFFBQVEsQ0FBQzhPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQ3BuQixLQUFLLEdBQUc2WSxLQUFLLENBQUNQLFFBQVEsQ0FBQzhPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQi9tQixLQUFLLEdBQUd3WSxLQUFLLENBQUNQLFFBQVEsQ0FBQzhPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQjl4QyxRQUFBQSxDQUFDLEdBQ0lrcUIsT0FBTyxJQUFJNG9CLFVBQVUsQ0FBQzFyQixFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU4QyxPQUFPLENBQUMsSUFDMUNBLE9BQU8sR0FBRzRvQixVQUFVLENBQUMzckIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFK0MsT0FBTyxDQUFFLElBQzFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFFLElBQ3RCQSxPQUFPLEdBQUdtcEIsVUFBVSxDQUFDampDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRThaLE9BQU8sQ0FBRSxJQUMxQ0wsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBRSxJQUNwQkEsS0FBSyxHQUFHd3BCLFVBQVUsQ0FBQ3hyQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUVnQyxLQUFLLENBQUUsSUFDdENYLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUUsSUFDbkJBLElBQUksR0FBR21xQixVQUFVLENBQUN0ckIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFbUIsSUFBSSxDQUFFO0FBRTdDLE1BQUEsSUFBSW1xQixVQUFVLENBQUNwckIsQ0FBQyxJQUFJLElBQUksRUFBRTtRQUN0QjFuQixDQUFDLEdBQ0dBLENBQUMsSUFDQTBxQixLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFFLElBQ3BCQSxLQUFLLEdBQUdvb0IsVUFBVSxDQUFDcHJCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRWdELEtBQUssQ0FBRTtBQUMvQztBQUNBMXFCLE1BQUFBLENBQUMsR0FBR0EsQ0FBQyxJQUNBNnBCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUUsSUFDckJBLE1BQU0sR0FBR2lwQixVQUFVLENBQUNsckIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFaUMsTUFBTSxDQUFFLElBQ3hDa0IsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBRSxJQUFJLENBQUMsSUFBSSxFQUFFQSxLQUFLLENBQUM7QUFFMUMvcUIsTUFBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHaW9CLGFBQWE7TUFDcEJqb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNpekMsY0FBYyxHQUFHLENBQUM7QUFDMUJqekMsTUFBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHcWUsTUFBTTtNQUNiLE9BQU8wMEIsaUJBQWlCLENBQUM3MUIsS0FBSyxDQUFDLElBQUksRUFBRWxkLENBQUMsQ0FBQztBQUMzQzs7QUFFQTtJQUNBLFNBQVNrekMsMEJBQTBCQSxDQUFDQyxnQkFBZ0IsRUFBRTtNQUNsRCxJQUFJQSxnQkFBZ0IsS0FBSzN5QixTQUFTLEVBQUU7QUFDaEMsUUFBQSxPQUFPK2lCLEtBQUs7QUFDaEI7QUFDQSxNQUFBLElBQUksT0FBTzRQLGdCQUFnQixLQUFLLFVBQVUsRUFBRTtRQUN4QzVQLEtBQUssR0FBRzRQLGdCQUFnQjtBQUN4QixRQUFBLE9BQU8sSUFBSTtBQUNmO0FBQ0EsTUFBQSxPQUFPLEtBQUs7QUFDaEI7O0FBRUE7QUFDQSxJQUFBLFNBQVNDLDJCQUEyQkEsQ0FBQ0MsU0FBUyxFQUFFQyxLQUFLLEVBQUU7QUFDbkQsTUFBQSxJQUFJUixVQUFVLENBQUNPLFNBQVMsQ0FBQyxLQUFLN3lCLFNBQVMsRUFBRTtBQUNyQyxRQUFBLE9BQU8sS0FBSztBQUNoQjtNQUNBLElBQUk4eUIsS0FBSyxLQUFLOXlCLFNBQVMsRUFBRTtRQUNyQixPQUFPc3lCLFVBQVUsQ0FBQ08sU0FBUyxDQUFDO0FBQ2hDO0FBQ0FQLE1BQUFBLFVBQVUsQ0FBQ08sU0FBUyxDQUFDLEdBQUdDLEtBQUs7TUFDN0IsSUFBSUQsU0FBUyxLQUFLLEdBQUcsRUFBRTtBQUNuQlAsUUFBQUEsVUFBVSxDQUFDMXJCLEVBQUUsR0FBR2tzQixLQUFLLEdBQUcsQ0FBQztBQUM3QjtBQUNBLE1BQUEsT0FBTyxJQUFJO0FBQ2Y7QUFFQSxJQUFBLFNBQVNqSixRQUFRQSxDQUFDa0osYUFBYSxFQUFFQyxhQUFhLEVBQUU7QUFDNUMsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDenpCLE9BQU8sRUFBRSxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDc0YsVUFBVSxFQUFFLENBQUNNLFdBQVcsRUFBRTtBQUMxQztNQUVBLElBQUk4dEIsVUFBVSxHQUFHLEtBQUs7UUFDbEJDLEVBQUUsR0FBR1osVUFBVTtRQUNmejBCLE1BQU07UUFDTjJGLE1BQU07QUFFVixNQUFBLElBQUksT0FBT3V2QixhQUFhLEtBQUssUUFBUSxFQUFFO1FBQ25DQyxhQUFhLEdBQUdELGFBQWE7UUFDN0JBLGFBQWEsR0FBRyxLQUFLO0FBQ3pCO0FBQ0EsTUFBQSxJQUFJLE9BQU9BLGFBQWEsS0FBSyxTQUFTLEVBQUU7UUFDcENFLFVBQVUsR0FBR0YsYUFBYTtBQUM5QjtBQUNBLE1BQUEsSUFBSSxPQUFPQyxhQUFhLEtBQUssUUFBUSxFQUFFO1FBQ25DRSxFQUFFLEdBQUdoMEMsTUFBTSxDQUFDd0YsTUFBTSxDQUFDLEVBQUUsRUFBRTR0QyxVQUFVLEVBQUVVLGFBQWEsQ0FBQztRQUNqRCxJQUFJQSxhQUFhLENBQUNyc0IsQ0FBQyxJQUFJLElBQUksSUFBSXFzQixhQUFhLENBQUNwc0IsRUFBRSxJQUFJLElBQUksRUFBRTtVQUNyRHNzQixFQUFFLENBQUN0c0IsRUFBRSxHQUFHb3NCLGFBQWEsQ0FBQ3JzQixDQUFDLEdBQUcsQ0FBQztBQUMvQjtBQUNKO0FBRUE5SSxNQUFBQSxNQUFNLEdBQUcsSUFBSSxDQUFDZ0gsVUFBVSxFQUFFO01BQzFCckIsTUFBTSxHQUFHZ3ZCLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQ1MsVUFBVSxFQUFFQyxFQUFFLEVBQUVyMUIsTUFBTSxDQUFDO01BRXRELElBQUlvMUIsVUFBVSxFQUFFO1FBQ1p6dkIsTUFBTSxHQUFHM0YsTUFBTSxDQUFDZ0ssVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFckUsTUFBTSxDQUFDO0FBQzdDO0FBRUEsTUFBQSxPQUFPM0YsTUFBTSxDQUFDK3JCLFVBQVUsQ0FBQ3BtQixNQUFNLENBQUM7QUFDcEM7QUFFQSxJQUFBLElBQUkydkIsS0FBSyxHQUFHbDJDLElBQUksQ0FBQzhtQixHQUFHO0lBRXBCLFNBQVNFLElBQUlBLENBQUN6WixDQUFDLEVBQUU7TUFDYixPQUFPLENBQUNBLENBQUMsR0FBRyxDQUFDLEtBQUtBLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDQSxDQUFDO0FBQ2xDO0lBRUEsU0FBUzRvQyxhQUFhQSxHQUFHO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDN3pCLE9BQU8sRUFBRSxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDc0YsVUFBVSxFQUFFLENBQUNNLFdBQVcsRUFBRTtBQUMxQztNQUVBLElBQUl1RSxPQUFPLEdBQUd5cEIsS0FBSyxDQUFDLElBQUksQ0FBQzFRLGFBQWEsQ0FBQyxHQUFHLElBQUk7QUFDMUN0YSxRQUFBQSxJQUFJLEdBQUdnckIsS0FBSyxDQUFDLElBQUksQ0FBQ3pRLEtBQUssQ0FBQztBQUN4QnJaLFFBQUFBLE1BQU0sR0FBRzhwQixLQUFLLENBQUMsSUFBSSxDQUFDeGdCLE9BQU8sQ0FBQztRQUM1QnhKLE9BQU87UUFDUEwsS0FBSztRQUNMeUIsS0FBSztRQUNMNUQsQ0FBQztBQUNEMHNCLFFBQUFBLEtBQUssR0FBRyxJQUFJLENBQUMzQixTQUFTLEVBQUU7UUFDeEI0QixTQUFTO1FBQ1RDLE1BQU07UUFDTkMsUUFBUTtRQUNSQyxPQUFPO01BRVgsSUFBSSxDQUFDSixLQUFLLEVBQUU7QUFDUjtBQUNBO0FBQ0EsUUFBQSxPQUFPLEtBQUs7QUFDaEI7O0FBRUE7QUFDQWxxQixNQUFBQSxPQUFPLEdBQUd3RSxRQUFRLENBQUNqRSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ2hDWixNQUFBQSxLQUFLLEdBQUc2RSxRQUFRLENBQUN4RSxPQUFPLEdBQUcsRUFBRSxDQUFDO01BQzlCTyxPQUFPLElBQUksRUFBRTtNQUNiUCxPQUFPLElBQUksRUFBRTs7QUFFYjtBQUNBb0IsTUFBQUEsS0FBSyxHQUFHb0QsUUFBUSxDQUFDdEUsTUFBTSxHQUFHLEVBQUUsQ0FBQztNQUM3QkEsTUFBTSxJQUFJLEVBQUU7O0FBRVo7QUFDQTFDLE1BQUFBLENBQUMsR0FBRytDLE9BQU8sR0FBR0EsT0FBTyxDQUFDZ3FCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzF1QixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUU7TUFFM0RzdUIsU0FBUyxHQUFHRCxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQ2hDRSxNQUFBQSxNQUFNLEdBQUd0dkIsSUFBSSxDQUFDLElBQUksQ0FBQzBPLE9BQU8sQ0FBQyxLQUFLMU8sSUFBSSxDQUFDb3ZCLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQ3RERyxNQUFBQSxRQUFRLEdBQUd2dkIsSUFBSSxDQUFDLElBQUksQ0FBQ3llLEtBQUssQ0FBQyxLQUFLemUsSUFBSSxDQUFDb3ZCLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQ3RESSxNQUFBQSxPQUFPLEdBQUd4dkIsSUFBSSxDQUFDLElBQUksQ0FBQ3dlLGFBQWEsQ0FBQyxLQUFLeGUsSUFBSSxDQUFDb3ZCLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBRTdELE1BQUEsT0FDSUMsU0FBUyxHQUNULEdBQUcsSUFDRi9vQixLQUFLLEdBQUdncEIsTUFBTSxHQUFHaHBCLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQ2xDbEIsTUFBTSxHQUFHa3FCLE1BQU0sR0FBR2xxQixNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUNwQ2xCLElBQUksR0FBR3FyQixRQUFRLEdBQUdyckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFDbENXLEtBQUssSUFBSUssT0FBTyxJQUFJTyxPQUFPLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUN2Q1osS0FBSyxHQUFHMnFCLE9BQU8sR0FBRzNxQixLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUNuQ0ssT0FBTyxHQUFHc3FCLE9BQU8sR0FBR3RxQixPQUFPLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUN2Q08sT0FBTyxHQUFHK3BCLE9BQU8sR0FBRzlzQixDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUUxQztBQUVBLElBQUEsSUFBSWd0QixPQUFPLEdBQUdwUixRQUFRLENBQUN6aEMsU0FBUztJQUVoQzZ5QyxPQUFPLENBQUNwMEIsT0FBTyxHQUFHNmlCLFNBQVM7SUFDM0J1UixPQUFPLENBQUM1dkIsR0FBRyxHQUFHQSxHQUFHO0lBQ2pCNHZCLE9BQU8sQ0FBQzE0QyxHQUFHLEdBQUc4MUMsS0FBSztJQUNuQjRDLE9BQU8sQ0FBQzVPLFFBQVEsR0FBR2lNLFVBQVU7SUFDN0IyQyxPQUFPLENBQUNyQyxFQUFFLEdBQUdBLEVBQUU7SUFDZnFDLE9BQU8sQ0FBQ2xDLGNBQWMsR0FBR0EsY0FBYztJQUN2Q2tDLE9BQU8sQ0FBQ2pDLFNBQVMsR0FBR0EsU0FBUztJQUM3QmlDLE9BQU8sQ0FBQ2hDLFNBQVMsR0FBR0EsU0FBUztJQUM3QmdDLE9BQU8sQ0FBQy9CLE9BQU8sR0FBR0EsT0FBTztJQUN6QitCLE9BQU8sQ0FBQzlCLE1BQU0sR0FBR0EsTUFBTTtJQUN2QjhCLE9BQU8sQ0FBQzdCLE9BQU8sR0FBR0EsT0FBTztJQUN6QjZCLE9BQU8sQ0FBQzVCLFFBQVEsR0FBR0EsUUFBUTtJQUMzQjRCLE9BQU8sQ0FBQzNCLFVBQVUsR0FBR0EsVUFBVTtJQUMvQjJCLE9BQU8sQ0FBQzFCLE9BQU8sR0FBR0EsT0FBTztJQUN6QjBCLE9BQU8sQ0FBQ2oyQixPQUFPLEdBQUd3MEIsU0FBUztJQUMzQnlCLE9BQU8sQ0FBQy9RLE9BQU8sR0FBR3NPLE1BQU07SUFDeEJ5QyxPQUFPLENBQUMxUCxLQUFLLEdBQUdrTyxPQUFPO0lBQ3ZCd0IsT0FBTyxDQUFDbG9DLEdBQUcsR0FBRzJtQyxLQUFLO0lBQ25CdUIsT0FBTyxDQUFDMXFCLFlBQVksR0FBR0EsWUFBWTtJQUNuQzBxQixPQUFPLENBQUNqcUIsT0FBTyxHQUFHQSxPQUFPO0lBQ3pCaXFCLE9BQU8sQ0FBQ3hxQixPQUFPLEdBQUdBLE9BQU87SUFDekJ3cUIsT0FBTyxDQUFDN3FCLEtBQUssR0FBR0EsS0FBSztJQUNyQjZxQixPQUFPLENBQUN4ckIsSUFBSSxHQUFHQSxJQUFJO0lBQ25Cd3JCLE9BQU8sQ0FBQ3pwQixLQUFLLEdBQUdBLEtBQUs7SUFDckJ5cEIsT0FBTyxDQUFDdHFCLE1BQU0sR0FBR0EsTUFBTTtJQUN2QnNxQixPQUFPLENBQUNwcEIsS0FBSyxHQUFHQSxLQUFLO0lBQ3JCb3BCLE9BQU8sQ0FBQzlKLFFBQVEsR0FBR0EsUUFBUTtJQUMzQjhKLE9BQU8sQ0FBQ3hLLFdBQVcsR0FBR2lLLGFBQWE7SUFDbkNPLE9BQU8sQ0FBQzF5QyxRQUFRLEdBQUdteUMsYUFBYTtJQUNoQ08sT0FBTyxDQUFDN0ksTUFBTSxHQUFHc0ksYUFBYTtJQUM5Qk8sT0FBTyxDQUFDOTFCLE1BQU0sR0FBR0EsTUFBTTtJQUN2QjgxQixPQUFPLENBQUM5dUIsVUFBVSxHQUFHQSxVQUFVO0lBRS9COHVCLE9BQU8sQ0FBQ0MsV0FBVyxHQUFHbnlCLFNBQVMsQ0FDM0IscUZBQXFGLEVBQ3JGMnhCLGFBQ0osQ0FBQztJQUNETyxPQUFPLENBQUMxSixJQUFJLEdBQUdBLElBQUk7O0FBRW5COztJQUVBemxCLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDakNBLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUM7O0FBRXBDOztBQUVBdUksSUFBQUEsYUFBYSxDQUFDLEdBQUcsRUFBRVIsV0FBVyxDQUFDO0FBQy9CUSxJQUFBQSxhQUFhLENBQUMsR0FBRyxFQUFFTCxjQUFjLENBQUM7SUFDbEN5QixhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVV6eEIsS0FBSyxFQUFFa0QsS0FBSyxFQUFFMEYsTUFBTSxFQUFFO0FBQy9DQSxNQUFBQSxNQUFNLENBQUNxYSxFQUFFLEdBQUcsSUFBSTFqQixJQUFJLENBQUNrbUMsVUFBVSxDQUFDemxDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsRCxLQUFDLENBQUM7SUFDRnl4QixhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVV6eEIsS0FBSyxFQUFFa0QsS0FBSyxFQUFFMEYsTUFBTSxFQUFFO01BQy9DQSxNQUFNLENBQUNxYSxFQUFFLEdBQUcsSUFBSTFqQixJQUFJLENBQUM2eEIsS0FBSyxDQUFDcHhCLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLEtBQUMsQ0FBQzs7QUFFRjs7SUFFQStmLEtBQUssQ0FBQ28zQixPQUFPLEdBQUcsUUFBUTtJQUV4QmozQixlQUFlLENBQUNxakIsV0FBVyxDQUFDO0lBRTVCeGpCLEtBQUssQ0FBQzlWLEVBQUUsR0FBR2lvQyxLQUFLO0lBQ2hCbnlCLEtBQUssQ0FBQzNYLEdBQUcsR0FBR0EsR0FBRztJQUNmMlgsS0FBSyxDQUFDdmYsR0FBRyxHQUFHQSxHQUFHO0lBQ2Z1ZixLQUFLLENBQUM3Z0IsR0FBRyxHQUFHQSxHQUFHO0lBQ2Y2Z0IsS0FBSyxDQUFDdUIsR0FBRyxHQUFHTCxTQUFTO0lBQ3JCbEIsS0FBSyxDQUFDbXVCLElBQUksR0FBRzhFLFVBQVU7SUFDdkJqekIsS0FBSyxDQUFDNE0sTUFBTSxHQUFHa25CLFVBQVU7SUFDekI5ekIsS0FBSyxDQUFDWSxNQUFNLEdBQUdBLE1BQU07SUFDckJaLEtBQUssQ0FBQ29CLE1BQU0sR0FBR3dkLGtCQUFrQjtJQUNqQzVlLEtBQUssQ0FBQ3VwQixPQUFPLEdBQUc3bEIsYUFBYTtJQUM3QjFELEtBQUssQ0FBQytsQixRQUFRLEdBQUdGLGNBQWM7SUFDL0I3bEIsS0FBSyxDQUFDNEUsUUFBUSxHQUFHQSxRQUFRO0lBQ3pCNUUsS0FBSyxDQUFDNkwsUUFBUSxHQUFHbW9CLFlBQVk7SUFDN0JoMEIsS0FBSyxDQUFDNHlCLFNBQVMsR0FBR00sWUFBWTtJQUM5Qmx6QixLQUFLLENBQUNvSSxVQUFVLEdBQUd5VyxTQUFTO0lBQzVCN2UsS0FBSyxDQUFDb21CLFVBQVUsR0FBR0EsVUFBVTtJQUM3QnBtQixLQUFLLENBQUN1VixXQUFXLEdBQUd3ZSxlQUFlO0lBQ25DL3pCLEtBQUssQ0FBQ3VaLFdBQVcsR0FBRzJhLGVBQWU7SUFDbkNsMEIsS0FBSyxDQUFDOGUsWUFBWSxHQUFHQSxZQUFZO0lBQ2pDOWUsS0FBSyxDQUFDaWYsWUFBWSxHQUFHQSxZQUFZO0lBQ2pDamYsS0FBSyxDQUFDeWQsT0FBTyxHQUFHMEIsV0FBVztJQUMzQm5mLEtBQUssQ0FBQ3daLGFBQWEsR0FBR3lhLGlCQUFpQjtJQUN2Q2owQixLQUFLLENBQUNnTyxjQUFjLEdBQUdBLGNBQWM7SUFDckNoTyxLQUFLLENBQUNxM0Isb0JBQW9CLEdBQUdwQiwwQkFBMEI7SUFDdkRqMkIsS0FBSyxDQUFDczNCLHFCQUFxQixHQUFHbkIsMkJBQTJCO0lBQ3pEbjJCLEtBQUssQ0FBQ3FyQixjQUFjLEdBQUdOLGlCQUFpQjtJQUN4Qy9xQixLQUFLLENBQUMzYixTQUFTLEdBQUc4dEMsS0FBSzs7QUFFdkI7SUFDQW55QixLQUFLLENBQUN1M0IsU0FBUyxHQUFHO01BQ2RDLGNBQWMsRUFBRSxrQkFBa0I7QUFBRTtNQUNwQ0Msc0JBQXNCLEVBQUUscUJBQXFCO0FBQUU7TUFDL0NDLGlCQUFpQixFQUFFLHlCQUF5QjtBQUFFO01BQzlDdmxCLElBQUksRUFBRSxZQUFZO0FBQUU7TUFDcEJ3bEIsSUFBSSxFQUFFLE9BQU87QUFBRTtNQUNmQyxZQUFZLEVBQUUsVUFBVTtBQUFFO01BQzFCQyxPQUFPLEVBQUUsY0FBYztBQUFFO01BQ3pCcmxCLElBQUksRUFBRSxZQUFZO0FBQUU7TUFDcEJOLEtBQUssRUFBRSxTQUFTO0tBQ25CO0FBRUQsSUFBQSxPQUFPbFMsS0FBSztBQUVoQixHQUFFLENBQUMsQ0FBQTs7Ozs7Ozs7QUNwakxJLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxFQUNsQyxRQUFRLEdBR1QsS0FBSTtJQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLFFBQVE7QUFFN0MsSUFBQSxRQUNFUCxlQUFBLENBQUEsS0FBQSxFQUFBLEVBQUssU0FBUyxFQUFDLEtBQUssRUFDbEIsUUFBQSxFQUFBLENBQUFBLGVBQUEsQ0FBQSxLQUFBLEVBQUEsRUFBSyxTQUFTLEVBQUMsZ0NBQWdDLEVBQzdDLFFBQUEsRUFBQSxDQUFBRCxjQUFBLENBQUEsTUFBQSxFQUFBLEVBQU0sU0FBUyxFQUFDLG9FQUFvRSxFQUNqRixRQUFBLEVBQUEsQ0FBQSxJQUFJLEtBQUEsSUFBQSxJQUFKLElBQUksS0FBSixNQUFBLEdBQUEsTUFBQSxHQUFBLElBQUksQ0FBRSxRQUFRLEtBQUksQ0FBRyxFQUFBLElBQUksS0FBSixJQUFBLElBQUEsSUFBSSx1QkFBSixJQUFJLENBQUUsU0FBUyxDQUFBLENBQUEsRUFBSSxJQUFJLEtBQUosSUFBQSxJQUFBLElBQUksS0FBSixNQUFBLEdBQUEsTUFBQSxHQUFBLElBQUksQ0FBRSxRQUFRLENBQUUsQ0FBQSxFQUFBLENBQ3BELEVBQ1BBLGNBQU0sQ0FBQSxNQUFBLEVBQUEsRUFBQSxTQUFTLEVBQUMsbUZBQW1GLFlBQ2hHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFDdkIsQ0FBQSxDQUFBLEVBQUEsQ0FDSCxFQUNOQSxjQUFLLENBQUEsS0FBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLGdDQUFnQyxZQUM3Q0EsY0FBTSxDQUFBLE1BQUEsRUFBQSxFQUFBLFNBQVMsRUFBQyw2REFBNkQsWUFDMUUsT0FBTyxFQUFBLENBQ0gsRUFDSCxDQUFBLENBQUEsRUFBQSxDQUNGO0FBRVYsQ0FBQzs7QUMzQkQsSUFBSUUsS0FBRyxHQUFHLGdxQkFBZ3FCOztBQ0VucUIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxFQUMxQixJQUFJLEVBQ0osT0FBTyxHQUlSLEtBQUk7QUFDSCxJQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxPQUFPLEdBQUcsU0FBUyxHQUFHLFNBQVM7QUFFMUQsSUFBQSxRQUNFRixjQUNFLENBQUEsUUFBQSxFQUFBLEVBQUEsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFJO1lBQ2IsQ0FBQyxDQUFDLGVBQWUsRUFBRTtBQUNuQixZQUFBLE9BQU8sRUFBRTtBQUNYLFNBQUMsRUFFRCxRQUFBLEVBQUFBLGNBQUEsQ0FBQSxLQUFBLEVBQUEsRUFBSyxHQUFHLEVBQUVzNEIsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUEsQ0FBSSxFQUNsQyxDQUFBO0FBRWIsQ0FBQzs7QUNmTSxNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQ3hCLEtBQUssR0FHTixLQUFJO0lBQ0gsUUFDRXI0QixlQUFLLENBQUEsS0FBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLG1DQUFtQyxFQUNoRCxRQUFBLEVBQUEsQ0FBQUEsZUFBQSxDQUFBLEtBQUEsRUFBQSxFQUFLLFNBQVMsRUFBQyx5QkFBeUIsRUFBQSxRQUFBLEVBQUEsQ0FDdENBLGVBQU0sQ0FBQSxNQUFBLEVBQUEsRUFBQSxTQUFTLEVBQUMsb0VBQW9FLEVBQUEsUUFBQSxFQUFBLENBQ2pGLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFBLEdBQUEsRUFBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQSxFQUFBLENBQ3RDLEVBQ1BELGNBQU0sQ0FBQSxNQUFBLEVBQUEsRUFBQSxTQUFTLEVBQUMsbUZBQW1GLEVBQ2hHLFFBQUEsRUFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUM3QixDQUFBLENBQUEsRUFBQSxDQUNILEVBQ05BLGNBQUEsQ0FBQSxNQUFBLEVBQUEsRUFBTSxTQUFTLEVBQUMsZ0RBQWdELEVBQUEsUUFBQSxFQUM3RCxLQUFLLENBQUMsT0FBTyxFQUFBLENBQ1QsQ0FDSCxFQUFBLENBQUE7QUFFVixDQUFDOztBQ3hCTSxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFDL0IsS0FBSyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEdBUVAsS0FBSTtBQUNILElBQUEsTUFBTSxXQUFXLEdBQUd1NEIsWUFBTSxDQUFzQixJQUFJLENBQUM7SUFFckQsTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBR3I1QixjQUFRLENBQUMsVUFBVSxDQUFDO0lBRXREMUIsZUFBUyxDQUFDLE1BQUs7UUFDYixJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFLOztBQUNkLGdCQUFBLENBQUEsRUFBQSxHQUFBLFdBQVcsQ0FBQyxPQUFPLE1BQUUsSUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBQSxLQUFLLEVBQUU7Z0JBQzVCLFlBQVksQ0FBQyxLQUFLLENBQUM7YUFDcEIsRUFBRSxHQUFHLENBQUM7O0FBRVgsS0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFaEIsSUFBQSxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQXVDLEtBQUk7QUFDL0QsUUFBQSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFFNUIsUUFBQSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDdkIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzFDLGdCQUFBLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFHLEVBQUEsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUk7O2lCQUNyRTtnQkFDTCxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTTs7O1FBRzdDLElBQUksWUFBWSxFQUFFO1lBQ2hCLFVBQVUsQ0FBQyxNQUFLO0FBQ2QsZ0JBQUEsWUFBWSxFQUFFO2FBQ2YsRUFBRSxHQUFHLENBQUM7O0FBRVgsS0FBQztBQUVELElBQUEsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUF5QyxLQUFJO1FBQ2xFLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQzVDLEtBQUssQ0FBQyxjQUFjLEVBQUU7QUFDdEIsWUFBQSxZQUFZLEVBQUU7O2FBQ1QsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2xEOztBQUVKLEtBQUM7SUFDRCxNQUFNLFlBQVksR0FBRyxNQUFLO1FBQ3hCLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDZixRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQUU7UUFDMUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU07QUFDM0MsS0FBQztJQUVELFFBQ0V5QyxlQUNFLENBQUEsS0FBQSxFQUFBLEVBQUEsU0FBUyxFQUFFO1VBRVAsS0FBSyxDQUFDLE1BQU0sR0FBRztBQUNiLGNBQUU7QUFDRixjQUFFLCtCQUNOLENBQUssRUFBQSxFQUFBLFNBQVMsR0FBRyxpQ0FBaUMsR0FBRyxFQUFFLEtBQ3ZELE1BQU0sR0FBRyxzQkFBc0IsR0FBRyxzQkFDcEMsQ0FBRSxDQUFBLEVBQUEsUUFBQSxFQUFBLENBRUZELGNBQ0UsQ0FBQSxVQUFBLEVBQUEsRUFBQSxHQUFHLEVBQUUsV0FBVyxFQUNoQixTQUFTLEVBQUUsQ0FDVCxjQUFBLEVBQUEsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsc0JBQXNCLEdBQUcsRUFDOUMsQ0FBQSxDQUFFLEVBQ0YsS0FBSyxFQUFFLEtBQUssRUFDWixRQUFRLEVBQUUsWUFBWSxFQUN0QixTQUFTLEVBQUUsYUFBYSxFQUN4QixXQUFXLEVBQUMsd0JBQXdCLEVBQ3BDLElBQUksRUFBRSxDQUFDLEdBQ1AsRUFDRkEsY0FBQSxDQUFBLEtBQUEsRUFBQSxFQUFLLFNBQVMsRUFBRSxDQUFHLEVBQUEsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsbUJBQW1CLEdBQUcsRUFBRSxDQUFFLENBQUEsRUFBQSxRQUFBLEVBQzlEQSxjQUFRLENBQUEsUUFBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLGFBQWEsRUFBQyxPQUFPLEVBQUUsWUFBWSxFQUFBLFFBQUEsRUFDbkRBLGNBQ0UsQ0FBQSxLQUFBLEVBQUEsRUFBQSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLE1BQU0sRUFDM0MsTUFBTSxFQUFDLElBQUksRUFDWCxLQUFLLEVBQUMsSUFBSSxFQUNWLE9BQU8sRUFBQyxXQUFXLEVBQ25CLEtBQUssRUFBQyw0QkFBNEIsRUFBQSxRQUFBLEVBRWxDQSx5QkFBTSxDQUFDLEVBQUMsa1FBQWtRLEVBQUEsQ0FBRyxFQUN6USxDQUFBLEVBQUEsQ0FDQyxFQUNMLENBQUEsQ0FBQSxFQUFBLENBQ0Y7QUFFVixDQUFDOztBQ3BHTSxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQ3ZCLEtBQUssRUFDTCxPQUFPLEdBSVIsS0FBSTtBQUNILElBQUEsUUFDRUEsY0FDRSxDQUFBLFFBQUEsRUFBQSxFQUFBLFNBQVMsRUFBQyw4RUFBOEUsRUFDeEYsT0FBTyxFQUFFLE9BQU8sWUFFaEJBLGNBQU0sQ0FBQSxNQUFBLEVBQUEsRUFBQSxTQUFTLEVBQUMsa0NBQWtDLEVBQUEsUUFBQSxFQUFFLEtBQUssRUFBUSxDQUFBLEVBQUEsQ0FDMUQ7QUFFYixDQUFDOztBQ2ZELElBQUlFLEtBQUcsR0FBRyxvekJBQW96Qjs7QUNVdnpCLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFDekIsUUFBUSxFQUNSLFlBQVksR0FJYixLQUFJO0lBQ0gsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBR2hCLGNBQVEsQ0FBQyxLQUFLLENBQUM7SUFDM0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLGtCQUFrQixFQUFFO0lBQzdELE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLEVBQUU7SUFDdEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxpQkFBaUIsRUFBRTtJQUV0RCxNQUFNLElBQUksR0FBRyxDQUFnQixhQUFBLEVBQUEsT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUEsQ0FBRTtJQUUzRCxNQUFNLHFCQUFxQixHQUFHLE1BQUs7QUFDakMsUUFBQSxjQUFjLENBQ1o7WUFDRSxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDdkIsWUFBQSxPQUFPLEVBQUU7QUFDUCxnQkFBQSxVQUFVLEVBQUUsSUFBSTtBQUNqQixhQUFBO1NBQ0YsRUFDRDtZQUNFLFNBQVMsRUFBRSxNQUFLO2dCQUNkLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hCLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQ25CLG1CQUFtQixDQUFDLElBQUksQ0FBQzthQUMxQjtBQUNGLFNBQUEsQ0FDRjtBQUNILEtBQUM7SUFFRCxRQUNFZSxrREFDRUQsY0FDRSxDQUFBLEtBQUEsRUFBQSxFQUFBLEdBQUcsRUFBRXc0QixLQUFjLEVBQ25CLFNBQVMsRUFBQyxTQUFTLEVBQ25CLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUNuQyxFQUNELE1BQU0sS0FDTHY0QixlQUFBLENBQUEsS0FBQSxFQUFBLEVBQUssU0FBUyxFQUFDLDZFQUE2RSxhQUMxRkQsY0FBQyxDQUFBLFFBQVEsSUFDUCxLQUFLLEVBQUMsb0JBQW9CLEVBQzFCLE9BQU8sRUFBRSxNQUFLO0FBQ1osNEJBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDOzRCQUMzQixTQUFTLENBQUMsS0FBSyxDQUFDO3lCQUNqQixFQUFBLENBQ0QsRUFDRkEsY0FBQSxDQUFDLFFBQVEsRUFBQSxFQUFDLEtBQUssRUFBQyxhQUFRLEVBQUMsT0FBTyxFQUFFLHFCQUFxQixHQUFJLEVBQzNEQSxjQUFBLENBQUMsUUFBUSxFQUFBLEVBQ1AsS0FBSyxFQUFDLFdBQVcsRUFDakIsT0FBTyxFQUFFLE1BQUs7NEJBQ1osY0FBYyxDQUFDLFFBQVEsRUFBRTtnQ0FDdkIsU0FBUyxFQUFFLE1BQUs7b0NBQ2QsU0FBUyxDQUFDLEtBQUssQ0FBQztpQ0FDakI7QUFDRiw2QkFBQSxDQUFDO0FBQ0oseUJBQUMsRUFDRCxDQUFBLENBQUEsRUFBQSxDQUNFLENBQ1AsQ0FBQSxFQUFBLENBQ0E7QUFFUCxDQUFDOztBQ2hFTSxNQUFNLG9CQUFvQixHQUFHLENBQUMsRUFDbkMsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixZQUFZLEdBS2IsS0FBSTtJQUNILE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUdkLGNBQVEsQ0FBQyxFQUFFLENBQUM7QUFFdEMsSUFBQSxNQUFNLFdBQVcsR0FBR3E1QixZQUFNLENBQXdCLElBQUksQ0FBQztBQUV2RCxJQUFBLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDM0QsSUFBQSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxrQkFBa0IsRUFBRTtJQUVwRCxNQUFNLFlBQVksR0FBRyxNQUFLO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztZQUFFO0FBQzFCLFFBQUEsaUJBQWlCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFDckQsS0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE1BQUs7UUFDeEIsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUNwQixLQUFDO0lBRUQvNkIsZUFBUyxDQUFDLE1BQUs7QUFDYixRQUFBLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUN2QixZQUFBLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDOztBQUV2RCxLQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUVqQyxNQUFNLFdBQVcsR0FBRyxNQUFLO1FBQ3ZCLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDbkIsbUJBQW1CLENBQUMsSUFBSSxDQUFDO0FBQzNCLEtBQUM7SUFFRCxRQUNFeUMsZUFBSyxDQUFBLEtBQUEsRUFBQSxFQUFBLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFDLFFBQVEsRUFDdkMsUUFBQSxFQUFBLENBQUFBLGVBQUEsQ0FBQSxLQUFBLEVBQUEsRUFBSyxTQUFTLEVBQUMsc0RBQXNELEVBQUEsUUFBQSxFQUFBLENBQ25FRCxjQUFNLENBQUEsTUFBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLGlDQUFpQyxFQUFtQixRQUFBLEVBQUEsYUFBQSxFQUFBLENBQUEsRUFDcEVDLGVBQUssQ0FBQSxLQUFBLEVBQUEsRUFBQSxTQUFTLEVBQUMseUJBQXlCLEVBQ3RDLFFBQUEsRUFBQSxDQUFBRCxjQUFBLENBQUMsVUFBVSxFQUFBLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFBLENBQUksRUFDOURBLGNBQUEsQ0FBQyxXQUFXLEVBQUEsRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBQyxPQUFPLEVBQUEsQ0FBRyxDQUM5QyxFQUFBLENBQUEsQ0FBQSxFQUFBLENBQ0YsRUFFTkMsZUFBQSxDQUFBLEtBQUEsRUFBQSxFQUFLLFNBQVMsRUFBQyxxQkFBcUIsRUFBQSxRQUFBLEVBQUEsQ0FDbENELGNBQUssQ0FBQSxLQUFBLEVBQUEsRUFBQSxTQUFTLEVBQUMsd0ZBQXdGLFlBQ3BHLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssTUFDekNBLGNBQUEsQ0FBQyxTQUFTLEVBQUEsRUFBZ0IsS0FBSyxFQUFFLEtBQUssRUFBQSxFQUF0QixLQUFLLENBQUMsRUFBRSxDQUFrQixDQUMzQyxDQUFDLEVBQ0UsQ0FBQSxFQUNOQSxjQUFLLENBQUEsS0FBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLEtBQUssRUFDbEIsUUFBQSxFQUFBQSxjQUFBLENBQUMsZ0JBQWdCLEVBQUEsRUFDZixLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFFBQVEsRUFBRSxZQUFZLEVBQ3RCLFlBQVksRUFBRSxZQUFZLEVBQUEsQ0FDMUIsRUFDRSxDQUFBLENBQUEsRUFBQSxDQUNGLENBQ0YsRUFBQSxDQUFBO0FBRVYsQ0FBQzs7QUNqRUQsTUFBTSxvQkFBb0IsR0FBRyxHQUFHO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRztBQUMvQixNQUFNLE1BQU0sR0FBRyxFQUFFO0FBQ2pCLE1BQU0sVUFBVSxHQUFHLEVBQUU7QUFFZCxNQUFNLGtCQUFrQixHQUFHeTRCLGdCQUFVLENBWTFDLENBQ0UsRUFDRSxRQUFRLEVBQ1IsY0FBYyxHQUFHLENBQUMsRUFDbEIsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFFBQVEsR0FDVCxFQUNELEdBQUcsS0FDRDtBQUNGLElBQUEsTUFBTSxhQUFhLEdBQUdGLFlBQU0sQ0FBcUIsSUFBSSxDQUFDO0FBQ3RELElBQUEsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBR3I1QixjQUFRLENBQUM7UUFDdkMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXO0FBQzFCLFFBQUEsSUFBSSxFQUFFLENBQUM7QUFDUixLQUFBLENBQUM7SUFDRixNQUFNLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEdBQUdBLGNBQVEsQ0FBQyxLQUFLLENBQUM7SUFFekQxQixlQUFTLENBQUMsTUFBSztRQUNiLE1BQU0sWUFBWSxHQUFHLE1BQUs7WUFDeEIsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVDOztZQUVGLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUU7WUFFaEUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3hELFFBQVE7Z0JBQ1IsY0FBYztnQkFDZCxVQUFVO2dCQUNWLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxVQUFVO0FBQ1gsYUFBQSxDQUFDO0FBRUYsWUFBQSxXQUFXLENBQUM7Z0JBQ1YsTUFBTTtnQkFDTixJQUFJO0FBQ0wsYUFBQSxDQUFDO0FBRUYsWUFBQSxJQUFJLGdCQUFnQjtnQkFBRSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7WUFDdEQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFNBQUM7QUFFRCxRQUFBLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDeEMsQ0FBZSxZQUFBLEVBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBSSxFQUFBLENBQUEsQ0FDdEM7UUFDRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUUvQyxJQUFJLE9BQU8sRUFBRTtBQUNYLFlBQUEsYUFBYSxDQUFDLE9BQU8sR0FBRyxPQUFPO0FBQy9CLFlBQUEsWUFBWSxFQUFFO0FBQ2QsWUFBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQzs7QUFHakQsUUFBQSxPQUFPLE1BQUs7QUFDVixZQUFBLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO0FBQ3BELFNBQUM7QUFDSCxLQUFDLEVBQUU7UUFDRCxVQUFVO1FBQ1YsU0FBUztRQUNULFNBQVM7UUFDVCxRQUFRO1FBQ1IsZ0JBQWdCO1FBQ2hCLGNBQWM7QUFDZixLQUFBLENBQUM7SUFFRixJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUM5RCxRQUFBLE9BQU8sSUFBSTs7SUFHYixPQUFPazdCLHFCQUFZLENBQ2pCMTRCLGNBQ0UsQ0FBQSxLQUFBLEVBQUEsRUFBQSxHQUFHLEVBQUUsR0FBRyxFQUNSLEtBQUssRUFBRTtBQUNMLFlBQUEsUUFBUSxFQUFFLFVBQVU7WUFDcEIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3ZCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtBQUNuQixZQUFBLFVBQVUsRUFBRSx1QkFBdUI7WUFDbkMsTUFBTSxFQUFFLFVBQVUsSUFBSSxTQUFTLEdBQUcsT0FBTyxHQUFHLE9BQU87QUFDcEQsU0FBQSxFQUFBLFFBQUEsRUFFQSxRQUFRLEVBQ0wsQ0FBQSxFQUNOLFFBQVEsQ0FBQyxJQUFJLENBQ2Q7QUFDSCxDQUFDLENBQ0Y7QUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFDeEIsUUFBUSxFQUNSLFVBQVUsRUFDVixjQUFjLEVBQ2QsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEdBUVYsS0FBSTtBQUNILElBQUEsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3pDLElBQUEsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDO0FBRTNDLElBQUEsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDO0FBQzFCLFVBQUUsUUFBUSxDQUFDLFlBQVksR0FBRztVQUN4QixDQUFDO0FBQ0wsSUFBQSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUM7QUFDM0IsVUFBRSxRQUFRLENBQUMsYUFBYSxHQUFHO1VBQ3pCLENBQUM7QUFFTCxJQUFBLE1BQU0scUJBQXFCLEdBQ3pCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU87QUFDNUQsSUFBQSxNQUFNLHVCQUF1QixHQUMzQixRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVk7QUFDckMsU0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFFOUQsTUFBTSxhQUFhLEdBQUcsU0FBUyxHQUFHLG9CQUFvQixHQUFHLG1CQUFtQjtBQUU1RSxJQUFBLE1BQU0sY0FBYyxHQUNsQixxQkFBcUIsR0FBRyxhQUFhLEdBQUcsTUFBTTtBQUM5QyxRQUFBLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVztBQUV0QyxJQUFBLE1BQU0sY0FBYyxHQUNsQix1QkFBdUIsR0FBRyxjQUFjO0FBQ3hDLFFBQUEsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZO0FBRXZDLElBQUEsTUFBTSxhQUFhLEdBQUcsU0FBUyxHQUFHLG9CQUFvQixHQUFHLFVBQVUsR0FBRyxDQUFDO0FBQ3ZFLElBQUEsTUFBTSxZQUFZLEdBQ2hCLFNBQVMsSUFBSSxVQUFVLEdBQUcsbUJBQW1CLEdBQUcsVUFBVSxHQUFHLENBQUM7QUFFaEUsSUFBQSxNQUFNLGNBQWMsR0FDbEIsY0FBYyxJQUFJO1VBQ2QsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsY0FBYyxHQUFHO1VBQ3pELHVCQUF1QjtJQUU3QixNQUFNLFlBQVksR0FBRztBQUNuQixVQUFFLHFCQUFxQixHQUFHLGFBQWEsR0FBRztVQUN4QyxxQkFBcUI7SUFFekIsT0FBTztBQUNMLFFBQUEsTUFBTSxFQUFFLGNBQWM7QUFDdEIsUUFBQSxJQUFJLEVBQUUsWUFBWTtRQUNsQixjQUFjO0tBQ2Y7QUFDSCxDQUFDOztBQ3BLTSxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFrQyxLQUFJO0lBQzFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEdBQUdkLGNBQVEsQ0FBQyxLQUFLLENBQUM7SUFDakQsTUFBTSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHQSxjQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLGtCQUFrQixFQUFFO0lBRXRFLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBRTNDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsRUFBRTtBQUUxRSxJQUFBLFFBQ0VjLGNBQUEsQ0FBQyxrQkFBa0IsRUFBQSxFQUNqQixRQUFRLEVBQUUsUUFBUSxFQUNsQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFDeEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsY0FBYyxFQUFFLFNBQVMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsY0FBYyxFQUU5RCxRQUFBLEVBQUFBLGNBQUEsQ0FBQSxLQUFBLEVBQUEsRUFDRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQ3RDLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFDdkMsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQzVDLFNBQVMsRUFBRSxDQUFpQixjQUFBLEVBQUEsVUFBVSxJQUFJLFVBQVUsQ0FBQSxDQUFBLEVBQ2xELFFBQVEsQ0FBQyxVQUFVLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxVQUFVLElBQUksWUFDdEQsQ0FBRSxDQUFBLEVBQUEsUUFBQSxFQUVELFVBQVUsSUFDVEEsY0FBQyxDQUFBLG9CQUFvQixFQUNuQixFQUFBLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLGlCQUFpQixFQUFFLGlCQUFpQixFQUNwQyxZQUFZLEVBQUUsWUFBWSxFQUFBLENBQzFCLElBQ0EsU0FBUyxJQUNYQSxlQUFDLG1CQUFtQixFQUFBLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQSxDQUFJLEtBRTNDQSxjQUFLLENBQUEsS0FBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLDREQUE0RCxFQUN6RSxRQUFBLEVBQUFBLGNBQUEsQ0FBQSxNQUFBLEVBQUEsRUFBTSxTQUFTLEVBQUMsd0JBQXdCLEVBQUUsUUFBQSxFQUFBLFFBQVEsR0FBUSxFQUN0RCxDQUFBLENBQ1AsRUFDRyxDQUFBLEVBQUEsQ0FDYTtBQUV6QixDQUFDOztBQzdDTSxNQUFNLFlBQVksR0FBRyxNQUFLO0lBQy9CLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsa0JBQWtCLEVBQUU7QUFFbEQsSUFBQSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUztBQUFFLFFBQUEsT0FBTyxJQUFJO0FBRXRDLElBQUEsT0FBTztBQUNKLFNBQUEsTUFBTSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRO0FBQy9ELFNBQUEsR0FBRyxDQUFDLENBQUMsUUFBUSxLQUFLQSxlQUFDLFdBQVcsRUFBQSxFQUFtQixRQUFRLEVBQUUsUUFBUSxFQUEvQixFQUFBLFFBQVEsQ0FBQyxFQUFFLENBQXdCLENBQUM7QUFDN0UsQ0FBQzs7QUNYTSxNQUFNLFdBQVcsR0FBRyxNQUFLO0FBQzlCLElBQUEsT0FBT0EsY0FBSyxDQUFBLEtBQUEsRUFBQSxFQUFBLFNBQVMsRUFBRSxDQUFBLFlBQUEsQ0FBYyxHQUFRO0FBQy9DLENBQUM7O0FDS00sTUFBTSxhQUFhLEdBQUcsTUFBSztJQUNoQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsR0FBRyxrQkFBa0IsRUFBRTtBQUMzRSxJQUFBLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUdkLGNBQVEsQ0FBQyxDQUFBLFdBQVcsS0FBWCxJQUFBLElBQUEsV0FBVyx1QkFBWCxXQUFXLENBQUUsT0FBTyxLQUFJLEVBQUUsQ0FBQztJQUNsRSxNQUFNLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEdBQUdBLGNBQVEsQ0FBQyxLQUFLLENBQUM7SUFFekQsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxpQkFBaUIsRUFBRTtJQUV0RCxNQUFNLFlBQVksR0FBRyxNQUFLO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLFdBQVc7WUFBRTtBQUNsQixRQUFBLGNBQWMsaUNBQ1QsV0FBVyxDQUFBLEVBQUEsRUFDZCxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFDaEIsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQ2hCLE9BQU8sSUFDUDtBQUNGLFFBQUEsYUFBYSxFQUFFO0FBQ2pCLEtBQUM7QUFFRCxJQUFBLElBQUksQ0FBQyxXQUFXO0FBQUUsUUFBQSxPQUFPLElBQUk7SUFFN0IsUUFDRWMsY0FBQyxDQUFBLGtCQUFrQixFQUNqQixFQUFBLEdBQUcsRUFBRSxjQUFjLEVBQ25CLFFBQVEsRUFBRSxXQUFXLEVBQ3JCLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxTQUFTLEVBQUUsSUFBSSxFQUFBLFFBQUEsRUFFZkMsZUFDRSxDQUFBLEtBQUEsRUFBQSxFQUFBLFNBQVMsRUFBQyxtQkFBbUIsRUFDN0IsS0FBSyxFQUFFO2dCQUNMLGFBQWEsRUFBRSxhQUFhLEdBQUcsYUFBYSxHQUFHLEtBQUs7QUFDcEQsZ0JBQUEsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFlBQVksR0FBRyxVQUFVO0FBQzFELGdCQUFBLEdBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSzthQUN6QyxFQUVELFFBQUEsRUFBQSxDQUFBRCxjQUFBLENBQUMsV0FBVyxFQUFBLEVBQUEsQ0FBRyxFQUNmQSxjQUFBLENBQUMsZ0JBQWdCLEVBQUEsRUFDZixLQUFLLEVBQUUsT0FBTyxFQUNkLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLFFBQVEsRUFBRSxZQUFZLEVBQ3RCLFVBQVUsRUFDVixJQUFBLEVBQUEsTUFBTSxFQUNOLElBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxDQUNFLEVBQ2EsQ0FBQTtBQUV6QixDQUFDOztBQ3JERCxJQUFJRSxLQUFHLEdBQUcscVBBQXFQOztBQ0EvUCxJQUFJQSxLQUFHLEdBQUcsb1BBQW9QOztBQ0d2UCxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQzdCLFdBQVcsRUFDWCxjQUFjLEdBSWYsS0FBSTtBQUNILElBQUEsUUFDRUYsY0FDRSxDQUFBLEtBQUEsRUFBQSxFQUFBLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSTtZQUNiLENBQUMsQ0FBQyxlQUFlLEVBQUU7WUFDbkIsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQzFCLEVBQ0QsU0FBUyxFQUFDLHNIQUFzSCxZQUVoSUEsY0FBSyxDQUFBLEtBQUEsRUFBQSxFQUFBLEdBQUcsRUFBRSxXQUFXLEdBQUcyNEIsS0FBVyxHQUFHQyxLQUFZLEVBQUksQ0FBQSxFQUFBLENBQ2xEO0FBRVYsQ0FBQzs7QUNyQkQsSUFBSTE0QixLQUFHLEdBQUcsNHNCQUE0c0I7O0FDSS9zQixNQUFNLE1BQU0sR0FBRyxPQUFPLE9BQWtCLEtBQUk7SUFDakQsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztJQUM3RCxZQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3hFLE9BQU8sUUFBUSxDQUFDLElBQUk7QUFDdEIsQ0FBQztBQUVNLE1BQU0sTUFBTSxHQUFHLE9BQU8sT0FBa0IsS0FBSTtJQUNqRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDO0lBQzdELFlBQVksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDeEUsT0FBTyxRQUFRLENBQUMsSUFBSTtBQUN0QixDQUFDO0FBRU0sTUFBTSxNQUFNLEdBQUcsWUFBVztBQUMvQixJQUFBLFlBQVksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUM7QUFDbEQsQ0FBQztBQUVNLE1BQU0sU0FBUyxHQUFHLE1BQUs7QUFDNUIsSUFBQSxNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUU7QUFDcEMsSUFBQSxPQUFPLFdBQVcsQ0FBQztBQUNqQixRQUFBLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFNBQVMsRUFBRSxNQUFLO0FBQ2QsWUFBQSxPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRTtTQUN2QztBQUNGLEtBQUEsQ0FBQztBQUNKLENBQUM7QUFFTSxNQUFNLFNBQVMsR0FBRyxNQUFLO0FBQzVCLElBQUEsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFO0FBQ3BDLElBQUEsT0FBTyxXQUFXLENBQUM7QUFDakIsUUFBQSxVQUFVLEVBQUUsTUFBTTtRQUNsQixTQUFTLEVBQUUsTUFBSztBQUNkLFlBQUEsT0FBTyxXQUFXLENBQUMsaUJBQWlCLEVBQUU7U0FDdkM7QUFDRixLQUFBLENBQUM7QUFDSixDQUFDO0FBRU0sTUFBTSxTQUFTLEdBQUcsTUFBSztBQUM1QixJQUFBLE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRTtBQUNwQyxJQUFBLE9BQU8sV0FBVyxDQUFDO0FBQ2pCLFFBQUEsVUFBVSxFQUFFLE1BQU07UUFDbEIsU0FBUyxFQUFFLE1BQUs7QUFDZCxZQUFBLE9BQU8sV0FBVyxDQUFDLGlCQUFpQixFQUFFO1NBQ3ZDO0FBQ0YsS0FBQSxDQUFDO0FBQ0osQ0FBQzs7QUM1Q00sTUFBTSxhQUFhLEdBQUcsTUFBSztJQUNoQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRTtJQUM1QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFNBQVMsRUFBRTtJQUV0QyxNQUFNLFlBQVksR0FBRyxNQUFLO0FBQ3hCLFFBQUEsTUFBTSxFQUFFO0FBQ1YsS0FBQztBQUNELElBQUEsUUFDRUQsZUFBQSxDQUFBLEtBQUEsRUFBQSxFQUFLLFNBQVMsRUFBQyxpRkFBaUYsRUFDOUYsUUFBQSxFQUFBLENBQUFBLGVBQUEsQ0FBQSxLQUFBLEVBQUEsRUFBQSxRQUFBLEVBQUEsQ0FDRUQsY0FBRyxDQUFBLEdBQUEsRUFBQSxFQUFBLFNBQVMsRUFBQyw2Q0FBNkMsRUFDdkQsUUFBQSxFQUFBLENBQUEsRUFBRSxLQUFGLElBQUEsSUFBQSxFQUFFLEtBQUYsTUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFFLENBQUUsUUFBUSxLQUFJLENBQUEsRUFBRyxFQUFFLEtBQUYsSUFBQSxJQUFBLEVBQUUsS0FBRixNQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUUsQ0FBRSxTQUFTLENBQUEsQ0FBQSxFQUFJLEVBQUUsS0FBQSxJQUFBLElBQUYsRUFBRSxLQUFGLE1BQUEsR0FBQSxNQUFBLEdBQUEsRUFBRSxDQUFFLFFBQVEsQ0FBRSxDQUFBLEVBQUEsQ0FDakQsRUFDSkEsY0FBQSxDQUFBLEdBQUEsRUFBQSxFQUFHLFNBQVMsRUFBQyw2REFBNkQsRUFDdkUsUUFBQSxFQUFBLEVBQUUsS0FBRixJQUFBLElBQUEsRUFBRSxLQUFGLE1BQUEsR0FBQSxNQUFBLEdBQUEsRUFBRSxDQUFFLEtBQUssRUFBQSxDQUNSLENBQ0EsRUFBQSxDQUFBLEVBQ05BLGNBQUssQ0FBQSxLQUFBLEVBQUEsRUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRTY0QixLQUFVLEVBQUUsU0FBUyxFQUFDLGdCQUFnQixFQUFHLENBQUEsQ0FBQSxFQUFBLENBQ3RFO0FBRVYsQ0FBQzs7QUN4QkQsSUFBSTM0QixLQUFHLEdBQUcsd2JBQXdiOztBQ0UzYixNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQzFCLEtBQUssRUFDTCxRQUFRLEdBSVQsS0FBSTtJQUNILFFBQ0VELHlCQUFLLFNBQVMsRUFBQyw0R0FBNEcsRUFDekgsUUFBQSxFQUFBLENBQUFELGNBQUEsQ0FBQSxLQUFBLEVBQUEsRUFBSyxHQUFHLEVBQUU4NEIsS0FBTSxFQUFFLFNBQVMsRUFBQyxTQUFTLEVBQUcsQ0FBQSxFQUN4Qzk0QiwwQkFDRSxJQUFJLEVBQUUsTUFBTSxFQUNaLEtBQUssRUFBRSxLQUFLLEVBQ1osUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUN6QyxTQUFTLEVBQUMsaUVBQWlFLEVBQUEsQ0FDM0UsQ0FDRSxFQUFBLENBQUE7QUFFVixDQUFDOztBQ2hCTSxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFDL0IsUUFBUSxHQUdULEtBQUk7QUFDSCxJQUFBLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVE7SUFDeEUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxHQUN2RCxrQkFBa0IsRUFBRTtBQUV0QixJQUFBLE1BQU0sV0FBVyxHQUFHLFlBQVc7UUFDN0IsbUJBQW1CLENBQUMsUUFBUSxDQUFDO0FBQzdCLFFBQUEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDekIsS0FBQztBQUVELElBQUEsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU07SUFFbkMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxnQkFBZ0IsQ0FBQyxFQUFFO0lBRTFFLE1BQU0sZUFBZSxHQUFHO0FBQ3RCLFVBQUU7VUFDQSw2QkFBNkI7SUFFakMsTUFBTSxjQUFjLEdBQUc7QUFDckIsVUFBRTtVQUNBLDJCQUEyQjtJQUUvQixRQUNFQyxlQUNFLENBQUEsS0FBQSxFQUFBLEVBQUEsU0FBUyxFQUFFLENBQUEscUNBQUEsRUFBd0MsZUFBZSxDQUFBLEtBQUEsRUFDaEUsVUFBVSxHQUFHLFlBQVksR0FBRyxFQUM5QixDQUFBLENBQUUsRUFDRixPQUFPLEVBQUUsV0FBVyxFQUVwQixRQUFBLEVBQUEsQ0FBQUEsZUFBQSxDQUFBLEtBQUEsRUFBQSxFQUFLLFNBQVMsRUFBQyxrQ0FBa0MsRUFBQSxRQUFBLEVBQUEsQ0FDL0NELGNBQU0sQ0FBQSxNQUFBLEVBQUEsRUFBQSxTQUFTLEVBQUMsNkNBQTZDLEVBQUEsUUFBQSxFQUMxRCxDQUFBLElBQUksS0FBSixJQUFBLElBQUEsSUFBSSxLQUFKLE1BQUEsR0FBQSxNQUFBLEdBQUEsSUFBSSxDQUFFLFFBQVEsS0FBSSxDQUFBLEVBQUcsSUFBSSxLQUFBLElBQUEsSUFBSixJQUFJLEtBQUEsTUFBQSxHQUFBLE1BQUEsR0FBSixJQUFJLENBQUUsU0FBUyxDQUFBLENBQUEsRUFBSSxJQUFJLEtBQUEsSUFBQSxJQUFKLElBQUksS0FBQSxNQUFBLEdBQUEsTUFBQSxHQUFKLElBQUksQ0FBRSxRQUFRLENBQUEsQ0FBRSxFQUNwRCxDQUFBLEVBQ1BBLHlCQUFNLFNBQVMsRUFBQyxpRUFBaUUsRUFBQSxRQUFBLEVBQzlFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBQSxDQUN2QixDQUNILEVBQUEsQ0FBQSxFQUNOQSxjQUFNLENBQUEsTUFBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLGtDQUFrQyxFQUFFLFFBQUEsRUFBQSxJQUFJLEVBQVEsQ0FBQSxFQUNoRUEsY0FBTSxDQUFBLE1BQUEsRUFBQSxFQUFBLFNBQVMsRUFBQyx5Q0FBeUMsRUFBRSxRQUFBLEVBQUEsT0FBTyxFQUFRLENBQUEsRUFDekUsWUFBWSxHQUFHLENBQUMsS0FDZkMsZUFBTSxDQUFBLE1BQUEsRUFBQSxFQUFBLFNBQVMsRUFBRSxDQUFBLDJCQUFBLEVBQThCLGNBQWMsQ0FBQSxDQUFFLEVBQzVELFFBQUEsRUFBQSxDQUFBLFlBQVksRUFBVSxlQUFBLEVBQUEsWUFBWSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUM3QyxFQUFBLENBQUEsQ0FDUixDQUNHLEVBQUEsQ0FBQTtBQUVWLENBQUM7O0FDakRNLE1BQU0sWUFBWSxHQUFHLE1BQUs7QUFDL0IsSUFBQSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsa0JBQWtCLEVBQUU7SUFDMUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBR2YsY0FBUSxDQUFDLEVBQUUsQ0FBQztBQUV4QyxJQUFBLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxLQUFULElBQUEsSUFBQSxTQUFTLHVCQUFULFNBQVMsQ0FBRSxNQUFNLENBQ3pDLENBQUMsUUFBUSxLQUNQLENBQUMsTUFBTTtBQUNQLFFBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzlCLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUNwQztJQUVELFFBQ0VlLHlCQUFLLFNBQVMsRUFBQyxrREFBa0QsRUFDL0QsUUFBQSxFQUFBLENBQUFELGNBQUEsQ0FBQyxXQUFXLEVBQUEsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUksQ0FBQSxFQUNuREEsd0JBQUssU0FBUyxFQUFDLDBEQUEwRCxFQUFBLFFBQUEsRUFDdEUsaUJBQWlCO29CQUNoQixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLE1BQzdCQSxjQUFBLENBQUMsZ0JBQWdCLEVBQUEsRUFBbUIsUUFBUSxFQUFFLFFBQVEsRUFBL0IsRUFBQSxRQUFRLENBQUMsRUFBRSxDQUF3QixDQUMzRCxDQUFDLEVBQUEsQ0FDQSxDQUNGLEVBQUEsQ0FBQTtBQUVWLENBQUM7O0FDdEJNLE1BQU0sY0FBYyxHQUFHLE1BQUs7SUFDakMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUU7QUFDNUIsSUFBQSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsa0JBQWtCLEVBQUU7SUFFMUMsTUFBTSxjQUFjLEdBQUcsRUFBRSxLQUFGLElBQUEsSUFBQSxFQUFFLHVCQUFGLEVBQUUsQ0FBRSxjQUFjLENBQUMsSUFBSSxDQUM1QyxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQzFEO0FBQ0QsSUFBQSxRQUNFQyxlQUFLLENBQUEsS0FBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLG9GQUFvRixhQUNoRyxjQUFjLElBQ2JELGNBQUMsQ0FBQSxZQUFZLEVBQUcsRUFBQSxDQUFBLEtBRWhCQSxjQUFBLENBQUEsS0FBQSxFQUFBLEVBQUssU0FBUyxFQUFDLHdEQUF3RCxFQUNyRSxRQUFBLEVBQUFBLGNBQUEsQ0FBQSxHQUFBLEVBQUEsRUFBRyxTQUFTLEVBQUMsNENBQTRDLEVBR3JELFFBQUEsRUFBQSxpR0FBQSxFQUFBLENBQUEsRUFBQSxDQUNBLENBQ1AsRUFDREEsY0FBQSxDQUFDLGFBQWEsRUFBRyxFQUFBLENBQUEsQ0FBQSxFQUFBLENBQ2I7QUFFVixDQUFDOztBQzNCTSxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQ3BCLEtBQUssRUFDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLEtBQUssRUFDTCxRQUFRLEdBT1QsS0FBSTtJQUNILFFBQ0VDLHlCQUFLLFNBQVMsRUFBQyxlQUFlLEVBQzVCLFFBQUEsRUFBQSxDQUFBRCxjQUFBLENBQUEsT0FBQSxFQUFBLEVBQU8sU0FBUyxFQUFDLHNEQUFzRCxFQUFBLFFBQUEsRUFDcEUsS0FBSyxFQUNBLENBQUEsRUFDUkEsMEJBQ0UsSUFBSSxFQUFFLElBQUksRUFDVixXQUFXLEVBQUUsV0FBVyxFQUN4QixLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDekMsU0FBUyxFQUFDLDZHQUE2RyxFQUFBLENBQ3ZILENBQ0UsRUFBQSxDQUFBO0FBRVYsQ0FBQzs7QUMzQkQsSUFBSUUsS0FBRyxHQUFHLHMwYkFBczBiOztBQ0t6MGIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUN6QixVQUFVLEVBQ1YsY0FBYyxHQUlmLEtBQUk7SUFDSCxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxHQUFHaEIsY0FBUSxDQUFDLEVBQUUsQ0FBQztJQUM5QyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHQSxjQUFRLENBQUMsRUFBRSxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUdBLGNBQVEsQ0FBQyxFQUFFLENBQUM7SUFDdEMsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBR0EsY0FBUSxDQUFDLEVBQUUsQ0FBQztJQUU1QyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFNBQVMsRUFBRTtJQUV0QyxNQUFNLFlBQVksR0FBRyxNQUFLO1FBQ3hCLE1BQU0sQ0FDSixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUN4QztZQUNFLFNBQVMsRUFBRSxNQUFLO0FBQ2QsZ0JBQUEsVUFBVSxFQUFFO2FBQ2I7QUFDRCxZQUFBLE9BQU8sRUFBRSxDQUFDLEtBQUssS0FBSTtBQUNqQixnQkFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUNyQjtBQUNGLFNBQUEsQ0FDRjtBQUNILEtBQUM7QUFFRCxJQUFBLFFBQ0VlLGVBQUEsQ0FBQSxLQUFBLEVBQUEsRUFBSyxTQUFTLEVBQUMseUNBQXlDLEVBQ3RELFFBQUEsRUFBQSxDQUFBRCxjQUFBLENBQUEsS0FBQSxFQUFBLEVBQUssR0FBRyxFQUFFKzRCLEtBQWdCLEVBQUUsU0FBUyxFQUFDLHNCQUFzQixFQUFHLENBQUEsRUFDL0QvNEIsY0FBSSxDQUFBLElBQUEsRUFBQSxFQUFBLFNBQVMsRUFBQyxxREFBcUQsRUFFOUQsUUFBQSxFQUFBLGFBQUEsRUFBQSxDQUFBLEVBRUxBLGVBQUMsS0FBSyxFQUFBLEVBQ0osS0FBSyxFQUFDLGFBQVEsRUFDZCxXQUFXLEVBQUMsYUFBUSxFQUNwQixJQUFJLEVBQUMsTUFBTSxFQUNYLEtBQUssRUFBRSxTQUFTLEVBQ2hCLFFBQVEsRUFBRSxZQUFZLEVBQ3RCLENBQUEsRUFDRkEsY0FBQyxDQUFBLEtBQUssRUFDSixFQUFBLEtBQUssRUFBQyxLQUFLLEVBQ1gsV0FBVyxFQUFDLEtBQUssRUFDakIsSUFBSSxFQUFDLE1BQU0sRUFDWCxLQUFLLEVBQUUsUUFBUSxFQUNmLFFBQVEsRUFBRSxXQUFXLEVBQUEsQ0FDckIsRUFDRkEsY0FBQyxDQUFBLEtBQUssRUFDSixFQUFBLEtBQUssRUFBQyxRQUFRLEVBQ2QsV0FBVyxFQUFDLFFBQVEsRUFDcEIsSUFBSSxFQUFDLE9BQU8sRUFDWixLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLENBQUEsRUFDRkEsY0FBQyxDQUFBLEtBQUssSUFDSixLQUFLLEVBQUMsY0FBYyxFQUNwQixXQUFXLEVBQUMsY0FBYyxFQUMxQixJQUFJLEVBQUMsVUFBVSxFQUNmLEtBQUssRUFBRSxRQUFRLEVBQ2YsUUFBUSxFQUFFLFdBQVcsRUFDckIsQ0FBQSxFQUNGQSxjQUNFLENBQUEsUUFBQSxFQUFBLEVBQUEsT0FBTyxFQUFFLFlBQVksRUFDckIsU0FBUyxFQUFDLG1IQUFtSCxFQUd0SCxRQUFBLEVBQUEsWUFBQSxFQUFBLENBQUEsRUFDVEEsY0FDRSxDQUFBLFFBQUEsRUFBQSxFQUFBLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFDcEMsU0FBUyxFQUFDLCtDQUErQyxFQUdsRCxRQUFBLEVBQUEsY0FBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLENBQ0w7QUFFVixDQUFDOztBQzdFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQ2xCLGNBQWMsRUFDZCxVQUFVLEdBSVgsS0FBSTtBQUNILElBQUEsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxJQUFBLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDbEQsSUFBQSxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBQzVDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsU0FBUyxFQUFFO0lBRXRDLE1BQU0sV0FBVyxHQUFHLE1BQUs7QUFDdkIsUUFBQSxNQUFNLENBQ0osRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQ25CO1lBQ0UsU0FBUyxFQUFFLE1BQUs7QUFDZCxnQkFBQSxVQUFVLEVBQUU7YUFDYjtBQUNELFlBQUEsT0FBTyxFQUFFLENBQUMsS0FBSyxLQUFJO0FBQ2pCLGdCQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUM1QixnQkFBQSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssZUFBZSxFQUFFO29CQUNyQyxRQUFRLENBQUMsZ0NBQWdDLENBQUM7O0FBQ3JDLHFCQUFBLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxxQkFBcUIsRUFBRTtvQkFDbEQsUUFBUSxDQUFDLGdDQUFnQyxDQUFDOztxQkFDckM7b0JBQ0wsUUFBUSxDQUFDLHlCQUF5QixDQUFDOzthQUV0QztBQUNGLFNBQUEsQ0FDRjtBQUNILEtBQUM7Ozs7Ozs7SUFTRCxRQUNFQyx5QkFBSyxTQUFTLEVBQUMseUNBQXlDLEVBQ3RELFFBQUEsRUFBQSxDQUFBRCxjQUFBLENBQUEsS0FBQSxFQUFBLEVBQUssR0FBRyxFQUFFKzRCLEtBQWdCLEVBQUUsU0FBUyxFQUFDLHNCQUFzQixFQUFHLENBQUEsRUFDL0QvNEIsY0FBSSxDQUFBLElBQUEsRUFBQSxFQUFBLFNBQVMsRUFBQyxxREFBcUQsRUFBQSxRQUFBLEVBQUEsV0FBQSxFQUFBLENBRTlELEVBQ0xBLGNBQUEsQ0FBQyxLQUFLLEVBQUEsRUFDSixLQUFLLEVBQUMsT0FBTyxFQUNiLFdBQVcsRUFBQyxPQUFPLEVBQ25CLElBQUksRUFBQyxPQUFPLEVBQ1osS0FBSyxFQUFFLEtBQUssRUFDWixRQUFRLEVBQUUsUUFBUSxFQUFBLENBQ2xCLEVBQ0ZBLGNBQUMsQ0FBQSxLQUFLLEVBQ0osRUFBQSxLQUFLLEVBQUMsY0FBYyxFQUNwQixXQUFXLEVBQUMsY0FBYyxFQUMxQixJQUFJLEVBQUMsVUFBVSxFQUNmLEtBQUssRUFBRSxRQUFRLEVBQ2YsUUFBUSxFQUFFLFdBQVcsRUFDckIsQ0FBQSxFQUNGQSxjQUFHLENBQUEsR0FBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLHNDQUFzQyxFQUFBLFFBQUEsRUFBRSxLQUFLLEVBQUEsQ0FBSyxFQUUvREEsY0FBQSxDQUFBLFFBQUEsRUFBQSxFQUNFLE9BQU8sRUFBRSxXQUFXLEVBQ3BCLFNBQVMsRUFBQyxtSEFBbUgsNkJBR3RILEVBQ1RBLGNBQUEsQ0FBQSxRQUFBLEVBQUEsRUFDRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQ25DLFNBQVMsRUFBQywrQ0FBK0MsRUFBQSxRQUFBLEVBQUEsWUFBQSxFQUFBLENBR2xELENBQ0wsRUFBQSxDQUFBO0FBRVYsQ0FBQzs7QUM3RU0sTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBOEIsS0FBSTtJQUN2RSxNQUFNLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxHQUFHZCxjQUFRLENBQUMsS0FBSyxDQUFDO0FBRXJELElBQUEsUUFDRWMsY0FBSyxDQUFBLEtBQUEsRUFBQSxFQUFBLFNBQVMsRUFBQyxLQUFLLEVBQUEsUUFBQSxFQUNqQixXQUFXLElBQ1ZBLGVBQUMsVUFBVSxFQUFBLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFBLENBQUksS0FFdEVBLGNBQUEsQ0FBQyxVQUFVLEVBQUMsRUFBQSxjQUFjLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUksQ0FDdkUsRUFBQSxDQUNHO0FBRVYsQ0FBQzs7QUNkTSxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQ3BCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxHQUFHLElBQUksRUFDakIsUUFBUSxHQU1ULEtBQUk7QUFDSCxJQUFBLE1BQU0sUUFBUSxHQUFHdTRCLFlBQU0sQ0FBQyxLQUFLLENBQUM7SUFFOUIsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNkLFFBQUEsT0FBTyxJQUFJOztJQUViLE1BQU0sS0FBSyxHQUFHLFVBQVUsR0FBRyxXQUFXLEdBQUcsRUFBRTtJQUMzQyxRQUNFdjRCLGNBQ0UsQ0FBQSxLQUFBLEVBQUEsRUFBQSxTQUFTLEVBQUMsT0FBTyxFQUNqQixXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUk7QUFDakIsWUFBQSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBcUI7QUFDdEMsWUFBQSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO0FBQ2pDLGdCQUFBLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSTs7QUFFM0IsU0FBQyxFQUNELFNBQVMsRUFBRSxNQUFLO1lBQ2QsVUFBVSxDQUFDLE1BQUs7QUFDZCxnQkFBQSxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUs7YUFDekIsRUFBRSxHQUFHLENBQUM7QUFDVCxTQUFDLEVBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFJO0FBQ2IsWUFBQSxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO0FBQ25FLGdCQUFBLFVBQVUsRUFBRTs7QUFFaEIsU0FBQyxFQUVELFFBQUEsRUFBQUEsY0FBQSxDQUFBLEtBQUEsRUFBQSxFQUFLLFNBQVMsRUFBRSxDQUFHLEVBQUEsS0FBSyxDQUFzQixvQkFBQSxDQUFBLEVBQUEsUUFBQSxFQUFHLFFBQVEsRUFBQSxDQUFPLEVBQzVELENBQUE7QUFFVixDQUFDOztBQ3ZDTSxNQUFNLGVBQWUsR0FBRyxDQUFDLEVBQzlCLFNBQVMsRUFDVCxVQUFVLEdBSVgsS0FBSTtJQUNILFFBQ0VBLGVBQUMsS0FBSyxFQUFBLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUNqRCxRQUFBLEVBQUFBLGNBQUEsQ0FBQyxVQUFVLEVBQUMsRUFBQSxVQUFVLEVBQUUsVUFBVSxFQUFBLENBQUksRUFDaEMsQ0FBQTtBQUVaLENBQUM7O0FDWE0sTUFBTSxlQUFlLEdBQUcsTUFBSztJQUNsQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsc0JBQXNCLENBQUMsR0FBR2QsY0FBUSxDQUFDLEtBQUssQ0FBQztJQUVyRSxRQUNFZSxlQUNFLENBQUErNEIsbUJBQUEsRUFBQSxFQUFBLFFBQUEsRUFBQSxDQUFBLzRCLGVBQUEsQ0FBQSxLQUFBLEVBQUEsRUFBSyxTQUFTLEVBQUMsd0RBQXdELEVBQ3JFLFFBQUEsRUFBQSxDQUFBRCxjQUFBLENBQUEsR0FBQSxFQUFBLEVBQUcsU0FBUyxFQUFDLDRDQUE0QyxFQUFBLFFBQUEsRUFBQSxtREFBQSxFQUFBLENBRXJELEVBQ0pBLGNBQUMsQ0FBQSxNQUFNLEVBQ0wsRUFBQSxJQUFJLEVBQUMsY0FBYyxFQUNuQixPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFDM0MsSUFBSSxFQUFDLE9BQU8sRUFBQSxDQUNaLENBQ0UsRUFBQSxDQUFBLEVBQ05BLGNBQUMsQ0FBQSxlQUFlLEVBQ2QsRUFBQSxTQUFTLEVBQUUsbUJBQW1CLEVBQzlCLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFBLENBQy9DLENBQ0QsRUFBQSxDQUFBO0FBRVAsQ0FBQzs7QUN6QkQsSUFBSSxHQUFHLEdBQUcsa3liQUFreWI7O0FDVXJ5YixNQUFNLE9BQU8sR0FBRyxNQUFLO0lBQzFCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEdBQUdkLGNBQVEsQ0FBQyxLQUFLLENBQUM7SUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUU7SUFFNUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLGtCQUFrQixFQUFFO0FBRTdELElBQUEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFFeEIsSUFBQSxJQUFJLENBQUMsTUFBTTtBQUFFLFFBQUEsT0FBTyxJQUFJO0FBRXhCLElBQUEsT0FBT3c1QixxQkFBWSxDQUNqQjE0QixjQUFBLENBQUEsS0FBQSxFQUFBLEVBQ0UsRUFBRSxFQUFDLGtCQUFrQixFQUNyQixTQUFTLEVBQUUsQ0FDVCxxR0FBQSxFQUFBLFdBQVcsR0FBRyxnQkFBZ0IsR0FBRyxTQUNuQyxDQUFBLENBQUUsRUFFRixRQUFBLEVBQUFDLGVBQUEsQ0FBQSxLQUFBLEVBQUEsRUFBSyxTQUFTLEVBQUMsMkNBQTJDLGFBQ3hEQSxlQUFLLENBQUEsS0FBQSxFQUFBLEVBQUEsU0FBUyxFQUFDLG1EQUFtRCxFQUFBLFFBQUEsRUFBQSxDQUNoRUQsd0JBQUssR0FBRyxFQUFFaTVCLEdBQWlCLEVBQUUsU0FBUyxFQUFDLE1BQU0sRUFBQSxDQUFHLEVBQ2hEajVCLGNBQUMsQ0FBQSxXQUFXLEVBQUMsRUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFDLE9BQU8sR0FBRyxDQUN2RCxFQUFBLENBQUEsRUFDTCxXQUFXLEdBQUdBLGNBQUEsQ0FBQyxjQUFjLEVBQUcsRUFBQSxDQUFBLEdBQUdBLGNBQUEsQ0FBQyxlQUFlLEVBQUEsRUFBQSxDQUFHLEVBQ3ZEQSxjQUFDLENBQUEsY0FBYyxJQUNiLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLGNBQWMsRUFBRSxjQUFjLEVBQUEsQ0FDOUIsSUFDRSxFQUNGLENBQUEsRUFDTixRQUFRLENBQUMsSUFBSSxDQUNkO0FBQ0gsQ0FBQzs7QUNoQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUU7QUFFckMsU0FBUyxZQUFZLENBQUMsS0FBd0IsRUFBQTtBQUM1QyxJQUFBLFFBQ0VBLGNBQUEsQ0FBQWc1QixtQkFBQSxFQUFBLEVBQUEsUUFBQSxFQUNFaDVCLGNBQUMsQ0FBQSxtQkFBbUIsSUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFBLFFBQUEsRUFDdENDLGVBQUMsQ0FBQSxnQkFBZ0IsRUFBSyxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsRUFBQSxLQUFLLGVBQ3pCRCxjQUFDLENBQUEsYUFBYSxFQUFHLEVBQUEsQ0FBQSxFQUNqQkEsY0FBQyxDQUFBLE9BQU8sRUFBRyxFQUFBLENBQUEsRUFDWEEsZUFBQyxrQkFBa0IsRUFBQSxFQUFBLENBQUcsRUFDdEJBLGNBQUEsQ0FBQyxZQUFZLEVBQUcsRUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQ0MsRUFDQyxDQUFBLEVBQUEsQ0FDckI7QUFFUDs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwzOV19
|
|
8723
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3N1YnNjcmliYWJsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yb2xsdXAtcGx1Z2luLW5vZGUtcG9seWZpbGxzL3BvbHlmaWxscy9nbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcm9sbHVwLXBsdWdpbi1ub2RlLXBvbHlmaWxscy9wb2x5ZmlsbHMvcHJvY2Vzcy1lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3V0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9mb2N1c01hbmFnZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL29ubGluZU1hbmFnZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3RoZW5hYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9yZXRyeWVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9ub3RpZnlNYW5hZ2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9yZW1vdmFibGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3F1ZXJ5LWNvcmUvYnVpbGQvbW9kZXJuL3F1ZXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9xdWVyeUNhY2hlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9tdXRhdGlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vbXV0YXRpb25DYWNoZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vaW5maW5pdGVRdWVyeUJlaGF2aW9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9xdWVyeS1jb3JlL2J1aWxkL21vZGVybi9xdWVyeUNsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vcXVlcnlPYnNlcnZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcXVlcnktY29yZS9idWlsZC9tb2Rlcm4vbXV0YXRpb25PYnNlcnZlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9pc1Jlc3RvcmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9idWlsZC9tb2Rlcm4vdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9lcnJvckJvdW5kYXJ5VXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5L2J1aWxkL21vZGVybi9zdXNwZW5zZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL3VzZUJhc2VRdWVyeS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdGFuc3RhY2svcmVhY3QtcXVlcnkvYnVpbGQvbW9kZXJuL3VzZVF1ZXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B0YW5zdGFjay9yZWFjdC1xdWVyeS9idWlsZC9tb2Rlcm4vdXNlTXV0YXRpb24uanMiLCIuLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50L2Jhc2UudHMiLCIuLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50L2NvbW1vbi50cyIsIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnQvYXBpLnRzIiwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudC9jb25maWd1cmF0aW9uLnRzIiwiLi4vLi4vc3JjL3NlcnZpY2VzL2FwaS50cyIsIi4uLy4uL3NyYy9zZXJ2aWNlcy9mZWVkYmFjay50cyIsIi4uLy4uL3NyYy9zZXJ2aWNlcy91c2VyLnRzIiwiLi4vLi4vc3JjL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9idXR0b25zL0J1dHRvbi50c3giLCIuLi9zcmMvYXNzZXRzL2ljb25zL2VkaXQtMDQuc3ZnIiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvYnV0dG9ucy9PcGVuRmVlZGJhY2tCdXR0b24udHN4IiwiLi4vLi4vc3JjL3V0aWxzL2dldEluaXRpYWxzLnRzIiwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2l0ZW0vRmVlZGJhY2tJdGVtSG92ZXJlZC50c3giLCIuLi9zcmMvYXNzZXRzL2ljb25zL2Nsb3NlLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2J1dHRvbnMvQ2xvc2VCdXR0b24udHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL3JlcGxpZXMvUmVwbHlJdGVtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3Mvc2hhcmVkL0ZlZWRiYWNrVGV4dEFyZWEudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9tZW51L01lbnVJdGVtLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvZG90cy1ob3Jpem9udGFsLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvbWVudS9NZW51QnV0dG9uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvaXRlbS9GZWVkYmFja0l0ZW1TZWxlY3RlZC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL3NoYXJlZC9GZWVkYmFja1Bvc2l0aW9uZXIudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9pdGVtL0ZlZWRiYWNrUGluLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvZ3JvdXAvRmVlZGJhY2tQaW5zLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2ljb25zL0NvbW1lbnRJY29uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mZWVkYmFja3MvaXRlbS9GZWVkYmFja0lucHV0LnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvY2hldnJvbi1sZWZ0LnN2ZyIsIi4uL3NyYy9hc3NldHMvaWNvbnMvY2hldnJvbi1yaWdodC5zdmciLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9idXR0b25zL0NvbGxhcHNlQnV0dG9uLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvbG9nLW91dC0wMi5zdmciLCIuLi8uLi9zcmMvc2VydmljZXMvYXV0aC50cyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9Db25uZWN0ZWRVc2VyLnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvc2VhcmNoLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL2lucHV0cy9TZWFyY2hJbnB1dC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2l0ZW0vRmVlZGJhY2tMaXN0SXRlbS50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2dyb3VwL0ZlZWRiYWNrTGlzdC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQ29ubmVjdGVkUGFuZWwudHN4IiwiLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvaW5wdXRzL0lucHV0LnRzeCIsIi4uL3NyYy9hc3NldHMvaWNvbnMvbG9nby1mZWVkYmFjay1kYXJrLnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mb3Jtcy9TaWduVXBGb3JtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9mb3Jtcy9TaWduSW5Gb3JtLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9Db25uZWN0aW9uLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL21vZGFscy9Nb2RhbC50c3giLCIuLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9tb2RhbHMvQ29ubmVjdGlvbk1vZGFsLnRzeCIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9Db25uZWN0aW9uUGFuZWwudHN4IiwiLi4vc3JjL2Fzc2V0cy9pY29ucy9sb2dvLWZlZWRiYWNrLWxpZ2h0LnN2ZyIsIi4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9TaWRlQmFyLnRzeCIsIi4uLy4uL3NyYy9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL3N1YnNjcmliYWJsZS50c1xudmFyIFN1YnNjcmliYWJsZSA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMuc3Vic2NyaWJlID0gdGhpcy5zdWJzY3JpYmUuYmluZCh0aGlzKTtcbiAgfVxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIHRoaXMub25TdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMub25VbnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH1cbiAgaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zaXplID4gMDtcbiAgfVxuICBvblN1YnNjcmliZSgpIHtcbiAgfVxuICBvblVuc3Vic2NyaWJlKCkge1xuICB9XG59O1xuZXhwb3J0IHtcbiAgU3Vic2NyaWJhYmxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NyaWJhYmxlLmpzLm1hcCIsImV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDpcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KTsiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbi8vIGJhc2VkIG9mZiBodHRwczovL2dpdGh1Yi5jb20vZGVmdW5jdHpvbWJpZS9ub2RlLXByb2Nlc3MvYmxvYi9tYXN0ZXIvYnJvd3Nlci5qc1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbnZhciBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuaWYgKHR5cGVvZiBnbG9iYWwuc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xufVxuaWYgKHR5cGVvZiBnbG9iYWwuY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xufVxuXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5mdW5jdGlvbiBuZXh0VGljayhmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufVxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnZhciB0aXRsZSA9ICdicm93c2VyJztcbnZhciBwbGF0Zm9ybSA9ICdicm93c2VyJztcbnZhciBicm93c2VyID0gdHJ1ZTtcbnZhciBlbnYgPSB7fTtcbnZhciBhcmd2ID0gW107XG52YXIgdmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xudmFyIHZlcnNpb25zID0ge307XG52YXIgcmVsZWFzZSA9IHt9O1xudmFyIGNvbmZpZyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIG9uID0gbm9vcDtcbnZhciBhZGRMaXN0ZW5lciA9IG5vb3A7XG52YXIgb25jZSA9IG5vb3A7XG52YXIgb2ZmID0gbm9vcDtcbnZhciByZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG52YXIgcmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnZhciBlbWl0ID0gbm9vcDtcblxuZnVuY3Rpb24gYmluZGluZyhuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufVxuXG5mdW5jdGlvbiBjd2QgKCkgeyByZXR1cm4gJy8nIH1cbmZ1bmN0aW9uIGNoZGlyIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufWZ1bmN0aW9uIHVtYXNrKCkgeyByZXR1cm4gMDsgfVxuXG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9rdW1hdmlzL2Jyb3dzZXItcHJvY2Vzcy1ocnRpbWUvYmxvYi9tYXN0ZXIvaW5kZXguanNcbnZhciBwZXJmb3JtYW5jZSA9IGdsb2JhbC5wZXJmb3JtYW5jZSB8fCB7fTtcbnZhciBwZXJmb3JtYW5jZU5vdyA9XG4gIHBlcmZvcm1hbmNlLm5vdyAgICAgICAgfHxcbiAgcGVyZm9ybWFuY2UubW96Tm93ICAgICB8fFxuICBwZXJmb3JtYW5jZS5tc05vdyAgICAgIHx8XG4gIHBlcmZvcm1hbmNlLm9Ob3cgICAgICAgfHxcbiAgcGVyZm9ybWFuY2Uud2Via2l0Tm93ICB8fFxuICBmdW5jdGlvbigpeyByZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSB9O1xuXG4vLyBnZW5lcmF0ZSB0aW1lc3RhbXAgb3IgZGVsdGFcbi8vIHNlZSBodHRwOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19ocnRpbWVcbmZ1bmN0aW9uIGhydGltZShwcmV2aW91c1RpbWVzdGFtcCl7XG4gIHZhciBjbG9ja3RpbWUgPSBwZXJmb3JtYW5jZU5vdy5jYWxsKHBlcmZvcm1hbmNlKSoxZS0zO1xuICB2YXIgc2Vjb25kcyA9IE1hdGguZmxvb3IoY2xvY2t0aW1lKTtcbiAgdmFyIG5hbm9zZWNvbmRzID0gTWF0aC5mbG9vcigoY2xvY2t0aW1lJTEpKjFlOSk7XG4gIGlmIChwcmV2aW91c1RpbWVzdGFtcCkge1xuICAgIHNlY29uZHMgPSBzZWNvbmRzIC0gcHJldmlvdXNUaW1lc3RhbXBbMF07XG4gICAgbmFub3NlY29uZHMgPSBuYW5vc2Vjb25kcyAtIHByZXZpb3VzVGltZXN0YW1wWzFdO1xuICAgIGlmIChuYW5vc2Vjb25kczwwKSB7XG4gICAgICBzZWNvbmRzLS07XG4gICAgICBuYW5vc2Vjb25kcyArPSAxZTk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbc2Vjb25kcyxuYW5vc2Vjb25kc11cbn1cblxudmFyIHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5mdW5jdGlvbiB1cHRpbWUoKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCk7XG4gIHZhciBkaWYgPSBjdXJyZW50VGltZSAtIHN0YXJ0VGltZTtcbiAgcmV0dXJuIGRpZiAvIDEwMDA7XG59XG5cbnZhciBicm93c2VyJDEgPSB7XG4gIG5leHRUaWNrOiBuZXh0VGljayxcbiAgdGl0bGU6IHRpdGxlLFxuICBicm93c2VyOiBicm93c2VyLFxuICBlbnY6IGVudixcbiAgYXJndjogYXJndixcbiAgdmVyc2lvbjogdmVyc2lvbixcbiAgdmVyc2lvbnM6IHZlcnNpb25zLFxuICBvbjogb24sXG4gIGFkZExpc3RlbmVyOiBhZGRMaXN0ZW5lcixcbiAgb25jZTogb25jZSxcbiAgb2ZmOiBvZmYsXG4gIHJlbW92ZUxpc3RlbmVyOiByZW1vdmVMaXN0ZW5lcixcbiAgcmVtb3ZlQWxsTGlzdGVuZXJzOiByZW1vdmVBbGxMaXN0ZW5lcnMsXG4gIGVtaXQ6IGVtaXQsXG4gIGJpbmRpbmc6IGJpbmRpbmcsXG4gIGN3ZDogY3dkLFxuICBjaGRpcjogY2hkaXIsXG4gIHVtYXNrOiB1bWFzayxcbiAgaHJ0aW1lOiBocnRpbWUsXG4gIHBsYXRmb3JtOiBwbGF0Zm9ybSxcbiAgcmVsZWFzZTogcmVsZWFzZSxcbiAgY29uZmlnOiBjb25maWcsXG4gIHVwdGltZTogdXB0aW1lXG59O1xuXG5leHBvcnQgZGVmYXVsdCBicm93c2VyJDE7XG5leHBvcnQgeyBhZGRMaXN0ZW5lciwgYXJndiwgYmluZGluZywgYnJvd3NlciwgY2hkaXIsIGNvbmZpZywgY3dkLCBlbWl0LCBlbnYsIGhydGltZSwgbmV4dFRpY2ssIG9mZiwgb24sIG9uY2UsIHBsYXRmb3JtLCByZWxlYXNlLCByZW1vdmVBbGxMaXN0ZW5lcnMsIHJlbW92ZUxpc3RlbmVyLCB0aXRsZSwgdW1hc2ssIHVwdGltZSwgdmVyc2lvbiwgdmVyc2lvbnMgfTtcbiIsIi8vIHNyYy91dGlscy50c1xudmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCBcIkRlbm9cIiBpbiBnbG9iYWxUaGlzO1xuZnVuY3Rpb24gbm9vcCgpIHtcbn1cbmZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cGRhdGVyID09PSBcImZ1bmN0aW9uXCIgPyB1cGRhdGVyKGlucHV0KSA6IHVwZGF0ZXI7XG59XG5mdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5O1xufVxuZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVTdGFsZVRpbWUoc3RhbGVUaW1lLCBxdWVyeSkge1xuICByZXR1cm4gdHlwZW9mIHN0YWxlVGltZSA9PT0gXCJmdW5jdGlvblwiID8gc3RhbGVUaW1lKHF1ZXJ5KSA6IHN0YWxlVGltZTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVFbmFibGVkKGVuYWJsZWQsIHF1ZXJ5KSB7XG4gIHJldHVybiB0eXBlb2YgZW5hYmxlZCA9PT0gXCJmdW5jdGlvblwiID8gZW5hYmxlZChxdWVyeSkgOiBlbmFibGVkO1xufVxuZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICBjb25zdCB7XG4gICAgdHlwZSA9IFwiYWxsXCIsXG4gICAgZXhhY3QsXG4gICAgZmV0Y2hTdGF0dXMsXG4gICAgcHJlZGljYXRlLFxuICAgIHF1ZXJ5S2V5LFxuICAgIHN0YWxlXG4gIH0gPSBmaWx0ZXJzO1xuICBpZiAocXVlcnlLZXkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlICE9PSBcImFsbFwiKSB7XG4gICAgY29uc3QgaXNBY3RpdmUgPSBxdWVyeS5pc0FjdGl2ZSgpO1xuICAgIGlmICh0eXBlID09PSBcImFjdGl2ZVwiICYmICFpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gXCJpbmFjdGl2ZVwiICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2Ygc3RhbGUgPT09IFwiYm9vbGVhblwiICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZldGNoU3RhdHVzICYmIGZldGNoU3RhdHVzICE9PSBxdWVyeS5zdGF0ZS5mZXRjaFN0YXR1cykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbikge1xuICBjb25zdCB7IGV4YWN0LCBzdGF0dXMsIHByZWRpY2F0ZSwgbXV0YXRpb25LZXkgfSA9IGZpbHRlcnM7XG4gIGlmIChtdXRhdGlvbktleSkge1xuICAgIGlmICghbXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpICE9PSBoYXNoS2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXksIG11dGF0aW9uS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhdHVzICYmIG11dGF0aW9uLnN0YXRlLnN0YXR1cyAhPT0gc3RhdHVzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShtdXRhdGlvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgY29uc3QgaGFzaEZuID0gb3B0aW9ucz8ucXVlcnlLZXlIYXNoRm4gfHwgaGFzaEtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG5mdW5jdGlvbiBoYXNoS2V5KHF1ZXJ5S2V5KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBxdWVyeUtleSxcbiAgICAoXywgdmFsKSA9PiBpc1BsYWluT2JqZWN0KHZhbCkgPyBPYmplY3Qua2V5cyh2YWwpLnNvcnQoKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbFtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkgOiB2YWxcbiAgKTtcbn1cbmZ1bmN0aW9uIHBhcnRpYWxNYXRjaEtleShhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBiID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKChrZXkpID0+ICFwYXJ0aWFsTWF0Y2hLZXkoYVtrZXldLCBiW2tleV0pKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiByZXBsYWNlRXF1YWxEZWVwKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuICBjb25zdCBhcnJheSA9IGlzUGxhaW5BcnJheShhKSAmJiBpc1BsYWluQXJyYXkoYik7XG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICBjb25zdCBhSXRlbXMgPSBhcnJheSA/IGEgOiBPYmplY3Qua2V5cyhhKTtcbiAgICBjb25zdCBhU2l6ZSA9IGFJdGVtcy5sZW5ndGg7XG4gICAgY29uc3QgYkl0ZW1zID0gYXJyYXkgPyBiIDogT2JqZWN0LmtleXMoYik7XG4gICAgY29uc3QgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGNvcHkgPSBhcnJheSA/IFtdIDoge307XG4gICAgbGV0IGVxdWFsSXRlbXMgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldO1xuICAgICAgaWYgKCghYXJyYXkgJiYgYUl0ZW1zLmluY2x1ZGVzKGtleSkgfHwgYXJyYXkpICYmIGFba2V5XSA9PT0gdm9pZCAwICYmIGJba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNvcHlba2V5XSA9IHZvaWQgMDtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weVtrZXldID0gcmVwbGFjZUVxdWFsRGVlcChhW2tleV0sIGJba2V5XSk7XG4gICAgICAgIGlmIChjb3B5W2tleV0gPT09IGFba2V5XSAmJiBhW2tleV0gIT09IHZvaWQgMCkge1xuICAgICAgICAgIGVxdWFsSXRlbXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYVNpemUgPT09IGJTaXplICYmIGVxdWFsSXRlbXMgPT09IGFTaXplID8gYSA6IGNvcHk7XG4gIH1cbiAgcmV0dXJuIGI7XG59XG5mdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKCFiIHx8IE9iamVjdC5rZXlzKGEpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IGluIGEpIHtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBpc1BsYWluQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBjdG9yID0gby5jb25zdHJ1Y3RvcjtcbiAgaWYgKGN0b3IgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHByb3QgPSBjdG9yLnByb3RvdHlwZTtcbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUocHJvdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KFwiaXNQcm90b3R5cGVPZlwiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbn1cbmZ1bmN0aW9uIHNsZWVwKHRpbWVvdXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KTtcbiAgfSk7XG59XG5mdW5jdGlvbiByZXBsYWNlRGF0YShwcmV2RGF0YSwgZGF0YSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nKHByZXZEYXRhLCBkYXRhKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlRXF1YWxEZWVwKHByZXZEYXRhLCBkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFN0cnVjdHVyYWwgc2hhcmluZyByZXF1aXJlcyBkYXRhIHRvIGJlIEpTT04gc2VyaWFsaXphYmxlLiBUbyBmaXggdGhpcywgdHVybiBvZmYgc3RydWN0dXJhbFNoYXJpbmcgb3IgcmV0dXJuIEpTT04tc2VyaWFsaXphYmxlIGRhdGEgZnJvbSB5b3VyIHF1ZXJ5Rm4uIFske29wdGlvbnMucXVlcnlIYXNofV06ICR7ZXJyb3J9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBrZWVwUHJldmlvdXNEYXRhKHByZXZpb3VzRGF0YSkge1xuICByZXR1cm4gcHJldmlvdXNEYXRhO1xufVxuZnVuY3Rpb24gYWRkVG9FbmQoaXRlbXMsIGl0ZW0sIG1heCA9IDApIHtcbiAgY29uc3QgbmV3SXRlbXMgPSBbLi4uaXRlbXMsIGl0ZW1dO1xuICByZXR1cm4gbWF4ICYmIG5ld0l0ZW1zLmxlbmd0aCA+IG1heCA/IG5ld0l0ZW1zLnNsaWNlKDEpIDogbmV3SXRlbXM7XG59XG5mdW5jdGlvbiBhZGRUb1N0YXJ0KGl0ZW1zLCBpdGVtLCBtYXggPSAwKSB7XG4gIGNvbnN0IG5ld0l0ZW1zID0gW2l0ZW0sIC4uLml0ZW1zXTtcbiAgcmV0dXJuIG1heCAmJiBuZXdJdGVtcy5sZW5ndGggPiBtYXggPyBuZXdJdGVtcy5zbGljZSgwLCAtMSkgOiBuZXdJdGVtcztcbn1cbnZhciBza2lwVG9rZW4gPSBTeW1ib2woKTtcbmZ1bmN0aW9uIGVuc3VyZVF1ZXJ5Rm4ob3B0aW9ucywgZmV0Y2hPcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAob3B0aW9ucy5xdWVyeUZuID09PSBza2lwVG9rZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBBdHRlbXB0ZWQgdG8gaW52b2tlIHF1ZXJ5Rm4gd2hlbiBzZXQgdG8gc2tpcFRva2VuLiBUaGlzIGlzIGxpa2VseSBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuIFF1ZXJ5IGhhc2g6ICcke29wdGlvbnMucXVlcnlIYXNofSdgXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoIW9wdGlvbnMucXVlcnlGbiAmJiBmZXRjaE9wdGlvbnM/LmluaXRpYWxQcm9taXNlKSB7XG4gICAgcmV0dXJuICgpID0+IGZldGNoT3B0aW9ucy5pbml0aWFsUHJvbWlzZTtcbiAgfVxuICBpZiAoIW9wdGlvbnMucXVlcnlGbiB8fCBvcHRpb25zLnF1ZXJ5Rm4gPT09IHNraXBUb2tlbikge1xuICAgIHJldHVybiAoKSA9PiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYE1pc3NpbmcgcXVlcnlGbjogJyR7b3B0aW9ucy5xdWVyeUhhc2h9J2ApKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5xdWVyeUZuO1xufVxuZXhwb3J0IHtcbiAgYWRkVG9FbmQsXG4gIGFkZFRvU3RhcnQsXG4gIGVuc3VyZVF1ZXJ5Rm4sXG4gIGZ1bmN0aW9uYWxVcGRhdGUsXG4gIGhhc2hLZXksXG4gIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyxcbiAgaXNQbGFpbkFycmF5LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1NlcnZlcixcbiAgaXNWYWxpZFRpbWVvdXQsXG4gIGtlZXBQcmV2aW91c0RhdGEsXG4gIG1hdGNoTXV0YXRpb24sXG4gIG1hdGNoUXVlcnksXG4gIG5vb3AsXG4gIHBhcnRpYWxNYXRjaEtleSxcbiAgcmVwbGFjZURhdGEsXG4gIHJlcGxhY2VFcXVhbERlZXAsXG4gIHJlc29sdmVFbmFibGVkLFxuICByZXNvbHZlU3RhbGVUaW1lLFxuICBzaGFsbG93RXF1YWxPYmplY3RzLFxuICBza2lwVG9rZW4sXG4gIHNsZWVwLFxuICB0aW1lVW50aWxTdGFsZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcCIsIi8vIHNyYy9mb2N1c01hbmFnZXIudHNcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gXCIuL3N1YnNjcmliYWJsZS5qc1wiO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIEZvY3VzTWFuYWdlciA9IGNsYXNzIGV4dGVuZHMgU3Vic2NyaWJhYmxlIHtcbiAgI2ZvY3VzZWQ7XG4gICNjbGVhbnVwO1xuICAjc2V0dXA7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy4jc2V0dXAgPSAob25Gb2N1cykgPT4ge1xuICAgICAgaWYgKCFpc1NlcnZlciAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9ICgpID0+IG9uRm9jdXMoKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9O1xuICB9XG4gIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy4jY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuI3NldHVwKTtcbiAgICB9XG4gIH1cbiAgb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuI2NsZWFudXA/LigpO1xuICAgICAgdGhpcy4jY2xlYW51cCA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHRoaXMuI3NldHVwID0gc2V0dXA7XG4gICAgdGhpcy4jY2xlYW51cD8uKCk7XG4gICAgdGhpcy4jY2xlYW51cCA9IHNldHVwKChmb2N1c2VkKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGZvY3VzZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLiNmb2N1c2VkICE9PSBmb2N1c2VkO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNmb2N1c2VkID0gZm9jdXNlZDtcbiAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgIH1cbiAgfVxuICBvbkZvY3VzKCkge1xuICAgIGNvbnN0IGlzRm9jdXNlZCA9IHRoaXMuaXNGb2N1c2VkKCk7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgIGxpc3RlbmVyKGlzRm9jdXNlZCk7XG4gICAgfSk7XG4gIH1cbiAgaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy4jZm9jdXNlZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLiNmb2N1c2VkO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5kb2N1bWVudD8udmlzaWJpbGl0eVN0YXRlICE9PSBcImhpZGRlblwiO1xuICB9XG59O1xudmFyIGZvY3VzTWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTtcbmV4cG9ydCB7XG4gIEZvY3VzTWFuYWdlcixcbiAgZm9jdXNNYW5hZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9jdXNNYW5hZ2VyLmpzLm1hcCIsIi8vIHNyYy9vbmxpbmVNYW5hZ2VyLnRzXG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBPbmxpbmVNYW5hZ2VyID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICAjb25saW5lID0gdHJ1ZTtcbiAgI2NsZWFudXA7XG4gICNzZXR1cDtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNzZXR1cCA9IChvbk9ubGluZSkgPT4ge1xuICAgICAgaWYgKCFpc1NlcnZlciAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICBjb25zdCBvbmxpbmVMaXN0ZW5lciA9ICgpID0+IG9uT25saW5lKHRydWUpO1xuICAgICAgICBjb25zdCBvZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiBvbk9ubGluZShmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIG9ubGluZUxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCBvZmZsaW5lTGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCBvbmxpbmVMaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIG9mZmxpbmVMaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfTtcbiAgfVxuICBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuI2NsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLiNzZXR1cCk7XG4gICAgfVxuICB9XG4gIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB0aGlzLiNjbGVhbnVwPy4oKTtcbiAgICAgIHRoaXMuI2NsZWFudXAgPSB2b2lkIDA7XG4gICAgfVxuICB9XG4gIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB0aGlzLiNzZXR1cCA9IHNldHVwO1xuICAgIHRoaXMuI2NsZWFudXA/LigpO1xuICAgIHRoaXMuI2NsZWFudXAgPSBzZXR1cCh0aGlzLnNldE9ubGluZS5iaW5kKHRoaXMpKTtcbiAgfVxuICBzZXRPbmxpbmUob25saW5lKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuI29ubGluZSAhPT0gb25saW5lO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLiNvbmxpbmUgPSBvbmxpbmU7XG4gICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICBsaXN0ZW5lcihvbmxpbmUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlzT25saW5lKCkge1xuICAgIHJldHVybiB0aGlzLiNvbmxpbmU7XG4gIH1cbn07XG52YXIgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKCk7XG5leHBvcnQge1xuICBPbmxpbmVNYW5hZ2VyLFxuICBvbmxpbmVNYW5hZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b25saW5lTWFuYWdlci5qcy5tYXAiLCIvLyBzcmMvdGhlbmFibGUudHNcbmZ1bmN0aW9uIHBlbmRpbmdUaGVuYWJsZSgpIHtcbiAgbGV0IHJlc29sdmU7XG4gIGxldCByZWplY3Q7XG4gIGNvbnN0IHRoZW5hYmxlID0gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgIHJlamVjdCA9IF9yZWplY3Q7XG4gIH0pO1xuICB0aGVuYWJsZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcbiAgdGhlbmFibGUuY2F0Y2goKCkgPT4ge1xuICB9KTtcbiAgZnVuY3Rpb24gZmluYWxpemUoZGF0YSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhlbmFibGUsIGRhdGEpO1xuICAgIGRlbGV0ZSB0aGVuYWJsZS5yZXNvbHZlO1xuICAgIGRlbGV0ZSB0aGVuYWJsZS5yZWplY3Q7XG4gIH1cbiAgdGhlbmFibGUucmVzb2x2ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGZpbmFsaXplKHtcbiAgICAgIHN0YXR1czogXCJmdWxmaWxsZWRcIixcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH07XG4gIHRoZW5hYmxlLnJlamVjdCA9IChyZWFzb24pID0+IHtcbiAgICBmaW5hbGl6ZSh7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIHJlYXNvblxuICAgIH0pO1xuICAgIHJlamVjdChyZWFzb24pO1xuICB9O1xuICByZXR1cm4gdGhlbmFibGU7XG59XG5leHBvcnQge1xuICBwZW5kaW5nVGhlbmFibGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aGVuYWJsZS5qcy5tYXAiLCIvLyBzcmMvcmV0cnllci50c1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSBcIi4vZm9jdXNNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSBcIi4vb25saW5lTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgcGVuZGluZ1RoZW5hYmxlIH0gZnJvbSBcIi4vdGhlbmFibGUuanNcIjtcbmltcG9ydCB7IGlzU2VydmVyLCBzbGVlcCB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5mdW5jdGlvbiBkZWZhdWx0UmV0cnlEZWxheShmYWlsdXJlQ291bnQpIHtcbiAgcmV0dXJuIE1hdGgubWluKDFlMyAqIDIgKiogZmFpbHVyZUNvdW50LCAzZTQpO1xufVxuZnVuY3Rpb24gY2FuRmV0Y2gobmV0d29ya01vZGUpIHtcbiAgcmV0dXJuIChuZXR3b3JrTW9kZSA/PyBcIm9ubGluZVwiKSA9PT0gXCJvbmxpbmVcIiA/IG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSA6IHRydWU7XG59XG52YXIgQ2FuY2VsbGVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKFwiQ2FuY2VsbGVkRXJyb3JcIik7XG4gICAgdGhpcy5yZXZlcnQgPSBvcHRpb25zPy5yZXZlcnQ7XG4gICAgdGhpcy5zaWxlbnQgPSBvcHRpb25zPy5zaWxlbnQ7XG4gIH1cbn07XG5mdW5jdGlvbiBpc0NhbmNlbGxlZEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIENhbmNlbGxlZEVycm9yO1xufVxuZnVuY3Rpb24gY3JlYXRlUmV0cnllcihjb25maWcpIHtcbiAgbGV0IGlzUmV0cnlDYW5jZWxsZWQgPSBmYWxzZTtcbiAgbGV0IGZhaWx1cmVDb3VudCA9IDA7XG4gIGxldCBpc1Jlc29sdmVkID0gZmFsc2U7XG4gIGxldCBjb250aW51ZUZuO1xuICBjb25zdCB0aGVuYWJsZSA9IHBlbmRpbmdUaGVuYWJsZSgpO1xuICBjb25zdCBjYW5jZWwgPSAoY2FuY2VsT3B0aW9ucykgPT4ge1xuICAgIGlmICghaXNSZXNvbHZlZCkge1xuICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSk7XG4gICAgICBjb25maWcuYWJvcnQ/LigpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY2FuY2VsUmV0cnkgPSAoKSA9PiB7XG4gICAgaXNSZXRyeUNhbmNlbGxlZCA9IHRydWU7XG4gIH07XG4gIGNvbnN0IGNvbnRpbnVlUmV0cnkgPSAoKSA9PiB7XG4gICAgaXNSZXRyeUNhbmNlbGxlZCA9IGZhbHNlO1xuICB9O1xuICBjb25zdCBjYW5Db250aW51ZSA9ICgpID0+IGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiAoY29uZmlnLm5ldHdvcmtNb2RlID09PSBcImFsd2F5c1wiIHx8IG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkgJiYgY29uZmlnLmNhblJ1bigpO1xuICBjb25zdCBjYW5TdGFydCA9ICgpID0+IGNhbkZldGNoKGNvbmZpZy5uZXR3b3JrTW9kZSkgJiYgY29uZmlnLmNhblJ1bigpO1xuICBjb25zdCByZXNvbHZlID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3M/Lih2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuPy4oKTtcbiAgICAgIHRoZW5hYmxlLnJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVqZWN0ID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICBpc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vbkVycm9yPy4odmFsdWUpO1xuICAgICAgY29udGludWVGbj8uKCk7XG4gICAgICB0aGVuYWJsZS5yZWplY3QodmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcGF1c2UgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChjb250aW51ZVJlc29sdmUpID0+IHtcbiAgICAgIGNvbnRpbnVlRm4gPSAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGlzUmVzb2x2ZWQgfHwgY2FuQ29udGludWUoKSkge1xuICAgICAgICAgIGNvbnRpbnVlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25maWcub25QYXVzZT8uKCk7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBjb250aW51ZUZuID0gdm9pZCAwO1xuICAgICAgaWYgKCFpc1Jlc29sdmVkKSB7XG4gICAgICAgIGNvbmZpZy5vbkNvbnRpbnVlPy4oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgIGlmIChpc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBwcm9taXNlT3JWYWx1ZTtcbiAgICBjb25zdCBpbml0aWFsUHJvbWlzZSA9IGZhaWx1cmVDb3VudCA9PT0gMCA/IGNvbmZpZy5pbml0aWFsUHJvbWlzZSA6IHZvaWQgMDtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBpbml0aWFsUHJvbWlzZSA/PyBjb25maWcuZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGlmIChpc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldHJ5ID0gY29uZmlnLnJldHJ5ID8/IChpc1NlcnZlciA/IDAgOiAzKTtcbiAgICAgIGNvbnN0IHJldHJ5RGVsYXkgPSBjb25maWcucmV0cnlEZWxheSA/PyBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIGNvbnN0IGRlbGF5ID0gdHlwZW9mIHJldHJ5RGVsYXkgPT09IFwiZnVuY3Rpb25cIiA/IHJldHJ5RGVsYXkoZmFpbHVyZUNvdW50LCBlcnJvcikgOiByZXRyeURlbGF5O1xuICAgICAgY29uc3Qgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09IFwibnVtYmVyXCIgJiYgZmFpbHVyZUNvdW50IDwgcmV0cnkgfHwgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCIgJiYgcmV0cnkoZmFpbHVyZUNvdW50LCBlcnJvcik7XG4gICAgICBpZiAoaXNSZXRyeUNhbmNlbGxlZCB8fCAhc2hvdWxkUmV0cnkpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZmFpbHVyZUNvdW50Kys7XG4gICAgICBjb25maWcub25GYWlsPy4oZmFpbHVyZUNvdW50LCBlcnJvcik7XG4gICAgICBzbGVlcChkZWxheSkudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBjYW5Db250aW51ZSgpID8gdm9pZCAwIDogcGF1c2UoKTtcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoaXNSZXRyeUNhbmNlbGxlZCkge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIHByb21pc2U6IHRoZW5hYmxlLFxuICAgIGNhbmNlbCxcbiAgICBjb250aW51ZTogKCkgPT4ge1xuICAgICAgY29udGludWVGbj8uKCk7XG4gICAgICByZXR1cm4gdGhlbmFibGU7XG4gICAgfSxcbiAgICBjYW5jZWxSZXRyeSxcbiAgICBjb250aW51ZVJldHJ5LFxuICAgIGNhblN0YXJ0LFxuICAgIHN0YXJ0OiAoKSA9PiB7XG4gICAgICBpZiAoY2FuU3RhcnQoKSkge1xuICAgICAgICBydW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdXNlKCkudGhlbihydW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgfTtcbn1cbmV4cG9ydCB7XG4gIENhbmNlbGxlZEVycm9yLFxuICBjYW5GZXRjaCxcbiAgY3JlYXRlUmV0cnllcixcbiAgaXNDYW5jZWxsZWRFcnJvclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5ZXIuanMubWFwIiwiLy8gc3JjL25vdGlmeU1hbmFnZXIudHNcbmZ1bmN0aW9uIGNyZWF0ZU5vdGlmeU1hbmFnZXIoKSB7XG4gIGxldCBxdWV1ZSA9IFtdO1xuICBsZXQgdHJhbnNhY3Rpb25zID0gMDtcbiAgbGV0IG5vdGlmeUZuID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgY2FsbGJhY2soKTtcbiAgfTtcbiAgbGV0IGJhdGNoTm90aWZ5Rm4gPSAoY2FsbGJhY2spID0+IHtcbiAgICBjYWxsYmFjaygpO1xuICB9O1xuICBsZXQgc2NoZWR1bGVGbiA9IChjYikgPT4gc2V0VGltZW91dChjYiwgMCk7XG4gIGNvbnN0IHNjaGVkdWxlID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgaWYgKHRyYW5zYWN0aW9ucykge1xuICAgICAgcXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlRm4oKCkgPT4ge1xuICAgICAgICBub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUXVldWUgPSBxdWV1ZTtcbiAgICBxdWV1ZSA9IFtdO1xuICAgIGlmIChvcmlnaW5hbFF1ZXVlLmxlbmd0aCkge1xuICAgICAgc2NoZWR1bGVGbigoKSA9PiB7XG4gICAgICAgIGJhdGNoTm90aWZ5Rm4oKCkgPT4ge1xuICAgICAgICAgIG9yaWdpbmFsUXVldWUuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIG5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYmF0Y2g6IChjYWxsYmFjaykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHRyYW5zYWN0aW9ucysrO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyYW5zYWN0aW9ucy0tO1xuICAgICAgICBpZiAoIXRyYW5zYWN0aW9ucykge1xuICAgICAgICAgIGZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBBbGwgY2FsbHMgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2lsbCBiZSBiYXRjaGVkLlxuICAgICAqL1xuICAgIGJhdGNoQ2FsbHM6IChjYWxsYmFjaykgPT4ge1xuICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHNjaGVkdWxlKCgpID0+IHtcbiAgICAgICAgICBjYWxsYmFjayguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgc2NoZWR1bGUsXG4gICAgLyoqXG4gICAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB3cmFwIG5vdGlmaWNhdGlvbnMgd2l0aCBgUmVhY3QuYWN0YCB3aGlsZSBydW5uaW5nIHRlc3RzLlxuICAgICAqL1xuICAgIHNldE5vdGlmeUZ1bmN0aW9uOiAoZm4pID0+IHtcbiAgICAgIG5vdGlmeUZuID0gZm47XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGJhdGNoIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0aWNrLlxuICAgICAqIEJ5IGRlZmF1bHQgUmVhY3QgUXVlcnkgd2lsbCB1c2UgdGhlIGJhdGNoIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IFJlYWN0RE9NIG9yIFJlYWN0IE5hdGl2ZS5cbiAgICAgKi9cbiAgICBzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uOiAoZm4pID0+IHtcbiAgICAgIGJhdGNoTm90aWZ5Rm4gPSBmbjtcbiAgICB9LFxuICAgIHNldFNjaGVkdWxlcjogKGZuKSA9PiB7XG4gICAgICBzY2hlZHVsZUZuID0gZm47XG4gICAgfVxuICB9O1xufVxudmFyIG5vdGlmeU1hbmFnZXIgPSBjcmVhdGVOb3RpZnlNYW5hZ2VyKCk7XG5leHBvcnQge1xuICBjcmVhdGVOb3RpZnlNYW5hZ2VyLFxuICBub3RpZnlNYW5hZ2VyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90aWZ5TWFuYWdlci5qcy5tYXAiLCIvLyBzcmMvcmVtb3ZhYmxlLnRzXG5pbXBvcnQgeyBpc1NlcnZlciwgaXNWYWxpZFRpbWVvdXQgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIFJlbW92YWJsZSA9IGNsYXNzIHtcbiAgI2djVGltZW91dDtcbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gIH1cbiAgc2NoZWR1bGVHYygpIHtcbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgaWYgKGlzVmFsaWRUaW1lb3V0KHRoaXMuZ2NUaW1lKSkge1xuICAgICAgdGhpcy4jZ2NUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uYWxSZW1vdmUoKTtcbiAgICAgIH0sIHRoaXMuZ2NUaW1lKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlR2NUaW1lKG5ld0djVGltZSkge1xuICAgIHRoaXMuZ2NUaW1lID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmdjVGltZSB8fCAwLFxuICAgICAgbmV3R2NUaW1lID8/IChpc1NlcnZlciA/IEluZmluaXR5IDogNSAqIDYwICogMWUzKVxuICAgICk7XG4gIH1cbiAgY2xlYXJHY1RpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuI2djVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2djVGltZW91dCk7XG4gICAgICB0aGlzLiNnY1RpbWVvdXQgPSB2b2lkIDA7XG4gICAgfVxuICB9XG59O1xuZXhwb3J0IHtcbiAgUmVtb3ZhYmxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVtb3ZhYmxlLmpzLm1hcCIsIi8vIHNyYy9xdWVyeS50c1xuaW1wb3J0IHtcbiAgZW5zdXJlUXVlcnlGbixcbiAgbm9vcCxcbiAgcmVwbGFjZURhdGEsXG4gIHJlc29sdmVFbmFibGVkLFxuICBza2lwVG9rZW4sXG4gIHRpbWVVbnRpbFN0YWxlXG59IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSBcIi4vbm90aWZ5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgY2FuRmV0Y2gsIGNyZWF0ZVJldHJ5ZXIsIGlzQ2FuY2VsbGVkRXJyb3IgfSBmcm9tIFwiLi9yZXRyeWVyLmpzXCI7XG5pbXBvcnQgeyBSZW1vdmFibGUgfSBmcm9tIFwiLi9yZW1vdmFibGUuanNcIjtcbnZhciBRdWVyeSA9IGNsYXNzIGV4dGVuZHMgUmVtb3ZhYmxlIHtcbiAgI2luaXRpYWxTdGF0ZTtcbiAgI3JldmVydFN0YXRlO1xuICAjY2FjaGU7XG4gICNyZXRyeWVyO1xuICAjZGVmYXVsdE9wdGlvbnM7XG4gICNhYm9ydFNpZ25hbENvbnN1bWVkO1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuI2Fib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICB0aGlzLiNkZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy4jY2FjaGUgPSBjb25maWcuY2FjaGU7XG4gICAgdGhpcy5xdWVyeUtleSA9IGNvbmZpZy5xdWVyeUtleTtcbiAgICB0aGlzLnF1ZXJ5SGFzaCA9IGNvbmZpZy5xdWVyeUhhc2g7XG4gICAgdGhpcy4jaW5pdGlhbFN0YXRlID0gZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSA/PyB0aGlzLiNpbml0aWFsU3RhdGU7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gIH1cbiAgZ2V0IG1ldGEoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tZXRhO1xuICB9XG4gIGdldCBwcm9taXNlKCkge1xuICAgIHJldHVybiB0aGlzLiNyZXRyeWVyPy5wcm9taXNlO1xuICB9XG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy4jZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICB0aGlzLnVwZGF0ZUdjVGltZSh0aGlzLm9wdGlvbnMuZ2NUaW1lKTtcbiAgfVxuICBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCAmJiB0aGlzLnN0YXRlLmZldGNoU3RhdHVzID09PSBcImlkbGVcIikge1xuICAgICAgdGhpcy4jY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgIH1cbiAgfVxuICBzZXREYXRhKG5ld0RhdGEsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYXRhID0gcmVwbGFjZURhdGEodGhpcy5zdGF0ZS5kYXRhLCBuZXdEYXRhLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuI2Rpc3BhdGNoKHtcbiAgICAgIGRhdGEsXG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnM/LnVwZGF0ZWRBdCxcbiAgICAgIG1hbnVhbDogb3B0aW9ucz8ubWFudWFsXG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgc2V0U3RhdGUoc3RhdGUsIHNldFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJzZXRTdGF0ZVwiLCBzdGF0ZSwgc2V0U3RhdGVPcHRpb25zIH0pO1xuICB9XG4gIGNhbmNlbChvcHRpb25zKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuI3JldHJ5ZXI/LnByb21pc2U7XG4gICAgdGhpcy4jcmV0cnllcj8uY2FuY2VsKG9wdGlvbnMpO1xuICAgIHJldHVybiBwcm9taXNlID8gcHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgdGhpcy5jYW5jZWwoeyBzaWxlbnQ6IHRydWUgfSk7XG4gIH1cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLiNpbml0aWFsU3RhdGUpO1xuICB9XG4gIGlzQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKFxuICAgICAgKG9ic2VydmVyKSA9PiByZXNvbHZlRW5hYmxlZChvYnNlcnZlci5vcHRpb25zLmVuYWJsZWQsIHRoaXMpICE9PSBmYWxzZVxuICAgICk7XG4gIH1cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBpZiAodGhpcy5nZXRPYnNlcnZlcnNDb3VudCgpID4gMCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQWN0aXZlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucXVlcnlGbiA9PT0gc2tpcFRva2VuIHx8IHRoaXMuc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgdGhpcy5zdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID09PSAwO1xuICB9XG4gIGlzU3RhbGUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldE9ic2VydmVyc0NvdW50KCkgPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShcbiAgICAgICAgKG9ic2VydmVyKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZGF0YSA9PT0gdm9pZCAwO1xuICB9XG4gIGlzU3RhbGVCeVRpbWUoc3RhbGVUaW1lID0gMCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgdGhpcy5zdGF0ZS5kYXRhID09PSB2b2lkIDAgfHwgIXRpbWVVbnRpbFN0YWxlKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgfVxuICBvbkZvY3VzKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZCgoeCkgPT4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKSk7XG4gICAgb2JzZXJ2ZXI/LnJlZmV0Y2goeyBjYW5jZWxSZWZldGNoOiBmYWxzZSB9KTtcbiAgICB0aGlzLiNyZXRyeWVyPy5jb250aW51ZSgpO1xuICB9XG4gIG9uT25saW5lKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZCgoeCkgPT4geC5zaG91bGRGZXRjaE9uUmVjb25uZWN0KCkpO1xuICAgIG9ic2VydmVyPy5yZWZldGNoKHsgY2FuY2VsUmVmZXRjaDogZmFsc2UgfSk7XG4gICAgdGhpcy4jcmV0cnllcj8uY29udGludWUoKTtcbiAgfVxuICBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICghdGhpcy5vYnNlcnZlcnMuaW5jbHVkZXMob2JzZXJ2ZXIpKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICAgIHRoaXMuI2NhY2hlLm5vdGlmeSh7IHR5cGU6IFwib2JzZXJ2ZXJBZGRlZFwiLCBxdWVyeTogdGhpcywgb2JzZXJ2ZXIgfSk7XG4gICAgfVxuICB9XG4gIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluY2x1ZGVzKG9ic2VydmVyKSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoKHgpID0+IHggIT09IG9ic2VydmVyKTtcbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZXRyeWVyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuI2Fib3J0U2lnbmFsQ29uc3VtZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI3JldHJ5ZXIuY2FuY2VsKHsgcmV2ZXJ0OiB0cnVlIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNyZXRyeWVyLmNhbmNlbFJldHJ5KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgfVxuICAgICAgdGhpcy4jY2FjaGUubm90aWZ5KHsgdHlwZTogXCJvYnNlcnZlclJlbW92ZWRcIiwgcXVlcnk6IHRoaXMsIG9ic2VydmVyIH0pO1xuICAgIH1cbiAgfVxuICBnZXRPYnNlcnZlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuICB9XG4gIGludmFsaWRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJpbnZhbGlkYXRlXCIgfSk7XG4gICAgfVxuICB9XG4gIGZldGNoKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICAgIGlmICh0aGlzLnN0YXRlLmZldGNoU3RhdHVzICE9PSBcImlkbGVcIikge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YSAhPT0gdm9pZCAwICYmIGZldGNoT3B0aW9ucz8uY2FuY2VsUmVmZXRjaCkge1xuICAgICAgICB0aGlzLmNhbmNlbCh7IHNpbGVudDogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jcmV0cnllcikge1xuICAgICAgICB0aGlzLiNyZXRyeWVyLmNvbnRpbnVlUmV0cnkoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3JldHJ5ZXIucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKCh4KSA9PiB4Lm9wdGlvbnMucXVlcnlGbik7XG4gICAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKG9ic2VydmVyLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLnF1ZXJ5S2V5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBBcyBvZiB2NCwgcXVlcnlLZXkgbmVlZHMgdG8gYmUgYW4gQXJyYXkuIElmIHlvdSBhcmUgdXNpbmcgYSBzdHJpbmcgbGlrZSAncmVwb0RhdGEnLCBwbGVhc2UgY2hhbmdlIGl0IHRvIGFuIEFycmF5LCBlLmcuIFsncmVwb0RhdGEnXWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IGFkZFNpZ25hbFByb3BlcnR5ID0gKG9iamVjdCkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgXCJzaWduYWxcIiwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLiNhYm9ydFNpZ25hbENvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmZXRjaEZuID0gKCkgPT4ge1xuICAgICAgY29uc3QgcXVlcnlGbiA9IGVuc3VyZVF1ZXJ5Rm4odGhpcy5vcHRpb25zLCBmZXRjaE9wdGlvbnMpO1xuICAgICAgY29uc3QgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICAgIHF1ZXJ5S2V5OiB0aGlzLnF1ZXJ5S2V5LFxuICAgICAgICBtZXRhOiB0aGlzLm1ldGFcbiAgICAgIH07XG4gICAgICBhZGRTaWduYWxQcm9wZXJ0eShxdWVyeUZuQ29udGV4dCk7XG4gICAgICB0aGlzLiNhYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBlcnNpc3Rlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBlcnNpc3RlcihcbiAgICAgICAgICBxdWVyeUZuLFxuICAgICAgICAgIHF1ZXJ5Rm5Db250ZXh0LFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBmZXRjaE9wdGlvbnMsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBxdWVyeUtleTogdGhpcy5xdWVyeUtleSxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgZmV0Y2hGblxuICAgIH07XG4gICAgYWRkU2lnbmFsUHJvcGVydHkoY29udGV4dCk7XG4gICAgdGhpcy5vcHRpb25zLmJlaGF2aW9yPy5vbkZldGNoKFxuICAgICAgY29udGV4dCxcbiAgICAgIHRoaXNcbiAgICApO1xuICAgIHRoaXMuI3JldmVydFN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICBpZiAodGhpcy5zdGF0ZS5mZXRjaFN0YXR1cyA9PT0gXCJpZGxlXCIgfHwgdGhpcy5zdGF0ZS5mZXRjaE1ldGEgIT09IGNvbnRleHQuZmV0Y2hPcHRpb25zPy5tZXRhKSB7XG4gICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiZmV0Y2hcIiwgbWV0YTogY29udGV4dC5mZXRjaE9wdGlvbnM/Lm1ldGEgfSk7XG4gICAgfVxuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGlmICghKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnNpbGVudCkpIHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNDYW5jZWxsZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy4jY2FjaGUuY29uZmlnLm9uRXJyb3I/LihcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuI2NhY2hlLmNvbmZpZy5vblNldHRsZWQ/LihcbiAgICAgICAgICB0aGlzLnN0YXRlLmRhdGEsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgfTtcbiAgICB0aGlzLiNyZXRyeWVyID0gY3JlYXRlUmV0cnllcih7XG4gICAgICBpbml0aWFsUHJvbWlzZTogZmV0Y2hPcHRpb25zPy5pbml0aWFsUHJvbWlzZSxcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyLmFib3J0LmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBRdWVyeSBkYXRhIGNhbm5vdCBiZSB1bmRlZmluZWQuIFBsZWFzZSBtYWtlIHN1cmUgdG8gcmV0dXJuIGEgdmFsdWUgb3RoZXIgdGhhbiB1bmRlZmluZWQgZnJvbSB5b3VyIHF1ZXJ5IGZ1bmN0aW9uLiBBZmZlY3RlZCBxdWVyeSBrZXk6ICR7dGhpcy5xdWVyeUhhc2h9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb25FcnJvcihuZXcgRXJyb3IoYCR7dGhpcy5xdWVyeUhhc2h9IGRhdGEgaXMgdW5kZWZpbmVkYCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBvbkVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jY2FjaGUuY29uZmlnLm9uU3VjY2Vzcz8uKGRhdGEsIHRoaXMpO1xuICAgICAgICB0aGlzLiNjYWNoZS5jb25maWcub25TZXR0bGVkPy4oXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICB9LFxuICAgICAgb25FcnJvcixcbiAgICAgIG9uRmFpbDogKGZhaWx1cmVDb3VudCwgZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcImZhaWxlZFwiLCBmYWlsdXJlQ291bnQsIGVycm9yIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcInBhdXNlXCIgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiY29udGludWVcIiB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogY29udGV4dC5vcHRpb25zLnJldHJ5LFxuICAgICAgcmV0cnlEZWxheTogY29udGV4dC5vcHRpb25zLnJldHJ5RGVsYXksXG4gICAgICBuZXR3b3JrTW9kZTogY29udGV4dC5vcHRpb25zLm5ldHdvcmtNb2RlLFxuICAgICAgY2FuUnVuOiAoKSA9PiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuI3JldHJ5ZXIuc3RhcnQoKTtcbiAgfVxuICAjZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgY29uc3QgcmVkdWNlciA9IChzdGF0ZSkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IGFjdGlvbi5mYWlsdXJlQ291bnQsXG4gICAgICAgICAgICBmZXRjaEZhaWx1cmVSZWFzb246IGFjdGlvbi5lcnJvclxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJwYXVzZVwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGZldGNoU3RhdHVzOiBcInBhdXNlZFwiXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZmV0Y2hTdGF0dXM6IFwiZmV0Y2hpbmdcIlxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJmZXRjaFwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIC4uLmZldGNoU3RhdGUoc3RhdGUuZGF0YSwgdGhpcy5vcHRpb25zKSxcbiAgICAgICAgICAgIGZldGNoTWV0YTogYWN0aW9uLm1ldGEgPz8gbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJzdWNjZXNzXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgICBkYXRhVXBkYXRlQ291bnQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgICBkYXRhVXBkYXRlZEF0OiBhY3Rpb24uZGF0YVVwZGF0ZWRBdCA/PyBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAuLi4hYWN0aW9uLm1hbnVhbCAmJiB7XG4gICAgICAgICAgICAgIGZldGNoU3RhdHVzOiBcImlkbGVcIixcbiAgICAgICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgICAgIGZldGNoRmFpbHVyZVJlYXNvbjogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJlcnJvclwiOlxuICAgICAgICAgIGNvbnN0IGVycm9yID0gYWN0aW9uLmVycm9yO1xuICAgICAgICAgIGlmIChpc0NhbmNlbGxlZEVycm9yKGVycm9yKSAmJiBlcnJvci5yZXZlcnQgJiYgdGhpcy4jcmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMuI3JldmVydFN0YXRlLCBmZXRjaFN0YXR1czogXCJpZGxlXCIgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGVycm9yVXBkYXRlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGZldGNoRmFpbHVyZVJlYXNvbjogZXJyb3IsXG4gICAgICAgICAgICBmZXRjaFN0YXR1czogXCJpZGxlXCIsXG4gICAgICAgICAgICBzdGF0dXM6IFwiZXJyb3JcIlxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJpbnZhbGlkYXRlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgaXNJbnZhbGlkYXRlZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJzZXRTdGF0ZVwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIC4uLmFjdGlvbi5zdGF0ZVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm9uUXVlcnlVcGRhdGUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4jY2FjaGUubm90aWZ5KHsgcXVlcnk6IHRoaXMsIHR5cGU6IFwidXBkYXRlZFwiLCBhY3Rpb24gfSk7XG4gICAgfSk7XG4gIH1cbn07XG5mdW5jdGlvbiBmZXRjaFN0YXRlKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHtcbiAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICBmZXRjaEZhaWx1cmVSZWFzb246IG51bGwsXG4gICAgZmV0Y2hTdGF0dXM6IGNhbkZldGNoKG9wdGlvbnMubmV0d29ya01vZGUpID8gXCJmZXRjaGluZ1wiIDogXCJwYXVzZWRcIixcbiAgICAuLi5kYXRhID09PSB2b2lkIDAgJiYge1xuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBzdGF0dXM6IFwicGVuZGluZ1wiXG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMpIHtcbiAgY29uc3QgZGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zLmluaXRpYWxEYXRhKCkgOiBvcHRpb25zLmluaXRpYWxEYXRhO1xuICBjb25zdCBoYXNEYXRhID0gZGF0YSAhPT0gdm9pZCAwO1xuICBjb25zdCBpbml0aWFsRGF0YVVwZGF0ZWRBdCA9IGhhc0RhdGEgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCgpIDogb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA6IDA7XG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBkYXRhVXBkYXRlQ291bnQ6IDAsXG4gICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IGluaXRpYWxEYXRhVXBkYXRlZEF0ID8/IERhdGUubm93KCkgOiAwLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGVycm9yVXBkYXRlQ291bnQ6IDAsXG4gICAgZXJyb3JVcGRhdGVkQXQ6IDAsXG4gICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgZmV0Y2hGYWlsdXJlUmVhc29uOiBudWxsLFxuICAgIGZldGNoTWV0YTogbnVsbCxcbiAgICBpc0ludmFsaWRhdGVkOiBmYWxzZSxcbiAgICBzdGF0dXM6IGhhc0RhdGEgPyBcInN1Y2Nlc3NcIiA6IFwicGVuZGluZ1wiLFxuICAgIGZldGNoU3RhdHVzOiBcImlkbGVcIlxuICB9O1xufVxuZXhwb3J0IHtcbiAgUXVlcnksXG4gIGZldGNoU3RhdGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1xdWVyeS5qcy5tYXAiLCIvLyBzcmMvcXVlcnlDYWNoZS50c1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zLCBtYXRjaFF1ZXJ5IH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIi4vcXVlcnkuanNcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbnZhciBRdWVyeUNhY2hlID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy4jcXVlcmllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgI3F1ZXJpZXM7XG4gIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICBjb25zdCBxdWVyeUtleSA9IG9wdGlvbnMucXVlcnlLZXk7XG4gICAgY29uc3QgcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2ggPz8gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKTtcbiAgICBsZXQgcXVlcnkgPSB0aGlzLmdldChxdWVyeUhhc2gpO1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHtcbiAgICAgICAgY2FjaGU6IHRoaXMsXG4gICAgICAgIHF1ZXJ5S2V5LFxuICAgICAgICBxdWVyeUhhc2gsXG4gICAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IGNsaWVudC5nZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZChxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuICBhZGQocXVlcnkpIHtcbiAgICBpZiAoIXRoaXMuI3F1ZXJpZXMuaGFzKHF1ZXJ5LnF1ZXJ5SGFzaCkpIHtcbiAgICAgIHRoaXMuI3F1ZXJpZXMuc2V0KHF1ZXJ5LnF1ZXJ5SGFzaCwgcXVlcnkpO1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiBcImFkZGVkXCIsXG4gICAgICAgIHF1ZXJ5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgY29uc3QgcXVlcnlJbk1hcCA9IHRoaXMuI3F1ZXJpZXMuZ2V0KHF1ZXJ5LnF1ZXJ5SGFzaCk7XG4gICAgaWYgKHF1ZXJ5SW5NYXApIHtcbiAgICAgIHF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgIGlmIChxdWVyeUluTWFwID09PSBxdWVyeSkge1xuICAgICAgICB0aGlzLiNxdWVyaWVzLmRlbGV0ZShxdWVyeS5xdWVyeUhhc2gpO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiBcInJlbW92ZWRcIiwgcXVlcnkgfSk7XG4gICAgfVxuICB9XG4gIGNsZWFyKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5nZXRBbGwoKS5mb3JFYWNoKChxdWVyeSkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBnZXQocXVlcnlIYXNoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3F1ZXJpZXMuZ2V0KHF1ZXJ5SGFzaCk7XG4gIH1cbiAgZ2V0QWxsKCkge1xuICAgIHJldHVybiBbLi4udGhpcy4jcXVlcmllcy52YWx1ZXMoKV07XG4gIH1cbiAgZmluZChmaWx0ZXJzKSB7XG4gICAgY29uc3QgZGVmYXVsdGVkRmlsdGVycyA9IHsgZXhhY3Q6IHRydWUsIC4uLmZpbHRlcnMgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGwoKS5maW5kKFxuICAgICAgKHF1ZXJ5KSA9PiBtYXRjaFF1ZXJ5KGRlZmF1bHRlZEZpbHRlcnMsIHF1ZXJ5KVxuICAgICk7XG4gIH1cbiAgZmluZEFsbChmaWx0ZXJzID0ge30pIHtcbiAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5nZXRBbGwoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlsdGVycykubGVuZ3RoID4gMCA/IHF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkpIDogcXVlcmllcztcbiAgfVxuICBub3RpZnkoZXZlbnQpIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIG9uRm9jdXMoKSB7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLmdldEFsbCgpLmZvckVhY2goKHF1ZXJ5KSA9PiB7XG4gICAgICAgIHF1ZXJ5Lm9uRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIG9uT25saW5lKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5nZXRBbGwoKS5mb3JFYWNoKChxdWVyeSkgPT4ge1xuICAgICAgICBxdWVyeS5vbk9ubGluZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5leHBvcnQge1xuICBRdWVyeUNhY2hlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnlDYWNoZS5qcy5tYXAiLCIvLyBzcmMvbXV0YXRpb24udHNcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBSZW1vdmFibGUgfSBmcm9tIFwiLi9yZW1vdmFibGUuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVJldHJ5ZXIgfSBmcm9tIFwiLi9yZXRyeWVyLmpzXCI7XG52YXIgTXV0YXRpb24gPSBjbGFzcyBleHRlbmRzIFJlbW92YWJsZSB7XG4gICNvYnNlcnZlcnM7XG4gICNtdXRhdGlvbkNhY2hlO1xuICAjcmV0cnllcjtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm11dGF0aW9uSWQgPSBjb25maWcubXV0YXRpb25JZDtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGU7XG4gICAgdGhpcy4jb2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLnNldE9wdGlvbnMoY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy51cGRhdGVHY1RpbWUodGhpcy5vcHRpb25zLmdjVGltZSk7XG4gIH1cbiAgZ2V0IG1ldGEoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5tZXRhO1xuICB9XG4gIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKCF0aGlzLiNvYnNlcnZlcnMuaW5jbHVkZXMob2JzZXJ2ZXIpKSB7XG4gICAgICB0aGlzLiNvYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLiNtdXRhdGlvbkNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IFwib2JzZXJ2ZXJBZGRlZFwiLFxuICAgICAgICBtdXRhdGlvbjogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMuI29ic2VydmVycyA9IHRoaXMuI29ic2VydmVycy5maWx0ZXIoKHgpID0+IHggIT09IG9ic2VydmVyKTtcbiAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlLm5vdGlmeSh7XG4gICAgICB0eXBlOiBcIm9ic2VydmVyUmVtb3ZlZFwiLFxuICAgICAgbXV0YXRpb246IHRoaXMsXG4gICAgICBvYnNlcnZlclxuICAgIH0pO1xuICB9XG4gIG9wdGlvbmFsUmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy4jb2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI211dGF0aW9uQ2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb250aW51ZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmV0cnllcj8uY29udGludWUoKSA/PyAvLyBjb250aW51aW5nIGEgbXV0YXRpb24gYXNzdW1lcyB0aGF0IHZhcmlhYmxlcyBhcmUgc2V0LCBtdXRhdGlvbiBtdXN0IGhhdmUgYmVlbiBkZWh5ZHJhdGVkIGJlZm9yZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnN0YXRlLnZhcmlhYmxlcyk7XG4gIH1cbiAgYXN5bmMgZXhlY3V0ZSh2YXJpYWJsZXMpIHtcbiAgICB0aGlzLiNyZXRyeWVyID0gY3JlYXRlUmV0cnllcih7XG4gICAgICBmbjogKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIG11dGF0aW9uRm4gZm91bmRcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMubXV0YXRpb25Gbih2YXJpYWJsZXMpO1xuICAgICAgfSxcbiAgICAgIG9uRmFpbDogKGZhaWx1cmVDb3VudCwgZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcImZhaWxlZFwiLCBmYWlsdXJlQ291bnQsIGVycm9yIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy4jZGlzcGF0Y2goeyB0eXBlOiBcInBhdXNlXCIgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLiNkaXNwYXRjaCh7IHR5cGU6IFwiY29udGludWVcIiB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogdGhpcy5vcHRpb25zLnJldHJ5ID8/IDAsXG4gICAgICByZXRyeURlbGF5OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheSxcbiAgICAgIG5ldHdvcmtNb2RlOiB0aGlzLm9wdGlvbnMubmV0d29ya01vZGUsXG4gICAgICBjYW5SdW46ICgpID0+IHRoaXMuI211dGF0aW9uQ2FjaGUuY2FuUnVuKHRoaXMpXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdG9yZWQgPSB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCI7XG4gICAgY29uc3QgaXNQYXVzZWQgPSAhdGhpcy4jcmV0cnllci5jYW5TdGFydCgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXJlc3RvcmVkKSB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJwZW5kaW5nXCIsIHZhcmlhYmxlcywgaXNQYXVzZWQgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlPy4oXG4gICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMub3B0aW9ucy5vbk11dGF0ZT8uKHZhcmlhYmxlcyk7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSB0aGlzLnN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgICB0aGlzLiNkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBcInBlbmRpbmdcIixcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgICBpc1BhdXNlZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jcmV0cnllci5zdGFydCgpO1xuICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzPy4oXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIGF3YWl0IHRoaXMuI211dGF0aW9uQ2FjaGUuY29uZmlnLm9uU2V0dGxlZD8uKFxuICAgICAgICBkYXRhLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnN0YXRlLnZhcmlhYmxlcyxcbiAgICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLm9uU2V0dGxlZD8uKGRhdGEsIG51bGwsIHZhcmlhYmxlcywgdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJzdWNjZXNzXCIsIGRhdGEgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcj8uKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHQsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdGlvbnMub25FcnJvcj8uKFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy4jbXV0YXRpb25DYWNoZS5jb25maWcub25TZXR0bGVkPy4oXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHRoaXMuc3RhdGUudmFyaWFibGVzLFxuICAgICAgICAgIHRoaXMuc3RhdGUuY29udGV4dCxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5vblNldHRsZWQ/LihcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgIHRoaXMuc3RhdGUuY29udGV4dFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuI2Rpc3BhdGNoKHsgdHlwZTogXCJlcnJvclwiLCBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ydW5OZXh0KHRoaXMpO1xuICAgIH1cbiAgfVxuICAjZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgY29uc3QgcmVkdWNlciA9IChzdGF0ZSkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZmFpbHVyZUNvdW50OiBhY3Rpb24uZmFpbHVyZUNvdW50LFxuICAgICAgICAgICAgZmFpbHVyZVJlYXNvbjogYWN0aW9uLmVycm9yXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcInBhdXNlXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwiY29udGludWVcIjpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICAgICAgZGF0YTogdm9pZCAwLFxuICAgICAgICAgICAgZmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgICAgZmFpbHVyZVJlYXNvbjogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IGFjdGlvbi5pc1BhdXNlZCxcbiAgICAgICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXMsXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdDogRGF0ZS5ub3coKVxuICAgICAgICAgIH07XG4gICAgICAgIGNhc2UgXCJzdWNjZXNzXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgICBmYWlsdXJlUmVhc29uOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBzdGF0dXM6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgZGF0YTogdm9pZCAwLFxuICAgICAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICAgIGZhaWx1cmVSZWFzb246IGFjdGlvbi5lcnJvcixcbiAgICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogXCJlcnJvclwiXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3RhdGUgPSByZWR1Y2VyKHRoaXMuc3RhdGUpO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy4jb2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm9uTXV0YXRpb25VcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy4jbXV0YXRpb25DYWNoZS5ub3RpZnkoe1xuICAgICAgICBtdXRhdGlvbjogdGhpcyxcbiAgICAgICAgdHlwZTogXCJ1cGRhdGVkXCIsXG4gICAgICAgIGFjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5mdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdm9pZCAwLFxuICAgIGRhdGE6IHZvaWQgMCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgZmFpbHVyZVJlYXNvbjogbnVsbCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiBcImlkbGVcIixcbiAgICB2YXJpYWJsZXM6IHZvaWQgMCxcbiAgICBzdWJtaXR0ZWRBdDogMFxuICB9O1xufVxuZXhwb3J0IHtcbiAgTXV0YXRpb24sXG4gIGdldERlZmF1bHRTdGF0ZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11dGF0aW9uLmpzLm1hcCIsIi8vIHNyYy9tdXRhdGlvbkNhY2hlLnRzXG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSBcIi4vbm90aWZ5TWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tIFwiLi9tdXRhdGlvbi5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hNdXRhdGlvbiwgbm9vcCB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbnZhciBNdXRhdGlvbkNhY2hlID0gY2xhc3MgZXh0ZW5kcyBTdWJzY3JpYmFibGUge1xuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy4jbXV0YXRpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLiNzY29wZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgIHRoaXMuI211dGF0aW9uSWQgPSAwO1xuICB9XG4gICNtdXRhdGlvbnM7XG4gICNzY29wZXM7XG4gICNtdXRhdGlvbklkO1xuICBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgY29uc3QgbXV0YXRpb24gPSBuZXcgTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb25DYWNoZTogdGhpcyxcbiAgICAgIG11dGF0aW9uSWQ6ICsrdGhpcy4jbXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGVcbiAgICB9KTtcbiAgICB0aGlzLmFkZChtdXRhdGlvbik7XG4gICAgcmV0dXJuIG11dGF0aW9uO1xuICB9XG4gIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMuI211dGF0aW9ucy5hZGQobXV0YXRpb24pO1xuICAgIGNvbnN0IHNjb3BlID0gc2NvcGVGb3IobXV0YXRpb24pO1xuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IHNjb3BlZE11dGF0aW9ucyA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpO1xuICAgICAgaWYgKHNjb3BlZE11dGF0aW9ucykge1xuICAgICAgICBzY29wZWRNdXRhdGlvbnMucHVzaChtdXRhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNzY29wZXMuc2V0KHNjb3BlLCBbbXV0YXRpb25dKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub3RpZnkoeyB0eXBlOiBcImFkZGVkXCIsIG11dGF0aW9uIH0pO1xuICB9XG4gIHJlbW92ZShtdXRhdGlvbikge1xuICAgIGlmICh0aGlzLiNtdXRhdGlvbnMuZGVsZXRlKG11dGF0aW9uKSkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBzY29wZUZvcihtdXRhdGlvbik7XG4gICAgICBpZiAodHlwZW9mIHNjb3BlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlZE11dGF0aW9ucyA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpO1xuICAgICAgICBpZiAoc2NvcGVkTXV0YXRpb25zKSB7XG4gICAgICAgICAgaWYgKHNjb3BlZE11dGF0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHNjb3BlZE11dGF0aW9ucy5pbmRleE9mKG11dGF0aW9uKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgc2NvcGVkTXV0YXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzY29wZWRNdXRhdGlvbnNbMF0gPT09IG11dGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLiNzY29wZXMuZGVsZXRlKHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub3RpZnkoeyB0eXBlOiBcInJlbW92ZWRcIiwgbXV0YXRpb24gfSk7XG4gIH1cbiAgY2FuUnVuKG11dGF0aW9uKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBzY29wZUZvcihtdXRhdGlvbik7XG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgbXV0YXRpb25zV2l0aFNhbWVTY29wZSA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpO1xuICAgICAgY29uc3QgZmlyc3RQZW5kaW5nTXV0YXRpb24gPSBtdXRhdGlvbnNXaXRoU2FtZVNjb3BlPy5maW5kKFxuICAgICAgICAobSkgPT4gbS5zdGF0ZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiXG4gICAgICApO1xuICAgICAgcmV0dXJuICFmaXJzdFBlbmRpbmdNdXRhdGlvbiB8fCBmaXJzdFBlbmRpbmdNdXRhdGlvbiA9PT0gbXV0YXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBydW5OZXh0KG11dGF0aW9uKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBzY29wZUZvcihtdXRhdGlvbik7XG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgZm91bmRNdXRhdGlvbiA9IHRoaXMuI3Njb3Blcy5nZXQoc2NvcGUpPy5maW5kKChtKSA9PiBtICE9PSBtdXRhdGlvbiAmJiBtLnN0YXRlLmlzUGF1c2VkKTtcbiAgICAgIHJldHVybiBmb3VuZE11dGF0aW9uPy5jb250aW51ZSgpID8/IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICB9XG4gIGNsZWFyKCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy4jbXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XG4gICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogXCJyZW1vdmVkXCIsIG11dGF0aW9uIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiNtdXRhdGlvbnMuY2xlYXIoKTtcbiAgICAgIHRoaXMuI3Njb3Blcy5jbGVhcigpO1xuICAgIH0pO1xuICB9XG4gIGdldEFsbCgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiNtdXRhdGlvbnMpO1xuICB9XG4gIGZpbmQoZmlsdGVycykge1xuICAgIGNvbnN0IGRlZmF1bHRlZEZpbHRlcnMgPSB7IGV4YWN0OiB0cnVlLCAuLi5maWx0ZXJzIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsKCkuZmluZChcbiAgICAgIChtdXRhdGlvbikgPT4gbWF0Y2hNdXRhdGlvbihkZWZhdWx0ZWRGaWx0ZXJzLCBtdXRhdGlvbilcbiAgICApO1xuICB9XG4gIGZpbmRBbGwoZmlsdGVycyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsKCkuZmlsdGVyKChtdXRhdGlvbikgPT4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbikpO1xuICB9XG4gIG5vdGlmeShldmVudCkge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIGNvbnN0IHBhdXNlZE11dGF0aW9ucyA9IHRoaXMuZ2V0QWxsKCkuZmlsdGVyKCh4KSA9PiB4LnN0YXRlLmlzUGF1c2VkKTtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChcbiAgICAgICgpID0+IFByb21pc2UuYWxsKFxuICAgICAgICBwYXVzZWRNdXRhdGlvbnMubWFwKChtdXRhdGlvbikgPT4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKSlcbiAgICAgIClcbiAgICApO1xuICB9XG59O1xuZnVuY3Rpb24gc2NvcGVGb3IobXV0YXRpb24pIHtcbiAgcmV0dXJuIG11dGF0aW9uLm9wdGlvbnMuc2NvcGU/LmlkO1xufVxuZXhwb3J0IHtcbiAgTXV0YXRpb25DYWNoZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11dGF0aW9uQ2FjaGUuanMubWFwIiwiLy8gc3JjL2luZmluaXRlUXVlcnlCZWhhdmlvci50c1xuaW1wb3J0IHsgYWRkVG9FbmQsIGFkZFRvU3RhcnQsIGVuc3VyZVF1ZXJ5Rm4gfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZnVuY3Rpb24gaW5maW5pdGVRdWVyeUJlaGF2aW9yKHBhZ2VzKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogKGNvbnRleHQsIHF1ZXJ5KSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zO1xuICAgICAgY29uc3QgZGlyZWN0aW9uID0gY29udGV4dC5mZXRjaE9wdGlvbnM/Lm1ldGE/LmZldGNoTW9yZT8uZGlyZWN0aW9uO1xuICAgICAgY29uc3Qgb2xkUGFnZXMgPSBjb250ZXh0LnN0YXRlLmRhdGE/LnBhZ2VzIHx8IFtdO1xuICAgICAgY29uc3Qgb2xkUGFnZVBhcmFtcyA9IGNvbnRleHQuc3RhdGUuZGF0YT8ucGFnZVBhcmFtcyB8fCBbXTtcbiAgICAgIGxldCByZXN1bHQgPSB7IHBhZ2VzOiBbXSwgcGFnZVBhcmFtczogW10gfTtcbiAgICAgIGxldCBjdXJyZW50UGFnZSA9IDA7XG4gICAgICBjb25zdCBmZXRjaEZuID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFkZFNpZ25hbFByb3BlcnR5ID0gKG9iamVjdCkgPT4ge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIFwic2lnbmFsXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnNpZ25hbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcXVlcnlGbiA9IGVuc3VyZVF1ZXJ5Rm4oY29udGV4dC5vcHRpb25zLCBjb250ZXh0LmZldGNoT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGZldGNoUGFnZSA9IGFzeW5jIChkYXRhLCBwYXJhbSwgcHJldmlvdXMpID0+IHtcbiAgICAgICAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmFtID09IG51bGwgJiYgZGF0YS5wYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICAgICAgcXVlcnlLZXk6IGNvbnRleHQucXVlcnlLZXksXG4gICAgICAgICAgICBwYWdlUGFyYW06IHBhcmFtLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBwcmV2aW91cyA/IFwiYmFja3dhcmRcIiA6IFwiZm9yd2FyZFwiLFxuICAgICAgICAgICAgbWV0YTogY29udGV4dC5vcHRpb25zLm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIGFkZFNpZ25hbFByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgcXVlcnlGbihcbiAgICAgICAgICAgIHF1ZXJ5Rm5Db250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7IG1heFBhZ2VzIH0gPSBjb250ZXh0Lm9wdGlvbnM7XG4gICAgICAgICAgY29uc3QgYWRkVG8gPSBwcmV2aW91cyA/IGFkZFRvU3RhcnQgOiBhZGRUb0VuZDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZXM6IGFkZFRvKGRhdGEucGFnZXMsIHBhZ2UsIG1heFBhZ2VzKSxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IGFkZFRvKGRhdGEucGFnZVBhcmFtcywgcGFyYW0sIG1heFBhZ2VzKVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGlmIChkaXJlY3Rpb24gJiYgb2xkUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBkaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIjtcbiAgICAgICAgICBjb25zdCBwYWdlUGFyYW1GbiA9IHByZXZpb3VzID8gZ2V0UHJldmlvdXNQYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtO1xuICAgICAgICAgIGNvbnN0IG9sZERhdGEgPSB7XG4gICAgICAgICAgICBwYWdlczogb2xkUGFnZXMsXG4gICAgICAgICAgICBwYWdlUGFyYW1zOiBvbGRQYWdlUGFyYW1zXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBwYXJhbSA9IHBhZ2VQYXJhbUZuKG9wdGlvbnMsIG9sZERhdGEpO1xuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUGFnZShvbGREYXRhLCBwYXJhbSwgcHJldmlvdXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ1BhZ2VzID0gcGFnZXMgPz8gb2xkUGFnZXMubGVuZ3RoO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gY3VycmVudFBhZ2UgPT09IDAgPyBvbGRQYWdlUGFyYW1zWzBdID8/IG9wdGlvbnMuaW5pdGlhbFBhZ2VQYXJhbSA6IGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcmVzdWx0KTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSA+IDAgJiYgcGFyYW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUGFnZShyZXN1bHQsIHBhcmFtKTtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlKys7XG4gICAgICAgICAgfSB3aGlsZSAoY3VycmVudFBhZ2UgPCByZW1haW5pbmdQYWdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgICBpZiAoY29udGV4dC5vcHRpb25zLnBlcnNpc3Rlcikge1xuICAgICAgICBjb250ZXh0LmZldGNoRm4gPSAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9ucy5wZXJzaXN0ZXI/LihcbiAgICAgICAgICAgIGZldGNoRm4sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm9wdGlvbnMubWV0YSxcbiAgICAgICAgICAgICAgc2lnbmFsOiBjb250ZXh0LnNpZ25hbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHF1ZXJ5XG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZmV0Y2hGbiA9IGZldGNoRm47XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCB7IHBhZ2VzLCBwYWdlUGFyYW1zIH0pIHtcbiAgY29uc3QgbGFzdEluZGV4ID0gcGFnZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIHBhZ2VzLmxlbmd0aCA+IDAgPyBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0oXG4gICAgcGFnZXNbbGFzdEluZGV4XSxcbiAgICBwYWdlcyxcbiAgICBwYWdlUGFyYW1zW2xhc3RJbmRleF0sXG4gICAgcGFnZVBhcmFtc1xuICApIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgeyBwYWdlcywgcGFnZVBhcmFtcyB9KSB7XG4gIHJldHVybiBwYWdlcy5sZW5ndGggPiAwID8gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbT8uKHBhZ2VzWzBdLCBwYWdlcywgcGFnZVBhcmFtc1swXSwgcGFnZVBhcmFtcykgOiB2b2lkIDA7XG59XG5mdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBkYXRhKSB7XG4gIGlmICghZGF0YSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIGRhdGEpICE9IG51bGw7XG59XG5mdW5jdGlvbiBoYXNQcmV2aW91c1BhZ2Uob3B0aW9ucywgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgIW9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0pXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgZGF0YSkgIT0gbnVsbDtcbn1cbmV4cG9ydCB7XG4gIGhhc05leHRQYWdlLFxuICBoYXNQcmV2aW91c1BhZ2UsXG4gIGluZmluaXRlUXVlcnlCZWhhdmlvclxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZmluaXRlUXVlcnlCZWhhdmlvci5qcy5tYXAiLCIvLyBzcmMvcXVlcnlDbGllbnQudHNcbmltcG9ydCB7XG4gIGZ1bmN0aW9uYWxVcGRhdGUsXG4gIGhhc2hLZXksXG4gIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyxcbiAgbm9vcCxcbiAgcGFydGlhbE1hdGNoS2V5LFxuICByZXNvbHZlU3RhbGVUaW1lLFxuICBza2lwVG9rZW5cbn0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tIFwiLi9xdWVyeUNhY2hlLmpzXCI7XG5pbXBvcnQgeyBNdXRhdGlvbkNhY2hlIH0gZnJvbSBcIi4vbXV0YXRpb25DYWNoZS5qc1wiO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSBcIi4vZm9jdXNNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSBcIi4vb25saW5lTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gXCIuL25vdGlmeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IGluZmluaXRlUXVlcnlCZWhhdmlvciB9IGZyb20gXCIuL2luZmluaXRlUXVlcnlCZWhhdmlvci5qc1wiO1xudmFyIFF1ZXJ5Q2xpZW50ID0gY2xhc3Mge1xuICAjcXVlcnlDYWNoZTtcbiAgI211dGF0aW9uQ2FjaGU7XG4gICNkZWZhdWx0T3B0aW9ucztcbiAgI3F1ZXJ5RGVmYXVsdHM7XG4gICNtdXRhdGlvbkRlZmF1bHRzO1xuICAjbW91bnRDb3VudDtcbiAgI3Vuc3Vic2NyaWJlRm9jdXM7XG4gICN1bnN1YnNjcmliZU9ubGluZTtcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICB0aGlzLiNxdWVyeUNhY2hlID0gY29uZmlnLnF1ZXJ5Q2FjaGUgfHwgbmV3IFF1ZXJ5Q2FjaGUoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLiNkZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLiNxdWVyeURlZmF1bHRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB0aGlzLiNtdXRhdGlvbkRlZmF1bHRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB0aGlzLiNtb3VudENvdW50ID0gMDtcbiAgfVxuICBtb3VudCgpIHtcbiAgICB0aGlzLiNtb3VudENvdW50Kys7XG4gICAgaWYgKHRoaXMuI21vdW50Q291bnQgIT09IDEpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVGb2N1cyA9IGZvY3VzTWFuYWdlci5zdWJzY3JpYmUoYXN5bmMgKGZvY3VzZWQpID0+IHtcbiAgICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gICAgICAgIHRoaXMuI3F1ZXJ5Q2FjaGUub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuI3Vuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoYXN5bmMgKG9ubGluZSkgPT4ge1xuICAgICAgaWYgKG9ubGluZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICAgICAgICB0aGlzLiNxdWVyeUNhY2hlLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgdW5tb3VudCgpIHtcbiAgICB0aGlzLiNtb3VudENvdW50LS07XG4gICAgaWYgKHRoaXMuI21vdW50Q291bnQgIT09IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVGb2N1cz8uKCk7XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVGb2N1cyA9IHZvaWQgMDtcbiAgICB0aGlzLiN1bnN1YnNjcmliZU9ubGluZT8uKCk7XG4gICAgdGhpcy4jdW5zdWJzY3JpYmVPbmxpbmUgPSB2b2lkIDA7XG4gIH1cbiAgaXNGZXRjaGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuI3F1ZXJ5Q2FjaGUuZmluZEFsbCh7IC4uLmZpbHRlcnMsIGZldGNoU3RhdHVzOiBcImZldGNoaW5nXCIgfSkubGVuZ3RoO1xuICB9XG4gIGlzTXV0YXRpbmcoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLiNtdXRhdGlvbkNhY2hlLmZpbmRBbGwoeyAuLi5maWx0ZXJzLCBzdGF0dXM6IFwicGVuZGluZ1wiIH0pLmxlbmd0aDtcbiAgfVxuICBnZXRRdWVyeURhdGEocXVlcnlLZXkpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHsgcXVlcnlLZXkgfSk7XG4gICAgcmV0dXJuIHRoaXMuI3F1ZXJ5Q2FjaGUuZ2V0KG9wdGlvbnMucXVlcnlIYXNoKT8uc3RhdGUuZGF0YTtcbiAgfVxuICBlbnN1cmVRdWVyeURhdGEob3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLiNxdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBxdWVyeS5zdGF0ZS5kYXRhO1xuICAgIGlmIChjYWNoZWREYXRhID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkob3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnJldmFsaWRhdGVJZlN0YWxlICYmIHF1ZXJ5LmlzU3RhbGVCeVRpbWUocmVzb2x2ZVN0YWxlVGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSwgcXVlcnkpKSkge1xuICAgICAgdm9pZCB0aGlzLnByZWZldGNoUXVlcnkoZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2FjaGVkRGF0YSk7XG4gIH1cbiAgZ2V0UXVlcmllc0RhdGEoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKCh7IHF1ZXJ5S2V5LCBzdGF0ZSB9KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgIHJldHVybiBbcXVlcnlLZXksIGRhdGFdO1xuICAgIH0pO1xuICB9XG4gIHNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMoeyBxdWVyeUtleSB9KTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuI3F1ZXJ5Q2FjaGUuZ2V0KFxuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2hcbiAgICApO1xuICAgIGNvbnN0IHByZXZEYXRhID0gcXVlcnk/LnN0YXRlLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgcHJldkRhdGEpO1xuICAgIGlmIChkYXRhID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpLnNldERhdGEoZGF0YSwgeyAuLi5vcHRpb25zLCBtYW51YWw6IHRydWUgfSk7XG4gIH1cbiAgc2V0UXVlcmllc0RhdGEoZmlsdGVycywgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKFxuICAgICAgKCkgPT4gdGhpcy4jcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcCgoeyBxdWVyeUtleSB9KSA9PiBbXG4gICAgICAgIHF1ZXJ5S2V5LFxuICAgICAgICB0aGlzLnNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucylcbiAgICAgIF0pXG4gICAgKTtcbiAgfVxuICBnZXRRdWVyeVN0YXRlKHF1ZXJ5S2V5KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyh7IHF1ZXJ5S2V5IH0pO1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlLmdldChcbiAgICAgIG9wdGlvbnMucXVlcnlIYXNoXG4gICAgKT8uc3RhdGU7XG4gIH1cbiAgcmVtb3ZlUXVlcmllcyhmaWx0ZXJzKSB7XG4gICAgY29uc3QgcXVlcnlDYWNoZSA9IHRoaXMuI3F1ZXJ5Q2FjaGU7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnlDYWNoZS5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmVzZXRRdWVyaWVzKGZpbHRlcnMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBxdWVyeUNhY2hlID0gdGhpcy4jcXVlcnlDYWNoZTtcbiAgICBjb25zdCByZWZldGNoRmlsdGVycyA9IHtcbiAgICAgIHR5cGU6IFwiYWN0aXZlXCIsXG4gICAgICAuLi5maWx0ZXJzXG4gICAgfTtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnkucmVzZXQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG4gIGNhbmNlbFF1ZXJpZXMoZmlsdGVycywgY2FuY2VsT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZGVmYXVsdGVkQ2FuY2VsT3B0aW9ucyA9IHsgcmV2ZXJ0OiB0cnVlLCAuLi5jYW5jZWxPcHRpb25zIH07XG4gICAgY29uc3QgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKFxuICAgICAgKCkgPT4gdGhpcy4jcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcCgocXVlcnkpID0+IHF1ZXJ5LmNhbmNlbChkZWZhdWx0ZWRDYW5jZWxPcHRpb25zKSlcbiAgICApO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfVxuICBpbnZhbGlkYXRlUXVlcmllcyhmaWx0ZXJzLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaCgocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnkuaW52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmlsdGVycz8ucmVmZXRjaFR5cGUgPT09IFwibm9uZVwiKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZmV0Y2hGaWx0ZXJzID0ge1xuICAgICAgICAuLi5maWx0ZXJzLFxuICAgICAgICB0eXBlOiBmaWx0ZXJzPy5yZWZldGNoVHlwZSA/PyBmaWx0ZXJzPy50eXBlID8/IFwiYWN0aXZlXCJcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cbiAgcmVmZXRjaFF1ZXJpZXMoZmlsdGVycywgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZmV0Y2hPcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNhbmNlbFJlZmV0Y2g6IG9wdGlvbnMuY2FuY2VsUmVmZXRjaCA/PyB0cnVlXG4gICAgfTtcbiAgICBjb25zdCBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goXG4gICAgICAoKSA9PiB0aGlzLiNxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZmlsdGVyKChxdWVyeSkgPT4gIXF1ZXJ5LmlzRGlzYWJsZWQoKSkubWFwKChxdWVyeSkgPT4ge1xuICAgICAgICBsZXQgcHJvbWlzZSA9IHF1ZXJ5LmZldGNoKHZvaWQgMCwgZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgaWYgKCFmZXRjaE9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5LnN0YXRlLmZldGNoU3RhdHVzID09PSBcInBhdXNlZFwiID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBwcm9taXNlO1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKTtcbiAgfVxuICBmZXRjaFF1ZXJ5KG9wdGlvbnMpIHtcbiAgICBjb25zdCBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICAgIGlmIChkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSB2b2lkIDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLiNxdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5pc1N0YWxlQnlUaW1lKFxuICAgICAgcmVzb2x2ZVN0YWxlVGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSwgcXVlcnkpXG4gICAgKSA/IHF1ZXJ5LmZldGNoKGRlZmF1bHRlZE9wdGlvbnMpIDogUHJvbWlzZS5yZXNvbHZlKHF1ZXJ5LnN0YXRlLmRhdGEpO1xuICB9XG4gIHByZWZldGNoUXVlcnkob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkob3B0aW9ucykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfVxuICBmZXRjaEluZmluaXRlUXVlcnkob3B0aW9ucykge1xuICAgIG9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3Iob3B0aW9ucy5wYWdlcyk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShvcHRpb25zKTtcbiAgfVxuICBwcmVmZXRjaEluZmluaXRlUXVlcnkob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShvcHRpb25zKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9XG4gIGVuc3VyZUluZmluaXRlUXVlcnlEYXRhKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLmJlaGF2aW9yID0gaW5maW5pdGVRdWVyeUJlaGF2aW9yKG9wdGlvbnMucGFnZXMpO1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVF1ZXJ5RGF0YShvcHRpb25zKTtcbiAgfVxuICByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgaWYgKG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuI211dGF0aW9uQ2FjaGUucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICBnZXRRdWVyeUNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLiNxdWVyeUNhY2hlO1xuICB9XG4gIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuI211dGF0aW9uQ2FjaGU7XG4gIH1cbiAgZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2RlZmF1bHRPcHRpb25zO1xuICB9XG4gIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLiNkZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cbiAgc2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSwgb3B0aW9ucykge1xuICAgIHRoaXMuI3F1ZXJ5RGVmYXVsdHMuc2V0KGhhc2hLZXkocXVlcnlLZXkpLCB7XG4gICAgICBxdWVyeUtleSxcbiAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSkge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gWy4uLnRoaXMuI3F1ZXJ5RGVmYXVsdHMudmFsdWVzKCldO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGRlZmF1bHRzLmZvckVhY2goKHF1ZXJ5RGVmYXVsdCkgPT4ge1xuICAgICAgaWYgKHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgcXVlcnlEZWZhdWx0LnF1ZXJ5S2V5KSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgcXVlcnlEZWZhdWx0LmRlZmF1bHRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHNldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNtdXRhdGlvbkRlZmF1bHRzLnNldChoYXNoS2V5KG11dGF0aW9uS2V5KSwge1xuICAgICAgbXV0YXRpb25LZXksXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGdldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXkpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IFsuLi50aGlzLiNtdXRhdGlvbkRlZmF1bHRzLnZhbHVlcygpXTtcbiAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgZGVmYXVsdHMuZm9yRWFjaCgocXVlcnlEZWZhdWx0KSA9PiB7XG4gICAgICBpZiAocGFydGlhbE1hdGNoS2V5KG11dGF0aW9uS2V5LCBxdWVyeURlZmF1bHQubXV0YXRpb25LZXkpKSB7XG4gICAgICAgIHJlc3VsdCA9IHsgLi4ucmVzdWx0LCAuLi5xdWVyeURlZmF1bHQuZGVmYXVsdE9wdGlvbnMgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0ZWRPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy4jZGVmYXVsdE9wdGlvbnMucXVlcmllcyxcbiAgICAgIC4uLnRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zLnF1ZXJ5S2V5KSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoIWRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhcbiAgICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSxcbiAgICAgICAgZGVmYXVsdGVkT3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMucmVmZXRjaE9uUmVjb25uZWN0ID09PSB2b2lkIDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmVmZXRjaE9uUmVjb25uZWN0ID0gZGVmYXVsdGVkT3B0aW9ucy5uZXR3b3JrTW9kZSAhPT0gXCJhbHdheXNcIjtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRlZE9wdGlvbnMudGhyb3dPbkVycm9yID09PSB2b2lkIDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMudGhyb3dPbkVycm9yID0gISFkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlO1xuICAgIH1cbiAgICBpZiAoIWRlZmF1bHRlZE9wdGlvbnMubmV0d29ya01vZGUgJiYgZGVmYXVsdGVkT3B0aW9ucy5wZXJzaXN0ZXIpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMubmV0d29ya01vZGUgPSBcIm9mZmxpbmVGaXJzdFwiO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUZuID09PSBza2lwVG9rZW4pIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfVxuICBkZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucz8uX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLiNkZWZhdWx0T3B0aW9ucy5tdXRhdGlvbnMsXG4gICAgICAuLi5vcHRpb25zPy5tdXRhdGlvbktleSAmJiB0aGlzLmdldE11dGF0aW9uRGVmYXVsdHMob3B0aW9ucy5tdXRhdGlvbktleSksXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH07XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy4jcXVlcnlDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuI211dGF0aW9uQ2FjaGUuY2xlYXIoKTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIFF1ZXJ5Q2xpZW50XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnlDbGllbnQuanMubWFwIiwiLy8gc3JjL3F1ZXJ5T2JzZXJ2ZXIudHNcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gXCIuL2ZvY3VzTWFuYWdlci5qc1wiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gXCIuL25vdGlmeU1hbmFnZXIuanNcIjtcbmltcG9ydCB7IGZldGNoU3RhdGUgfSBmcm9tIFwiLi9xdWVyeS5qc1wiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSBcIi4vc3Vic2NyaWJhYmxlLmpzXCI7XG5pbXBvcnQgeyBwZW5kaW5nVGhlbmFibGUgfSBmcm9tIFwiLi90aGVuYWJsZS5qc1wiO1xuaW1wb3J0IHtcbiAgaXNTZXJ2ZXIsXG4gIGlzVmFsaWRUaW1lb3V0LFxuICBub29wLFxuICByZXBsYWNlRGF0YSxcbiAgcmVzb2x2ZUVuYWJsZWQsXG4gIHJlc29sdmVTdGFsZVRpbWUsXG4gIHNoYWxsb3dFcXVhbE9iamVjdHMsXG4gIHRpbWVVbnRpbFN0YWxlXG59IGZyb20gXCIuL3V0aWxzLmpzXCI7XG52YXIgUXVlcnlPYnNlcnZlciA9IGNsYXNzIGV4dGVuZHMgU3Vic2NyaWJhYmxlIHtcbiAgY29uc3RydWN0b3IoY2xpZW50LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuI2NsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLiNzZWxlY3RFcnJvciA9IG51bGw7XG4gICAgdGhpcy4jY3VycmVudFRoZW5hYmxlID0gcGVuZGluZ1RoZW5hYmxlKCk7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZXhwZXJpbWVudGFsX3ByZWZldGNoSW5SZW5kZXIpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRUaGVuYWJsZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcImV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyIGZlYXR1cmUgZmxhZyBpcyBub3QgZW5hYmxlZFwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5iaW5kTWV0aG9kcygpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuICAjY2xpZW50O1xuICAjY3VycmVudFF1ZXJ5ID0gdm9pZCAwO1xuICAjY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlID0gdm9pZCAwO1xuICAjY3VycmVudFJlc3VsdCA9IHZvaWQgMDtcbiAgI2N1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgI2N1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAjY3VycmVudFRoZW5hYmxlO1xuICAjc2VsZWN0RXJyb3I7XG4gICNzZWxlY3RGbjtcbiAgI3NlbGVjdFJlc3VsdDtcbiAgLy8gVGhpcyBwcm9wZXJ0eSBrZWVwcyB0cmFjayBvZiB0aGUgbGFzdCBxdWVyeSB3aXRoIGRlZmluZWQgZGF0YS5cbiAgLy8gSXQgd2lsbCBiZSB1c2VkIHRvIHBhc3MgdGhlIHByZXZpb3VzIGRhdGEgYW5kIHF1ZXJ5IHRvIHRoZSBwbGFjZWhvbGRlciBmdW5jdGlvbiBiZXR3ZWVuIHJlbmRlcnMuXG4gICNsYXN0UXVlcnlXaXRoRGVmaW5lZERhdGE7XG4gICNzdGFsZVRpbWVvdXRJZDtcbiAgI3JlZmV0Y2hJbnRlcnZhbElkO1xuICAjY3VycmVudFJlZmV0Y2hJbnRlcnZhbDtcbiAgI3RyYWNrZWRQcm9wcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGJpbmRNZXRob2RzKCkge1xuICAgIHRoaXMucmVmZXRjaCA9IHRoaXMucmVmZXRjaC5iaW5kKHRoaXMpO1xuICB9XG4gIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5zaXplID09PSAxKSB7XG4gICAgICB0aGlzLiNjdXJyZW50UXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG4gICAgICBpZiAoc2hvdWxkRmV0Y2hPbk1vdW50KHRoaXMuI2N1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLiNleGVjdXRlRmV0Y2goKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgICB0aGlzLiN1cGRhdGVUaW1lcnMoKTtcbiAgICB9XG4gIH1cbiAgb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuICBzaG91bGRGZXRjaE9uUmVjb25uZWN0KCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKFxuICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdFxuICAgICk7XG4gIH1cbiAgc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKFxuICAgICAgdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zLnJlZmV0Y2hPbldpbmRvd0ZvY3VzXG4gICAgKTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLiNjbGVhclN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMuI2NsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gICAgdGhpcy4jY3VycmVudFF1ZXJ5LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICB9XG4gIHNldE9wdGlvbnMob3B0aW9ucywgbm90aWZ5T3B0aW9ucykge1xuICAgIGNvbnN0IHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHByZXZRdWVyeSA9IHRoaXMuI2N1cnJlbnRRdWVyeTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLiNjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHZvaWQgMCAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IFwiYm9vbGVhblwiICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZXNvbHZlRW5hYmxlZCh0aGlzLm9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFeHBlY3RlZCBlbmFibGVkIHRvIGJlIGEgYm9vbGVhbiBvciBhIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBhIGJvb2xlYW5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy4jdXBkYXRlUXVlcnkoKTtcbiAgICB0aGlzLiNjdXJyZW50UXVlcnkuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIGlmIChwcmV2T3B0aW9ucy5fZGVmYXVsdGVkICYmICFzaGFsbG93RXF1YWxPYmplY3RzKHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLiNjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IFwib2JzZXJ2ZXJPcHRpb25zVXBkYXRlZFwiLFxuICAgICAgICBxdWVyeTogdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgICBvYnNlcnZlcjogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpO1xuICAgIGlmIChtb3VudGVkICYmIHNob3VsZEZldGNoT3B0aW9uYWxseShcbiAgICAgIHRoaXMuI2N1cnJlbnRRdWVyeSxcbiAgICAgIHByZXZRdWVyeSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHByZXZPcHRpb25zXG4gICAgKSkge1xuICAgICAgdGhpcy4jZXhlY3V0ZUZldGNoKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpO1xuICAgIGlmIChtb3VudGVkICYmICh0aGlzLiNjdXJyZW50UXVlcnkgIT09IHByZXZRdWVyeSB8fCByZXNvbHZlRW5hYmxlZCh0aGlzLm9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSAhPT0gcmVzb2x2ZUVuYWJsZWQocHJldk9wdGlvbnMuZW5hYmxlZCwgdGhpcy4jY3VycmVudFF1ZXJ5KSB8fCByZXNvbHZlU3RhbGVUaW1lKHRoaXMub3B0aW9ucy5zdGFsZVRpbWUsIHRoaXMuI2N1cnJlbnRRdWVyeSkgIT09IHJlc29sdmVTdGFsZVRpbWUocHJldk9wdGlvbnMuc3RhbGVUaW1lLCB0aGlzLiNjdXJyZW50UXVlcnkpKSkge1xuICAgICAgdGhpcy4jdXBkYXRlU3RhbGVUaW1lb3V0KCk7XG4gICAgfVxuICAgIGNvbnN0IG5leHRSZWZldGNoSW50ZXJ2YWwgPSB0aGlzLiNjb21wdXRlUmVmZXRjaEludGVydmFsKCk7XG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuI2N1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHJlc29sdmVFbmFibGVkKHRoaXMub3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpICE9PSByZXNvbHZlRW5hYmxlZChwcmV2T3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpIHx8IG5leHRSZWZldGNoSW50ZXJ2YWwgIT09IHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwpKSB7XG4gICAgICB0aGlzLiN1cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dFJlZmV0Y2hJbnRlcnZhbCk7XG4gICAgfVxuICB9XG4gIGdldE9wdGltaXN0aWNSZXN1bHQob3B0aW9ucykge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBvcHRpb25zKTtcbiAgICBpZiAoc2hvdWxkQXNzaWduT2JzZXJ2ZXJDdXJyZW50UHJvcGVydGllcyh0aGlzLCByZXN1bHQpKSB7XG4gICAgICB0aGlzLiNjdXJyZW50UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy4jY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB0aGlzLiNjdXJyZW50UmVzdWx0U3RhdGUgPSB0aGlzLiNjdXJyZW50UXVlcnkuc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0Q3VycmVudFJlc3VsdCgpIHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgfVxuICB0cmFja1Jlc3VsdChyZXN1bHQsIG9uUHJvcFRyYWNrZWQpIHtcbiAgICBjb25zdCB0cmFja2VkUmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cmFja2VkUmVzdWx0LCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy50cmFja1Byb3Aoa2V5KTtcbiAgICAgICAgICBvblByb3BUcmFja2VkPy4oa2V5KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB0cmFja2VkUmVzdWx0O1xuICB9XG4gIHRyYWNrUHJvcChrZXkpIHtcbiAgICB0aGlzLiN0cmFja2VkUHJvcHMuYWRkKGtleSk7XG4gIH1cbiAgZ2V0Q3VycmVudFF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50UXVlcnk7XG4gIH1cbiAgcmVmZXRjaCh7IC4uLm9wdGlvbnMgfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goe1xuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGZldGNoT3B0aW1pc3RpYyhvcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuI2NsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5mZXRjaCgpLnRoZW4oKCkgPT4gdGhpcy5jcmVhdGVSZXN1bHQocXVlcnksIGRlZmF1bHRlZE9wdGlvbnMpKTtcbiAgfVxuICBmZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy4jZXhlY3V0ZUZldGNoKHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIGNhbmNlbFJlZmV0Y2g6IGZldGNoT3B0aW9ucy5jYW5jZWxSZWZldGNoID8/IHRydWVcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgICByZXR1cm4gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgICB9KTtcbiAgfVxuICAjZXhlY3V0ZUZldGNoKGZldGNoT3B0aW9ucykge1xuICAgIHRoaXMuI3VwZGF0ZVF1ZXJ5KCk7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzLiNjdXJyZW50UXVlcnkuZmV0Y2goXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICBmZXRjaE9wdGlvbnNcbiAgICApO1xuICAgIGlmICghZmV0Y2hPcHRpb25zPy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuICAjdXBkYXRlU3RhbGVUaW1lb3V0KCkge1xuICAgIHRoaXMuI2NsZWFyU3RhbGVUaW1lb3V0KCk7XG4gICAgY29uc3Qgc3RhbGVUaW1lID0gcmVzb2x2ZVN0YWxlVGltZShcbiAgICAgIHRoaXMub3B0aW9ucy5zdGFsZVRpbWUsXG4gICAgICB0aGlzLiNjdXJyZW50UXVlcnlcbiAgICApO1xuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLiNjdXJyZW50UmVzdWx0LmlzU3RhbGUgfHwgIWlzVmFsaWRUaW1lb3V0KHN0YWxlVGltZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGltZSA9IHRpbWVVbnRpbFN0YWxlKHRoaXMuI2N1cnJlbnRSZXN1bHQuZGF0YVVwZGF0ZWRBdCwgc3RhbGVUaW1lKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGltZSArIDE7XG4gICAgdGhpcy4jc3RhbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy4jY3VycmVudFJlc3VsdC5pc1N0YWxlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCk7XG4gIH1cbiAgI2NvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCA9PT0gXCJmdW5jdGlvblwiID8gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCh0aGlzLiNjdXJyZW50UXVlcnkpIDogdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCkgPz8gZmFsc2U7XG4gIH1cbiAgI3VwZGF0ZVJlZmV0Y2hJbnRlcnZhbChuZXh0SW50ZXJ2YWwpIHtcbiAgICB0aGlzLiNjbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICAgIHRoaXMuI2N1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPSBuZXh0SW50ZXJ2YWw7XG4gICAgaWYgKGlzU2VydmVyIHx8IHJlc29sdmVFbmFibGVkKHRoaXMub3B0aW9ucy5lbmFibGVkLCB0aGlzLiNjdXJyZW50UXVlcnkpID09PSBmYWxzZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy4jY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkgfHwgdGhpcy4jY3VycmVudFJlZmV0Y2hJbnRlcnZhbCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsSW5CYWNrZ3JvdW5kIHx8IGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSkge1xuICAgICAgICB0aGlzLiNleGVjdXRlRmV0Y2goKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLiNjdXJyZW50UmVmZXRjaEludGVydmFsKTtcbiAgfVxuICAjdXBkYXRlVGltZXJzKCkge1xuICAgIHRoaXMuI3VwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMuI3VwZGF0ZVJlZmV0Y2hJbnRlcnZhbCh0aGlzLiNjb21wdXRlUmVmZXRjaEludGVydmFsKCkpO1xuICB9XG4gICNjbGVhclN0YWxlVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy4jc3RhbGVUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNzdGFsZVRpbWVvdXRJZCk7XG4gICAgICB0aGlzLiNzdGFsZVRpbWVvdXRJZCA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgI2NsZWFyUmVmZXRjaEludGVydmFsKCkge1xuICAgIGlmICh0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLiNyZWZldGNoSW50ZXJ2YWxJZCA9IHZvaWQgMDtcbiAgICB9XG4gIH1cbiAgY3JlYXRlUmVzdWx0KHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgcHJldlF1ZXJ5ID0gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICAgIGNvbnN0IHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHByZXZSZXN1bHQgPSB0aGlzLiNjdXJyZW50UmVzdWx0O1xuICAgIGNvbnN0IHByZXZSZXN1bHRTdGF0ZSA9IHRoaXMuI2N1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgICBjb25zdCBwcmV2UmVzdWx0T3B0aW9ucyA9IHRoaXMuI2N1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAgIGNvbnN0IHF1ZXJ5Q2hhbmdlID0gcXVlcnkgIT09IHByZXZRdWVyeTtcbiAgICBjb25zdCBxdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5Q2hhbmdlID8gcXVlcnkuc3RhdGUgOiB0aGlzLiNjdXJyZW50UXVlcnlJbml0aWFsU3RhdGU7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gcXVlcnk7XG4gICAgbGV0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9O1xuICAgIGxldCBpc1BsYWNlaG9sZGVyRGF0YSA9IGZhbHNlO1xuICAgIGxldCBkYXRhO1xuICAgIGlmIChvcHRpb25zLl9vcHRpbWlzdGljUmVzdWx0cykge1xuICAgICAgY29uc3QgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7XG4gICAgICBjb25zdCBmZXRjaE9uTW91bnQgPSAhbW91bnRlZCAmJiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpO1xuICAgICAgY29uc3QgZmV0Y2hPcHRpb25hbGx5ID0gbW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpO1xuICAgICAgaWYgKGZldGNoT25Nb3VudCB8fCBmZXRjaE9wdGlvbmFsbHkpIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgLi4uZmV0Y2hTdGF0ZShzdGF0ZS5kYXRhLCBxdWVyeS5vcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuX29wdGltaXN0aWNSZXN1bHRzID09PSBcImlzUmVzdG9yaW5nXCIpIHtcbiAgICAgICAgbmV3U3RhdGUuZmV0Y2hTdGF0dXMgPSBcImlkbGVcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHsgZXJyb3IsIGVycm9yVXBkYXRlZEF0LCBzdGF0dXMgfSA9IG5ld1N0YXRlO1xuICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiBuZXdTdGF0ZS5kYXRhICE9PSB2b2lkIDApIHtcbiAgICAgIGlmIChwcmV2UmVzdWx0ICYmIG5ld1N0YXRlLmRhdGEgPT09IHByZXZSZXN1bHRTdGF0ZT8uZGF0YSAmJiBvcHRpb25zLnNlbGVjdCA9PT0gdGhpcy4jc2VsZWN0Rm4pIHtcbiAgICAgICAgZGF0YSA9IHRoaXMuI3NlbGVjdFJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy4jc2VsZWN0Rm4gPSBvcHRpb25zLnNlbGVjdDtcbiAgICAgICAgICBkYXRhID0gb3B0aW9ucy5zZWxlY3QobmV3U3RhdGUuZGF0YSk7XG4gICAgICAgICAgZGF0YSA9IHJlcGxhY2VEYXRhKHByZXZSZXN1bHQ/LmRhdGEsIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICAgIHRoaXMuI3NlbGVjdFJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgIHRoaXMuI3NlbGVjdEVycm9yID0gc2VsZWN0RXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IG5ld1N0YXRlLmRhdGE7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSAhPT0gdm9pZCAwICYmIGRhdGEgPT09IHZvaWQgMCAmJiBzdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICBsZXQgcGxhY2Vob2xkZXJEYXRhO1xuICAgICAgaWYgKHByZXZSZXN1bHQ/LmlzUGxhY2Vob2xkZXJEYXRhICYmIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhID09PSBwcmV2UmVzdWx0T3B0aW9ucz8ucGxhY2Vob2xkZXJEYXRhKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHByZXZSZXN1bHQuZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEoXG4gICAgICAgICAgdGhpcy4jbGFzdFF1ZXJ5V2l0aERlZmluZWREYXRhPy5zdGF0ZS5kYXRhLFxuICAgICAgICAgIHRoaXMuI2xhc3RRdWVyeVdpdGhEZWZpbmVkRGF0YVxuICAgICAgICApIDogb3B0aW9ucy5wbGFjZWhvbGRlckRhdGE7XG4gICAgICAgIGlmIChvcHRpb25zLnNlbGVjdCAmJiBwbGFjZWhvbGRlckRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBvcHRpb25zLnNlbGVjdChwbGFjZWhvbGRlckRhdGEpO1xuICAgICAgICAgICAgdGhpcy4jc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIH0gY2F0Y2ggKHNlbGVjdEVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLiNzZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBsYWNlaG9sZGVyRGF0YSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHN0YXR1cyA9IFwic3VjY2Vzc1wiO1xuICAgICAgICBkYXRhID0gcmVwbGFjZURhdGEoXG4gICAgICAgICAgcHJldlJlc3VsdD8uZGF0YSxcbiAgICAgICAgICBwbGFjZWhvbGRlckRhdGEsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICBpc1BsYWNlaG9sZGVyRGF0YSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLiNzZWxlY3RFcnJvcikge1xuICAgICAgZXJyb3IgPSB0aGlzLiNzZWxlY3RFcnJvcjtcbiAgICAgIGRhdGEgPSB0aGlzLiNzZWxlY3RSZXN1bHQ7XG4gICAgICBlcnJvclVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzdGF0dXMgPSBcImVycm9yXCI7XG4gICAgfVxuICAgIGNvbnN0IGlzRmV0Y2hpbmcgPSBuZXdTdGF0ZS5mZXRjaFN0YXR1cyA9PT0gXCJmZXRjaGluZ1wiO1xuICAgIGNvbnN0IGlzUGVuZGluZyA9IHN0YXR1cyA9PT0gXCJwZW5kaW5nXCI7XG4gICAgY29uc3QgaXNFcnJvciA9IHN0YXR1cyA9PT0gXCJlcnJvclwiO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzUGVuZGluZyAmJiBpc0ZldGNoaW5nO1xuICAgIGNvbnN0IGhhc0RhdGEgPSBkYXRhICE9PSB2b2lkIDA7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzLFxuICAgICAgZmV0Y2hTdGF0dXM6IG5ld1N0YXRlLmZldGNoU3RhdHVzLFxuICAgICAgaXNQZW5kaW5nLFxuICAgICAgaXNTdWNjZXNzOiBzdGF0dXMgPT09IFwic3VjY2Vzc1wiLFxuICAgICAgaXNFcnJvcixcbiAgICAgIGlzSW5pdGlhbExvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgIGlzTG9hZGluZyxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBuZXdTdGF0ZS5kYXRhVXBkYXRlZEF0LFxuICAgICAgZXJyb3IsXG4gICAgICBlcnJvclVwZGF0ZWRBdCxcbiAgICAgIGZhaWx1cmVDb3VudDogbmV3U3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQsXG4gICAgICBmYWlsdXJlUmVhc29uOiBuZXdTdGF0ZS5mZXRjaEZhaWx1cmVSZWFzb24sXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiBuZXdTdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGVkOiBuZXdTdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiAwIHx8IG5ld1N0YXRlLmVycm9yVXBkYXRlQ291bnQgPiAwLFxuICAgICAgaXNGZXRjaGVkQWZ0ZXJNb3VudDogbmV3U3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZGF0YVVwZGF0ZUNvdW50IHx8IG5ld1N0YXRlLmVycm9yVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5lcnJvclVwZGF0ZUNvdW50LFxuICAgICAgaXNGZXRjaGluZyxcbiAgICAgIGlzUmVmZXRjaGluZzogaXNGZXRjaGluZyAmJiAhaXNQZW5kaW5nLFxuICAgICAgaXNMb2FkaW5nRXJyb3I6IGlzRXJyb3IgJiYgIWhhc0RhdGEsXG4gICAgICBpc1BhdXNlZDogbmV3U3RhdGUuZmV0Y2hTdGF0dXMgPT09IFwicGF1c2VkXCIsXG4gICAgICBpc1BsYWNlaG9sZGVyRGF0YSxcbiAgICAgIGlzUmVmZXRjaEVycm9yOiBpc0Vycm9yICYmIGhhc0RhdGEsXG4gICAgICBpc1N0YWxlOiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgIHJlZmV0Y2g6IHRoaXMucmVmZXRjaCxcbiAgICAgIHByb21pc2U6IHRoaXMuI2N1cnJlbnRUaGVuYWJsZVxuICAgIH07XG4gICAgY29uc3QgbmV4dFJlc3VsdCA9IHJlc3VsdDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyKSB7XG4gICAgICBjb25zdCBmaW5hbGl6ZVRoZW5hYmxlSWZQb3NzaWJsZSA9ICh0aGVuYWJsZSkgPT4ge1xuICAgICAgICBpZiAobmV4dFJlc3VsdC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgIHRoZW5hYmxlLnJlamVjdChuZXh0UmVzdWx0LmVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXh0UmVzdWx0LmRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHRoZW5hYmxlLnJlc29sdmUobmV4dFJlc3VsdC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlY3JlYXRlVGhlbmFibGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLiNjdXJyZW50VGhlbmFibGUgPSBuZXh0UmVzdWx0LnByb21pc2UgPSBwZW5kaW5nVGhlbmFibGUoKTtcbiAgICAgICAgZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUocGVuZGluZyk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcHJldlRoZW5hYmxlID0gdGhpcy4jY3VycmVudFRoZW5hYmxlO1xuICAgICAgc3dpdGNoIChwcmV2VGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCA9PT0gcHJldlF1ZXJ5LnF1ZXJ5SGFzaCkge1xuICAgICAgICAgICAgZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUocHJldlRoZW5hYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICBpZiAobmV4dFJlc3VsdC5zdGF0dXMgPT09IFwiZXJyb3JcIiB8fCBuZXh0UmVzdWx0LmRhdGEgIT09IHByZXZUaGVuYWJsZS52YWx1ZSkge1xuICAgICAgICAgICAgcmVjcmVhdGVUaGVuYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICAgICAgaWYgKG5leHRSZXN1bHQuc3RhdHVzICE9PSBcImVycm9yXCIgfHwgbmV4dFJlc3VsdC5lcnJvciAhPT0gcHJldlRoZW5hYmxlLnJlYXNvbikge1xuICAgICAgICAgICAgcmVjcmVhdGVUaGVuYWJsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRSZXN1bHQ7XG4gIH1cbiAgdXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpIHtcbiAgICBjb25zdCBwcmV2UmVzdWx0ID0gdGhpcy4jY3VycmVudFJlc3VsdDtcbiAgICBjb25zdCBuZXh0UmVzdWx0ID0gdGhpcy5jcmVhdGVSZXN1bHQodGhpcy4jY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuI2N1cnJlbnRSZXN1bHRTdGF0ZSA9IHRoaXMuI2N1cnJlbnRRdWVyeS5zdGF0ZTtcbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBpZiAodGhpcy4jY3VycmVudFJlc3VsdFN0YXRlLmRhdGEgIT09IHZvaWQgMCkge1xuICAgICAgdGhpcy4jbGFzdFF1ZXJ5V2l0aERlZmluZWREYXRhID0gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICAgIH1cbiAgICBpZiAoc2hhbGxvd0VxdWFsT2JqZWN0cyhuZXh0UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0ID0gbmV4dFJlc3VsdDtcbiAgICBjb25zdCBkZWZhdWx0Tm90aWZ5T3B0aW9ucyA9IHt9O1xuICAgIGNvbnN0IHNob3VsZE5vdGlmeUxpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIGlmICghcHJldlJlc3VsdCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgbm90aWZ5T25DaGFuZ2VQcm9wcyB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgY29uc3Qgbm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlID0gdHlwZW9mIG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09IFwiZnVuY3Rpb25cIiA/IG5vdGlmeU9uQ2hhbmdlUHJvcHMoKSA6IG5vdGlmeU9uQ2hhbmdlUHJvcHM7XG4gICAgICBpZiAobm90aWZ5T25DaGFuZ2VQcm9wc1ZhbHVlID09PSBcImFsbFwiIHx8ICFub3RpZnlPbkNoYW5nZVByb3BzVmFsdWUgJiYgIXRoaXMuI3RyYWNrZWRQcm9wcy5zaXplKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5jbHVkZWRQcm9wcyA9IG5ldyBTZXQoXG4gICAgICAgIG5vdGlmeU9uQ2hhbmdlUHJvcHNWYWx1ZSA/PyB0aGlzLiN0cmFja2VkUHJvcHNcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgICBpbmNsdWRlZFByb3BzLmFkZChcImVycm9yXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuI2N1cnJlbnRSZXN1bHQpLnNvbWUoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuI2N1cnJlbnRSZXN1bHRbdHlwZWRLZXldICE9PSBwcmV2UmVzdWx0W3R5cGVkS2V5XTtcbiAgICAgICAgcmV0dXJuIGNoYW5nZWQgJiYgaW5jbHVkZWRQcm9wcy5oYXModHlwZWRLZXkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBpZiAobm90aWZ5T3B0aW9ucz8ubGlzdGVuZXJzICE9PSBmYWxzZSAmJiBzaG91bGROb3RpZnlMaXN0ZW5lcnMoKSkge1xuICAgICAgZGVmYXVsdE5vdGlmeU9wdGlvbnMubGlzdGVuZXJzID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy4jbm90aWZ5KHsgLi4uZGVmYXVsdE5vdGlmeU9wdGlvbnMsIC4uLm5vdGlmeU9wdGlvbnMgfSk7XG4gIH1cbiAgI3VwZGF0ZVF1ZXJ5KCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLiNjbGllbnQsIHRoaXMub3B0aW9ucyk7XG4gICAgaWYgKHF1ZXJ5ID09PSB0aGlzLiNjdXJyZW50UXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJldlF1ZXJ5ID0gdGhpcy4jY3VycmVudFF1ZXJ5O1xuICAgIHRoaXMuI2N1cnJlbnRRdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuI2N1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICBwcmV2UXVlcnk/LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgICAgcXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG4gICAgfVxuICB9XG4gIG9uUXVlcnlVcGRhdGUoKSB7XG4gICAgdGhpcy51cGRhdGVSZXN1bHQoKTtcbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy4jdXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9XG4gICNub3RpZnkobm90aWZ5T3B0aW9ucykge1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goKCkgPT4ge1xuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMubGlzdGVuZXJzKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgbGlzdGVuZXIodGhpcy4jY3VycmVudFJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy4jY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5ub3RpZnkoe1xuICAgICAgICBxdWVyeTogdGhpcy4jY3VycmVudFF1ZXJ5LFxuICAgICAgICB0eXBlOiBcIm9ic2VydmVyUmVzdWx0c1VwZGF0ZWRcIlxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn07XG5mdW5jdGlvbiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcmVzb2x2ZUVuYWJsZWQob3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgIT09IGZhbHNlICYmIHF1ZXJ5LnN0YXRlLmRhdGEgPT09IHZvaWQgMCAmJiAhKHF1ZXJ5LnN0YXRlLnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIG9wdGlvbnMucmV0cnlPbk1vdW50ID09PSBmYWxzZSk7XG59XG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB8fCBxdWVyeS5zdGF0ZS5kYXRhICE9PSB2b2lkIDAgJiYgc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgb3B0aW9ucy5yZWZldGNoT25Nb3VudCk7XG59XG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBmaWVsZCkge1xuICBpZiAocmVzb2x2ZUVuYWJsZWQob3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgZmllbGQgPT09IFwiZnVuY3Rpb25cIiA/IGZpZWxkKHF1ZXJ5KSA6IGZpZWxkO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gXCJhbHdheXNcIiB8fCB2YWx1ZSAhPT0gZmFsc2UgJiYgaXNTdGFsZShxdWVyeSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKSB7XG4gIHJldHVybiAocXVlcnkgIT09IHByZXZRdWVyeSB8fCByZXNvbHZlRW5hYmxlZChwcmV2T3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgPT09IGZhbHNlKSAmJiAoIW9wdGlvbnMuc3VzcGVuc2UgfHwgcXVlcnkuc3RhdGUuc3RhdHVzICE9PSBcImVycm9yXCIpICYmIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaXNTdGFsZShxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcmVzb2x2ZUVuYWJsZWQob3B0aW9ucy5lbmFibGVkLCBxdWVyeSkgIT09IGZhbHNlICYmIHF1ZXJ5LmlzU3RhbGVCeVRpbWUocmVzb2x2ZVN0YWxlVGltZShvcHRpb25zLnN0YWxlVGltZSwgcXVlcnkpKTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFzc2lnbk9ic2VydmVyQ3VycmVudFByb3BlcnRpZXMob2JzZXJ2ZXIsIG9wdGltaXN0aWNSZXN1bHQpIHtcbiAgaWYgKCFzaGFsbG93RXF1YWxPYmplY3RzKG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSwgb3B0aW1pc3RpY1Jlc3VsdCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQge1xuICBRdWVyeU9ic2VydmVyXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cXVlcnlPYnNlcnZlci5qcy5tYXAiLCIvLyBzcmMvbXV0YXRpb25PYnNlcnZlci50c1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFN0YXRlIH0gZnJvbSBcIi4vbXV0YXRpb24uanNcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tIFwiLi9ub3RpZnlNYW5hZ2VyLmpzXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tIFwiLi9zdWJzY3JpYmFibGUuanNcIjtcbmltcG9ydCB7IGhhc2hLZXksIHNoYWxsb3dFcXVhbE9iamVjdHMgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBjbGFzcyBleHRlbmRzIFN1YnNjcmliYWJsZSB7XG4gICNjbGllbnQ7XG4gICNjdXJyZW50UmVzdWx0ID0gdm9pZCAwO1xuICAjY3VycmVudE11dGF0aW9uO1xuICAjbXV0YXRlT3B0aW9ucztcbiAgY29uc3RydWN0b3IoY2xpZW50LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLiNjbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHRoaXMuYmluZE1ldGhvZHMoKTtcbiAgICB0aGlzLiN1cGRhdGVSZXN1bHQoKTtcbiAgfVxuICBiaW5kTWV0aG9kcygpIHtcbiAgICB0aGlzLm11dGF0ZSA9IHRoaXMubXV0YXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZXNldCA9IHRoaXMucmVzZXQuYmluZCh0aGlzKTtcbiAgfVxuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLiNjbGllbnQuZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgICBpZiAoIXNoYWxsb3dFcXVhbE9iamVjdHModGhpcy5vcHRpb25zLCBwcmV2T3B0aW9ucykpIHtcbiAgICAgIHRoaXMuI2NsaWVudC5nZXRNdXRhdGlvbkNhY2hlKCkubm90aWZ5KHtcbiAgICAgICAgdHlwZTogXCJvYnNlcnZlck9wdGlvbnNVcGRhdGVkXCIsXG4gICAgICAgIG11dGF0aW9uOiB0aGlzLiNjdXJyZW50TXV0YXRpb24sXG4gICAgICAgIG9ic2VydmVyOiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHByZXZPcHRpb25zPy5tdXRhdGlvbktleSAmJiB0aGlzLm9wdGlvbnMubXV0YXRpb25LZXkgJiYgaGFzaEtleShwcmV2T3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hLZXkodGhpcy5vcHRpb25zLm11dGF0aW9uS2V5KSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jY3VycmVudE11dGF0aW9uPy5zdGF0ZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24uc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy4jY3VycmVudE11dGF0aW9uPy5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICB9XG4gIH1cbiAgb25NdXRhdGlvblVwZGF0ZShhY3Rpb24pIHtcbiAgICB0aGlzLiN1cGRhdGVSZXN1bHQoKTtcbiAgICB0aGlzLiNub3RpZnkoYWN0aW9uKTtcbiAgfVxuICBnZXRDdXJyZW50UmVzdWx0KCkge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50UmVzdWx0O1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbj8ucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gICAgdGhpcy4jY3VycmVudE11dGF0aW9uID0gdm9pZCAwO1xuICAgIHRoaXMuI3VwZGF0ZVJlc3VsdCgpO1xuICAgIHRoaXMuI25vdGlmeSgpO1xuICB9XG4gIG11dGF0ZSh2YXJpYWJsZXMsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiNtdXRhdGVPcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLiNjdXJyZW50TXV0YXRpb24/LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbiA9IHRoaXMuI2NsaWVudC5nZXRNdXRhdGlvbkNhY2hlKCkuYnVpbGQodGhpcy4jY2xpZW50LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuI2N1cnJlbnRNdXRhdGlvbi5hZGRPYnNlcnZlcih0aGlzKTtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudE11dGF0aW9uLmV4ZWN1dGUodmFyaWFibGVzKTtcbiAgfVxuICAjdXBkYXRlUmVzdWx0KCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy4jY3VycmVudE11dGF0aW9uPy5zdGF0ZSA/PyBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLiNjdXJyZW50UmVzdWx0ID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBpc1BlbmRpbmc6IHN0YXRlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIsXG4gICAgICBpc1N1Y2Nlc3M6IHN0YXRlLnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIsXG4gICAgICBpc0Vycm9yOiBzdGF0ZS5zdGF0dXMgPT09IFwiZXJyb3JcIixcbiAgICAgIGlzSWRsZTogc3RhdGUuc3RhdHVzID09PSBcImlkbGVcIixcbiAgICAgIG11dGF0ZTogdGhpcy5tdXRhdGUsXG4gICAgICByZXNldDogdGhpcy5yZXNldFxuICAgIH07XG4gIH1cbiAgI25vdGlmeShhY3Rpb24pIHtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNtdXRhdGVPcHRpb25zICYmIHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy4jY3VycmVudFJlc3VsdC52YXJpYWJsZXM7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLiNjdXJyZW50UmVzdWx0LmNvbnRleHQ7XG4gICAgICAgIGlmIChhY3Rpb24/LnR5cGUgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgdGhpcy4jbXV0YXRlT3B0aW9ucy5vblN1Y2Nlc3M/LihhY3Rpb24uZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICAgICAgICB0aGlzLiNtdXRhdGVPcHRpb25zLm9uU2V0dGxlZD8uKGFjdGlvbi5kYXRhLCBudWxsLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbj8udHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgdGhpcy4jbXV0YXRlT3B0aW9ucy5vbkVycm9yPy4oYWN0aW9uLmVycm9yLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgICAgICAgIHRoaXMuI211dGF0ZU9wdGlvbnMub25TZXR0bGVkPy4oXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgICB2YXJpYWJsZXMsXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIodGhpcy4jY3VycmVudFJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufTtcbmV4cG9ydCB7XG4gIE11dGF0aW9uT2JzZXJ2ZXJcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdXRhdGlvbk9ic2VydmVyLmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvUXVlcnlDbGllbnRQcm92aWRlci50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG52YXIgUXVlcnlDbGllbnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChcbiAgdm9pZCAwXG4pO1xudmFyIHVzZVF1ZXJ5Q2xpZW50ID0gKHF1ZXJ5Q2xpZW50KSA9PiB7XG4gIGNvbnN0IGNsaWVudCA9IFJlYWN0LnVzZUNvbnRleHQoUXVlcnlDbGllbnRDb250ZXh0KTtcbiAgaWYgKHF1ZXJ5Q2xpZW50KSB7XG4gICAgcmV0dXJuIHF1ZXJ5Q2xpZW50O1xuICB9XG4gIGlmICghY2xpZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lXCIpO1xuICB9XG4gIHJldHVybiBjbGllbnQ7XG59O1xudmFyIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgPSAoe1xuICBjbGllbnQsXG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2xpZW50Lm1vdW50KCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsaWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgfSwgW2NsaWVudF0pO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChRdWVyeUNsaWVudENvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNsaWVudCwgY2hpbGRyZW4gfSk7XG59O1xuZXhwb3J0IHtcbiAgUXVlcnlDbGllbnRDb250ZXh0LFxuICBRdWVyeUNsaWVudFByb3ZpZGVyLFxuICB1c2VRdWVyeUNsaWVudFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVF1ZXJ5Q2xpZW50UHJvdmlkZXIuanMubWFwIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9pc1Jlc3RvcmluZy50c1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG52YXIgSXNSZXN0b3JpbmdDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7XG52YXIgdXNlSXNSZXN0b3JpbmcgPSAoKSA9PiBSZWFjdC51c2VDb250ZXh0KElzUmVzdG9yaW5nQ29udGV4dCk7XG52YXIgSXNSZXN0b3JpbmdQcm92aWRlciA9IElzUmVzdG9yaW5nQ29udGV4dC5Qcm92aWRlcjtcbmV4cG9ydCB7XG4gIElzUmVzdG9yaW5nUHJvdmlkZXIsXG4gIHVzZUlzUmVzdG9yaW5nXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNSZXN0b3JpbmcuanMubWFwIiwiXCJ1c2UgY2xpZW50XCI7XG5cbi8vIHNyYy9RdWVyeUVycm9yUmVzZXRCb3VuZGFyeS50c3hcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBjcmVhdGVWYWx1ZSgpIHtcbiAgbGV0IGlzUmVzZXQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjbGVhclJlc2V0OiAoKSA9PiB7XG4gICAgICBpc1Jlc2V0ID0gZmFsc2U7XG4gICAgfSxcbiAgICByZXNldDogKCkgPT4ge1xuICAgICAgaXNSZXNldCA9IHRydWU7XG4gICAgfSxcbiAgICBpc1Jlc2V0OiAoKSA9PiB7XG4gICAgICByZXR1cm4gaXNSZXNldDtcbiAgICB9XG4gIH07XG59XG52YXIgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChjcmVhdGVWYWx1ZSgpKTtcbnZhciB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9ICgpID0+IFJlYWN0LnVzZUNvbnRleHQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0KTtcbnZhciBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9ICh7XG4gIGNoaWxkcmVuXG59KSA9PiB7XG4gIGNvbnN0IFt2YWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiBjcmVhdGVWYWx1ZSgpKTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlLCBjaGlsZHJlbjogdHlwZW9mIGNoaWxkcmVuID09PSBcImZ1bmN0aW9uXCIgPyBjaGlsZHJlbih2YWx1ZSkgOiBjaGlsZHJlbiB9KTtcbn07XG5leHBvcnQge1xuICBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSxcbiAgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWVyeUVycm9yUmVzZXRCb3VuZGFyeS5qcy5tYXAiLCIvLyBzcmMvdXRpbHMudHNcbmZ1bmN0aW9uIHNob3VsZFRocm93RXJyb3IodGhyb3dFcnJvciwgcGFyYW1zKSB7XG4gIGlmICh0eXBlb2YgdGhyb3dFcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoLi4ucGFyYW1zKTtcbiAgfVxuICByZXR1cm4gISF0aHJvd0Vycm9yO1xufVxuZnVuY3Rpb24gbm9vcCgpIHtcbn1cbmV4cG9ydCB7XG4gIG5vb3AsXG4gIHNob3VsZFRocm93RXJyb3Jcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL2Vycm9yQm91bmRhcnlVdGlscy50c1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBzaG91bGRUaHJvd0Vycm9yIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbnZhciBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5ID0gKG9wdGlvbnMsIGVycm9yUmVzZXRCb3VuZGFyeSkgPT4ge1xuICBpZiAob3B0aW9ucy5zdXNwZW5zZSB8fCBvcHRpb25zLnRocm93T25FcnJvciB8fCBvcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyKSB7XG4gICAgaWYgKCFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpKSB7XG4gICAgICBvcHRpb25zLnJldHJ5T25Nb3VudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufTtcbnZhciB1c2VDbGVhclJlc2V0RXJyb3JCb3VuZGFyeSA9IChlcnJvclJlc2V0Qm91bmRhcnkpID0+IHtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICB9LCBbZXJyb3JSZXNldEJvdW5kYXJ5XSk7XG59O1xudmFyIGdldEhhc0Vycm9yID0gKHtcbiAgcmVzdWx0LFxuICBlcnJvclJlc2V0Qm91bmRhcnksXG4gIHRocm93T25FcnJvcixcbiAgcXVlcnlcbn0pID0+IHtcbiAgcmV0dXJuIHJlc3VsdC5pc0Vycm9yICYmICFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpICYmICFyZXN1bHQuaXNGZXRjaGluZyAmJiBxdWVyeSAmJiBzaG91bGRUaHJvd0Vycm9yKHRocm93T25FcnJvciwgW3Jlc3VsdC5lcnJvciwgcXVlcnldKTtcbn07XG5leHBvcnQge1xuICBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5LFxuICBnZXRIYXNFcnJvcixcbiAgdXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvckJvdW5kYXJ5VXRpbHMuanMubWFwIiwiLy8gc3JjL3N1c3BlbnNlLnRzXG52YXIgZGVmYXVsdFRocm93T25FcnJvciA9IChfZXJyb3IsIHF1ZXJ5KSA9PiBxdWVyeS5zdGF0ZS5kYXRhID09PSB2b2lkIDA7XG52YXIgZW5zdXJlU3VzcGVuc2VUaW1lcnMgPSAoZGVmYXVsdGVkT3B0aW9ucykgPT4ge1xuICBjb25zdCBvcmlnaW5hbFN0YWxlVGltZSA9IGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lO1xuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lID0gdHlwZW9mIG9yaWdpbmFsU3RhbGVUaW1lID09PSBcImZ1bmN0aW9uXCIgPyAoLi4uYXJncykgPT4gTWF0aC5tYXgob3JpZ2luYWxTdGFsZVRpbWUoLi4uYXJncyksIDFlMykgOiBNYXRoLm1heChvcmlnaW5hbFN0YWxlVGltZSA/PyAxZTMsIDFlMyk7XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLmdjVGltZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5nY1RpbWUgPSBNYXRoLm1heChkZWZhdWx0ZWRPcHRpb25zLmdjVGltZSwgMWUzKTtcbiAgICB9XG4gIH1cbn07XG52YXIgd2lsbEZldGNoID0gKHJlc3VsdCwgaXNSZXN0b3JpbmcpID0+IHJlc3VsdC5pc0xvYWRpbmcgJiYgcmVzdWx0LmlzRmV0Y2hpbmcgJiYgIWlzUmVzdG9yaW5nO1xudmFyIHNob3VsZFN1c3BlbmQgPSAoZGVmYXVsdGVkT3B0aW9ucywgcmVzdWx0KSA9PiBkZWZhdWx0ZWRPcHRpb25zPy5zdXNwZW5zZSAmJiByZXN1bHQuaXNQZW5kaW5nO1xudmFyIGZldGNoT3B0aW1pc3RpYyA9IChkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlciwgZXJyb3JSZXNldEJvdW5kYXJ5KSA9PiBvYnNlcnZlci5mZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucykuY2F0Y2goKCkgPT4ge1xuICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xufSk7XG5leHBvcnQge1xuICBkZWZhdWx0VGhyb3dPbkVycm9yLFxuICBlbnN1cmVTdXNwZW5zZVRpbWVycyxcbiAgZmV0Y2hPcHRpbWlzdGljLFxuICBzaG91bGRTdXNwZW5kLFxuICB3aWxsRmV0Y2hcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdXNwZW5zZS5qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcblxuLy8gc3JjL3VzZUJhc2VRdWVyeS50c1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBpc1NlcnZlciwgbm90aWZ5TWFuYWdlciB9IGZyb20gXCJAdGFuc3RhY2svcXVlcnktY29yZVwiO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiLi9RdWVyeUNsaWVudFByb3ZpZGVyLmpzXCI7XG5pbXBvcnQgeyB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSB9IGZyb20gXCIuL1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQge1xuICBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5LFxuICBnZXRIYXNFcnJvcixcbiAgdXNlQ2xlYXJSZXNldEVycm9yQm91bmRhcnlcbn0gZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVV0aWxzLmpzXCI7XG5pbXBvcnQgeyB1c2VJc1Jlc3RvcmluZyB9IGZyb20gXCIuL2lzUmVzdG9yaW5nLmpzXCI7XG5pbXBvcnQge1xuICBlbnN1cmVTdXNwZW5zZVRpbWVycyxcbiAgZmV0Y2hPcHRpbWlzdGljLFxuICBzaG91bGRTdXNwZW5kLFxuICB3aWxsRmV0Y2hcbn0gZnJvbSBcIi4vc3VzcGVuc2UuanNcIjtcbmltcG9ydCB7IG5vb3AgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZnVuY3Rpb24gdXNlQmFzZVF1ZXJ5KG9wdGlvbnMsIE9ic2VydmVyLCBxdWVyeUNsaWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0JhZCBhcmd1bWVudCB0eXBlLiBTdGFydGluZyB3aXRoIHY1LCBvbmx5IHRoZSBcIk9iamVjdFwiIGZvcm0gaXMgYWxsb3dlZCB3aGVuIGNhbGxpbmcgcXVlcnkgcmVsYXRlZCBmdW5jdGlvbnMuIFBsZWFzZSB1c2UgdGhlIGVycm9yIHN0YWNrIHRvIGZpbmQgdGhlIGN1bHByaXQgY2FsbC4gTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vdGFuc3RhY2suY29tL3F1ZXJ5L2xhdGVzdC9kb2NzL3JlYWN0L2d1aWRlcy9taWdyYXRpbmctdG8tdjUjc3VwcG9ydHMtYS1zaW5nbGUtc2lnbmF0dXJlLW9uZS1vYmplY3QnXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjb25zdCBjbGllbnQgPSB1c2VRdWVyeUNsaWVudChxdWVyeUNsaWVudCk7XG4gIGNvbnN0IGlzUmVzdG9yaW5nID0gdXNlSXNSZXN0b3JpbmcoKTtcbiAgY29uc3QgZXJyb3JSZXNldEJvdW5kYXJ5ID0gdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoKTtcbiAgY29uc3QgZGVmYXVsdGVkT3B0aW9ucyA9IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICBjbGllbnQuZ2V0RGVmYXVsdE9wdGlvbnMoKS5xdWVyaWVzPy5fZXhwZXJpbWVudGFsX2JlZm9yZVF1ZXJ5Py4oXG4gICAgZGVmYXVsdGVkT3B0aW9uc1xuICApO1xuICBkZWZhdWx0ZWRPcHRpb25zLl9vcHRpbWlzdGljUmVzdWx0cyA9IGlzUmVzdG9yaW5nID8gXCJpc1Jlc3RvcmluZ1wiIDogXCJvcHRpbWlzdGljXCI7XG4gIGVuc3VyZVN1c3BlbnNlVGltZXJzKGRlZmF1bHRlZE9wdGlvbnMpO1xuICBlbnN1cmVQcmV2ZW50RXJyb3JCb3VuZGFyeVJldHJ5KGRlZmF1bHRlZE9wdGlvbnMsIGVycm9yUmVzZXRCb3VuZGFyeSk7XG4gIHVzZUNsZWFyUmVzZXRFcnJvckJvdW5kYXJ5KGVycm9yUmVzZXRCb3VuZGFyeSk7XG4gIGNvbnN0IGlzTmV3Q2FjaGVFbnRyeSA9ICFjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmdldChkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCk7XG4gIGNvbnN0IFtvYnNlcnZlcl0gPSBSZWFjdC51c2VTdGF0ZShcbiAgICAoKSA9PiBuZXcgT2JzZXJ2ZXIoXG4gICAgICBjbGllbnQsXG4gICAgICBkZWZhdWx0ZWRPcHRpb25zXG4gICAgKVxuICApO1xuICBjb25zdCByZXN1bHQgPSBvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnMpO1xuICBjb25zdCBzaG91bGRTdWJzY3JpYmUgPSAhaXNSZXN0b3JpbmcgJiYgb3B0aW9ucy5zdWJzY3JpYmVkICE9PSBmYWxzZTtcbiAgUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAob25TdG9yZUNoYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHNob3VsZFN1YnNjcmliZSA/IG9ic2VydmVyLnN1YnNjcmliZShub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMob25TdG9yZUNoYW5nZSkpIDogbm9vcDtcbiAgICAgICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KCk7XG4gICAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICAgIH0sXG4gICAgICBbb2JzZXJ2ZXIsIHNob3VsZFN1YnNjcmliZV1cbiAgICApLFxuICAgICgpID0+IG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSxcbiAgICAoKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KClcbiAgKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKGRlZmF1bHRlZE9wdGlvbnMsIHsgbGlzdGVuZXJzOiBmYWxzZSB9KTtcbiAgfSwgW2RlZmF1bHRlZE9wdGlvbnMsIG9ic2VydmVyXSk7XG4gIGlmIChzaG91bGRTdXNwZW5kKGRlZmF1bHRlZE9wdGlvbnMsIHJlc3VsdCkpIHtcbiAgICB0aHJvdyBmZXRjaE9wdGltaXN0aWMoZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXIsIGVycm9yUmVzZXRCb3VuZGFyeSk7XG4gIH1cbiAgaWYgKGdldEhhc0Vycm9yKHtcbiAgICByZXN1bHQsXG4gICAgZXJyb3JSZXNldEJvdW5kYXJ5LFxuICAgIHRocm93T25FcnJvcjogZGVmYXVsdGVkT3B0aW9ucy50aHJvd09uRXJyb3IsXG4gICAgcXVlcnk6IGNsaWVudC5nZXRRdWVyeUNhY2hlKCkuZ2V0KGRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoKVxuICB9KSkge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICA7XG4gIGNsaWVudC5nZXREZWZhdWx0T3B0aW9ucygpLnF1ZXJpZXM/Ll9leHBlcmltZW50YWxfYWZ0ZXJRdWVyeT8uKFxuICAgIGRlZmF1bHRlZE9wdGlvbnMsXG4gICAgcmVzdWx0XG4gICk7XG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLmV4cGVyaW1lbnRhbF9wcmVmZXRjaEluUmVuZGVyICYmICFpc1NlcnZlciAmJiB3aWxsRmV0Y2gocmVzdWx0LCBpc1Jlc3RvcmluZykpIHtcbiAgICBjb25zdCBwcm9taXNlID0gaXNOZXdDYWNoZUVudHJ5ID8gKFxuICAgICAgLy8gRmV0Y2ggaW1tZWRpYXRlbHkgb24gcmVuZGVyIGluIG9yZGVyIHRvIGVuc3VyZSBgLnByb21pc2VgIGlzIHJlc29sdmVkIGV2ZW4gaWYgdGhlIGNvbXBvbmVudCBpcyB1bm1vdW50ZWRcbiAgICAgIGZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlciwgZXJyb3JSZXNldEJvdW5kYXJ5KVxuICAgICkgOiAoXG4gICAgICAvLyBzdWJzY3JpYmUgdG8gdGhlIFwiY2FjaGUgcHJvbWlzZVwiIHNvIHRoYXQgd2UgY2FuIGZpbmFsaXplIHRoZSBjdXJyZW50VGhlbmFibGUgb25jZSBkYXRhIGNvbWVzIGluXG4gICAgICBjbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmdldChkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCk/LnByb21pc2VcbiAgICApO1xuICAgIHByb21pc2U/LmNhdGNoKG5vb3ApLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIudXBkYXRlUmVzdWx0KCk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuICFkZWZhdWx0ZWRPcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMgPyBvYnNlcnZlci50cmFja1Jlc3VsdChyZXN1bHQpIDogcmVzdWx0O1xufVxuZXhwb3J0IHtcbiAgdXNlQmFzZVF1ZXJ5XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlQmFzZVF1ZXJ5LmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvdXNlUXVlcnkudHNcbmltcG9ydCB7IFF1ZXJ5T2JzZXJ2ZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3F1ZXJ5LWNvcmVcIjtcbmltcG9ydCB7IHVzZUJhc2VRdWVyeSB9IGZyb20gXCIuL3VzZUJhc2VRdWVyeS5qc1wiO1xuZnVuY3Rpb24gdXNlUXVlcnkob3B0aW9ucywgcXVlcnlDbGllbnQpIHtcbiAgcmV0dXJuIHVzZUJhc2VRdWVyeShvcHRpb25zLCBRdWVyeU9ic2VydmVyLCBxdWVyeUNsaWVudCk7XG59XG5leHBvcnQge1xuICB1c2VRdWVyeVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVF1ZXJ5LmpzLm1hcCIsIlwidXNlIGNsaWVudFwiO1xuXG4vLyBzcmMvdXNlTXV0YXRpb24udHNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTXV0YXRpb25PYnNlcnZlciwgbm90aWZ5TWFuYWdlciB9IGZyb20gXCJAdGFuc3RhY2svcXVlcnktY29yZVwiO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiLi9RdWVyeUNsaWVudFByb3ZpZGVyLmpzXCI7XG5pbXBvcnQgeyBub29wLCBzaG91bGRUaHJvd0Vycm9yIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmZ1bmN0aW9uIHVzZU11dGF0aW9uKG9wdGlvbnMsIHF1ZXJ5Q2xpZW50KSB7XG4gIGNvbnN0IGNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KHF1ZXJ5Q2xpZW50KTtcbiAgY29uc3QgW29ic2VydmVyXSA9IFJlYWN0LnVzZVN0YXRlKFxuICAgICgpID0+IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgY2xpZW50LFxuICAgICAgb3B0aW9uc1xuICAgIClcbiAgKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBvYnNlcnZlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9LCBbb2JzZXJ2ZXIsIG9wdGlvbnNdKTtcbiAgY29uc3QgcmVzdWx0ID0gUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgICAob25TdG9yZUNoYW5nZSkgPT4gb2JzZXJ2ZXIuc3Vic2NyaWJlKG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhvblN0b3JlQ2hhbmdlKSksXG4gICAgICBbb2JzZXJ2ZXJdXG4gICAgKSxcbiAgICAoKSA9PiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCksXG4gICAgKCkgPT4gb2JzZXJ2ZXIuZ2V0Q3VycmVudFJlc3VsdCgpXG4gICk7XG4gIGNvbnN0IG11dGF0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgICh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpID0+IHtcbiAgICAgIG9ic2VydmVyLm11dGF0ZSh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpLmNhdGNoKG5vb3ApO1xuICAgIH0sXG4gICAgW29ic2VydmVyXVxuICApO1xuICBpZiAocmVzdWx0LmVycm9yICYmIHNob3VsZFRocm93RXJyb3Iob2JzZXJ2ZXIub3B0aW9ucy50aHJvd09uRXJyb3IsIFtyZXN1bHQuZXJyb3JdKSkge1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICByZXR1cm4geyAuLi5yZXN1bHQsIG11dGF0ZSwgbXV0YXRlQXN5bmM6IHJlc3VsdC5tdXRhdGUgfTtcbn1cbmV4cG9ydCB7XG4gIHVzZU11dGF0aW9uXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlTXV0YXRpb24uanMubWFwIiwiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdhbGFkcmltIEZlZWRiYWNrIEFQSVxuICogQVBJIGZvciBHYWxhZHJpbSBGZWVkYmFjaywgYSBmZWVkYmFjayBwbGF0Zm9ybSBmb3IgR2FsYWRyaW0gcHJvamVjdHMuXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMFxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uJztcbi8vIFNvbWUgaW1wb3J0cyBub3QgdXNlZCBkZXBlbmRpbmcgb24gdGVtcGxhdGUgY29uZGl0aW9uc1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHR5cGUgeyBBeGlvc1Byb21pc2UsIEF4aW9zSW5zdGFuY2UsIFJhd0F4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBnbG9iYWxBeGlvcyBmcm9tICdheGlvcyc7XG5cbmV4cG9ydCBjb25zdCBCQVNFX1BBVEggPSBcImh0dHA6Ly9sb2NhbGhvc3RcIi5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBDT0xMRUNUSU9OX0ZPUk1BVFMgPSB7XG4gICAgY3N2OiBcIixcIixcbiAgICBzc3Y6IFwiIFwiLFxuICAgIHRzdjogXCJcXHRcIixcbiAgICBwaXBlczogXCJ8XCIsXG59O1xuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIFJlcXVlc3RBcmdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEFyZ3Mge1xuICAgIHVybDogc3RyaW5nO1xuICAgIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZztcbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIEJhc2VBUElcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VBUEkge1xuICAgIHByb3RlY3RlZCBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIHByb3RlY3RlZCBiYXNlUGF0aDogc3RyaW5nID0gQkFTRV9QQVRILCBwcm90ZWN0ZWQgYXhpb3M6IEF4aW9zSW5zdGFuY2UgPSBnbG9iYWxBeGlvcykge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBjb25maWd1cmF0aW9uLmJhc2VQYXRoID8/IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFJlcXVpcmVkRXJyb3JcbiAqIEBleHRlbmRzIHtFcnJvcn1cbiAqL1xuZXhwb3J0IGNsYXNzIFJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGZpZWxkOiBzdHJpbmcsIG1zZz86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtc2cpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJlcXVpcmVkRXJyb3JcIlxuICAgIH1cbn1cblxuaW50ZXJmYWNlIFNlcnZlck1hcCB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICB9W107XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IG9wZXJhdGlvblNlcnZlck1hcDogU2VydmVyTWFwID0ge1xufVxuIiwiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdhbGFkcmltIEZlZWRiYWNrIEFQSVxuICogQVBJIGZvciBHYWxhZHJpbSBGZWVkYmFjaywgYSBmZWVkYmFjayBwbGF0Zm9ybSBmb3IgR2FsYWRyaW0gcHJvamVjdHMuXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMFxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0QXJncyB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB0eXBlIHsgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFJlcXVpcmVkRXJyb3IgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IERVTU1ZX0JBU0VfVVJMID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20nXG5cbi8qKlxuICpcbiAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBhc3NlcnRQYXJhbUV4aXN0cyA9IGZ1bmN0aW9uIChmdW5jdGlvbk5hbWU6IHN0cmluZywgcGFyYW1OYW1lOiBzdHJpbmcsIHBhcmFtVmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAocGFyYW1WYWx1ZSA9PT0gbnVsbCB8fCBwYXJhbVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVpcmVkRXJyb3IocGFyYW1OYW1lLCBgUmVxdWlyZWQgcGFyYW1ldGVyICR7cGFyYW1OYW1lfSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nICR7ZnVuY3Rpb25OYW1lfS5gKTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEFwaUtleVRvT2JqZWN0ID0gYXN5bmMgZnVuY3Rpb24gKG9iamVjdDogYW55LCBrZXlQYXJhbU5hbWU6IHN0cmluZywgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiAmJiBjb25maWd1cmF0aW9uLmFwaUtleSkge1xuICAgICAgICBjb25zdCBsb2NhbFZhckFwaUtleVZhbHVlID0gdHlwZW9mIGNvbmZpZ3VyYXRpb24uYXBpS2V5ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGF3YWl0IGNvbmZpZ3VyYXRpb24uYXBpS2V5KGtleVBhcmFtTmFtZSlcbiAgICAgICAgICAgIDogYXdhaXQgY29uZmlndXJhdGlvbi5hcGlLZXk7XG4gICAgICAgIG9iamVjdFtrZXlQYXJhbU5hbWVdID0gbG9jYWxWYXJBcGlLZXlWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEJhc2ljQXV0aFRvT2JqZWN0ID0gZnVuY3Rpb24gKG9iamVjdDogYW55LCBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uICYmIChjb25maWd1cmF0aW9uLnVzZXJuYW1lIHx8IGNvbmZpZ3VyYXRpb24ucGFzc3dvcmQpKSB7XG4gICAgICAgIG9iamVjdFtcImF1dGhcIl0gPSB7IHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLnVzZXJuYW1lLCBwYXNzd29yZDogY29uZmlndXJhdGlvbi5wYXNzd29yZCB9O1xuICAgIH1cbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3Qgc2V0QmVhcmVyQXV0aFRvT2JqZWN0ID0gYXN5bmMgZnVuY3Rpb24gKG9iamVjdDogYW55LCBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uICYmIGNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0eXBlb2YgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBhd2FpdCBjb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKClcbiAgICAgICAgICAgIDogYXdhaXQgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcbiAgICAgICAgb2JqZWN0W1wiQXV0aG9yaXphdGlvblwiXSA9IFwiQmVhcmVyIFwiICsgYWNjZXNzVG9rZW47XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPQXV0aFRvT2JqZWN0ID0gYXN5bmMgZnVuY3Rpb24gKG9iamVjdDogYW55LCBuYW1lOiBzdHJpbmcsIHNjb3Blczogc3RyaW5nW10sIGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24gJiYgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuICAgICAgICBjb25zdCBsb2NhbFZhckFjY2Vzc1Rva2VuVmFsdWUgPSB0eXBlb2YgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBhd2FpdCBjb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKG5hbWUsIHNjb3BlcylcbiAgICAgICAgICAgIDogYXdhaXQgY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcbiAgICAgICAgb2JqZWN0W1wiQXV0aG9yaXphdGlvblwiXSA9IFwiQmVhcmVyIFwiICsgbG9jYWxWYXJBY2Nlc3NUb2tlblZhbHVlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2V0RmxhdHRlbmVkUXVlcnlQYXJhbXModXJsU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMsIHBhcmFtZXRlcjogYW55LCBrZXk6IHN0cmluZyA9IFwiXCIpOiB2b2lkIHtcbiAgICBpZiAocGFyYW1ldGVyID09IG51bGwpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHBhcmFtZXRlciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpKSB7XG4gICAgICAgICAgICAocGFyYW1ldGVyIGFzIGFueVtdKS5mb3JFYWNoKGl0ZW0gPT4gc2V0RmxhdHRlbmVkUXVlcnlQYXJhbXModXJsU2VhcmNoUGFyYW1zLCBpdGVtLCBrZXkpKTtcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJhbWV0ZXIpLmZvckVhY2goY3VycmVudEtleSA9PiBcbiAgICAgICAgICAgICAgICBzZXRGbGF0dGVuZWRRdWVyeVBhcmFtcyh1cmxTZWFyY2hQYXJhbXMsIHBhcmFtZXRlcltjdXJyZW50S2V5XSwgYCR7a2V5fSR7a2V5ICE9PSAnJyA/ICcuJyA6ICcnfSR7Y3VycmVudEtleX1gKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gXG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh1cmxTZWFyY2hQYXJhbXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBwYXJhbWV0ZXIpO1xuICAgICAgICB9IFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVybFNlYXJjaFBhcmFtcy5zZXQoa2V5LCBwYXJhbWV0ZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWFyY2hQYXJhbXMgPSBmdW5jdGlvbiAodXJsOiBVUkwsIC4uLm9iamVjdHM6IGFueVtdKSB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmwuc2VhcmNoKTtcbiAgICBzZXRGbGF0dGVuZWRRdWVyeVBhcmFtcyhzZWFyY2hQYXJhbXMsIG9iamVjdHMpO1xuICAgIHVybC5zZWFyY2ggPSBzZWFyY2hQYXJhbXMudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplRGF0YUlmTmVlZGVkID0gZnVuY3Rpb24gKHZhbHVlOiBhbnksIHJlcXVlc3RPcHRpb25zOiBhbnksIGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3Qgbm9uU3RyaW5nID0gdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJztcbiAgICBjb25zdCBuZWVkc1NlcmlhbGl6YXRpb24gPSBub25TdHJpbmcgJiYgY29uZmlndXJhdGlvbiAmJiBjb25maWd1cmF0aW9uLmlzSnNvbk1pbWVcbiAgICAgICAgPyBjb25maWd1cmF0aW9uLmlzSnNvbk1pbWUocmVxdWVzdE9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10pXG4gICAgICAgIDogbm9uU3RyaW5nO1xuICAgIHJldHVybiBuZWVkc1NlcmlhbGl6YXRpb25cbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSlcbiAgICAgICAgOiAodmFsdWUgfHwgXCJcIik7XG59XG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IHRvUGF0aFN0cmluZyA9IGZ1bmN0aW9uICh1cmw6IFVSTCkge1xuICAgIHJldHVybiB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoICsgdXJsLmhhc2hcbn1cblxuLyoqXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmVxdWVzdEZ1bmN0aW9uID0gZnVuY3Rpb24gKGF4aW9zQXJnczogUmVxdWVzdEFyZ3MsIGdsb2JhbEF4aW9zOiBBeGlvc0luc3RhbmNlLCBCQVNFX1BBVEg6IHN0cmluZywgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4gPFQgPSB1bmtub3duLCBSID0gQXhpb3NSZXNwb25zZTxUPj4oYXhpb3M6IEF4aW9zSW5zdGFuY2UgPSBnbG9iYWxBeGlvcywgYmFzZVBhdGg6IHN0cmluZyA9IEJBU0VfUEFUSCkgPT4ge1xuICAgICAgICBjb25zdCBheGlvc1JlcXVlc3RBcmdzID0gey4uLmF4aW9zQXJncy5vcHRpb25zLCB1cmw6IChheGlvcy5kZWZhdWx0cy5iYXNlVVJMID8gJycgOiBjb25maWd1cmF0aW9uPy5iYXNlUGF0aCA/PyBiYXNlUGF0aCkgKyBheGlvc0FyZ3MudXJsfTtcbiAgICAgICAgcmV0dXJuIGF4aW9zLnJlcXVlc3Q8VCwgUj4oYXhpb3NSZXF1ZXN0QXJncyk7XG4gICAgfTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLyoqXG4gKiBHYWxhZHJpbSBGZWVkYmFjayBBUElcbiAqIEFQSSBmb3IgR2FsYWRyaW0gRmVlZGJhY2ssIGEgZmVlZGJhY2sgcGxhdGZvcm0gZm9yIEdhbGFkcmltIHByb2plY3RzLlxuICpcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjBcbiAqIFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEF4aW9zUHJvbWlzZSwgQXhpb3NJbnN0YW5jZSwgUmF3QXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IGdsb2JhbEF4aW9zIGZyb20gJ2F4aW9zJztcbi8vIFNvbWUgaW1wb3J0cyBub3QgdXNlZCBkZXBlbmRpbmcgb24gdGVtcGxhdGUgY29uZGl0aW9uc1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRFVNTVlfQkFTRV9VUkwsIGFzc2VydFBhcmFtRXhpc3RzLCBzZXRBcGlLZXlUb09iamVjdCwgc2V0QmFzaWNBdXRoVG9PYmplY3QsIHNldEJlYXJlckF1dGhUb09iamVjdCwgc2V0T0F1dGhUb09iamVjdCwgc2V0U2VhcmNoUGFyYW1zLCBzZXJpYWxpemVEYXRhSWZOZWVkZWQsIHRvUGF0aFN0cmluZywgY3JlYXRlUmVxdWVzdEZ1bmN0aW9uIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0QXJncyB9IGZyb20gJy4vYmFzZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUywgQmFzZUFQSSwgUmVxdWlyZWRFcnJvciwgb3BlcmF0aW9uU2VydmVyTWFwIH0gZnJvbSAnLi9iYXNlJztcblxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgQ29sbGFib3JhdGlvbnNSZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxhYm9yYXRpb25zUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXNlcklkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncHJvamVjdElkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtQcm9qZWN0UmVzcG9uc2V9XG4gICAgICogQG1lbWJlcm9mIENvbGxhYm9yYXRpb25zUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncHJvamVjdCc6IFByb2plY3RSZXNwb25zZTtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3JvbGUnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBGZWVkYmFja0NyZWF0ZUR0b1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrQ3JlYXRlRHRvIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50SWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudEluZGV4JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ2VsZW1lbnRXaWR0aCc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50SGVpZ2h0JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ3gnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAneSc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0NyZWF0ZUR0b1xuICAgICAqL1xuICAgICdjb21tZW50Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrQ3JlYXRlRHRvXG4gICAgICovXG4gICAgJ3BhdGgnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tDcmVhdGVEdG9cbiAgICAgKi9cbiAgICAncHJvamVjdElkJzogc3RyaW5nO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgRmVlZGJhY2tSZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrUmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnaWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdjcmVhdGVkQXQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICd1cGRhdGVkQXQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50SWQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50SW5kZXgnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50V2lkdGgnOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdlbGVtZW50SGVpZ2h0JzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAneCc6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3knOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAnaXNSZXNvbHZlZCc6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tSZXNwb25zZVxuICAgICAqL1xuICAgICdjb21tZW50Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncGF0aCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7QXJyYXk8UmVwbHlSZXNwb25zZT59XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrUmVzcG9uc2VcbiAgICAgKi9cbiAgICAncmVwbGllcyc6IEFycmF5PFJlcGx5UmVzcG9uc2U+O1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtVc2VyU3VtbWFyeVJlc3BvbnNlfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1Jlc3BvbnNlXG4gICAgICovXG4gICAgJ3VzZXInOiBVc2VyU3VtbWFyeVJlc3BvbnNlO1xufVxuLyoqXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgRmVlZGJhY2tVcGRhdGVEdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja1VwZGF0ZUR0byB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudElkJz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja1VwZGF0ZUR0b1xuICAgICAqL1xuICAgICdlbGVtZW50SW5kZXgnPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIEZlZWRiYWNrVXBkYXRlRHRvXG4gICAgICovXG4gICAgJ2VsZW1lbnRXaWR0aCc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnZWxlbWVudEhlaWdodCc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAneCc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAneSc/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnY29tbWVudCc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAncGF0aCc/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAncHJvamVjdElkJz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tVcGRhdGVEdG9cbiAgICAgKi9cbiAgICAnaXNSZXNvbHZlZCc6IGJvb2xlYW47XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBQcm9qZWN0UmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0UmVzcG9uc2Uge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFByb2plY3RSZXNwb25zZVxuICAgICAqL1xuICAgICdpZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBQcm9qZWN0UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnbmFtZSc6IHN0cmluZztcbn1cbi8qKlxuICogXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIFJlcGx5UmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBseVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2lkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnY3JlYXRlZEF0Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXBkYXRlZEF0Jzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZmVlZGJhY2tJZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ3VzZXJJZCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBSZXBseVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2NvbW1lbnQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge1VzZXJTdW1tYXJ5UmVzcG9uc2V9XG4gICAgICogQG1lbWJlcm9mIFJlcGx5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAndXNlcic6IFVzZXJTdW1tYXJ5UmVzcG9uc2U7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduSW5EdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduSW5EdG8ge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNpZ25JbkR0b1xuICAgICAqL1xuICAgICdlbWFpbCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5EdG9cbiAgICAgKi9cbiAgICAncGFzc3dvcmQnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduSW5SZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JblJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5SZXNwb25zZVxuICAgICAqL1xuICAgICdhY2Nlc3NUb2tlbic6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduSW5SZXNwb25zZVxuICAgICAqL1xuICAgICdyZWZyZXNoVG9rZW4nOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduVXBEdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduVXBEdG8ge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFNpZ25VcER0b1xuICAgICAqL1xuICAgICdlbWFpbCc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBEdG9cbiAgICAgKi9cbiAgICAncGFzc3dvcmQnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgU2lnblVwRHRvXG4gICAgICovXG4gICAgJ2ZpcnN0TmFtZSc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBEdG9cbiAgICAgKi9cbiAgICAnbGFzdE5hbWUnOiBzdHJpbmc7XG59XG4vKipcbiAqIFxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBTaWduVXBSZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25VcFJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTaWduVXBSZXNwb25zZVxuICAgICAqL1xuICAgICdhY2Nlc3NUb2tlbic6IHN0cmluZztcbn1cbi8qKlxuICogXG4gKiBAZXhwb3J0XG4gKiBAaW50ZXJmYWNlIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyU3VtbWFyeVJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBVc2VyU3VtbWFyeVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2lkJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnZW1haWwnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdmaXJzdE5hbWUnOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdsYXN0TmFtZSc6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBVc2VyU3VtbWFyeVJlc3BvbnNlXG4gICAgICovXG4gICAgJ2Z1bGxOYW1lJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIFVzZXJTdW1tYXJ5UmVzcG9uc2VcbiAgICAgKi9cbiAgICAnYXZhdGFyVXJsJzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEB0eXBlIHtBcnJheTxDb2xsYWJvcmF0aW9uc1Jlc3BvbnNlPn1cbiAgICAgKiBAbWVtYmVyb2YgVXNlclN1bW1hcnlSZXNwb25zZVxuICAgICAqL1xuICAgICdjb2xsYWJvcmF0aW9ucyc6IEFycmF5PENvbGxhYm9yYXRpb25zUmVzcG9uc2U+O1xufVxuXG4vKipcbiAqIEFwcEFwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBcHBBcGlBeGlvc1BhcmFtQ3JlYXRvciA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFwcENvbnRyb2xsZXJHZXRIZWxsbzogYXN5bmMgKG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9gO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogQXBwQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IEFwcEFwaUZwID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yID0gQXBwQXBpQXhpb3NQYXJhbUNyZWF0b3IoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBhcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmFwcENvbnRyb2xsZXJHZXRIZWxsbyhvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnQXBwQXBpLmFwcENvbnRyb2xsZXJHZXRIZWxsbyddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICB9XG59O1xuXG4vKipcbiAqIEFwcEFwaSAtIGZhY3RvcnkgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBcHBBcGlGYWN0b3J5ID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uLCBiYXNlUGF0aD86IHN0cmluZywgYXhpb3M/OiBBeGlvc0luc3RhbmNlKSB7XG4gICAgY29uc3QgbG9jYWxWYXJGcCA9IEFwcEFwaUZwKGNvbmZpZ3VyYXRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXBwQ29udHJvbGxlckdldEhlbGxvKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXBwQ29udHJvbGxlckdldEhlbGxvKG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5cbi8qKlxuICogQXBwQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIEFwcEFwaVxuICogQGV4dGVuZHMge0Jhc2VBUEl9XG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBBcGkgZXh0ZW5kcyBCYXNlQVBJIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEFwcEFwaVxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gQXBwQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5hcHBDb250cm9sbGVyR2V0SGVsbG8ob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxufVxuXG5cblxuLyoqXG4gKiBBdXRoQXBpIC0gYXhpb3MgcGFyYW1ldGVyIGNyZWF0b3JcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IEF1dGhBcGlBeGlvc1BhcmFtQ3JlYXRvciA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VXJsIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjazogYXN5bmMgKHJlZGlyZWN0VXJsOiBzdHJpbmcsIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAncmVkaXJlY3RVcmwnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2F1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2snLCAncmVkaXJlY3RVcmwnLCByZWRpcmVjdFVybClcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvYXV0aC9naXRodWIvY2FsbGJhY2tgO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG4gICAgICAgICAgICBpZiAocmVkaXJlY3RVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJbJ3JlZGlyZWN0VXJsJ10gPSByZWRpcmVjdFVybDtcbiAgICAgICAgICAgIH1cblxuXG4gICAgXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbjogYXN5bmMgKG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9hdXRoL2dpdGh1YmA7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdHRVQnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtTaWduSW5EdG99IHNpZ25JbkR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyU2lnbkluOiBhc3luYyAoc2lnbkluRHRvOiBTaWduSW5EdG8sIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnc2lnbkluRHRvJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdhdXRoQ29udHJvbGxlclNpZ25JbicsICdzaWduSW5EdG8nLCBzaWduSW5EdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2F1dGgvc2lnbmluYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BPU1QnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5kYXRhID0gc2VyaWFsaXplRGF0YUlmTmVlZGVkKHNpZ25JbkR0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtTaWduVXBEdG99IHNpZ25VcER0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyU2lnblVwOiBhc3luYyAoc2lnblVwRHRvOiBTaWduVXBEdG8sIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnc2lnblVwRHRvJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdhdXRoQ29udHJvbGxlclNpZ25VcCcsICdzaWduVXBEdG8nLCBzaWduVXBEdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2F1dGgvc2lnbnVwYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BPU1QnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5kYXRhID0gc2VyaWFsaXplRGF0YUlmTmVlZGVkKHNpZ25VcER0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBBdXRoQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IEF1dGhBcGlGcCA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvciA9IEF1dGhBcGlBeGlvc1BhcmFtQ3JlYXRvcihjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VXJsIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayhyZWRpcmVjdFVybDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayhyZWRpcmVjdFVybCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0F1dGhBcGkuYXV0aENvbnRyb2xsZXJHaXRodWJDYWxsYmFjayddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnQXV0aEFwaS5hdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnbkluRHRvfSBzaWduSW5EdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBhdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG86IFNpZ25JbkR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxTaWduSW5SZXNwb25zZT4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5hdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG8sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydBdXRoQXBpLmF1dGhDb250cm9sbGVyU2lnbkluJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnblVwRHRvfSBzaWduVXBEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBhdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG86IFNpZ25VcER0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxTaWduVXBSZXNwb25zZT4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5hdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG8sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydBdXRoQXBpLmF1dGhDb250cm9sbGVyU2lnblVwJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbi8qKlxuICogQXV0aEFwaSAtIGZhY3RvcnkgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBBdXRoQXBpRmFjdG9yeSA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbiwgYmFzZVBhdGg/OiBzdHJpbmcsIGF4aW9zPzogQXhpb3NJbnN0YW5jZSkge1xuICAgIGNvbnN0IGxvY2FsVmFyRnAgPSBBdXRoQXBpRnAoY29uZmlndXJhdGlvbilcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFVybCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2socmVkaXJlY3RVcmw6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5hdXRoQ29udHJvbGxlckdpdGh1YkNhbGxiYWNrKHJlZGlyZWN0VXJsLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJHaXRodWJMb2dpbihvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnbkluRHRvfSBzaWduSW5EdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlclNpZ25JbihzaWduSW5EdG86IFNpZ25JbkR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTxTaWduSW5SZXNwb25zZT4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJTaWduSW4oc2lnbkluRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7U2lnblVwRHRvfSBzaWduVXBEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhdXRoQ29udHJvbGxlclNpZ25VcChzaWduVXBEdG86IFNpZ25VcER0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTxTaWduVXBSZXNwb25zZT4ge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsVmFyRnAuYXV0aENvbnRyb2xsZXJTaWduVXAoc2lnblVwRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgIH07XG59O1xuXG4vKipcbiAqIEF1dGhBcGkgLSBvYmplY3Qtb3JpZW50ZWQgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgQXV0aEFwaVxuICogQGV4dGVuZHMge0Jhc2VBUEl9XG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoQXBpIGV4dGVuZHMgQmFzZUFQSSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0VXJsIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgQXV0aEFwaVxuICAgICAqL1xuICAgIHB1YmxpYyBhdXRoQ29udHJvbGxlckdpdGh1YkNhbGxiYWNrKHJlZGlyZWN0VXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyR2l0aHViQ2FsbGJhY2socmVkaXJlY3RVcmwsIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgQXV0aEFwaVxuICAgICAqL1xuICAgIHB1YmxpYyBhdXRoQ29udHJvbGxlckdpdGh1YkxvZ2luKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyR2l0aHViTG9naW4ob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtTaWduSW5EdG99IHNpZ25JbkR0byBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEF1dGhBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0aENvbnRyb2xsZXJTaWduSW4oc2lnbkluRHRvOiBTaWduSW5EdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyU2lnbkluKHNpZ25JbkR0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtTaWduVXBEdG99IHNpZ25VcER0byBcbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICogQG1lbWJlcm9mIEF1dGhBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0aENvbnRyb2xsZXJTaWduVXAoc2lnblVwRHRvOiBTaWduVXBEdG8sIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEF1dGhBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmF1dGhDb250cm9sbGVyU2lnblVwKHNpZ25VcER0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxufVxuXG5cblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBGZWVkYmFja0FwaUF4aW9zUGFyYW1DcmVhdG9yID0gZnVuY3Rpb24gKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge0ZlZWRiYWNrQ3JlYXRlRHRvfSBmZWVkYmFja0NyZWF0ZUR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZTogYXN5bmMgKGZlZWRiYWNrQ3JlYXRlRHRvOiBGZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdmZWVkYmFja0NyZWF0ZUR0bycgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlJywgJ2ZlZWRiYWNrQ3JlYXRlRHRvJywgZmVlZGJhY2tDcmVhdGVEdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2ZlZWRiYWNrYDtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BPU1QnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4gICAgICAgICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPSBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gey4uLmxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCAuLi5oZWFkZXJzRnJvbUJhc2VPcHRpb25zLCAuLi5vcHRpb25zLmhlYWRlcnN9O1xuICAgICAgICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5kYXRhID0gc2VyaWFsaXplRGF0YUlmTmVlZGVkKGZlZWRiYWNrQ3JlYXRlRHRvLCBsb2NhbFZhclJlcXVlc3RPcHRpb25zLCBjb25maWd1cmF0aW9uKVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5IFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHk6IGFzeW5jIChpZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG9wdGlvbnM6IFJhd0F4aW9zUmVxdWVzdENvbmZpZyA9IHt9KTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnaWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoJ2ZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5JywgJ2lkJywgaWQpXG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdib2R5JyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseScsICdib2R5JywgYm9keSlcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvZmVlZGJhY2sve2lkfS9yZXBsaWVzYFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKGB7JHtcImlkXCJ9fWAsIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaWQpKSk7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdQT1NUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChib2R5LCBsb2NhbFZhclJlcXVlc3RPcHRpb25zLCBjb25maWd1cmF0aW9uKVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHVybDogdG9QYXRoU3RyaW5nKGxvY2FsVmFyVXJsT2JqKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJEZWxldGU6IGFzeW5jIChpZDogc3RyaW5nLCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2lkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGFzc2VydFBhcmFtRXhpc3RzKCdmZWVkYmFja0NvbnRyb2xsZXJEZWxldGUnLCAnaWQnLCBpZClcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvZmVlZGJhY2sve2lkfWBcbiAgICAgICAgICAgICAgICAucmVwbGFjZShgeyR7XCJpZFwifX1gLCBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGlkKSkpO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnREVMRVRFJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIHNldFNlYXJjaFBhcmFtcyhsb2NhbFZhclVybE9iaiwgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcik7XG4gICAgICAgICAgICBsZXQgaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyA9IGJhc2VPcHRpb25zICYmIGJhc2VPcHRpb25zLmhlYWRlcnMgPyBiYXNlT3B0aW9ucy5oZWFkZXJzIDoge307XG4gICAgICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSB7Li4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsIC4uLm9wdGlvbnMuaGVhZGVyc307XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZDogYXN5bmMgKHByb2plY3RJZDogc3RyaW5nLCBvcHRpb25zOiBSYXdBeGlvc1JlcXVlc3RDb25maWcgPSB7fSk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ3Byb2plY3RJZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQnLCAncHJvamVjdElkJywgcHJvamVjdElkKVxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID0gYC9mZWVkYmFjay97cHJvamVjdElkfWBcbiAgICAgICAgICAgICAgICAucmVwbGFjZShgeyR7XCJwcm9qZWN0SWRcIn19YCwgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhwcm9qZWN0SWQpKSk7XG4gICAgICAgICAgICAvLyB1c2UgZHVtbXkgYmFzZSBVUkwgc3RyaW5nIGJlY2F1c2UgdGhlIFVSTCBjb25zdHJ1Y3RvciBvbmx5IGFjY2VwdHMgYWJzb2x1dGUgVVJMcy5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyVXJsT2JqID0gbmV3IFVSTChsb2NhbFZhclBhdGgsIERVTU1ZX0JBU0VfVVJMKTtcbiAgICAgICAgICAgIGxldCBiYXNlT3B0aW9ucztcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0geyBtZXRob2Q6ICdHRVQnLCAuLi5iYXNlT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAgICAgKiBAcGFyYW0ge0ZlZWRiYWNrVXBkYXRlRHRvfSBmZWVkYmFja1VwZGF0ZUR0byBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZTogYXN5bmMgKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdpZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlJywgJ2lkJywgaWQpXG4gICAgICAgICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdmZWVkYmFja1VwZGF0ZUR0bycgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBhc3NlcnRQYXJhbUV4aXN0cygnZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlJywgJ2ZlZWRiYWNrVXBkYXRlRHRvJywgZmVlZGJhY2tVcGRhdGVEdG8pXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL2ZlZWRiYWNrL3tpZH1gXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoYHske1wiaWRcIn19YCwgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhpZCkpKTtcbiAgICAgICAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7IG1ldGhvZDogJ1BBVENIJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG5cbiAgICBcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcblxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChmZWVkYmFja1VwZGF0ZUR0bywgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucywgY29uZmlndXJhdGlvbilcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBGZWVkYmFja0FwaUZwID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yID0gRmVlZGJhY2tBcGlBeGlvc1BhcmFtQ3JlYXRvcihjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG86IEZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnRmVlZGJhY2tBcGkuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPChheGlvcz86IEF4aW9zSW5zdGFuY2UsIGJhc2VQYXRoPzogc3RyaW5nKSA9PiBBeGlvc1Byb21pc2U8dm9pZD4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5mZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZCwgYm9keSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ0ZlZWRiYWNrQXBpLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5J10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jIGZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTwoYXhpb3M/OiBBeGlvc0luc3RhbmNlLCBiYXNlUGF0aD86IHN0cmluZykgPT4gQXhpb3NQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9IGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlKGlkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXggPSBjb25maWd1cmF0aW9uPy5zZXJ2ZXJJbmRleCA/PyAwO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCA9IG9wZXJhdGlvblNlcnZlck1hcFsnRmVlZGJhY2tBcGkuZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlJ10/Lltsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4XT8udXJsO1xuICAgICAgICAgICAgcmV0dXJuIChheGlvcywgYmFzZVBhdGgpID0+IGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihsb2NhbFZhckF4aW9zQXJncywgZ2xvYmFsQXhpb3MsIEJBU0VfUEFUSCwgY29uZmlndXJhdGlvbikoYXhpb3MsIGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggfHwgYmFzZVBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBhc3luYyBmZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQ6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxBcnJheTxGZWVkYmFja1Jlc3BvbnNlPj4+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyQXhpb3NBcmdzID0gYXdhaXQgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvci5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydGZWVkYmFja0FwaS5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZCddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7RmVlZGJhY2tVcGRhdGVEdG99IGZlZWRiYWNrVXBkYXRlRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLmZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZShpZCwgZmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleCA9IGNvbmZpZ3VyYXRpb24/LnNlcnZlckluZGV4ID8/IDA7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoID0gb3BlcmF0aW9uU2VydmVyTWFwWydGZWVkYmFja0FwaS5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUnXT8uW2xvY2FsVmFyT3BlcmF0aW9uU2VydmVySW5kZXhdPy51cmw7XG4gICAgICAgICAgICByZXR1cm4gKGF4aW9zLCBiYXNlUGF0aCkgPT4gY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKGxvY2FsVmFyQXhpb3NBcmdzLCBnbG9iYWxBeGlvcywgQkFTRV9QQVRILCBjb25maWd1cmF0aW9uKShheGlvcywgbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJCYXNlUGF0aCB8fCBiYXNlUGF0aCk7XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBGZWVkYmFja0FwaSAtIGZhY3RvcnkgaW50ZXJmYWNlXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBGZWVkYmFja0FwaUZhY3RvcnkgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIGJhc2VQYXRoPzogc3RyaW5nLCBheGlvcz86IEF4aW9zSW5zdGFuY2UpIHtcbiAgICBjb25zdCBsb2NhbFZhckZwID0gRmVlZGJhY2tBcGlGcChjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG86IEZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZShmZWVkYmFja0NyZWF0ZUR0bywgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5IFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoaWQ6IHN0cmluZywgYm9keTogb2JqZWN0LCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckNyZWF0ZVJlcGx5KGlkLCBib2R5LCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZDogc3RyaW5nLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckRlbGV0ZShpZCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdElkIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyRmluZEZlZWRiYWNrQnlQcm9qZWN0SWQocHJvamVjdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1Byb21pc2U8QXJyYXk8RmVlZGJhY2tSZXNwb25zZT4+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLmZlZWRiYWNrQ29udHJvbGxlckZpbmRGZWVkYmFja0J5UHJvamVjdElkKHByb2plY3RJZCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICAgICAqIEBwYXJhbSB7RmVlZGJhY2tVcGRhdGVEdG99IGZlZWRiYWNrVXBkYXRlRHRvIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxWYXJGcC5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUoaWQsIGZlZWRiYWNrVXBkYXRlRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgICAgICB9LFxuICAgIH07XG59O1xuXG4vKipcbiAqIEZlZWRiYWNrQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIEZlZWRiYWNrQXBpXG4gKiBAZXh0ZW5kcyB7QmFzZUFQSX1cbiAqL1xuZXhwb3J0IGNsYXNzIEZlZWRiYWNrQXBpIGV4dGVuZHMgQmFzZUFQSSB7XG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtGZWVkYmFja0NyZWF0ZUR0b30gZmVlZGJhY2tDcmVhdGVEdG8gXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0FwaVxuICAgICAqL1xuICAgIHB1YmxpYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGUoZmVlZGJhY2tDcmVhdGVEdG86IEZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBGZWVkYmFja0FwaUZwKHRoaXMuY29uZmlndXJhdGlvbikuZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrQ3JlYXRlRHRvLCBvcHRpb25zKS50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0FwaVxuICAgICAqL1xuICAgIHB1YmxpYyBmZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZDogc3RyaW5nLCBib2R5OiBvYmplY3QsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEZlZWRiYWNrQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5mZWVkYmFja0NvbnRyb2xsZXJDcmVhdGVSZXBseShpZCwgYm9keSwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmVlZGJhY2tDb250cm9sbGVyRGVsZXRlKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIEZlZWRiYWNrQXBpRnAodGhpcy5jb25maWd1cmF0aW9uKS5mZWVkYmFja0NvbnRyb2xsZXJEZWxldGUoaWQsIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0SWQgXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqIEBtZW1iZXJvZiBGZWVkYmFja0FwaVxuICAgICAqL1xuICAgIHB1YmxpYyBmZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQ6IHN0cmluZywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gRmVlZGJhY2tBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmZlZWRiYWNrQ29udHJvbGxlckZpbmRGZWVkYmFja0J5UHJvamVjdElkKHByb2plY3RJZCwgb3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFxuICAgICAqIEBwYXJhbSB7RmVlZGJhY2tVcGRhdGVEdG99IGZlZWRiYWNrVXBkYXRlRHRvIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgRmVlZGJhY2tBcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmVlZGJhY2tDb250cm9sbGVyVXBkYXRlKGlkOiBzdHJpbmcsIGZlZWRiYWNrVXBkYXRlRHRvOiBGZWVkYmFja1VwZGF0ZUR0bywgb3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gRmVlZGJhY2tBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLmZlZWRiYWNrQ29udHJvbGxlclVwZGF0ZShpZCwgZmVlZGJhY2tVcGRhdGVEdG8sIG9wdGlvbnMpLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QodGhpcy5heGlvcywgdGhpcy5iYXNlUGF0aCkpO1xuICAgIH1cbn1cblxuXG5cbi8qKlxuICogVXNlckFwaSAtIGF4aW9zIHBhcmFtZXRlciBjcmVhdG9yXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBVc2VyQXBpQXhpb3NQYXJhbUNyZWF0b3IgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICAgICAqL1xuICAgICAgICB1c2VyQ29udHJvbGxlckdldE1lOiBhc3luYyAob3B0aW9uczogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnID0ge30pOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL3VzZXIvbWVgO1xuICAgICAgICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICAgICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGJhc2VPcHRpb25zID0gY29uZmlndXJhdGlvbi5iYXNlT3B0aW9ucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyA9IHsgbWV0aG9kOiAnR0VUJywgLi4uYmFzZU9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG4gICAgICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiBiZWFyZXIgcmVxdWlyZWRcbiAgICAgICAgICAgIC8vIGh0dHAgYmVhcmVyIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkXG4gICAgICAgICAgICBhd2FpdCBzZXRCZWFyZXJBdXRoVG9PYmplY3QobG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIGNvbmZpZ3VyYXRpb24pXG5cblxuICAgIFxuICAgICAgICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgICAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID0gYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgICAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlciwgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucywgLi4ub3B0aW9ucy5oZWFkZXJzfTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfVxufTtcblxuLyoqXG4gKiBVc2VyQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IFVzZXJBcGlGcCA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgbG9jYWxWYXJBeGlvc1BhcmFtQ3JlYXRvciA9IFVzZXJBcGlBeGlvc1BhcmFtQ3JlYXRvcihjb25maWd1cmF0aW9uKVxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgICAgICovXG4gICAgICAgIGFzeW5jIHVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucz86IFJhd0F4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8KGF4aW9zPzogQXhpb3NJbnN0YW5jZSwgYmFzZVBhdGg/OiBzdHJpbmcpID0+IEF4aW9zUHJvbWlzZTxVc2VyU3VtbWFyeVJlc3BvbnNlPj4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxWYXJBeGlvc0FyZ3MgPSBhd2FpdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yLnVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckluZGV4ID0gY29uZmlndXJhdGlvbj8uc2VydmVySW5kZXggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsVmFyT3BlcmF0aW9uU2VydmVyQmFzZVBhdGggPSBvcGVyYXRpb25TZXJ2ZXJNYXBbJ1VzZXJBcGkudXNlckNvbnRyb2xsZXJHZXRNZSddPy5bbG9jYWxWYXJPcGVyYXRpb25TZXJ2ZXJJbmRleF0/LnVybDtcbiAgICAgICAgICAgIHJldHVybiAoYXhpb3MsIGJhc2VQYXRoKSA9PiBjcmVhdGVSZXF1ZXN0RnVuY3Rpb24obG9jYWxWYXJBeGlvc0FyZ3MsIGdsb2JhbEF4aW9zLCBCQVNFX1BBVEgsIGNvbmZpZ3VyYXRpb24pKGF4aW9zLCBsb2NhbFZhck9wZXJhdGlvblNlcnZlckJhc2VQYXRoIHx8IGJhc2VQYXRoKTtcbiAgICAgICAgfSxcbiAgICB9XG59O1xuXG4vKipcbiAqIFVzZXJBcGkgLSBmYWN0b3J5IGludGVyZmFjZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgVXNlckFwaUZhY3RvcnkgPSBmdW5jdGlvbiAoY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sIGJhc2VQYXRoPzogc3RyaW5nLCBheGlvcz86IEF4aW9zSW5zdGFuY2UpIHtcbiAgICBjb25zdCBsb2NhbFZhckZwID0gVXNlckFwaUZwKGNvbmZpZ3VyYXRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAgICAgKi9cbiAgICAgICAgdXNlckNvbnRyb2xsZXJHZXRNZShvcHRpb25zPzogUmF3QXhpb3NSZXF1ZXN0Q29uZmlnKTogQXhpb3NQcm9taXNlPFVzZXJTdW1tYXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFZhckZwLnVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdChheGlvcywgYmFzZVBhdGgpKTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcblxuLyoqXG4gKiBVc2VyQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIFVzZXJBcGlcbiAqIEBleHRlbmRzIHtCYXNlQVBJfVxuICovXG5leHBvcnQgY2xhc3MgVXNlckFwaSBleHRlbmRzIEJhc2VBUEkge1xuICAgIC8qKlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKiBAbWVtYmVyb2YgVXNlckFwaVxuICAgICAqL1xuICAgIHB1YmxpYyB1c2VyQ29udHJvbGxlckdldE1lKG9wdGlvbnM/OiBSYXdBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIFVzZXJBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pLnVzZXJDb250cm9sbGVyR2V0TWUob3B0aW9ucykudGhlbigocmVxdWVzdCkgPT4gcmVxdWVzdCh0aGlzLmF4aW9zLCB0aGlzLmJhc2VQYXRoKSk7XG4gICAgfVxufVxuXG5cblxuIiwiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIEdhbGFkcmltIEZlZWRiYWNrIEFQSVxuICogQVBJIGZvciBHYWxhZHJpbSBGZWVkYmFjaywgYSBmZWVkYmFjayBwbGF0Zm9ybSBmb3IgR2FsYWRyaW0gcHJvamVjdHMuXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMFxuICogXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmF0aW9uUGFyYW1ldGVycyB7XG4gICAgYXBpS2V5Pzogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgKChuYW1lOiBzdHJpbmcpID0+IHN0cmluZykgfCAoKG5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+KTtcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICBhY2Nlc3NUb2tlbj86IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8ICgobmFtZT86IHN0cmluZywgc2NvcGVzPzogc3RyaW5nW10pID0+IHN0cmluZykgfCAoKG5hbWU/OiBzdHJpbmcsIHNjb3Blcz86IHN0cmluZ1tdKSA9PiBQcm9taXNlPHN0cmluZz4pO1xuICAgIGJhc2VQYXRoPzogc3RyaW5nO1xuICAgIHNlcnZlckluZGV4PzogbnVtYmVyO1xuICAgIGJhc2VPcHRpb25zPzogYW55O1xuICAgIGZvcm1EYXRhQ3Rvcj86IG5ldyAoKSA9PiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uIHtcbiAgICAvKipcbiAgICAgKiBwYXJhbWV0ZXIgZm9yIGFwaUtleSBzZWN1cml0eVxuICAgICAqIEBwYXJhbSBuYW1lIHNlY3VyaXR5IG5hbWVcbiAgICAgKiBAbWVtYmVyb2YgQ29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGFwaUtleT86IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8ICgobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcpIHwgKChuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPik7XG4gICAgLyoqXG4gICAgICogcGFyYW1ldGVyIGZvciBiYXNpYyBzZWN1cml0eVxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyb2YgQ29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIHBhcmFtZXRlciBmb3IgYmFzaWMgc2VjdXJpdHlcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBwYXJhbWV0ZXIgZm9yIG9hdXRoMiBzZWN1cml0eVxuICAgICAqIEBwYXJhbSBuYW1lIHNlY3VyaXR5IG5hbWVcbiAgICAgKiBAcGFyYW0gc2NvcGVzIG9hdXRoMiBzY29wZVxuICAgICAqIEBtZW1iZXJvZiBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gfCAoKG5hbWU/OiBzdHJpbmcsIHNjb3Blcz86IHN0cmluZ1tdKSA9PiBzdHJpbmcpIHwgKChuYW1lPzogc3RyaW5nLCBzY29wZXM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxzdHJpbmc+KTtcbiAgICAvKipcbiAgICAgKiBvdmVycmlkZSBiYXNlIHBhdGhcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBiYXNlUGF0aD86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBvdmVycmlkZSBzZXJ2ZXIgaW5kZXhcbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlcm9mIENvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBzZXJ2ZXJJbmRleD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBiYXNlIG9wdGlvbnMgZm9yIGF4aW9zIGNhbGxzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7YW55fVxuICAgICAqIEBtZW1iZXJvZiBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgYmFzZU9wdGlvbnM/OiBhbnk7XG4gICAgLyoqXG4gICAgICogVGhlIEZvcm1EYXRhIGNvbnN0cnVjdG9yIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSBtdWx0aXBhcnQgZm9ybSBkYXRhXG4gICAgICogcmVxdWVzdHMuIFlvdSBjYW4gaW5qZWN0IHRoaXMgaGVyZSBzbyB0aGF0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudHMgdGhhdFxuICAgICAqIGRvIG5vdCBzdXBwb3J0IHRoZSBGb3JtRGF0YSBjbGFzcyBjYW4gc3RpbGwgcnVuIHRoZSBnZW5lcmF0ZWQgY2xpZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge25ldyAoKSA9PiBGb3JtRGF0YX1cbiAgICAgKi9cbiAgICBmb3JtRGF0YUN0b3I/OiBuZXcgKCkgPT4gYW55O1xuXG4gICAgY29uc3RydWN0b3IocGFyYW06IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzID0ge30pIHtcbiAgICAgICAgdGhpcy5hcGlLZXkgPSBwYXJhbS5hcGlLZXk7XG4gICAgICAgIHRoaXMudXNlcm5hbWUgPSBwYXJhbS51c2VybmFtZTtcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhcmFtLnBhc3N3b3JkO1xuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gcGFyYW0uYWNjZXNzVG9rZW47XG4gICAgICAgIHRoaXMuYmFzZVBhdGggPSBwYXJhbS5iYXNlUGF0aDtcbiAgICAgICAgdGhpcy5zZXJ2ZXJJbmRleCA9IHBhcmFtLnNlcnZlckluZGV4O1xuICAgICAgICB0aGlzLmJhc2VPcHRpb25zID0ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtLmJhc2VPcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogXCJPcGVuQVBJLUdlbmVyYXRvci90eXBlc2NyaXB0LWF4aW9zXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5wYXJhbS5iYXNlT3B0aW9uc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZvcm1EYXRhQ3RvciA9IHBhcmFtLmZvcm1EYXRhQ3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gTUlNRSBpcyBhIEpTT04gTUlNRS5cbiAgICAgKiBKU09OIE1JTUUgZXhhbXBsZXM6XG4gICAgICogICBhcHBsaWNhdGlvbi9qc29uXG4gICAgICogICBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURjhcbiAgICAgKiAgIEFQUExJQ0FUSU9OL0pTT05cbiAgICAgKiAgIGFwcGxpY2F0aW9uL3ZuZC5jb21wYW55K2pzb25cbiAgICAgKiBAcGFyYW0gbWltZSAtIE1JTUUgKE11bHRpcHVycG9zZSBJbnRlcm5ldCBNYWlsIEV4dGVuc2lvbnMpXG4gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiBNSU1FIGlzIEpTT04sIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNKc29uTWltZShtaW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QganNvbk1pbWU6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oYXBwbGljYXRpb25cXC9qc29ufFteOy8gXFx0XStcXC9bXjsvIFxcdF0rWytdanNvbilbIFxcdF0qKDsuKik/JCcsICdpJyk7XG4gICAgICAgIHJldHVybiBtaW1lICE9PSBudWxsICYmIChqc29uTWltZS50ZXN0KG1pbWUpIHx8IG1pbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvbicpO1xuICAgIH1cbn1cbiIsImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7XG4gIEF1dGhBcGksXG4gIENvbmZpZ3VyYXRpb24sXG4gIEZlZWRiYWNrQXBpLFxuICBVc2VyQXBpLFxufSBmcm9tIFwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5jb25zdCBhcGlVcmwgPSBcImh0dHA6Ly9lYzItMTMtMzgtMjE0LTE5MS5ldS13ZXN0LTMuY29tcHV0ZS5hbWF6b25hd3MuY29tOjE0NzhcIjtcblxuY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKHtcbiAgYmFzZVBhdGg6IGFwaVVybCxcbn0pO1xuXG5jb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgYmFzZVVSTDogYXBpVXJsLFxufSk7XG5cbmNvbnN0IGFwaSA9IHtcbiAgdXNlcjogbmV3IFVzZXJBcGkoY29uZmlndXJhdGlvbiwgYXBpVXJsLCBheGlvc0luc3RhbmNlKSxcbiAgZmVlZGJhY2s6IG5ldyBGZWVkYmFja0FwaShjb25maWd1cmF0aW9uLCBhcGlVcmwsIGF4aW9zSW5zdGFuY2UpLFxuICBhdXRoOiBuZXcgQXV0aEFwaShjb25maWd1cmF0aW9uLCBhcGlVcmwsIGF4aW9zSW5zdGFuY2UpLFxufTtcblxuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoXG4gIGFzeW5jIChjb25maWcpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZ2FsYWRyaW1GZWVkYmFja1Rva2VuXCIpO1xuICAgIGlmICh0b2tlbiAmJiBjb25maWcuaGVhZGVycykge1xuICAgICAgY29uZmlnLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgYXhpb3NJbnN0YW5jZS5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vbi5BdXRob3JpemF0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9LFxuICAoZXJyb3IpID0+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBhcGk7XG4iLCJpbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnksIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IGFwaSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7XG4gIEZlZWRiYWNrQ3JlYXRlRHRvLFxuICBGZWVkYmFja1Jlc3BvbnNlLFxuICBGZWVkYmFja1VwZGF0ZUR0byxcbn0gZnJvbSBcIi4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IGZldGNoRmVlZGJhY2tzID0gYXN5bmMgKHByb2plY3RJZD86IHN0cmluZykgPT4ge1xuICBpZiAoIXByb2plY3RJZCkgcmV0dXJuIFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID1cbiAgICAgIGF3YWl0IGFwaS5mZWVkYmFjay5mZWVkYmFja0NvbnRyb2xsZXJGaW5kRmVlZGJhY2tCeVByb2plY3RJZChwcm9qZWN0SWQpO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tDcmVhdGVEdG8pID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZmVlZGJhY2suZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlKGZlZWRiYWNrKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVwbHkgPSBhc3luYyAoZmVlZGJhY2tJZDogc3RyaW5nLCBjb21tZW50OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZmVlZGJhY2suZmVlZGJhY2tDb250cm9sbGVyQ3JlYXRlUmVwbHkoXG4gICAgZmVlZGJhY2tJZCxcbiAgICB7XG4gICAgICBjb21tZW50LFxuICAgIH1cbiAgKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlRmVlZGJhY2sgPSBhc3luYyAoe1xuICBmZWVkYmFja0lkLFxuICBwYXlsb2FkLFxufToge1xuICBmZWVkYmFja0lkOiBzdHJpbmc7XG4gIHBheWxvYWQ6IEZlZWRiYWNrVXBkYXRlRHRvO1xufSkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5mZWVkYmFjay5mZWVkYmFja0NvbnRyb2xsZXJVcGRhdGUoZmVlZGJhY2tJZCwge1xuICAgIC4uLnBheWxvYWQsXG4gIH0pO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tSZXNwb25zZSkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5mZWVkYmFjay5mZWVkYmFja0NvbnRyb2xsZXJEZWxldGUoZmVlZGJhY2suaWQpO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VGZWVkYmFja3MgPSAocHJvamVjdElkPzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSxcbiAgICBxdWVyeUZuOiAoKSA9PiBmZXRjaEZlZWRiYWNrcyhwcm9qZWN0SWQpLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VDcmVhdGVGZWVkYmFjayA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGNyZWF0ZUZlZWRiYWNrLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJGZWVkYmFjayBjcmVhdGVkXCIpO1xuXG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUNyZWF0ZVJlcGx5ID0gKGZlZWRiYWNrSWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogKGNvbW1lbnQ6IHN0cmluZykgPT4gY3JlYXRlUmVwbHkoZmVlZGJhY2tJZCwgY29tbWVudCksXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVVwZGF0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogdXBkYXRlRmVlZGJhY2ssXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZURlbGV0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogZGVsZXRlRmVlZGJhY2ssXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiZmVlZGJhY2tzXCJdIH0pO1xuICAgIH0sXG4gIH0pO1xufTtcbiIsImltcG9ydCB7IHVzZVF1ZXJ5IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IGFwaSBmcm9tIFwiLi9hcGlcIjtcblxuZXhwb3J0IGNvbnN0IGZldGNoTWUgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkudXNlci51c2VyQ29udHJvbGxlckdldE1lKCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXNlTWUgPSAoKSA9PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcIm1lXCJdLFxuICAgIHF1ZXJ5Rm46IGZldGNoTWUsXG4gIH0pO1xufTtcbiIsImltcG9ydCBSZWFjdCwge1xuICBjcmVhdGVDb250ZXh0LFxuICBEaXNwYXRjaCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tDcmVhdGVEdG8sIEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tzIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2ZlZWRiYWNrXCI7XG5pbXBvcnQgeyB1c2VNZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy91c2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tTdGF0ZSB7XG4gIHJvb3REaXI6IHN0cmluZztcbiAgcHJvamVjdElkOiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgZmVlZGJhY2tzPzogRmVlZGJhY2tSZXNwb25zZVtdO1xuICBuZXdGZWVkYmFjazogRmVlZGJhY2tDcmVhdGVEdG8gfCBudWxsO1xuICBuZXdGZWVkYmFja1JlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD47XG4gIHNlbGVjdGVkRmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfCBudWxsO1xuICBzZXRTZWxlY3RlZEZlZWRiYWNrOiBEaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbD4+O1xuICByZXNldEZlZWRiYWNrOiAoKSA9PiB2b2lkO1xuICBvcGVuRmVlZGJhY2tPdmVybGF5OiAoKSA9PiB2b2lkO1xuICBjbG9zZUZlZWRiYWNrT3ZlcmxheTogKCkgPT4gdm9pZDtcbiAgYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHZvaWQ7XG4gIGRlYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHZvaWQ7XG4gIG5hdmlnYXRlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vLyBDcmVhdGUgdGhlIGNvbnRleHRcbmNvbnN0IEZlZWRiYWNrQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICByb290RGlyOiBcIlwiLFxuICBwcm9qZWN0SWQ6IFwiXCIsXG4gIGlzT3BlbjogZmFsc2UsXG4gIGZlZWRiYWNrczogW10gYXMgRmVlZGJhY2tSZXNwb25zZVtdIHwgdW5kZWZpbmVkLFxuICBuZXdGZWVkYmFjazogbnVsbCBhcyBGZWVkYmFja0NyZWF0ZUR0byB8IG51bGwsXG4gIG5ld0ZlZWRiYWNrUmVmOiBSZWFjdC5jcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPigpLFxuICBzZWxlY3RlZEZlZWRiYWNrOiB7fSBhcyBGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbCxcbiAgc2V0U2VsZWN0ZWRGZWVkYmFjazoge30gYXMgRGlzcGF0Y2g8XG4gICAgUmVhY3QuU2V0U3RhdGVBY3Rpb248RmVlZGJhY2tSZXNwb25zZSB8IG51bGw+XG4gID4sXG4gIHJlc2V0RmVlZGJhY2s6ICgpID0+IHt9LFxuICBhY3RpdmF0ZUZlZWRiYWNrTW9kZTogKCkgPT4ge30sXG4gIGRlYWN0aXZhdGVGZWVkYmFja01vZGU6ICgpID0+IHt9LFxuICBvcGVuRmVlZGJhY2tPdmVybGF5OiAoKSA9PiB7fSxcbiAgY2xvc2VGZWVkYmFja092ZXJsYXk6ICgpID0+IHt9LFxuICBuYXZpZ2F0ZTogKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHZvaWQgcGF0aDtcbiAgICByZXR1cm47XG4gIH0sXG59KTtcblxuLy8gUHJvdmlkZXIgY29tcG9uZW50XG5leHBvcnQgY29uc3QgRmVlZGJhY2tQcm92aWRlciA9ICh7XG4gIHJvb3REaXIsXG4gIHByb2plY3RJZCxcbiAgbmF2aWdhdGUsXG4gIGNoaWxkcmVuLFxufToge1xuICByb290RGlyOiBzdHJpbmc7XG4gIHByb2plY3RJZDogc3RyaW5nO1xuICBuYXZpZ2F0ZTogKHBhdGg6IHN0cmluZykgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn0pID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW25ld0ZlZWRiYWNrLCBzZXROZXdGZWVkYmFja10gPSB1c2VTdGF0ZTxGZWVkYmFja0NyZWF0ZUR0byB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcbiAgY29uc3QgbmV3RmVlZGJhY2tSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3NlbGVjdGVkRmVlZGJhY2ssIHNldFNlbGVjdGVkRmVlZGJhY2tdID1cbiAgICB1c2VTdGF0ZTxGZWVkYmFja1Jlc3BvbnNlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHsgZGF0YTogZmVlZGJhY2tzIH0gPSB1c2VGZWVkYmFja3MocHJvamVjdElkKTtcbiAgY29uc3QgeyBkYXRhOiBtZSB9ID0gdXNlTWUoKTtcblxuICBjb25zdCBpc0Nvbm5lY3RlZCA9ICEhbWU7XG5cbiAgY29uc3QgaXNDb2xsYWJvcmF0b3IgPSBtZT8uY29sbGFib3JhdGlvbnMuZmluZChcbiAgICAoY29sbGFib3JhdGlvbikgPT4gY29sbGFib3JhdGlvbi5wcm9qZWN0LmlkID09PSBwcm9qZWN0SWRcbiAgKTtcblxuICBjb25zdCBvcGVuRmVlZGJhY2tPdmVybGF5ID0gKCkgPT4ge1xuICAgIHNldElzT3Blbih0cnVlKTtcbiAgfTtcblxuICBjb25zdCBjbG9zZUZlZWRiYWNrT3ZlcmxheSA9ICgpID0+IHtcbiAgICBzZXRJc09wZW4oZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0RmVlZGJhY2sgPSAoKSA9PiB7XG4gICAgc2V0TmV3RmVlZGJhY2sobnVsbCk7XG4gICAgYWN0aXZhdGVGZWVkYmFja01vZGUoKTtcbiAgfTtcblxuICBjb25zdCBjcmVhdGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IHRhcmdldD8uZGF0YXNldC5wYXRoIHx8IFwiXCI7XG4gICAgICBjb25zdCBhbGxFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgICBgW2RhdGEtcGF0aD1cIiR7ZWxlbWVudElkfVwiXWBcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGFyckFsbEVsZW1lbnRzID0gQXJyYXkuZnJvbShhbGxFbGVtZW50cyk7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnRJbmRleCA9IGFyckFsbEVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KTtcblxuICAgICAgY29uc3QgeCA9IGUub2Zmc2V0WDtcbiAgICAgIGNvbnN0IHkgPSBlLm9mZnNldFk7XG4gICAgICBjb25zdCBlbGVtZW50V2lkdGggPSB0YXJnZXQ/LmNsaWVudFdpZHRoIHx8IDA7XG4gICAgICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gdGFyZ2V0Py5jbGllbnRIZWlnaHQgfHwgMDtcblxuICAgICAgc2V0TmV3RmVlZGJhY2soe1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBlbGVtZW50V2lkdGgsXG4gICAgICAgIGVsZW1lbnRIZWlnaHQsXG4gICAgICAgIGNvbW1lbnQ6IFwiXCIsXG4gICAgICAgIHBhdGg6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgZWxlbWVudElkLFxuICAgICAgICBlbGVtZW50SW5kZXgsXG4gICAgICAgIHByb2plY3RJZCxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3Byb2plY3RJZF1cbiAgKTtcblxuICBjb25zdCBpc1NpZGVCYXJPckZlZWRiYWNrSXRlbSA9IHVzZUNhbGxiYWNrKCh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmVlZGJhY2stc2lkZWJhclwiKTtcblxuICAgIGlmICghc2lkZWJhciB8fCBzaWRlYmFyLmNvbnRhaW5zKHRhcmdldCBhcyBOb2RlKSkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBmZWVkYmFja0VsZW1lbnRzID0gZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihgLmZlZWRiYWNrLWl0ZW1gKVxuICAgICAgLnZhbHVlcygpO1xuXG4gICAgZm9yIChjb25zdCBmZWVkYmFja0VsZW1lbnQgb2YgZmVlZGJhY2tFbGVtZW50cykge1xuICAgICAgaWYgKGZlZWRiYWNrRWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtdKTtcblxuICBjb25zdCBzaG91bGRDcmVhdGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChuZXdGZWVkYmFja1JlZi5jdXJyZW50KSB7XG4gICAgICAgIGlmICghbmV3RmVlZGJhY2tSZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgc2V0TmV3RmVlZGJhY2sobnVsbCk7XG4gICAgICAgICAgaWYgKGlzU2lkZUJhck9yRmVlZGJhY2tJdGVtKHRhcmdldCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNTaWRlQmFyT3JGZWVkYmFja0l0ZW0odGFyZ2V0KTtcbiAgICB9LFxuICAgIFtpc1NpZGVCYXJPckZlZWRiYWNrSXRlbV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVOZXdGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIXNob3VsZENyZWF0ZUZlZWRiYWNrKGUpKSByZXR1cm47XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBzZXRTZWxlY3RlZEZlZWRiYWNrKG51bGwpO1xuICAgICAgY3JlYXRlRmVlZGJhY2soZSk7XG5cbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVOZXdGZWVkYmFjayk7XG4gICAgfSxcbiAgICBbc2hvdWxkQ3JlYXRlRmVlZGJhY2ssIGNyZWF0ZUZlZWRiYWNrXVxuICApO1xuXG4gIGNvbnN0IGFjdGl2YXRlRmVlZGJhY2tNb2RlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvbW1lbnQtY3Vyc29yXCIpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVOZXdGZWVkYmFjaywgdHJ1ZSk7XG4gIH0sIFtoYW5kbGVOZXdGZWVkYmFja10pO1xuXG4gIGNvbnN0IGRlYWN0aXZhdGVGZWVkYmFja01vZGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZU5ld0ZlZWRiYWNrLCB0cnVlKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJjb21tZW50LWN1cnNvclwiKTtcbiAgfSwgW2hhbmRsZU5ld0ZlZWRiYWNrXSk7XG5cbiAgY29uc3QgaGFuZGxlRXNjYXBlUHJlc3MgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgaWYgKG5ld0ZlZWRiYWNrKSB7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZU5ld0ZlZWRiYWNrKTtcbiAgICAgICAgICBzZXROZXdGZWVkYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlKCk7XG4gICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW25ld0ZlZWRiYWNrLCBkZWFjdGl2YXRlRmVlZGJhY2tNb2RlLCBoYW5kbGVOZXdGZWVkYmFja11cbiAgKTtcbiAgY29uc3QgcmVtb3ZlUXVlcnlQYXJhbSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgcGFyYW1zLmRlbGV0ZShuYW1lKTtcbiAgICBjb25zdCBuZXdVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9JHtcbiAgICAgIHBhcmFtcy50b1N0cmluZygpID8gXCI/XCIgOiBcIlwiXG4gICAgfSR7cGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgXCJcIiwgbmV3VXJsKTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVFc2NhcGVQcmVzcyk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVFc2NhcGVQcmVzcyk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUVzY2FwZVByZXNzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgY29uc3QgZ2FsYWRyaW1GZWVkYmFja1Rva2VuID0gcGFyYW1zLmdldChcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbiAgICBpZiAoZ2FsYWRyaW1GZWVkYmFja1Rva2VuKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiLCBnYWxhZHJpbUZlZWRiYWNrVG9rZW4pO1xuICAgICAgcmVtb3ZlUXVlcnlQYXJhbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbiAgICB9XG4gIH0sIFtmZWVkYmFja3MsIGFjdGl2YXRlRmVlZGJhY2tNb2RlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmIGlzQ29ubmVjdGVkICYmIGlzQ29sbGFib3JhdG9yKSBhY3RpdmF0ZUZlZWRiYWNrTW9kZSgpO1xuICAgIGVsc2UgZGVhY3RpdmF0ZUZlZWRiYWNrTW9kZSgpO1xuICB9LCBbXG4gICAgaXNPcGVuLFxuICAgIGlzQ29ubmVjdGVkLFxuICAgIGlzQ29sbGFib3JhdG9yLFxuICAgIGFjdGl2YXRlRmVlZGJhY2tNb2RlLFxuICAgIGRlYWN0aXZhdGVGZWVkYmFja01vZGUsXG4gIF0pO1xuXG4gIGNvbnN0IHZhbHVlID0ge1xuICAgIHJvb3REaXIsXG4gICAgcHJvamVjdElkLFxuICAgIGlzT3BlbixcbiAgICBmZWVkYmFja3MsXG4gICAgbmV3RmVlZGJhY2ssXG4gICAgbmV3RmVlZGJhY2tSZWYsXG4gICAgc2VsZWN0ZWRGZWVkYmFjayxcbiAgICBzZXRTZWxlY3RlZEZlZWRiYWNrLFxuICAgIHJlc2V0RmVlZGJhY2ssXG4gICAgYWN0aXZhdGVGZWVkYmFja01vZGUsXG4gICAgZGVhY3RpdmF0ZUZlZWRiYWNrTW9kZSxcbiAgICBvcGVuRmVlZGJhY2tPdmVybGF5LFxuICAgIGNsb3NlRmVlZGJhY2tPdmVybGF5LFxuICAgIG5hdmlnYXRlLFxuICB9O1xuICByZXR1cm4gKFxuICAgIDxGZWVkYmFja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0ZlZWRiYWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VGZWVkYmFja0NvbnRleHQgPSAoKSA9PiB1c2VDb250ZXh0KEZlZWRiYWNrQ29udGV4dCk7XG4iLCJleHBvcnQgY29uc3QgQnV0dG9uID0gKHtcbiAgdGV4dCxcbiAgb25DbGljayxcbiAgaWNvblBhdGgsXG4gIHNpemUsXG59OiB7XG4gIG9uQ2xpY2s6IChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgdGV4dD86IHN0cmluZztcbiAgaWNvblBhdGg/OiBzdHJpbmc7XG4gIHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiO1xufSkgPT4ge1xuICBjb25zdCBwYWRkaW5nID0gZ2V0UGFkZGluZyhzaXplKTtcbiAgY29uc3QgZm9udFNpemUgPSBzaXplID09PSBcInNtYWxsXCIgPyBcInRleHQteHNcIiA6IFwidGV4dC1zbVwiO1xuICBjb25zdCBib3JkZXJSYWRpdXMgPSBzaXplID09PSBcInNtYWxsXCIgPyBcInJvdW5kZWQtbGdcIiA6IFwicm91bmRlZC1bMTJweF1cIjtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgY2xhc3NOYW1lPXtgZmxleC1zaHJpbmstMCBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciAgZ2FwLTIgJHtwYWRkaW5nfSAke2JvcmRlclJhZGl1c30gYmctYmx1ZS01MDAgaG92ZXI6Ymctb3BhY2l0eS04MGB9XG4gICAgPlxuICAgICAge2ljb25QYXRoICYmIDxpbWcgc3JjPXtpY29uUGF0aH0gY2xhc3NOYW1lPVwidy02IGgtNlwiIC8+fVxuICAgICAge3RleHQgJiYgPHNwYW4gY2xhc3NOYW1lPXtgJHtmb250U2l6ZX0gZm9udC1zZW1pYm9sZGB9Pnt0ZXh0fTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuXG5jb25zdCBnZXRQYWRkaW5nID0gKHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiKSA9PiB7XG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgXCJzbWFsbFwiOlxuICAgICAgcmV0dXJuIFwicHgtMyBweS0yXCI7XG4gICAgY2FzZSBcIm1lZGl1bVwiOlxuICAgICAgcmV0dXJuIFwicC0zXCI7XG4gICAgY2FzZSBcImxhcmdlXCI6XG4gICAgICByZXR1cm4gXCJwLTNcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwicC0zXCI7XG4gIH1cbn07XG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDIwIDIwJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4LjA2MjMgMTQuMzg0OUMxOC40MDIgMTQuNjk1NSAxOC40MjU2IDE1LjIyMjYgMTguMTE1MSAxNS41NjIzTDE3LjI4MTcgMTYuNDc0QzE2LjY5MDQgMTcuMTIwNiAxNS44NzE1IDE3LjUgMTUuMDAwMSAxNy41QzE0LjEyOTEgMTcuNSAxMy4zMTA1IDE3LjEyMSAxMi43MTkyIDE2LjQ3NDZDMTIuNDI2IDE2LjE1NTIgMTIuMDQ1NyAxNS45OTE3IDExLjY2NjkgMTUuOTkxN0MxMS4yODc4IDE1Ljk5MTcgMTAuOTA3NCAxNi4xNTU0IDEwLjYxNDEgMTYuNDc1MUMxMC4zMDI5IDE2LjgxNDIgOS43NzU3NyAxNi44MzY5IDkuNDM2NjQgMTYuNTI1N0M5LjA5NzUyIDE2LjIxNDYgOS4wNzQ4NCAxNS42ODc0IDkuMzg1OTggMTUuMzQ4M0M5Ljk3NzkyIDE0LjcwMzEgMTAuNzk2MiAxNC4zMjUgMTEuNjY2OSAxNC4zMjVDMTIuNTM3NSAxNC4zMjUgMTMuMzU1OCAxNC43MDMxIDEzLjk0NzcgMTUuMzQ4M0wxMy45NDg3IDE1LjM0OTRDMTQuMjQxNCAxNS42Njk1IDE0LjYyMTUgMTUuODMzMyAxNS4wMDAxIDE1LjgzMzNDMTUuMzc4OCAxNS44MzMzIDE1Ljc1ODggMTUuNjY5NSAxNi4wNTE1IDE1LjM0OTRWMTUuMzQ5NEwxNi44ODUgMTQuNDM3N0MxNy4xOTU1IDE0LjA5OCAxNy43MjI2IDE0LjA3NDQgMTguMDYyMyAxNC4zODQ5WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy4xNjA4IDIuMzI3NEMxNC4xNzY2IDEuMzExNiAxNS44MjM1IDEuMzExNiAxNi44MzkzIDIuMzI3NEMxNy44NTUxIDMuMzQzMTkgMTcuODU1MSA0Ljk5MDExIDE2LjgzOTMgNi4wMDU5MUw2LjM3MDM3IDE2LjQ3NDlDNi4zNTM4NyAxNi40OTE0IDYuMzM3NTMgMTYuNTA3NyA2LjMyMTMxIDE2LjUyNEM2LjA4MTc3IDE2Ljc2NCA1Ljg3MDU3IDE2Ljk3NTYgNS42MTU5NiAxNy4xMzE2QzUuMzkyMjggMTcuMjY4NyA1LjE0ODQxIDE3LjM2OTcgNC44OTMzMiAxNy40MzA5QzQuNjAyOTUgMTcuNTAwNiA0LjMwMzk5IDE3LjUwMDMgMy45NjQ5MSAxNy41QzMuOTQxOTYgMTcuNSAzLjkxODgzIDE3LjUgMy44OTU1IDE3LjVIMi41MDAwNEMyLjAzOTgxIDE3LjUgMS42NjY3MSAxNy4xMjY5IDEuNjY2NzEgMTYuNjY2N1YxNS4yNzEyQzEuNjY2NzEgMTUuMjQ3OSAxLjY2NjY5IDE1LjIyNDggMS42NjY2NyAxNS4yMDE4QzEuNjY2MzUgMTQuODYyNyAxLjY2NjA3IDE0LjU2MzggMS43MzU3OSAxNC4yNzM0QzEuNzk3MDMgMTQuMDE4MyAxLjg5ODA0IDEzLjc3NDQgMi4wMzUxMSAxMy41NTA4QzIuMTkxMTQgMTMuMjk2MSAyLjQwMjczIDEzLjA4NDkgMi42NDI3MiAxMi44NDU0QzIuNjU4OTcgMTIuODI5MiAyLjY3NTM0IDEyLjgxMjggMi42OTE4NCAxMi43OTYzTDEzLjE2MDggMi4zMjc0WicgZmlsbD0nd2hpdGUnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCB7IHVzZUZlZWRiYWNrQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xuaW1wb3J0IEVkaXQgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9pY29ucy9lZGl0LTA0LnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgT3BlbkZlZWRiYWNrQnV0dG9uID0gKCkgPT4ge1xuICBjb25zdCB7IGlzT3Blbiwgb3BlbkZlZWRiYWNrT3ZlcmxheSB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgaWYgKGlzT3BlbikgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICB0b3A6IFwiY2FsYygxMDB2aCAtIDcycHgpXCIsXG4gICAgICAgIGxlZnQ6IFwiY2FsYygxMDB2dyAtIDcycHgpXCIsXG4gICAgICAgIHpJbmRleDogMTAwMDAwMCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPEJ1dHRvbiBpY29uUGF0aD17RWRpdH0gb25DbGljaz17b3BlbkZlZWRiYWNrT3ZlcmxheX0gc2l6ZT1cIm1lZGl1bVwiIC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IGdldEluaXRpYWxzID0gKHVzZXI6IHtcbiAgZnVsbE5hbWU/OiBzdHJpbmc7XG4gIGZpcnN0TmFtZT86IHN0cmluZztcbiAgbGFzdE5hbWU/OiBzdHJpbmc7XG59KSA9PiB7XG4gIGlmICh1c2VyLmZ1bGxOYW1lKSB7XG4gICAgY29uc3QgZnVsbE5hbWUgPSB1c2VyLmZ1bGxOYW1lLnNwbGl0KFwiIFwiKTtcbiAgICByZXR1cm4gZnVsbE5hbWVbMF0uY2hhckF0KDApICsgZnVsbE5hbWVbMV0uY2hhckF0KDApO1xuICB9XG4gIGlmICghdXNlci5maXJzdE5hbWUgfHwgIXVzZXIubGFzdE5hbWUpIHJldHVybiBcIlwiO1xuICBjb25zdCBmaXJzdE5hbWUgPSB1c2VyLmZpcnN0TmFtZS5jaGFyQXQoMCk7XG4gIGNvbnN0IGxhc3ROYW1lID0gdXNlci5sYXN0TmFtZS5jaGFyQXQoMCk7XG5cbiAgcmV0dXJuIGAke2ZpcnN0TmFtZS50b1VwcGVyQ2FzZSgpfSR7bGFzdE5hbWUudG9VcHBlckNhc2UoKX1gO1xufTtcbiIsIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tJdGVtSG92ZXJlZCA9ICh7XG4gIGZlZWRiYWNrLFxufToge1xuICBmZWVkYmFjazogRmVlZGJhY2tSZXNwb25zZTtcbn0pID0+IHtcbiAgY29uc3QgeyB1c2VyLCBjcmVhdGVkQXQsIGNvbW1lbnQgfSA9IGZlZWRiYWNrO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJwLTNcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiB6LTEwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLW1lZGl1bSB0ZXh0LXNtIHRleHQtZ3JheS1mZWVkYmFjay0yMDAgd2hpdGVzcGFjZS1ub3dyYXAgei0xMFwiPlxuICAgICAgICAgIHt1c2VyPy5mdWxsTmFtZSB8fCBgJHt1c2VyPy5maXJzdE5hbWV9ICR7dXNlcj8ubGFzdE5hbWV9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEycHhdIHRleHQtZ3JheS1mZWVkYmFjay0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICB7bW9tZW50KGNyZWF0ZWRBdCkuZnJvbU5vdygpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBvdmVyZmxvdy1oaWRkZW4gdy1bMjQwcHhdXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC1bMTZweF0gbGVhZGluZy01IHRleHQtd2hpdGUgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAge2NvbW1lbnR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzI0JyBoZWlnaHQ9JzI1JyB2aWV3Qm94PScwIDAgMjQgMjUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J00xOC43MDcxIDcuMjA3MTFDMTkuMDk3NiA2LjgxNjU4IDE5LjA5NzYgNi4xODM0MiAxOC43MDcxIDUuNzkyODlDMTguMzE2NiA1LjQwMjM3IDE3LjY4MzQgNS40MDIzNyAxNy4yOTI5IDUuNzkyODlMMTIgMTEuMDg1OEw2LjcwNzExIDUuNzkyODlDNi4zMTY1OCA1LjQwMjM3IDUuNjgzNDIgNS40MDIzNyA1LjI5Mjg5IDUuNzkyODlDNC45MDIzNyA2LjE4MzQyIDQuOTAyMzcgNi44MTY1OCA1LjI5Mjg5IDcuMjA3MTFMMTAuNTg1OCAxMi41TDUuMjkyODkgMTcuNzkyOUM0LjkwMjM3IDE4LjE4MzQgNC45MDIzNyAxOC44MTY2IDUuMjkyODkgMTkuMjA3MUM1LjY4MzQyIDE5LjU5NzYgNi4zMTY1OCAxOS41OTc2IDYuNzA3MTEgMTkuMjA3MUwxMiAxMy45MTQyTDE3LjI5MjkgMTkuMjA3MUMxNy42ODM0IDE5LjU5NzYgMTguMzE2NiAxOS41OTc2IDE4LjcwNzEgMTkuMjA3MUMxOS4wOTc2IDE4LjgxNjYgMTkuMDk3NiAxOC4xODM0IDE4LjcwNzEgMTcuNzkyOUwxMy40MTQyIDEyLjVMMTguNzA3MSA3LjIwNzExWicgZmlsbD0nd2hpdGUnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCBDbG9zZSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2Nsb3NlLnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgQ2xvc2VCdXR0b24gPSAoe1xuICBzaXplLFxuICBvbkNsaWNrLFxufToge1xuICBzaXplOiBcInNtYWxsXCIgfCBcImxhcmdlXCI7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNpemVDbGFzcyA9IHNpemUgPT09IFwic21hbGxcIiA/IFwidy01IGgtNVwiIDogXCJ3LTYgaC02XCI7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBvbkNsaWNrKCk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIDxpbWcgc3JjPXtDbG9zZX0gY2xhc3NOYW1lPXtzaXplQ2xhc3N9IC8+XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuIiwiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQge1xuICBGZWVkYmFja1Jlc3BvbnNlLFxuICBSZXBseVJlc3BvbnNlLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3QgUmVwbHlJdGVtID0gKHtcbiAgcmVwbHksXG59OiB7XG4gIHJlcGx5OiBSZXBseVJlc3BvbnNlIHwgRmVlZGJhY2tSZXNwb25zZTtcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZmxleC1iYXNlbGluZSBnYXAtMlwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1tZWRpdW0gdGV4dC1zbSB0ZXh0LWdyYXktZmVlZGJhY2stMjAwIHdoaXRlc3BhY2Utbm93cmFwIHotMTBcIj5cbiAgICAgICAgICB7cmVwbHkudXNlci5maXJzdE5hbWV9IHtyZXBseS51c2VyLmxhc3ROYW1lfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC1bMTBweF0gbGVhZGluZy1bMTJweF0gdGV4dC1ncmF5LWZlZWRiYWNrLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgIHttb21lbnQocmVwbHkuY3JlYXRlZEF0KS5mcm9tTm93KCl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtcmVndWxhciB0ZXh0LVsxNHB4XSBsZWFkaW5nLTUgdGV4dC13aGl0ZVwiPlxuICAgICAgICB7cmVwbHkuY29tbWVudH1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBDaGFuZ2VFdmVudCwgS2V5Ym9hcmRFdmVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBGZWVkYmFja1RleHRBcmVhID0gKHtcbiAgdmFsdWUsXG4gIHNldFZhbHVlLFxuICBvblN1Ym1pdCxcbiAgaGFuZGxlUmVzaXplLFxuICBpc0FuaW1hdGVkLFxuICBpc0RhcmssXG59OiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHNldFZhbHVlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25TdWJtaXQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBoYW5kbGVSZXNpemU/OiAoKSA9PiB2b2lkO1xuICBpc0FuaW1hdGVkPzogYm9vbGVhbjtcbiAgaXNEYXJrPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgdGV4dGFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgW2lzT3BlbmluZywgc2V0SXNPcGVuaW5nXSA9IHVzZVN0YXRlKGlzQW5pbWF0ZWQpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQW5pbWF0ZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0ZXh0YXJlYVJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgICBzZXRJc09wZW5pbmcoZmFsc2UpO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH0sIFtpc0FuaW1hdGVkXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIHNldFZhbHVlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cbiAgICBpZiAodGV4dGFyZWFSZWYuY3VycmVudCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7IC8vIFJlc2V0IGhlaWdodCB0byBjYWxjdWxhdGUgc2Nyb2xsSGVpZ2h0XG4gICAgICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGV4dGFyZWFSZWYuY3VycmVudC5zY3JvbGxIZWlnaHR9cHhgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dGFyZWFSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBcIjI5cHhcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhbmRsZVJlc2l6ZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZVJlc2l6ZSgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBoYW5kbGVTdWJtaXQoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XG4gICAgb25TdWJtaXQodmFsdWUpO1xuICAgIHNldFZhbHVlKFwiXCIpO1xuICAgIGlmICghdGV4dGFyZWFSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIHRleHRhcmVhUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gXCIyOXB4XCI7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2BcbiAgICAgICAgJHtcbiAgICAgICAgICB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IFwiY29tbWVudC1pbnB1dC1jb250YWluZXJcIlxuICAgICAgICAgICAgOiBcImNvbW1lbnQtaW5wdXQtY29udGFpbmVyLWVtcHR5XCJcbiAgICAgICAgfSAgJHtpc09wZW5pbmcgPyBcImNvbW1lbnQtaW5wdXQtY29udGFpbmVyLW9wZW5pbmdcIiA6IFwiXCJ9ICAke1xuICAgICAgICBpc0RhcmsgPyBcImJnLWdyYXktZmVlZGJhY2stNzUwXCIgOiBcImJnLWdyYXktZmVlZGJhY2stNzAwXCJcbiAgICAgIH1gfVxuICAgID5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICByZWY9e3RleHRhcmVhUmVmfVxuICAgICAgICBjbGFzc05hbWU9e2Bjb21tZW50LWlucHV0ICR7XG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMCA/IFwiY29tbWVudC1pbnB1dC1maWxsZWRcIiA6IFwiXCJcbiAgICAgICAgfWB9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICBwbGFjZWhvbGRlcj1cIkFqb3V0ZXIgdW4gY29tbWVudGFpcmVcIlxuICAgICAgICByb3dzPXsxfVxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt2YWx1ZS5sZW5ndGggPiAwID8gXCJidXR0b25zLWNvbnRhaW5lclwiIDogXCJcIn1gfT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidXR0b24tc2VuZFwiIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgZmlsbD17dmFsdWUubGVuZ3RoID4gMCA/IFwiIzAwODVGRlwiIDogXCIjZmZmXCJ9XG4gICAgICAgICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICB3aWR0aD1cIjE2XCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNS45NjQuNjg2YS41LjUgMCAwIDAtLjY1LS42NUwuNzY3IDUuODU1SC43NjZsLS40NTIuMThhLjUuNSAwIDAgMC0uMDgyLjg4N2wuNDEuMjYuMDAxLjAwMiA0Ljk5NSAzLjE3OCAzLjE3OCA0Ljk5NS4wMDIuMDAyLjI2LjQxYS41LjUgMCAwIDAgLjg4Ni0uMDgzbDYtMTVabS0xLjgzMyAxLjg5TDYuNjM3IDEwLjA3bC0uMjE1LS4zMzhhLjUuNSAwIDAgMC0uMTU0LS4xNTRsLS4zMzgtLjIxNSA3LjQ5NC03LjQ5NCAxLjE3OC0uNDcxLS40NyAxLjE3OFpcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImV4cG9ydCBjb25zdCBNZW51SXRlbSA9ICh7XG4gIGxhYmVsLFxuICBvbkNsaWNrLFxufToge1xuICBsYWJlbDogc3RyaW5nO1xuICBvbkNsaWNrOiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT1cInotMSBtLTEgcHgtMiBweS0xIGhvdmVyOmJnLXByaW1hcnktZmVlZGJhY2stNDAwIGhvdmVyOm9wYWNpdHktMTAwIHJvdW5kZWQtbGdcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtc20gdGV4dC13aGl0ZVwiPntsYWJlbH08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjUnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNSAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMC4zMzM1IDEyQzEwLjMzMzUgMTAuODk1NCAxMS4yMjg5IDEwIDEyLjMzMzUgMTBDMTMuNDM4MSAxMCAxNC4zMzM1IDEwLjg5NTQgMTQuMzMzNSAxMkMxNC4zMzM1IDEzLjEwNDYgMTMuNDM4MSAxNCAxMi4zMzM1IDE0QzExLjIyODkgMTQgMTAuMzMzNSAxMy4xMDQ2IDEwLjMzMzUgMTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE3LjMzMzUgMTJDMTcuMzMzNSAxMC44OTU0IDE4LjIyODkgMTAgMTkuMzMzNSAxMEMyMC40MzgxIDEwIDIxLjMzMzUgMTAuODk1NCAyMS4zMzM1IDEyQzIxLjMzMzUgMTMuMTA0NiAyMC40MzgxIDE0IDE5LjMzMzUgMTRDMTguMjI4OSAxNCAxNy4zMzM1IDEzLjEwNDYgMTcuMzMzNSAxMlonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMy4zMzM1IDEyQzMuMzMzNSAxMC44OTU0IDQuMjI4OTMgMTAgNS4zMzM1IDEwQzYuNDM4MDcgMTAgNy4zMzM1IDEwLjg5NTQgNy4zMzM1IDEyQzcuMzMzNSAxMy4xMDQ2IDYuNDM4MDcgMTQgNS4zMzM1IDE0QzQuMjI4OTMgMTQgMy4zMzM1IDEzLjEwNDYgMy4zMzM1IDEyWicgZmlsbD0nd2hpdGUnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gXCIuL01lbnVJdGVtXCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQge1xuICB1c2VEZWxldGVGZWVkYmFjayxcbiAgdXNlVXBkYXRlRmVlZGJhY2ssXG59IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50XCI7XG5pbXBvcnQgRG90c0hvcml6b250YWwgZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9pY29ucy9kb3RzLWhvcml6b250YWwuc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBNZW51QnV0dG9uID0gKHtcbiAgZmVlZGJhY2ssXG4gIHNldElzSG92ZXJlZCxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG4gIHNldElzSG92ZXJlZDogKGlzSG92ZXJlZDogYm9vbGVhbikgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgeyByb290RGlyLCBzZXRTZWxlY3RlZEZlZWRiYWNrIH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcbiAgY29uc3QgeyBtdXRhdGU6IGRlbGV0ZUZlZWRiYWNrIH0gPSB1c2VEZWxldGVGZWVkYmFjaygpO1xuICBjb25zdCB7IG11dGF0ZTogdXBkYXRlRmVlZGJhY2sgfSA9IHVzZVVwZGF0ZUZlZWRiYWNrKCk7XG5cbiAgY29uc3QgcGF0aCA9IGB2c2NvZGU6Ly9maWxlJHtyb290RGlyICsgZmVlZGJhY2suZWxlbWVudElkfWA7XG5cbiAgY29uc3QgaGFuZGxlUmVzb2x2ZUZlZWRiYWNrID0gKCkgPT4ge1xuICAgIHVwZGF0ZUZlZWRiYWNrKFxuICAgICAge1xuICAgICAgICBmZWVkYmFja0lkOiBmZWVkYmFjay5pZCxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIGlzUmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBzZXRJc09wZW4oZmFsc2UpO1xuICAgICAgICAgIHNldElzSG92ZXJlZChmYWxzZSk7XG4gICAgICAgICAgc2V0U2VsZWN0ZWRGZWVkYmFjayhudWxsKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxpbWdcbiAgICAgICAgc3JjPXtEb3RzSG9yaXpvbnRhbH1cbiAgICAgICAgY2xhc3NOYW1lPVwidy00IGgtNFwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzT3BlbigobykgPT4gIW8pfVxuICAgICAgLz5cbiAgICAgIHtpc09wZW4gJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC04IHJpZ2h0LTIgei0xMSBmbGV4IGZsZXgtY29sICAgYmctZ3JheS1mZWVkYmFjay04MDAgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgbGFiZWw9XCJPdXZyaXIgZGFucyBWU2NvZGVcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICB3aW5kb3cub3BlbihwYXRoLCBcIl9ibGFua1wiKTtcbiAgICAgICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8TWVudUl0ZW0gbGFiZWw9XCJSw6lzb2x1XCIgb25DbGljaz17aGFuZGxlUmVzb2x2ZUZlZWRiYWNrfSAvPlxuICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgbGFiZWw9XCJTdXBwcmltZXJcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBkZWxldGVGZWVkYmFjayhmZWVkYmFjaywge1xuICAgICAgICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlQ3JlYXRlUmVwbHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2tcIjtcbmltcG9ydCB7IENsb3NlQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uL2F0b21zL2J1dHRvbnMvQ2xvc2VCdXR0b25cIjtcbmltcG9ydCB7IFJlcGx5SXRlbSB9IGZyb20gXCIuLi8uLi9yZXBsaWVzL1JlcGx5SXRlbVwiO1xuaW1wb3J0IHsgRmVlZGJhY2tUZXh0QXJlYSB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tUZXh0QXJlYVwiO1xuaW1wb3J0IHsgTWVudUJ1dHRvbiB9IGZyb20gXCIuLi9tZW51L01lbnVCdXR0b25cIjtcbmltcG9ydCB7IEZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tJdGVtU2VsZWN0ZWQgPSAoe1xuICBmZWVkYmFjayxcbiAgc2V0RmVlZGJhY2tIZWlnaHQsXG4gIHNldElzSG92ZXJlZCxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG4gIHNldEZlZWRiYWNrSGVpZ2h0OiAoaGVpZ2h0OiBudW1iZXIpID0+IHZvaWQ7XG4gIHNldElzSG92ZXJlZDogKGlzSG92ZXJlZDogYm9vbGVhbikgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgW3JlcGx5LCBzZXRSZXBseV0gPSB1c2VTdGF0ZShcIlwiKTtcblxuICBjb25zdCBmZWVkYmFja1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IHsgbXV0YXRlOiBjcmVhdGVSZXBseSB9ID0gdXNlQ3JlYXRlUmVwbHkoZmVlZGJhY2suaWQpO1xuICBjb25zdCB7IHNldFNlbGVjdGVkRmVlZGJhY2sgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuXG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICBpZiAoIWZlZWRiYWNrUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBzZXRGZWVkYmFja0hlaWdodChmZWVkYmFja1JlZi5jdXJyZW50LmNsaWVudEhlaWdodCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICAgIGNyZWF0ZVJlcGx5KHJlcGx5KTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmZWVkYmFja1JlZi5jdXJyZW50KSB7XG4gICAgICBzZXRGZWVkYmFja0hlaWdodChmZWVkYmFja1JlZi5jdXJyZW50LmNsaWVudEhlaWdodCk7XG4gICAgfVxuICB9LCBbZmVlZGJhY2ssIHNldEZlZWRiYWNrSGVpZ2h0XSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XG4gICAgc2V0SXNIb3ZlcmVkKGZhbHNlKTtcbiAgICBzZXRTZWxlY3RlZEZlZWRiYWNrKG51bGwpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2ZlZWRiYWNrUmVmfSBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHAtMyAgcmVsYXRpdmUgei0yMFwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1tZWRpdW0gdGV4dC1zbSB0ZXh0LXdoaXRlXCI+Q29tbWVudGFpcmU8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMSBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8TWVudUJ1dHRvbiBmZWVkYmFjaz17ZmVlZGJhY2t9IHNldElzSG92ZXJlZD17c2V0SXNIb3ZlcmVkfSAvPlxuICAgICAgICAgIDxDbG9zZUJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBvdmVyZmxvdy15LWF1dG8gb3ZlcmZsb3cteC1oaWRkZW4gbWF4LWgtWzIyMHB4XSBzY3JvbGxiYXItZGFyayBnYXAtMiBwLTNcIj5cbiAgICAgICAgICB7W2ZlZWRiYWNrLCAuLi5mZWVkYmFjay5yZXBsaWVzXS5tYXAoKHJlcGx5KSA9PiAoXG4gICAgICAgICAgICA8UmVwbHlJdGVtIGtleT17cmVwbHkuaWR9IHJlcGx5PXtyZXBseX0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibS0zXCI+XG4gICAgICAgICAgPEZlZWRiYWNrVGV4dEFyZWFcbiAgICAgICAgICAgIHZhbHVlPXtyZXBseX1cbiAgICAgICAgICAgIHNldFZhbHVlPXtzZXRSZXBseX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICBoYW5kbGVSZXNpemU9e2hhbmRsZVJlc2l6ZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCB7IGZvcndhcmRSZWYsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtcbiAgRmVlZGJhY2tDcmVhdGVEdG8sXG4gIEZlZWRiYWNrUmVzcG9uc2UsXG59IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9saWJzL2JhY2tlbmQtY2xpZW50XCI7XG5cbmNvbnN0IEZFRURCQUNLX0lOUFVUX1dJRFRIID0gMzQ4O1xuY29uc3QgRkVFREJBQ0tfSVRFTV9XSURUSCA9IDI1NDtcbmNvbnN0IE1BUkdJTiA9IDI0O1xuY29uc3QgSUNPTl9XSURUSCA9IDQ4O1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tQb3NpdGlvbmVyID0gZm9yd2FyZFJlZjxcbiAgSFRNTERpdkVsZW1lbnQgfCBudWxsLFxuICB7XG4gICAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfCBGZWVkYmFja0NyZWF0ZUR0bztcbiAgICBpc0VkaXRpbmc/OiBib29sZWFuO1xuICAgIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIGlzSG92ZXJlZD86IGJvb2xlYW47XG4gICAgZmVlZGJhY2tIZWlnaHQ/OiBudW1iZXI7XG4gICAgc2V0U2hvdWxkUmV2ZXJzZT86IChzaG91bGRSZXZlcnNlOiBib29sZWFuKSA9PiB2b2lkO1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIH1cbj4oXG4gIChcbiAgICB7XG4gICAgICBmZWVkYmFjayxcbiAgICAgIGZlZWRiYWNrSGVpZ2h0ID0gMCxcbiAgICAgIGlzRWRpdGluZyxcbiAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICBpc0hvdmVyZWQsXG4gICAgICBzZXRTaG91bGRSZXZlcnNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgfSxcbiAgICByZWZcbiAgKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICAgIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlU3RhdGUoe1xuICAgICAgYm90dG9tOiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICBsZWZ0OiAwLFxuICAgIH0pO1xuICAgIGNvbnN0IFtpc0luaXRpYWxpemVkLCBzZXRJc0luaXRpYWxpemVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0YXJnZXRFbGVtZW50LmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgeyBib3R0b20sIGxlZnQsIGlzT3ZlcmZsb3dpbmdYIH0gPSBnZXRQb3NpdGlvbkluZm9zKHtcbiAgICAgICAgICBmZWVkYmFjayxcbiAgICAgICAgICBmZWVkYmFja0hlaWdodCxcbiAgICAgICAgICBpc1NlbGVjdGVkLFxuICAgICAgICAgIGlzSG92ZXJlZCxcbiAgICAgICAgICBpc0VkaXRpbmcsXG4gICAgICAgICAgZGltZW5zaW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2V0UG9zaXRpb24oe1xuICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc2V0U2hvdWxkUmV2ZXJzZSkgc2V0U2hvdWxkUmV2ZXJzZShpc092ZXJmbG93aW5nWCk7XG4gICAgICAgIHNldElzSW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgICBgW2RhdGEtcGF0aD1cIiR7ZmVlZGJhY2suZWxlbWVudElkfVwiXWBcbiAgICAgICk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbZmVlZGJhY2suZWxlbWVudEluZGV4XTtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGFyZ2V0RWxlbWVudC5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgICAgaGFuZGxlUmVzaXplKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICB9O1xuICAgIH0sIFtcbiAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICBpc0VkaXRpbmcsXG4gICAgICBpc0hvdmVyZWQsXG4gICAgICBmZWVkYmFjayxcbiAgICAgIHNldFNob3VsZFJldmVyc2UsXG4gICAgICBmZWVkYmFja0hlaWdodCxcbiAgICBdKTtcblxuICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50IHx8ICFpc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIGJvdHRvbTogcG9zaXRpb24uYm90dG9tLFxuICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uLmxlZnQsXG4gICAgICAgICAgdHJhbnNpdGlvbjogXCJhbGwgMC4yNXMgZWFzZS1pbi1vdXRcIixcbiAgICAgICAgICB6SW5kZXg6IGlzU2VsZWN0ZWQgfHwgaXNIb3ZlcmVkID8gMTAwMDAwMSA6IDEwMDAwMDAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PixcbiAgICAgIGRvY3VtZW50LmJvZHlcbiAgICApO1xuICB9XG4pO1xuXG5jb25zdCBnZXRQb3NpdGlvbkluZm9zID0gKHtcbiAgZmVlZGJhY2ssXG4gIGRpbWVuc2lvbnMsXG4gIGZlZWRiYWNrSGVpZ2h0LFxuICBpc1NlbGVjdGVkLFxuICBpc0hvdmVyZWQsXG4gIGlzRWRpdGluZyxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2UgfCBGZWVkYmFja0NyZWF0ZUR0bztcbiAgZGltZW5zaW9uczogRE9NUmVjdDtcbiAgZmVlZGJhY2tIZWlnaHQ6IG51bWJlcjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIGlzSG92ZXJlZD86IGJvb2xlYW47XG4gIGlzRWRpdGluZz86IGJvb2xlYW47XG59KSA9PiB7XG4gIGNvbnN0IHRhcmdldFdpZHRoID0gZGltZW5zaW9ucy53aWR0aCB8fCAwO1xuICBjb25zdCB0YXJnZXRIZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodCB8fCAwO1xuXG4gIGNvbnN0IHdpZHRoUmF0aW8gPSBmZWVkYmFjay5lbGVtZW50V2lkdGhcbiAgICA/IGZlZWRiYWNrLmVsZW1lbnRXaWR0aCAvIHRhcmdldFdpZHRoXG4gICAgOiAxO1xuICBjb25zdCBoZWlnaHRSYXRpbyA9IGZlZWRiYWNrLmVsZW1lbnRIZWlnaHRcbiAgICA/IGZlZWRiYWNrLmVsZW1lbnRIZWlnaHQgLyB0YXJnZXRIZWlnaHRcbiAgICA6IDE7XG5cbiAgY29uc3QgcmVmZXJlbmNlUG9zaXRpb25MZWZ0ID1cbiAgICBmZWVkYmFjay54IC8gd2lkdGhSYXRpbyArIGRpbWVuc2lvbnMubGVmdCArIHdpbmRvdy5zY3JvbGxYO1xuICBjb25zdCByZWZlcmVuY2VQb3NpdGlvbkJvdHRvbSA9XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAtXG4gICAgKGZlZWRiYWNrLnkgLyBoZWlnaHRSYXRpbyArIGRpbWVuc2lvbnMudG9wICsgd2luZG93LnNjcm9sbFkpO1xuXG4gIGNvbnN0IGZlZWRiYWNrV2lkdGggPSBpc0VkaXRpbmcgPyBGRUVEQkFDS19JTlBVVF9XSURUSCA6IEZFRURCQUNLX0lURU1fV0lEVEg7XG5cbiAgY29uc3QgaXNPdmVyZmxvd2luZ1ggPVxuICAgIHJlZmVyZW5jZVBvc2l0aW9uTGVmdCArIGZlZWRiYWNrV2lkdGggKyBNQVJHSU4gPlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcblxuICBjb25zdCBpc092ZXJmbG93aW5nWSA9XG4gICAgcmVmZXJlbmNlUG9zaXRpb25Cb3R0b20gKyBmZWVkYmFja0hlaWdodCA+XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICBjb25zdCBvZmZzZXRFZGl0aW5nID0gaXNFZGl0aW5nID8gRkVFREJBQ0tfSU5QVVRfV0lEVEggLSBJQ09OX1dJRFRIIDogMDtcbiAgY29uc3Qgb2Zmc2V0QWN0aXZlID1cbiAgICBpc0hvdmVyZWQgfHwgaXNTZWxlY3RlZCA/IEZFRURCQUNLX0lURU1fV0lEVEggLSBJQ09OX1dJRFRIIDogMDtcblxuICBjb25zdCBwb3NpdGlvbkJvdHRvbSA9XG4gICAgaXNPdmVyZmxvd2luZ1kgJiYgaXNTZWxlY3RlZFxuICAgICAgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IC0gZmVlZGJhY2tIZWlnaHQgLSBNQVJHSU5cbiAgICAgIDogcmVmZXJlbmNlUG9zaXRpb25Cb3R0b207XG5cbiAgY29uc3QgcG9zaXRpb25MZWZ0ID0gaXNPdmVyZmxvd2luZ1hcbiAgICA/IHJlZmVyZW5jZVBvc2l0aW9uTGVmdCAtIG9mZnNldEVkaXRpbmcgLSBvZmZzZXRBY3RpdmVcbiAgICA6IHJlZmVyZW5jZVBvc2l0aW9uTGVmdDtcblxuICByZXR1cm4ge1xuICAgIGJvdHRvbTogcG9zaXRpb25Cb3R0b20sXG4gICAgbGVmdDogcG9zaXRpb25MZWZ0LFxuICAgIGlzT3ZlcmZsb3dpbmdYLFxuICB9O1xufTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyBnZXRJbml0aWFscyB9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlscy9nZXRJbml0aWFsc1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tJdGVtSG92ZXJlZCB9IGZyb20gXCIuL0ZlZWRiYWNrSXRlbUhvdmVyZWRcIjtcbmltcG9ydCB7IEZlZWRiYWNrSXRlbVNlbGVjdGVkIH0gZnJvbSBcIi4vRmVlZGJhY2tJdGVtU2VsZWN0ZWRcIjtcbmltcG9ydCB7IEZlZWRiYWNrUG9zaXRpb25lciB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tQb3NpdGlvbmVyXCI7XG5pbXBvcnQgeyBGZWVkYmFja1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrUGluID0gKHsgZmVlZGJhY2sgfTogeyBmZWVkYmFjazogRmVlZGJhY2tSZXNwb25zZSB9KSA9PiB7XG4gIGNvbnN0IFtpc0hvdmVyZWQsIHNldElzSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmZWVkYmFja0hlaWdodCwgc2V0RmVlZGJhY2tIZWlnaHRdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IHsgc2VsZWN0ZWRGZWVkYmFjaywgc2V0U2VsZWN0ZWRGZWVkYmFjayB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgY29uc3QgaW5pdGlhbHMgPSBnZXRJbml0aWFscyhmZWVkYmFjay51c2VyKTtcblxuICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRGZWVkYmFjayAmJiBmZWVkYmFjay5pZCA9PT0gc2VsZWN0ZWRGZWVkYmFjay5pZDtcblxuICByZXR1cm4gKFxuICAgIDxGZWVkYmFja1Bvc2l0aW9uZXJcbiAgICAgIGZlZWRiYWNrPXtmZWVkYmFja31cbiAgICAgIGlzU2VsZWN0ZWQ9eyEhaXNTZWxlY3RlZH1cbiAgICAgIGlzSG92ZXJlZD17aXNIb3ZlcmVkfVxuICAgICAgZmVlZGJhY2tIZWlnaHQ9e2lzSG92ZXJlZCAmJiAhaXNTZWxlY3RlZCA/IDk2IDogZmVlZGJhY2tIZWlnaHR9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldElzSG92ZXJlZCh0cnVlKX1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRJc0hvdmVyZWQoZmFsc2UpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZEZlZWRiYWNrKGZlZWRiYWNrKX1cbiAgICAgICAgY2xhc3NOYW1lPXtgZmVlZGJhY2staXRlbSAke2lzU2VsZWN0ZWQgJiYgXCJzZWxlY3RlZFwifSAke1xuICAgICAgICAgIGZlZWRiYWNrLmlzUmVzb2x2ZWQgJiYgIWlzSG92ZXJlZCAmJiAhaXNTZWxlY3RlZCAmJiBcIm9wYWNpdHktNTBcIlxuICAgICAgICB9YH1cbiAgICAgID5cbiAgICAgICAge2lzU2VsZWN0ZWQgPyAoXG4gICAgICAgICAgPEZlZWRiYWNrSXRlbVNlbGVjdGVkXG4gICAgICAgICAgICBmZWVkYmFjaz17ZmVlZGJhY2t9XG4gICAgICAgICAgICBzZXRGZWVkYmFja0hlaWdodD17c2V0RmVlZGJhY2tIZWlnaHR9XG4gICAgICAgICAgICBzZXRJc0hvdmVyZWQ9e3NldElzSG92ZXJlZH1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogaXNIb3ZlcmVkID8gKFxuICAgICAgICAgIDxGZWVkYmFja0l0ZW1Ib3ZlcmVkIGZlZWRiYWNrPXtmZWVkYmFja30gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1zaHJpbmstMCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdy02IGgtNiBtLTNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgZm9udC1tZWRpdW1cIj57aW5pdGlhbHN9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9GZWVkYmFja1Bvc2l0aW9uZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tQaW4gfSBmcm9tIFwiLi4vaXRlbS9GZWVkYmFja1BpblwiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tQaW5zID0gKCkgPT4ge1xuICBjb25zdCB7IGlzT3BlbiwgZmVlZGJhY2tzIH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBpZiAoIWlzT3BlbiB8fCAhZmVlZGJhY2tzKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gZmVlZGJhY2tzXG4gICAgLmZpbHRlcigoZmVlZGJhY2spID0+IGZlZWRiYWNrLnBhdGggPT09IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgICAubWFwKChmZWVkYmFjaykgPT4gPEZlZWRiYWNrUGluIGtleT17ZmVlZGJhY2suaWR9IGZlZWRiYWNrPXtmZWVkYmFja30gLz4pO1xufTtcbiIsImV4cG9ydCBjb25zdCBDb21tZW50SWNvbiA9ICgpID0+IHtcbiAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtgY29tbWVudC1pY29uYH0+PC9kaXY+O1xufTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VDcmVhdGVGZWVkYmFjayB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuaW1wb3J0IHsgQ29tbWVudEljb24gfSBmcm9tIFwiLi4vLi4vLi4vYXRvbXMvaWNvbnMvQ29tbWVudEljb25cIjtcbmltcG9ydCB7IEZlZWRiYWNrUG9zaXRpb25lciB9IGZyb20gXCIuLi9zaGFyZWQvRmVlZGJhY2tQb3NpdGlvbmVyXCI7XG5pbXBvcnQgeyBGZWVkYmFja1RleHRBcmVhIH0gZnJvbSBcIi4uL3NoYXJlZC9GZWVkYmFja1RleHRBcmVhXCI7XG5cbmV4cG9ydCBjb25zdCBGZWVkYmFja0lucHV0ID0gKCkgPT4ge1xuICBjb25zdCB7IG5ld0ZlZWRiYWNrLCByZXNldEZlZWRiYWNrLCBuZXdGZWVkYmFja1JlZiB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG4gIGNvbnN0IFtjb21tZW50LCBzZXRDb21tZW50XSA9IHVzZVN0YXRlKG5ld0ZlZWRiYWNrPy5jb21tZW50IHx8IFwiXCIpO1xuICBjb25zdCBbc2hvdWxkUmV2ZXJzZSwgc2V0U2hvdWxkUmV2ZXJzZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgeyBtdXRhdGU6IGNyZWF0ZUZlZWRiYWNrIH0gPSB1c2VDcmVhdGVGZWVkYmFjaygpO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICgpID0+IHtcbiAgICBpZiAoIW5ld0ZlZWRiYWNrKSByZXR1cm47XG4gICAgY3JlYXRlRmVlZGJhY2soe1xuICAgICAgLi4ubmV3RmVlZGJhY2ssXG4gICAgICB4OiBuZXdGZWVkYmFjay54LFxuICAgICAgeTogbmV3RmVlZGJhY2sueSxcbiAgICAgIGNvbW1lbnQsXG4gICAgfSk7XG4gICAgcmVzZXRGZWVkYmFjaygpO1xuICB9O1xuXG4gIGlmICghbmV3RmVlZGJhY2spIHJldHVybiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPEZlZWRiYWNrUG9zaXRpb25lclxuICAgICAgcmVmPXtuZXdGZWVkYmFja1JlZn1cbiAgICAgIGZlZWRiYWNrPXtuZXdGZWVkYmFja31cbiAgICAgIHNldFNob3VsZFJldmVyc2U9e3NldFNob3VsZFJldmVyc2V9XG4gICAgICBpc0VkaXRpbmc9e3RydWV9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJjb21tZW50LWNvbnRhaW5lclwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZmxleERpcmVjdGlvbjogc2hvdWxkUmV2ZXJzZSA/IFwicm93LXJldmVyc2VcIiA6IFwicm93XCIsXG4gICAgICAgICAgYWxpZ25JdGVtczogY29tbWVudC5sZW5ndGggPiAwID8gXCJmbGV4LXN0YXJ0XCIgOiBcImZsZXgtZW5kXCIsXG4gICAgICAgICAgdG9wOiBjb21tZW50Lmxlbmd0aCA+IDAgPyBcIjUxcHhcIiA6IFwiMHB4XCIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxDb21tZW50SWNvbiAvPlxuICAgICAgICA8RmVlZGJhY2tUZXh0QXJlYVxuICAgICAgICAgIHZhbHVlPXtjb21tZW50fVxuICAgICAgICAgIHNldFZhbHVlPXtzZXRDb21tZW50fVxuICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgaXNBbmltYXRlZFxuICAgICAgICAgIGlzRGFya1xuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9GZWVkYmFja1Bvc2l0aW9uZXI+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTE1IDE4TDkgMTJMMTUgNicgc3Ryb2tlPSclMjNFNkYyRkYnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNOSAxOEwxNSAxMkw5IDYnIHN0cm9rZT0nJTIzRTZGMkZGJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNlJTNjL3N2ZyUzZVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiaW1wb3J0IENoZXZyb25MZWZ0IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvY2hldnJvbi1sZWZ0LnN2Z1wiO1xuaW1wb3J0IENoZXZyb25SaWdodCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnXCI7XG5cbmV4cG9ydCBjb25zdCBDb2xsYXBzZUJ1dHRvbiA9ICh7XG4gIGlzQ29sbGFwc2VkLFxuICBzZXRJc0NvbGxhcHNlZCxcbn06IHtcbiAgaXNDb2xsYXBzZWQ6IGJvb2xlYW47XG4gIHNldElzQ29sbGFwc2VkOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj47XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgc2V0SXNDb2xsYXBzZWQoKGMpID0+ICFjKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9XCJoLTE2IHctMTYgcm91bmRlZC1mdWxsIGFic29sdXRlIGxlZnQtWy0zMnB4XSBib3R0b20tWzJweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcHItNiBiZy1ncmF5LWZlZWRiYWNrLTgwMFwiXG4gICAgPlxuICAgICAgPGltZyBzcmM9e2lzQ29sbGFwc2VkID8gQ2hldnJvbkxlZnQgOiBDaGV2cm9uUmlnaHR9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTE2IDE3TDIxIDEyTTIxIDEyTDE2IDdNMjEgMTJIOU0xMiAxN0MxMiAxNy45MyAxMiAxOC4zOTUgMTEuODk3OCAxOC43NzY1QzExLjYyMDQgMTkuODExNyAxMC44MTE3IDIwLjYyMDQgOS43NzY0NiAyMC44OTc4QzkuMzk0OTYgMjEgOC45Mjk5NyAyMSA4IDIxSDcuNUM2LjEwMjE4IDIxIDUuNDAzMjYgMjEgNC44NTE5NSAyMC43NzE2QzQuMTE2ODcgMjAuNDY3MiAzLjUzMjg0IDE5Ljg4MzEgMy4yMjgzNiAxOS4xNDgxQzMgMTguNTk2NyAzIDE3Ljg5NzggMyAxNi41VjcuNUMzIDYuMTAyMTcgMyA1LjQwMzI2IDMuMjI4MzYgNC44NTE5NUMzLjUzMjg0IDQuMTE2ODcgNC4xMTY4NyAzLjUzMjg0IDQuODUxOTUgMy4yMjgzNkM1LjQwMzI2IDMgNi4xMDIxOCAzIDcuNSAzSDhDOC45Mjk5NyAzIDkuMzk0OTYgMyA5Ljc3NjQ2IDMuMTAyMjJDMTAuODExNyAzLjM3OTYyIDExLjYyMDQgNC4xODgyNyAxMS44OTc4IDUuMjIzNTRDMTIgNS42MDUwNCAxMiA2LjA3MDAzIDEyIDcnIHN0cm9rZT0nd2hpdGUnIHN0cm9rZS13aWR0aD0nMScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgYXBpIGZyb20gXCIuL2FwaVwiO1xuaW1wb3J0IHsgU2lnbkluRHRvLCBTaWduVXBEdG8gfSBmcm9tIFwiLi4vLi4vbGlicy9iYWNrZW5kLWNsaWVudFwiO1xuXG5leHBvcnQgY29uc3Qgc2lnbkluID0gYXN5bmMgKHBheWxvYWQ6IFNpZ25JbkR0bykgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5hdXRoLmF1dGhDb250cm9sbGVyU2lnbkluKHBheWxvYWQpO1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiLCByZXNwb25zZS5kYXRhLmFjY2Vzc1Rva2VuKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnblVwID0gYXN5bmMgKHBheWxvYWQ6IFNpZ25VcER0bykgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5hdXRoLmF1dGhDb250cm9sbGVyU2lnblVwKHBheWxvYWQpO1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiLCByZXNwb25zZS5kYXRhLmFjY2Vzc1Rva2VuKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgbG9nb3V0ID0gYXN5bmMgKCkgPT4ge1xuICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImdhbGFkcmltRmVlZGJhY2tUb2tlblwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTaWduSW4gPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBzaWduSW4sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTaWduVXAgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBzaWduVXAsXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoKTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VMb2dvdXQgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBsb2dvdXQsXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoKTtcbiAgICB9LFxuICB9KTtcbn07XG4iLCJpbXBvcnQgTG9nb3V0SWNvbiBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb25zL2xvZy1vdXQtMDIuc3ZnXCI7XG5pbXBvcnQgeyB1c2VMb2dvdXQgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aFwiO1xuaW1wb3J0IHsgdXNlTWUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdXNlclwiO1xuXG5leHBvcnQgY29uc3QgQ29ubmVjdGVkVXNlciA9ICgpID0+IHtcbiAgY29uc3QgeyBkYXRhOiBtZSB9ID0gdXNlTWUoKTtcbiAgY29uc3QgeyBtdXRhdGU6IGxvZ291dCB9ID0gdXNlTG9nb3V0KCk7XG5cbiAgY29uc3QgaGFuZGxlTG9nb3V0ID0gKCkgPT4ge1xuICAgIGxvZ291dCgpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHRleHQtZ3JheS1mZWVkYmFjay0yMDAgei0xMCBwLTIgcHQtNFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTMwMFwiPlxuICAgICAgICAgIHttZT8uZnVsbE5hbWUgfHwgYCR7bWU/LmZpcnN0TmFtZX0gJHttZT8ubGFzdE5hbWV9YH1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQteHMgbGVhZGluZy1bMTJweF0gdGV4dC1ncmF5LWZlZWRiYWNrLTMwMFwiPlxuICAgICAgICAgIHttZT8uZW1haWx9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGltZyBvbkNsaWNrPXtoYW5kbGVMb2dvdXR9IHNyYz17TG9nb3V0SWNvbn0gY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXJcIiAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsInZhciBpbWcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J00xNy41IDE3LjVMMTMuODc1IDEzLjg3NU0xNS44MzMzIDkuMTY2NjdDMTUuODMzMyAxMi44NDg2IDEyLjg0ODYgMTUuODMzMyA5LjE2NjY3IDE1LjgzMzNDNS40ODQ3NyAxNS44MzMzIDIuNSAxMi44NDg2IDIuNSA5LjE2NjY3QzIuNSA1LjQ4NDc3IDUuNDg0NzcgMi41IDkuMTY2NjcgMi41QzEyLjg0ODYgMi41IDE1LjgzMzMgNS40ODQ3NyAxNS44MzMzIDkuMTY2NjdaJyBzdHJva2U9J3doaXRlJyBzdHJva2Utd2lkdGg9JzEuNjY2NjcnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNlJTNjL3N2ZyUzZVwiO1xuICBleHBvcnQgZGVmYXVsdCBpbWc7IiwiaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL3NlYXJjaC5zdmdcIjtcblxuZXhwb3J0IGNvbnN0IFNlYXJjaElucHV0ID0gKHtcbiAgdmFsdWUsXG4gIHNldFZhbHVlLFxufToge1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZXRWYWx1ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctZ3JheS1mZWVkYmFjay03MDAgYm9yZGVyLWdyYXktZmVlZGJhY2stNTAwIHJvdW5kZWQtbGcgcHgtMyBweS0yIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8aW1nIHNyYz17U2VhcmNofSBjbGFzc05hbWU9XCJ3LTYgaC02XCIgLz5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPXtcInRleHRcIn1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLWdyYXktZmVlZGJhY2stNzAwIG91dGxpbmUtbm9uZSBib3JkZXItbm9uZSB0ZXh0LXdoaXRlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyBGZWVkYmFja1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2xpYnMvYmFja2VuZC1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrTGlzdEl0ZW0gPSAoe1xuICBmZWVkYmFjayxcbn06IHtcbiAgZmVlZGJhY2s6IEZlZWRiYWNrUmVzcG9uc2U7XG59KSA9PiB7XG4gIGNvbnN0IHsgdXNlciwgY3JlYXRlZEF0LCBjb21tZW50LCBwYXRoLCByZXBsaWVzLCBpc1Jlc29sdmVkIH0gPSBmZWVkYmFjaztcbiAgY29uc3QgeyBzZWxlY3RlZEZlZWRiYWNrLCBzZXRTZWxlY3RlZEZlZWRiYWNrLCBuYXZpZ2F0ZSB9ID1cbiAgICB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRTZWxlY3RlZEZlZWRiYWNrKGZlZWRiYWNrKTtcbiAgICBuYXZpZ2F0ZShmZWVkYmFjay5wYXRoKTtcbiAgfTtcblxuICBjb25zdCByZXBsaWVzQ291bnQgPSByZXBsaWVzLmxlbmd0aDtcblxuICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWRGZWVkYmFjayAmJiBmZWVkYmFjay5pZCA9PT0gc2VsZWN0ZWRGZWVkYmFjay5pZDtcblxuICBjb25zdCBpc1NlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgPyBcImJnLXByaW1hcnktZmVlZGJhY2stNjAwXCJcbiAgICA6IFwiIGhvdmVyOmJnLWdyYXktZmVlZGJhY2stNzAwXCI7XG5cbiAgY29uc3QgdGV4dENvbG9yQ2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgPyBcInRleHQtd2hpdGVcIlxuICAgIDogXCJ0ZXh0LXByaW1hcnktZmVlZGJhY2stNDAwXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2BmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IHJvdW5kZWQtbGcgJHtpc1NlbGVjdGVkQ2xhc3N9IHAtMiAke1xuICAgICAgICBpc1Jlc29sdmVkID8gXCJvcGFjaXR5LTYwXCIgOiBcIlwiXG4gICAgICB9YH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTIwMFwiPlxuICAgICAgICAgIHt1c2VyPy5mdWxsTmFtZSB8fCBgJHt1c2VyPy5maXJzdE5hbWV9ICR7dXNlcj8ubGFzdE5hbWV9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJrdW1iaC1yZWd1bGFyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEycHhdIHRleHQtZ3JheS1mZWVkYmFjay0zMDBcIj5cbiAgICAgICAgICB7bW9tZW50KGNyZWF0ZWRBdCkuZnJvbU5vdygpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImt1bWJoLXJlZ3VsYXIgdGV4dC14cyB0ZXh0LXdoaXRlXCI+e3BhdGh9PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXQtMiBrdW1iaC1yZWd1bGFyIHRleHQtYmFzZSB0ZXh0LXdoaXRlXCI+e2NvbW1lbnR9PC9zcGFuPlxuICAgICAge3JlcGxpZXNDb3VudCA+IDAgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BtdC0yIGt1bWJoLXJlZ3VsYXIgdGV4dC14cyAke3RleHRDb2xvckNsYXNzfWB9PlxuICAgICAgICAgIHtyZXBsaWVzQ291bnR9IHLDqXBvbnNle3JlcGxpZXNDb3VudCA+IDEgPyBcInNcIiA6IFwiXCJ9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUZlZWRiYWNrQ29udGV4dCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb250ZXh0cy9GZWVkYmFja0NvbnRleHRcIjtcbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSBcIi4uLy4uLy4uL2F0b21zL2lucHV0cy9TZWFyY2hJbnB1dFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tMaXN0SXRlbSB9IGZyb20gXCIuLi9pdGVtL0ZlZWRiYWNrTGlzdEl0ZW1cIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrTGlzdCA9ICgpID0+IHtcbiAgY29uc3QgeyBmZWVkYmFja3MgfSA9IHVzZUZlZWRiYWNrQ29udGV4dCgpO1xuICBjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoXCJcIik7XG5cbiAgY29uc3QgZmlsdGVyZWRGZWVkYmFja3MgPSBmZWVkYmFja3M/LmZpbHRlcihcbiAgICAoZmVlZGJhY2spID0+XG4gICAgICAhc2VhcmNoIHx8XG4gICAgICBmZWVkYmFjay5wYXRoLmluY2x1ZGVzKHNlYXJjaCkgfHxcbiAgICAgIGZlZWRiYWNrLmNvbW1lbnQuaW5jbHVkZXMoc2VhcmNoKVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgIGZsZXggZmxleC1jb2wgIHB0LTggb3ZlcmZsb3ctaGlkZGVuIHotMTBcIj5cbiAgICAgIDxTZWFyY2hJbnB1dCB2YWx1ZT17c2VhcmNofSBzZXRWYWx1ZT17c2V0U2VhcmNofSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCIgZmxleCBmbGV4LWNvbCBnYXAtNCBtdC00IG92ZXJmbG93LXktYXV0byBzY3JvbGxiYXItaGlkZVwiPlxuICAgICAgICB7ZmlsdGVyZWRGZWVkYmFja3MgJiZcbiAgICAgICAgICBmaWx0ZXJlZEZlZWRiYWNrcy5tYXAoKGZlZWRiYWNrKSA9PiAoXG4gICAgICAgICAgICA8RmVlZGJhY2tMaXN0SXRlbSBrZXk9e2ZlZWRiYWNrLmlkfSBmZWVkYmFjaz17ZmVlZGJhY2t9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VGZWVkYmFja0NvbnRleHQgfSBmcm9tIFwiLi4vLi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VNZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy91c2VyXCI7XG5pbXBvcnQgeyBDb25uZWN0ZWRVc2VyIH0gZnJvbSBcIi4uL21vbGVjdWxlcy9Db25uZWN0ZWRVc2VyXCI7XG5pbXBvcnQgeyBGZWVkYmFja0xpc3QgfSBmcm9tIFwiLi4vbW9sZWN1bGVzL2ZlZWRiYWNrcy9ncm91cC9GZWVkYmFja0xpc3RcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3RlZFBhbmVsID0gKCkgPT4ge1xuICBjb25zdCB7IGRhdGE6IG1lIH0gPSB1c2VNZSgpO1xuICBjb25zdCB7IHByb2plY3RJZCB9ID0gdXNlRmVlZGJhY2tDb250ZXh0KCk7XG5cbiAgY29uc3QgaXNDb2xsYWJvcmF0b3IgPSBtZT8uY29sbGFib3JhdGlvbnMuZmluZChcbiAgICAoY29sbGFib3JhdGlvbikgPT4gY29sbGFib3JhdGlvbi5wcm9qZWN0LmlkID09PSBwcm9qZWN0SWRcbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBmbGV4LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1zdHJldGNoIGp1c3RpZnktYmV0d2VlbiBtYXgtaC1bY2FsYygxMDB2aC03MnB4KV1cIj5cbiAgICAgIHtpc0NvbGxhYm9yYXRvciA/IChcbiAgICAgICAgPEZlZWRiYWNrTGlzdCAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciB0ZXh0LWdyYXktZmVlZGJhY2stMjAwIHRleHQtc21cIj5cbiAgICAgICAgICAgIFZvdXMgbidhdmV6IGFjdHVlbGxlbWVudCBwYXMgbGVzIGRyb2l0cyBzdXIgY2UgcHJvamV0LCB2ZXVpbGxlelxuICAgICAgICAgICAgY29udGFjdGVyIHZvdHJlIHByb2R1Y3QgbWFuYWdlclxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPENvbm5lY3RlZFVzZXIgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJleHBvcnQgY29uc3QgSW5wdXQgPSAoe1xuICBsYWJlbCxcbiAgcGxhY2Vob2xkZXIsXG4gIHR5cGUsXG4gIHZhbHVlLFxuICBzZXRWYWx1ZSxcbn06IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZXRWYWx1ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPVwia3VtYmgtbWVkaXVtIHRleHQtc20gdGV4dC1ncmF5LWZlZWRiYWNrLTQwMCBtYi1bNnB4XVwiPlxuICAgICAgICB7bGFiZWx9XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQgdGV4dC1ibGFjayBib3JkZXIgYm9yZGVyLWdyYXktZmVlZGJhY2stNDAwIHB5LTIgcHgtMyBtYi00IHBsYWNlaG9sZGVyOnRleHQtZ3JheS1mZWVkYmFjay0zMDBcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJ2YXIgaW1nID0gXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxMjcnIGhlaWdodD0nNDMnIHZpZXdCb3g9JzAgMCAxMjcgNDMnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J003LjQ4NjczIDguMDc3NjdDOC40OTExMSA4LjA3NzY3IDkuNDE4NjIgOC4yNTM3MiAxMC4yNjkzIDguNjA1ODJDMTEuMTMwMiA4Ljk0NzU3IDExLjg4MzQgOS40MzQzIDEyLjUyOTEgMTAuMDY2TDEyLjYzNjcgOC4zODgzNUgxNi44MTgyVjIyLjEwNDlDMTYuODE4MiAyNC4wOTMyIDE2LjQ0NDEgMjUuODI3OCAxNS42OTYgMjcuMzA4N0MxNC45NTgxIDI4Ljc4OTYgMTMuOTE3OCAyOS45MzkyIDEyLjU3NTIgMzAuNzU3M0MxMS4yNDI5IDMxLjU4NTggOS42NzQ4NCAzMiA3Ljg3MTA1IDMyQzYuODc2OTIgMzIgNS44MjEzIDMxLjg2MDIgNC43MDQxOSAzMS41ODA2QzMuNTg3MDcgMzEuMzAxIDIuNDQ0MzMgMzAuODY2IDEuMjc1OTcgMzAuMjc1N0wyLjYxMzQ0IDI2LjU2MzFDMy4xMjU4NyAyNi45OTgxIDMuODQzMjkgMjcuMzY1NyA0Ljc2NTY4IDI3LjY2NkM1LjY4ODA3IDI3Ljk3NjcgNi41NzQ1OSAyOC4xMzIgNy40MjUyMyAyOC4xMzJDOC45NTIzIDI4LjEzMiAxMC4xNjE3IDI3LjYxNDIgMTEuMDUzMyAyNi41Nzg2QzExLjk0NDkgMjUuNTUzNCAxMi4zOTA4IDI0LjE2NTcgMTIuMzkwOCAyMi40MTU1VjIyLjM4NDVDMTEuNzQ1MSAyMi45NjQ0IDExLjAwNzIgMjMuNDIwMSAxMC4xNzcgMjMuNzUxNUM5LjM0Njg4IDI0LjA3MjUgOC40NTAxMSAyNC4yMzMgNy40ODY3MyAyNC4yMzNDNi4wNTE5IDI0LjIzMyA0Ljc2NTY4IDIzLjg4NjEgMy42MjgwNiAyMy4xOTIyQzIuNTAwNyAyMi40ODggMS42MTQxOCAyMS41MzAxIDAuOTY4NTA5IDIwLjMxODRDMC4zMjI4MzYgMTkuMDk2NCAwIDE3LjcwODcgMCAxNi4xNTUzQzAgMTQuNjAxOSAwLjMyMjgzNiAxMy4yMTk0IDAuOTY4NTA5IDEyLjAwNzhDMS42MTQxOCAxMC43ODU4IDIuNTAwNyA5LjgyNzgzIDMuNjI4MDYgOS4xMzM5OEM0Ljc2NTY4IDguNDI5NzcgNi4wNTE5IDguMDc3NjcgNy40ODY3MyA4LjA3NzY3Wk04LjQ4NTk4IDIwLjM0OTVDOS42MTMzNSAyMC4zNDk1IDEwLjU0NiAxOS45NTA4IDExLjI4MzkgMTkuMTUzNEMxMi4wMjE4IDE4LjM1NiAxMi4zOTA4IDE3LjM1NjYgMTIuMzkwOCAxNi4xNTUzQzEyLjM5MDggMTQuOTU0IDEyLjAyMTggMTMuOTU0NyAxMS4yODM5IDEzLjE1NzNDMTAuNTQ2IDEyLjM1OTkgOS42MTMzNSAxMS45NjEyIDguNDg1OTggMTEuOTYxMkM3LjM1ODYyIDExLjk2MTIgNi40MjU5OCAxMi4zNTk5IDUuNjg4MDcgMTMuMTU3M0M0Ljk1MDE2IDEzLjk1NDcgNC41ODEyIDE0Ljk1NCA0LjU4MTIgMTYuMTU1M0M0LjU4MTIgMTcuMzU2NiA0Ljk1MDE2IDE4LjM1NiA1LjY4ODA3IDE5LjE1MzRDNi40MjU5OCAxOS45NTA4IDcuMzU4NjIgMjAuMzQ5NSA4LjQ4NTk4IDIwLjM0OTVaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTE4LjkxOTEgMTkuNjUwNUMxOC45MTkxIDE4LjYxNDkgMTkuMjExMiAxNy42ODggMTkuNzk1NCAxNi44Njk5QzIwLjM4OTggMTYuMDUxOCAyMS4yMDQ2IDE1LjQwNDUgMjIuMjM5NyAxNC45MjgyQzIzLjI3NDggMTQuNDUxOCAyNC40NTg2IDE0LjIxMzYgMjUuNzkwOSAxNC4yMTM2QzI2LjIxMTEgMTQuMjEzNiAyNi42NTE4IDE0LjIzOTUgMjcuMTEzIDE0LjI5MTNDMjcuNTg0NCAxNC4zNDMgMjguMDU1OSAxNC40MTA0IDI4LjUyNzMgMTQuNDkzMkMyOC4xODkxIDEyLjgwNTIgMjYuOTc0NiAxMS45NjEyIDI0Ljg4MzkgMTEuOTYxMkMyMy42NDM4IDExLjk2MTIgMjIuMzk4NiAxMi40MzI0IDIxLjE0ODIgMTMuMzc0OEwxOS42MjYzIDkuNkMyMC42OTIxIDkuMDgyMiAyMS43NDI2IDguNjk5MDMgMjIuNzc3OCA4LjQ1MDQ5QzIzLjgxMjkgOC4yMDE5NCAyNC43OTY4IDguMDc3NjcgMjUuNzI5NCA4LjA3NzY3QzI3LjIxNTUgOC4wNzc2NyAyOC41MDE3IDguMzYyNDYgMjkuNTg4MSA4LjkzMjA0QzMwLjY4NDcgOS40OTEyNiAzMS41MzUzIDEwLjI4ODcgMzIuMTQgMTEuMzI0M0MzMi43NDQ3IDEyLjM0OTUgMzMuMDQ3IDEzLjU1NiAzMy4wNDcgMTQuOTQzN1YyMy45MjIzSDI5LjMyNjdMMjkuMDM0NiAyMi4yNjAyQzI4LjQ2MDcgMjIuODcxMiAyNy43NTg3IDIzLjM1MjcgMjYuOTI4NSAyMy43MDQ5QzI2LjEwODYgMjQuMDU3IDI1LjIwNjcgMjQuMjMzIDI0LjIyMjkgMjQuMjMzQzIyLjY2NSAyNC4yMzMgMjEuMzg5MSAyMy44MDg0IDIwLjM5NDkgMjIuOTU5MkMxOS40MTExIDIyLjExIDE4LjkxOTEgMjEuMDA3MSAxOC45MTkxIDE5LjY1MDVaTTIzLjM0NjYgMTguNjI1MkMyMy4zNDY2IDE5LjE0MyAyMy41NDEzIDE5LjU2MjUgMjMuOTMwOCAxOS44ODM1QzI0LjMzMDUgMjAuMTk0MiAyNC44NTMxIDIwLjM0OTUgMjUuNDk4OCAyMC4zNDk1QzI2LjM4MDIgMjAuMzQ5NSAyNy4xMTgxIDIwLjA4MDMgMjcuNzEyNiAxOS41NDE3QzI4LjMxNzIgMTkuMDAzMiAyOC42MTk2IDE4LjM0MDUgMjguNjE5NiAxNy41NTM0VjE3LjI0MjdDMjguMjQwNCAxNy4xMTg0IDI3LjgzMDQgMTcuMDIwMSAyNy4zODk3IDE2Ljk0NzZDMjYuOTU5MyAxNi44NzUxIDI2LjUzMzkgMTYuODM4OCAyNi4xMTM3IDE2LjgzODhDMjUuMjQyNiAxNi44Mzg4IDI0LjU2MTEgMTYuOTk0MiAyNC4wNjkxIDE3LjMwNDlDMjMuNTg3NCAxNy42MTU1IDIzLjM0NjYgMTguMDU1NyAyMy4zNDY2IDE4LjYyNTJaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTM5Ljc3NTIgMFYyMy45MjIzSDM1LjM0NzhWMEgzOS43NzUyWicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J000MS44NzYxIDE5LjY1MDVDNDEuODc2MSAxOC42MTQ5IDQyLjE2ODIgMTcuNjg4IDQyLjc1MjQgMTYuODY5OUM0My4zNDY4IDE2LjA1MTggNDQuMTYxNiAxNS40MDQ1IDQ1LjE5NjcgMTQuOTI4MkM0Ni4yMzE5IDE0LjQ1MTggNDcuNDE1NiAxNC4yMTM2IDQ4Ljc0NzkgMTQuMjEzNkM0OS4xNjgxIDE0LjIxMzYgNDkuNjA4OCAxNC4yMzk1IDUwLjA3IDE0LjI5MTNDNTAuNTQxNSAxNC4zNDMgNTEuMDEyOSAxNC40MTA0IDUxLjQ4NDMgMTQuNDkzMkM1MS4xNDYxIDEyLjgwNTIgNDkuOTMxNyAxMS45NjEyIDQ3Ljg0MDkgMTEuOTYxMkM0Ni42MDA4IDExLjk2MTIgNDUuMzU1NiAxMi40MzI0IDQ0LjEwNTIgMTMuMzc0OEw0Mi41ODMzIDkuNkM0My42NDkyIDkuMDgyMiA0NC42OTk3IDguNjk5MDMgNDUuNzM0OCA4LjQ1MDQ5QzQ2Ljc2OTkgOC4yMDE5NCA0Ny43NTM4IDguMDc3NjcgNDguNjg2NCA4LjA3NzY3QzUwLjE3MjUgOC4wNzc2NyA1MS40NTg3IDguMzYyNDYgNTIuNTQ1MSA4LjkzMjA0QzUzLjY0MTcgOS40OTEyNiA1NC40OTI0IDEwLjI4ODcgNTUuMDk3IDExLjMyNDNDNTUuNzAxNyAxMi4zNDk1IDU2LjAwNDEgMTMuNTU2IDU2LjAwNDEgMTQuOTQzN1YyMy45MjIzSDUyLjI4MzhMNTEuOTkxNyAyMi4yNjAyQzUxLjQxNzcgMjIuODcxMiA1MC43MTU3IDIzLjM1MjcgNDkuODg1NSAyMy43MDQ5QzQ5LjA2NTYgMjQuMDU3IDQ4LjE2MzcgMjQuMjMzIDQ3LjE3OTkgMjQuMjMzQzQ1LjYyMjEgMjQuMjMzIDQ0LjM0NjEgMjMuODA4NCA0My4zNTE5IDIyLjk1OTJDNDIuMzY4MSAyMi4xMSA0MS44NzYxIDIxLjAwNzEgNDEuODc2MSAxOS42NTA1Wk00Ni4zMDM2IDE4LjYyNTJDNDYuMzAzNiAxOS4xNDMgNDYuNDk4MyAxOS41NjI1IDQ2Ljg4NzggMTkuODgzNUM0Ny4yODc1IDIwLjE5NDIgNDcuODEwMiAyMC4zNDk1IDQ4LjQ1NTggMjAuMzQ5NUM0OS4zMzcyIDIwLjM0OTUgNTAuMDc1MSAyMC4wODAzIDUwLjY2OTYgMTkuNTQxN0M1MS4yNzQyIDE5LjAwMzIgNTEuNTc2NiAxOC4zNDA1IDUxLjU3NjYgMTcuNTUzNFYxNy4yNDI3QzUxLjE5NzQgMTcuMTE4NCA1MC43ODc0IDE3LjAyMDEgNTAuMzQ2NyAxNi45NDc2QzQ5LjkxNjMgMTYuODc1MSA0OS40OTEgMTYuODM4OCA0OS4wNzA4IDE2LjgzODhDNDguMTk5NiAxNi44Mzg4IDQ3LjUxODEgMTYuOTk0MiA0Ny4wMjYxIDE3LjMwNDlDNDYuNTQ0NCAxNy42MTU1IDQ2LjMwMzYgMTguMDU1NyA0Ni4zMDM2IDE4LjYyNTJaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTU3LjIyODcgMTYuMTU1M0M1Ny4yMjg3IDE0LjYwMTkgNTcuNTUxNSAxMy4yMTk0IDU4LjE5NzIgMTIuMDA3OEM1OC44NDI4IDEwLjc4NTggNTkuNzI5NCA5LjgyNzgzIDYwLjg1NjcgOS4xMzM5OEM2MS45OTQzIDguNDI5NzcgNjMuMjgwNiA4LjA3NzY3IDY0LjcxNTQgOC4wNzc2N0M2NS42Nzg4IDguMDc3NjcgNjYuNTc1NSA4LjI0MzM3IDY3LjQwNTcgOC41NzQ3NkM2OC4yMzU4IDguODk1NzkgNjguOTczOCA5LjM0NjI4IDY5LjYxOTQgOS45MjYyMVYwLjYyMTM1OUg3NC4wNDY5VjIzLjkyMjNINjkuODY1NEw2OS43NTc4IDIyLjI0NDdDNjkuMTEyMSAyMi44NzY0IDY4LjM1ODggMjMuMzY4MyA2Ny40OTc5IDIzLjcyMDRDNjYuNjQ3MyAyNC4wNjIxIDY1LjcxOTggMjQuMjMzIDY0LjcxNTQgMjQuMjMzQzYzLjI4MDYgMjQuMjMzIDYxLjk5NDMgMjMuODg2MSA2MC44NTY3IDIzLjE5MjJDNTkuNzI5NCAyMi40ODggNTguODQyOCAyMS41MzAxIDU4LjE5NzIgMjAuMzE4NEM1Ny41NTE1IDE5LjA5NjQgNTcuMjI4NyAxNy43MDg3IDU3LjIyODcgMTYuMTU1M1pNNjEuODA5OSAxNi4xNTUzQzYxLjgwOTkgMTcuMzU2NiA2Mi4xNzg4IDE4LjM1NiA2Mi45MTY3IDE5LjE1MzRDNjMuNjU0NiAxOS45NTA4IDY0LjU4NzMgMjAuMzQ5NSA2NS43MTQ2IDIwLjM0OTVDNjYuODQyIDIwLjM0OTUgNjcuNzc0NiAxOS45NTA4IDY4LjUxMjYgMTkuMTUzNEM2OS4yNTA1IDE4LjM1NiA2OS42MTk0IDE3LjM1NjYgNjkuNjE5NCAxNi4xNTUzQzY5LjYxOTQgMTQuOTU0IDY5LjI1MDUgMTMuOTU0NyA2OC41MTI2IDEzLjE1NzNDNjcuNzc0NiAxMi4zNTk5IDY2Ljg0MiAxMS45NjEyIDY1LjcxNDYgMTEuOTYxMkM2NC41ODczIDExLjk2MTIgNjMuNjU0NiAxMi4zNTk5IDYyLjkxNjcgMTMuMTU3M0M2Mi4xNzg4IDEzLjk1NDcgNjEuODA5OSAxNC45NTQgNjEuODA5OSAxNi4xNTUzWicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J003Ni42Mzk3IDIzLjkyMjNWOC4zODgzNUg4MC41MTM4TDgwLjcyOSAxMC42MDk3QzgxLjg0NjEgOC45MjE2OCA4My4zODM0IDguMDc3NjcgODUuMzQwOSA4LjA3NzY3Qzg2LjAwNzEgOC4wNzc2NyA4Ni42OTM4IDguMTgxMjMgODcuNDAwOSA4LjM4ODM1TDg2Ljc4NiAxMi4yNTYzQzg2LjE5MTYgMTIuMDU5NSA4NS42MDc0IDExLjk2MTIgODUuMDMzNSAxMS45NjEyQzgzLjg0NDYgMTEuOTYxMiA4Mi44ODYzIDEyLjQwNjUgODIuMTU4NyAxMy4yOTcxQzgxLjQzMSAxNC4xNzczIDgxLjA2NzIgMTUuNDM1NiA4MS4wNjcyIDE3LjA3MThWMjMuOTIyM0g3Ni42Mzk3WicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J004Ny4xOTU4IDMuMTA2OEM4Ny4xOTU4IDIuMzYxMTYgODcuNDIxMyAxLjc2MDUyIDg3Ljg3MjMgMS4zMDQ4NUM4OC4zMjMyIDAuODQ5MTkxIDg4LjkxNzYgMC42MjEzNTkgODkuNjU1NSAwLjYyMTM1OUM5MC4zOTM1IDAuNjIxMzU5IDkwLjk4NzkgMC44NDkxOTEgOTEuNDM4OCAxLjMwNDg1QzkxLjg4OTggMS43NjA1MiA5Mi4xMTUyIDIuMzYxMTYgOTIuMTE1MiAzLjEwNjhDOTIuMTE1MiAzLjg1MjQzIDkxLjg4OTggNC40NTMwNyA5MS40Mzg4IDQuOTA4NzRDOTAuOTg3OSA1LjM2NDQgOTAuMzkzNSA1LjU5MjIzIDg5LjY1NTUgNS41OTIyM0M4OC45MTc2IDUuNTkyMjMgODguMzIzMiA1LjM2NDQgODcuODcyMyA0LjkwODc0Qzg3LjQyMTMgNC40NTMwNyA4Ny4xOTU4IDMuODUyNDMgODcuMTk1OCAzLjEwNjhaTTg3LjQ0MTggMjMuOTIyM1Y4LjM4ODM1SDkxLjg2OTNWMjMuOTIyM0g4Ny40NDE4WicgZmlsbD0nJTIzMDEwQzFFJy8lM2UlM2NwYXRoIGQ9J005OC42NDM2IDIzLjkyMjNIOTQuMjE2MVY4LjM4ODM1SDk4LjM5NzZMOTguNTA1MiAxMC4wMzVDOTkuNTkxNiA4LjczMDEgMTAxLjA2MiA4LjA3NzY3IDEwMi45MTcgOC4wNzc2N0MxMDUuMjg1IDguMDc3NjcgMTA2Ljk2IDkuMDk3NzMgMTA3Ljk0NCAxMS4xMzc5QzEwOC40NTcgMTAuMTU0IDEwOS4xNDkgOS4zOTgwNiAxMTAuMDIgOC44Njk5QzExMC44OTEgOC4zNDE3NSAxMTEuOTE2IDguMDc3NjcgMTEzLjA5NCA4LjA3NzY3QzExNC45NiA4LjA3NzY3IDExNi40MSA4Ljc0MDQ1IDExNy40NDUgMTAuMDY2QzExOC40OCAxMS4zODEyIDExOC45OTggMTMuMjE0MiAxMTguOTk4IDE1LjU2NVYyMy45MjIzSDExNC41N1YxNS41NjVDMTE0LjU3IDE0LjM2MzggMTE0LjI4OCAxMy40NjI4IDExMy43MjUgMTIuODYyMUMxMTMuMTcxIDEyLjI2MTUgMTEyLjUgMTEuOTYxMiAxMTEuNzExIDExLjk2MTJDMTEwLjkxMSAxMS45NjEyIDExMC4yMyAxMi4yNzE4IDEwOS42NjYgMTIuODkzMkMxMDkuMTAyIDEzLjUxNDYgMTA4LjgyMSAxNC40NDE0IDEwOC44MjEgMTUuNjczOFYyMy45MjIzSDEwNC4zOTNWMTUuNTY1QzEwNC4zOTMgMTQuMzYzOCAxMDQuMTExIDEzLjQ2MjggMTAzLjU0OCAxMi44NjIxQzEwMi45OTQgMTIuMjYxNSAxMDIuMzIzIDExLjk2MTIgMTAxLjUzNCAxMS45NjEyQzEwMC43MzQgMTEuOTYxMiAxMDAuMDUzIDEyLjI3MTggOTkuNDg5MSAxMi44OTMyQzk4LjkyNTQgMTMuNTE0NiA5OC42NDM2IDE0LjQ0MTQgOTguNjQzNiAxNS42NzM4VjIzLjkyMjNaJyBmaWxsPSclMjMwMTBDMUUnLyUzZSUzY3BhdGggZD0nTTEyMS4yODMgMjEuNzQ3NkMxMjEuMjgzIDIxLjAwMTkgMTIxLjUwOCAyMC40MDEzIDEyMS45NTkgMTkuOTQ1NkMxMjIuNDEgMTkuNDkgMTIzLjAwNSAxOS4yNjIxIDEyMy43NDMgMTkuMjYyMUMxMjQuNDgxIDE5LjI2MjEgMTI1LjA3NSAxOS40OSAxMjUuNTI2IDE5Ljk0NTZDMTI1Ljk3NyAyMC40MDEzIDEyNi4yMDIgMjEuMDAxOSAxMjYuMjAyIDIxLjc0NzZDMTI2LjIwMiAyMi40OTMyIDEyNS45NzcgMjMuMDkzOSAxMjUuNTI2IDIzLjU0OTVDMTI1LjA3NSAyNC4wMDUyIDEyNC40ODEgMjQuMjMzIDEyMy43NDMgMjQuMjMzQzEyMy4wMDUgMjQuMjMzIDEyMi40MSAyNC4wMDUyIDEyMS45NTkgMjMuNTQ5NUMxMjEuNTA4IDIzLjA5MzkgMTIxLjI4MyAyMi40OTMyIDEyMS4yODMgMjEuNzQ3NlonIGZpbGw9JyUyMzAxMEMxRScvJTNlJTNjcGF0aCBkPSdNNDguODM0IDQwVjI5Ljc0NjFINTUuMjQ2MVYzMS41ODVINTAuOTM5NVYzMy45MTZINTQuOTY1OFYzNS43NjE3SDUwLjkzOTVWNDBINDguODM0Wk02My4xNDE2IDM5LjIzNDRDNjIuMjkzOSAzOS44MzU5IDYxLjM2NjUgNDAuMTM2NyA2MC4zNTk0IDQwLjEzNjdDNTkuNjEyIDQwLjEzNjcgNTguOTM5OCAzOS45NzcyIDU4LjM0MjggMzkuNjU4MkM1Ny43NTAzIDM5LjMzNDYgNTcuMjgwOSAzOC44OTcxIDU2LjkzNDYgMzguMzQ1N0M1Ni41OTI4IDM3Ljc5NDMgNTYuNDIxOSAzNy4xNzIyIDU2LjQyMTkgMzYuNDc5NUM1Ni40MjE5IDM1LjgxODcgNTYuNTc2OCAzNS4yMjg1IDU2Ljg4NjcgMzQuNzA5QzU3LjIwMTIgMzQuMTg5NSA1Ny42MjczIDMzLjc3OTMgNTguMTY1IDMzLjQ3ODVDNTguNzAyOCAzMy4xNzc3IDU5LjMxMzUgMzMuMDI3MyA1OS45OTcxIDMzLjAyNzNDNjAuNzAzNSAzMy4wMjczIDYxLjMyNTUgMzMuMTkzNyA2MS44NjMzIDMzLjUyNjRDNjIuNDAxIDMzLjg1NDUgNjIuODIwMyAzNC4zMTQ4IDYzLjEyMTEgMzQuOTA3MkM2My40MjE5IDM1LjQ5NTEgNjMuNTcyMyAzNi4xNzY0IDYzLjU3MjMgMzYuOTUxMlYzNy4xNjk5SDU4LjUzNDJDNTguNjE2MiAzNy40Mzg4IDU4Ljc0ODQgMzcuNjc1OCA1OC45MzA3IDM3Ljg4MDlDNTkuMTE3NSAzOC4wODE0IDU5LjM0OTkgMzguMjQwOSA1OS42Mjc5IDM4LjM1OTRDNTkuOTEwNSAzOC40Nzc5IDYwLjIzMTggMzguNTM3MSA2MC41OTE4IDM4LjUzNzFDNjEuMjg5MSAzOC41MzcxIDYxLjkzODUgMzguMzExNSA2Mi41NCAzNy44NjA0TDYzLjE0MTYgMzkuMjM0NFpNNTguNDQ1MyAzNi4xNzE5SDYxLjc2MDdDNjEuNzI0MyAzNS44NzU3IDYxLjYzMDkgMzUuNjE1OSA2MS40ODA1IDM1LjM5MjZDNjEuMzM0NiAzNS4xNjQ3IDYxLjE0MSAzNC45ODcgNjAuODk5NCAzNC44NTk0QzYwLjY2MjQgMzQuNzMxOCA2MC4zOTU4IDM0LjY2OCA2MC4wOTk2IDM0LjY2OEM1OS43OTg4IDM0LjY2OCA1OS41Mjk5IDM0LjczNCA1OS4yOTMgMzQuODY2MkM1OS4wNjA1IDM0Ljk5ODQgNTguODcxNCAzNS4xNzYxIDU4LjcyNTYgMzUuMzk5NEM1OC41Nzk4IDM1LjYyMjcgNTguNDg2MyAzNS44ODAyIDU4LjQ0NTMgMzYuMTcxOVpNNzEuMTEyMyAzOS4yMzQ0QzcwLjI2NDYgMzkuODM1OSA2OS4zMzcyIDQwLjEzNjcgNjguMzMwMSA0MC4xMzY3QzY3LjU4MjcgNDAuMTM2NyA2Ni45MTA1IDM5Ljk3NzIgNjYuMzEzNSAzOS42NTgyQzY1LjcyMSAzOS4zMzQ2IDY1LjI1MTYgMzguODk3MSA2NC45MDUzIDM4LjM0NTdDNjQuNTYzNSAzNy43OTQzIDY0LjM5MjYgMzcuMTcyMiA2NC4zOTI2IDM2LjQ3OTVDNjQuMzkyNiAzNS44MTg3IDY0LjU0NzUgMzUuMjI4NSA2NC44NTc0IDM0LjcwOUM2NS4xNzE5IDM0LjE4OTUgNjUuNTk4IDMzLjc3OTMgNjYuMTM1NyAzMy40Nzg1QzY2LjY3MzUgMzMuMTc3NyA2Ny4yODQyIDMzLjAyNzMgNjcuOTY3OCAzMy4wMjczQzY4LjY3NDIgMzMuMDI3MyA2OS4yOTYyIDMzLjE5MzcgNjkuODM0IDMzLjUyNjRDNzAuMzcxNyAzMy44NTQ1IDcwLjc5MSAzNC4zMTQ4IDcxLjA5MTggMzQuOTA3MkM3MS4zOTI2IDM1LjQ5NTEgNzEuNTQzIDM2LjE3NjQgNzEuNTQzIDM2Ljk1MTJWMzcuMTY5OUg2Ni41MDQ5QzY2LjU4NjkgMzcuNDM4OCA2Ni43MTkxIDM3LjY3NTggNjYuOTAxNCAzNy44ODA5QzY3LjA4ODIgMzguMDgxNCA2Ny4zMjA2IDM4LjI0MDkgNjcuNTk4NiAzOC4zNTk0QzY3Ljg4MTIgMzguNDc3OSA2OC4yMDI1IDM4LjUzNzEgNjguNTYyNSAzOC41MzcxQzY5LjI1OTggMzguNTM3MSA2OS45MDkyIDM4LjMxMTUgNzAuNTEwNyAzNy44NjA0TDcxLjExMjMgMzkuMjM0NFpNNjYuNDE2IDM2LjE3MTlINjkuNzMxNEM2OS42OTUgMzUuODc1NyA2OS42MDE2IDM1LjYxNTkgNjkuNDUxMiAzNS4zOTI2QzY5LjMwNTMgMzUuMTY0NyA2OS4xMTE3IDM0Ljk4NyA2OC44NzAxIDM0Ljg1OTRDNjguNjMzMSAzNC43MzE4IDY4LjM2NjUgMzQuNjY4IDY4LjA3MDMgMzQuNjY4QzY3Ljc2OTUgMzQuNjY4IDY3LjUwMDcgMzQuNzM0IDY3LjI2MzcgMzQuODY2MkM2Ny4wMzEyIDM0Ljk5ODQgNjYuODQyMSAzNS4xNzYxIDY2LjY5NjMgMzUuMzk5NEM2Ni41NTA1IDM1LjYyMjcgNjYuNDU3IDM1Ljg4MDIgNjYuNDE2IDM2LjE3MTlaTTc5LjgyODEgNDBINzguMTA1NUw3OC4wMDI5IDM5LjA3MDNDNzcuNzExMyAzOS4zOTg0IDc3LjM2MDQgMzkuNjU4MiA3Ni45NTAyIDM5Ljg0OTZDNzYuNTQ0NiA0MC4wNDEgNzYuMTAwMyA0MC4xMzY3IDc1LjYxNzIgNDAuMTM2N0M3NC45OTI4IDQwLjEzNjcgNzQuNDM0NiAzOS45ODQgNzMuOTQyNCAzOS42Nzg3QzczLjQ1NDggMzkuMzY4OCA3My4wNjk3IDM4Ljk0NSA3Mi43ODcxIDM4LjQwNzJDNzIuNTA0NiAzNy44Njk1IDcyLjM2MzMgMzcuMjYxMSA3Mi4zNjMzIDM2LjU4MkM3Mi4zNjMzIDM1Ljg5ODQgNzIuNTA0NiAzNS4yOSA3Mi43ODcxIDM0Ljc1NjhDNzMuMDY5NyAzNC4yMTkxIDczLjQ1NDggMzMuNzk3NSA3My45NDI0IDMzLjQ5MjJDNzQuNDM0NiAzMy4xODIzIDc0Ljk5MjggMzMuMDI3MyA3NS42MTcyIDMzLjAyNzNDNzYuMDYzOCAzMy4wMjczIDc2LjQ3ODUgMzMuMTA5NCA3Ni44NjEzIDMzLjI3MzRDNzcuMjQ4NyAzMy40MzI5IDc3LjU4MzcgMzMuNjU2MiA3Ny44NjYyIDMzLjk0MzRWMjkuNzQ2MUg3OS44MjgxVjQwWk03Ni4xMjMgMzguMzc5OUM3Ni40NDY2IDM4LjM3OTkgNzYuNzM4MyAzOC4zMDcgNzYuOTk4IDM4LjE2MTFDNzcuMjYyNCAzOC4wMTUzIDc3LjQ3MiAzNy44MTcxIDc3LjYyNyAzNy41NjY0Qzc3Ljc4NjUgMzcuMzExMiA3Ny44NjYyIDM3LjAyMTggNzcuODY2MiAzNi42OTgyVjM2LjQ1MjFDNzcuODY2MiAzNi4xMjg2IDc3Ljc4NjUgMzUuODQxNSA3Ny42MjcgMzUuNTkwOEM3Ny40NzIgMzUuMzQwMiA3Ny4yNjI0IDM1LjE0NDIgNzYuOTk4IDM1LjAwMjlDNzYuNzM4MyAzNC44NTcxIDc2LjQ0NjYgMzQuNzg0MiA3Ni4xMjMgMzQuNzg0MkM3NS43OTA0IDM0Ljc4NDIgNzUuNDkxOSAzNC44NjE3IDc1LjIyNzUgMzUuMDE2NkM3NC45NjMyIDM1LjE3MTUgNzQuNzUzNiAzNS4zODU3IDc0LjU5ODYgMzUuNjU5MkM3NC40NDgyIDM1LjkyODEgNzQuMzczIDM2LjIzNTcgNzQuMzczIDM2LjU4MkM3NC4zNzMgMzYuOTIzOCA3NC40NDgyIDM3LjIzMTQgNzQuNTk4NiAzNy41MDQ5Qzc0Ljc1MzYgMzcuNzczOCA3NC45NjMyIDM3Ljk4OCA3NS4yMjc1IDM4LjE0NzVDNzUuNDkxOSAzOC4zMDI0IDc1Ljc5MDQgMzguMzc5OSA3Ni4xMjMgMzguMzc5OVpNODMuMjE4OCA0MEg4MS40OTYxVjI5Ljc0NjFIODMuNDU4VjMzLjk0MzRDODMuNzQ1MSAzMy42NTYyIDg0LjA3NzggMzMuNDMyOSA4NC40NTYxIDMzLjI3MzRDODQuODM4OSAzMy4xMDk0IDg1LjI1MzYgMzMuMDI3MyA4NS43MDAyIDMzLjAyNzNDODYuMzI5MSAzMy4wMjczIDg2Ljg4NzQgMzMuMTgyMyA4Ny4zNzUgMzMuNDkyMkM4Ny44NjI2IDMzLjc5NzUgODguMjQ3NyAzNC4yMTkxIDg4LjUzMDMgMzQuNzU2OEM4OC44MTI4IDM1LjI5IDg4Ljk1NDEgMzUuODk4NCA4OC45NTQxIDM2LjU4MkM4OC45NTQxIDM3LjI2MTEgODguODEyOCAzNy44Njk1IDg4LjUzMDMgMzguNDA3MkM4OC4yNDc3IDM4Ljk0NSA4Ny44NjI2IDM5LjM2ODggODcuMzc1IDM5LjY3ODdDODYuODg3NCAzOS45ODQgODYuMzI5MSA0MC4xMzY3IDg1LjcwMDIgNDAuMTM2N0M4NS4yMTcxIDQwLjEzNjcgODQuNzcwNSA0MC4wNDMzIDg0LjM2MDQgMzkuODU2NEM4My45NTQ4IDM5LjY2NSA4My42MDYxIDM5LjQwMyA4My4zMTQ1IDM5LjA3MDNMODMuMjE4OCA0MFpNODUuMjAxMiAzOC4zNzk5Qzg1LjUzMzkgMzguMzc5OSA4NS44MzAxIDM4LjMwMjQgODYuMDg5OCAzOC4xNDc1Qzg2LjM1NDIgMzcuOTkyNSA4Ni41NjE1IDM3Ljc3ODMgODYuNzExOSAzNy41MDQ5Qzg2Ljg2NjkgMzcuMjMxNCA4Ni45NDQzIDM2LjkyMTUgODYuOTQ0MyAzNi41NzUyQzg2Ljk0NDMgMzYuMjMzNCA4Ni44NjY5IDM1LjkyODEgODYuNzExOSAzNS42NTkyQzg2LjU2MTUgMzUuMzg1NyA4Ni4zNTQyIDM1LjE3MTUgODYuMDg5OCAzNS4wMTY2Qzg1LjgzMDEgMzQuODYxNyA4NS41MzM5IDM0Ljc4NDIgODUuMjAxMiAzNC43ODQyQzg0Ljg4NjcgMzQuNzg0MiA4NC41OTk2IDM0Ljg1NDggODQuMzM5OCAzNC45OTYxQzg0LjA4NDYgMzUuMTM3NCA4My44Nzk2IDM1LjMzMTEgODMuNzI0NiAzNS41NzcxQzgzLjU2OTcgMzUuODIzMiA4My40ODA4IDM2LjEwNTggODMuNDU4IDM2LjQyNDhWMzYuNzI1NkM4My40ODA4IDM3LjA0NDYgODMuNTY5NyAzNy4zMjk0IDgzLjcyNDYgMzcuNTgwMUM4My44Nzk2IDM3LjgyNjIgODQuMDg0NiAzOC4wMjIxIDg0LjMzOTggMzguMTY4Qzg0LjU5NTEgMzguMzA5MiA4NC44ODIyIDM4LjM3OTkgODUuMjAxMiAzOC4zNzk5Wk05Ni4zMDI3IDQwSDk0LjU5MzhMOTQuNDkxMiAzOS4xODY1Qzk0LjI0MDYgMzkuNDg3MyA5My45MzA3IDM5LjcyMiA5My41NjE1IDM5Ljg5MDZDOTMuMTkyNCA0MC4wNTQ3IDkyLjc4NjggNDAuMTM2NyA5Mi4zNDQ3IDQwLjEzNjdDOTEuODY2MiA0MC4xMzY3IDkxLjQ0MDEgNDAuMDQ1NiA5MS4wNjY0IDM5Ljg2MzNDOTAuNjkyNyAzOS42NzY0IDkwLjM5ODggMzkuNDIxMiA5MC4xODQ2IDM5LjA5NzdDODkuOTcwNCAzOC43Njk1IDg5Ljg2MzMgMzguMzk4MSA4OS44NjMzIDM3Ljk4MzRDODkuODYzMyAzNy41NDU5IDg5Ljk3OTUgMzcuMTYwOCA5MC4yMTE5IDM2LjgyODFDOTAuNDQ0MyAzNi40OTU0IDkwLjc2MzMgMzYuMjM1NyA5MS4xNjg5IDM2LjA0ODhDOTEuNTc5MSAzNS44NTc0IDkyLjA0MzkgMzUuNzYxNyA5Mi41NjM1IDM1Ljc2MTdDOTIuODY4OCAzNS43NjE3IDkzLjE3NDIgMzUuNzk1OSA5My40Nzk1IDM1Ljg2NDNDOTMuNzg5NCAzNS45MzI2IDk0LjA3NjUgMzYuMDI4MyA5NC4zNDA4IDM2LjE1MTRWMzUuOTczNkM5NC4zNDA4IDM1LjcwMDIgOTQuMjYzMyAzNS40NjU1IDk0LjEwODQgMzUuMjY5NUM5My45NTggMzUuMDY5IDkzLjc0ODQgMzQuOTE0MSA5My40Nzk1IDM0LjgwNDdDOTMuMjE1MiAzNC42OTUzIDkyLjkxODkgMzQuNjQwNiA5Mi41OTA4IDM0LjY0MDZDOTIuMjc2NCAzNC42NDA2IDkxLjk2NDIgMzQuNjkwOCA5MS42NTQzIDM0Ljc5MUM5MS4zNDkgMzQuODkxMyA5MS4wNjY0IDM1LjA0MTcgOTAuODA2NiAzNS4yNDIyTDkwLjI3MzQgMzMuNzQ1MUM5MC43MzM3IDMzLjUwODEgOTEuMTk4NiAzMy4zMzA0IDkxLjY2OCAzMy4yMTE5QzkyLjE0MTkgMzMuMDg4OSA5Mi41OTk5IDMzLjAyNzMgOTMuMDQyIDMzLjAyNzNDOTMuNzA3NCAzMy4wMjczIDk0LjI4MzkgMzMuMTU5NSA5NC43NzE1IDMzLjQyMzhDOTUuMjU5MSAzMy42ODM2IDk1LjYzNTEgMzQuMDUyNyA5NS44OTk0IDM0LjUzMTJDOTYuMTY4MyAzNS4wMDUyIDk2LjMwMjcgMzUuNTY4IDk2LjMwMjcgMzYuMjE5N1Y0MFpNOTIuNzc1NCAzOC42MjZDOTMuMDM1MiAzOC42MjYgOTMuMjgzNSAzOC41NjkgOTMuNTIwNSAzOC40NTUxQzkzLjc1NzUgMzguMzQxMSA5My45NDg5IDM4LjE4NjIgOTQuMDk0NyAzNy45OTAyQzk0LjI0NTEgMzcuNzk0MyA5NC4zMjQ5IDM3LjU3NzggOTQuMzM0IDM3LjM0MDhWMzcuMjkzQzk0LjEzMzUgMzcuMTU2MiA5My45MTAyIDM3LjA1MTQgOTMuNjY0MSAzNi45Nzg1QzkzLjQyMjUgMzYuOTAxIDkzLjE3NjQgMzYuODYyMyA5Mi45MjU4IDM2Ljg2MjNDOTIuNTUyMSAzNi44NjIzIDkyLjI0NjcgMzYuOTQ0MyA5Mi4wMDk4IDM3LjEwODRDOTEuNzcyOCAzNy4yNzI1IDkxLjY1NDMgMzcuNDg0NCA5MS42NTQzIDM3Ljc0NDFDOTEuNjU0MyAzNy45MTI4IDkxLjcwMjEgMzguMDY1NCA5MS43OTc5IDM4LjIwMjFDOTEuODk4MSAzOC4zMzQzIDkyLjAzMjYgMzguNDM5MSA5Mi4yMDEyIDM4LjUxNjZDOTIuMzY5OCAzOC41ODk1IDkyLjU2MTIgMzguNjI2IDkyLjc3NTQgMzguNjI2Wk0xMDMuODkxIDM4LjkxMzFDMTAzLjU1OCAzOS4yOTU5IDEwMy4xNSAzOS41OTY3IDEwMi42NjcgMzkuODE1NEMxMDIuMTg0IDQwLjAyOTYgMTAxLjY1MyA0MC4xMzY3IDEwMS4wNzQgNDAuMTM2N0MxMDAuMzcyIDQwLjEzNjcgOTkuNzQzNSAzOS45ODQgOTkuMTg3NSAzOS42Nzg3Qzk4LjYzNjEgMzkuMzY4OCA5OC4yMDA4IDM4Ljk0NSA5Ny44ODE4IDM4LjQwNzJDOTcuNTY3NCAzNy44Njk1IDk3LjQxMDIgMzcuMjYxMSA5Ny40MTAyIDM2LjU4MkM5Ny40MTAyIDM1Ljg5ODQgOTcuNTY3NCAzNS4yOSA5Ny44ODE4IDM0Ljc1NjhDOTguMjAwOCAzNC4yMTkxIDk4LjYzNjEgMzMuNzk3NSA5OS4xODc1IDMzLjQ5MjJDOTkuNzQzNSAzMy4xODIzIDEwMC4zNzIgMzMuMDI3MyAxMDEuMDc0IDMzLjAyNzNDMTAxLjY0OCAzMy4wMjczIDEwMi4xNzcgMzMuMTM0NCAxMDIuNjYgMzMuMzQ4NkMxMDMuMTQzIDMzLjU2MjggMTAzLjU1MSAzMy44NTkgMTAzLjg4NCAzNC4yMzczTDEwMi43MjkgMzUuNDQ3M0MxMDIuNTUxIDM1LjI0MjIgMTAyLjMyNSAzNS4wODI3IDEwMi4wNTIgMzQuOTY4OEMxMDEuNzgzIDM0Ljg1MDMgMTAxLjUgMzQuNzkxIDEwMS4yMDQgMzQuNzkxQzEwMC44NjIgMzQuNzkxIDEwMC41NTcgMzQuODY4NSAxMDAuMjg4IDM1LjAyMzRDMTAwLjAxOSAzNS4xNzM4IDk5LjgwNzMgMzUuMzgzNSA5OS42NTIzIDM1LjY1MjNDOTkuNDk3NCAzNS45MTY3IDk5LjQxOTkgMzYuMjIyIDk5LjQxOTkgMzYuNTY4NEM5OS40MTk5IDM2LjkxOTMgOTkuNDk3NCAzNy4yMzE0IDk5LjY1MjMgMzcuNTA0OUM5OS44MDczIDM3Ljc3ODMgMTAwLjAxOSAzNy45OTI1IDEwMC4yODggMzguMTQ3NUMxMDAuNTU3IDM4LjI5NzkgMTAwLjg2MiAzOC4zNzMgMTAxLjIwNCAzOC4zNzNDMTAxLjUgMzguMzczIDEwMS43ODUgMzguMzE2MSAxMDIuMDU5IDM4LjIwMjFDMTAyLjMzMiAzOC4wODM3IDEwMi41NTUgMzcuOTIxOSAxMDIuNzI5IDM3LjcxNjhMMTAzLjg5MSAzOC45MTMxWk0xMDcuMDU2IDQwSDEwNS4wOTRWMjkuNzQ2MUgxMDcuMDU2VjM2LjA0ODhMMTA3LjcyNiAzNS4yNDIyTDEwOS42OTQgMzMuMTY0MUgxMTIuMTQ4TDEwOS4yNTcgMzYuMjA2MUwxMTIuNDkgNDBIMTA5Ljk1NEwxMDcuOTEgMzcuNDM2NUwxMDcuMDU2IDM4LjIxNThWNDBaJyBmaWxsPSclMjMwMDg1RkYnLyUzZSUzYy9zdmclM2VcIjtcbiAgZXhwb3J0IGRlZmF1bHQgaW1nOyIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTaWduVXAgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYXV0aFwiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiLi4vLi4vYXRvbXMvaW5wdXRzL0lucHV0XCI7XG5pbXBvcnQgTG9nb0ZlZWRiYWNrRGFyayBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2ljb25zL2xvZ28tZmVlZGJhY2stZGFyay5zdmdcIjtcblxuZXhwb3J0IGNvbnN0IFNpZ25VcEZvcm0gPSAoe1xuICBjbG9zZU1vZGFsLFxuICBzZXRJc1NpZ25pbmdVcCxcbn06IHtcbiAgY2xvc2VNb2RhbDogKCkgPT4gdm9pZDtcbiAgc2V0SXNTaWduaW5nVXA6IChpc1NpZ25pbmdVcDogYm9vbGVhbikgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgW2ZpcnN0TmFtZSwgc2V0Rmlyc3ROYW1lXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbbGFzdE5hbWUsIHNldExhc3ROYW1lXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbZW1haWwsIHNldEVtYWlsXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbcGFzc3dvcmQsIHNldFBhc3N3b3JkXSA9IHVzZVN0YXRlKFwiXCIpO1xuXG4gIGNvbnN0IHsgbXV0YXRlOiBzaWduVXAgfSA9IHVzZVNpZ25VcCgpO1xuXG4gIGNvbnN0IGhhbmRsZVNpZ25VcCA9ICgpID0+IHtcbiAgICBzaWduVXAoXG4gICAgICB7IGZpcnN0TmFtZSwgbGFzdE5hbWUsIGVtYWlsLCBwYXNzd29yZCB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBjbG9zZU1vZGFsKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCB6LTEwIGZsZXggZmxleC1jb2wganVzdGlmeS1zdGFydFwiPlxuICAgICAgPGltZyBzcmM9e0xvZ29GZWVkYmFja0Rhcmt9IGNsYXNzTmFtZT1cIm1iLTEyIGgtWzQzcHhdIHctbWluXCIgLz5cbiAgICAgIDxoMSBjbGFzc05hbWU9XCJrdW1iaC1zZW1pYm9sZCB0ZXh0LTN4bCB0ZXh0LWdyYXktZmVlZGJhY2stOTAwIG1iLTNcIj5cbiAgICAgICAgSW5zY3JpcHRpb25cbiAgICAgIDwvaDE+XG5cbiAgICAgIDxJbnB1dFxuICAgICAgICBsYWJlbD1cIlByw6lub21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlByw6lub21cIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHZhbHVlPXtmaXJzdE5hbWV9XG4gICAgICAgIHNldFZhbHVlPXtzZXRGaXJzdE5hbWV9XG4gICAgICAvPlxuICAgICAgPElucHV0XG4gICAgICAgIGxhYmVsPVwiTm9tXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJOb21cIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHZhbHVlPXtsYXN0TmFtZX1cbiAgICAgICAgc2V0VmFsdWU9e3NldExhc3ROYW1lfVxuICAgICAgLz5cbiAgICAgIDxJbnB1dFxuICAgICAgICBsYWJlbD1cIkUtbWFpbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRS1tYWlsXCJcbiAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgdmFsdWU9e2VtYWlsfVxuICAgICAgICBzZXRWYWx1ZT17c2V0RW1haWx9XG4gICAgICAvPlxuICAgICAgPElucHV0XG4gICAgICAgIGxhYmVsPVwiTW90IGRlIHBhc3NlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJNb3QgZGUgcGFzc2VcIlxuICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICB2YWx1ZT17cGFzc3dvcmR9XG4gICAgICAgIHNldFZhbHVlPXtzZXRQYXNzd29yZH1cbiAgICAgIC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNpZ25VcH1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTQgcHktMiBiZy1ibHVlLTUwMCBrdW1iaC1tZWRpdW0gdGV4dC13aGl0ZSByb3VuZGVkLWxnIG10LTIgIGRpc2FibGVkOmJnLWJsdWUtMTAwIGRpc2FibGVkOnRleHQtYmx1ZS0zMDBcIlxuICAgICAgPlxuICAgICAgICBTJ2luc2NyaXJlXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNTaWduaW5nVXAoZmFsc2UpfVxuICAgICAgICBjbGFzc05hbWU9XCJmb250LWJvbGQgdGV4dC1jZW50ZXIgdGV4dC1ibGFjayB0ZXh0LXNtIG10LTJcIlxuICAgICAgPlxuICAgICAgICBTZSBjb25uZWN0ZXJcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNpZ25JbiB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoXCI7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCIuLi8uLi9hdG9tcy9pbnB1dHMvSW5wdXRcIjtcbmltcG9ydCBMb2dvRmVlZGJhY2tEYXJrIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvbG9nby1mZWVkYmFjay1kYXJrLnN2Z1wiO1xuXG5jb25zdCBTaWduSW5Gb3JtID0gKHtcbiAgc2V0SXNTaWduaW5nVXAsXG4gIGNsb3NlTW9kYWwsXG59OiB7XG4gIHNldElzU2lnbmluZ1VwOiAoaXNTaWduaW5nVXA6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGNsb3NlTW9kYWw6ICgpID0+IHZvaWQ7XG59KSA9PiB7XG4gIGNvbnN0IFtlbWFpbCwgc2V0RW1haWxdID0gUmVhY3QudXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFtwYXNzd29yZCwgc2V0UGFzc3dvcmRdID0gUmVhY3QudXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3QudXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IHsgbXV0YXRlOiBzaWduSW4gfSA9IHVzZVNpZ25JbigpO1xuXG4gIGNvbnN0IGhhbmRsZUxvZ2luID0gKCkgPT4ge1xuICAgIHNpZ25JbihcbiAgICAgIHsgZW1haWwsIHBhc3N3b3JkIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIGNsb3NlTW9kYWwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSA9PT0gXCJOZXR3b3JrIEVycm9yXCIpIHtcbiAgICAgICAgICAgIHNldEVycm9yKFwiVW5lIGVycmV1ciByw6lzZWF1IGVzdCBzdXJ2ZW51ZVwiKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UgPT09IFwiSW52YWxpZCBjcmVkZW50aWFsc1wiKSB7XG4gICAgICAgICAgICBzZXRFcnJvcihcIkVtYWlsIG91IG1vdCBkZSBwYXNzZSBpbnZhbGlkZVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0RXJyb3IoXCJVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICAvLyBjb25zdCBoYW5kbGVHaXRodWJMb2dpbiA9ICgpID0+IHtcbiAgLy8gICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIC8vICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgaHR0cDovL2xvY2FsaG9zdDozMDAwL2F1dGgvZ2l0aHViP3JlZGlyZWN0VXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAvLyAgICAgY3VycmVudFVybFxuICAvLyAgICl9YDtcbiAgLy8gfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIHotMTAgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LXN0YXJ0XCI+XG4gICAgICA8aW1nIHNyYz17TG9nb0ZlZWRiYWNrRGFya30gY2xhc3NOYW1lPVwibWItMTIgaC1bNDNweF0gdy1taW5cIiAvPlxuICAgICAgPGgxIGNsYXNzTmFtZT1cImt1bWJoLXNlbWlib2xkIHRleHQtM3hsIHRleHQtZ3JheS1mZWVkYmFjay05MDAgbWItM1wiPlxuICAgICAgICBDb25uZXhpb25cbiAgICAgIDwvaDE+XG4gICAgICA8SW5wdXRcbiAgICAgICAgbGFiZWw9XCJFbWFpbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRW1haWxcIlxuICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICB2YWx1ZT17ZW1haWx9XG4gICAgICAgIHNldFZhbHVlPXtzZXRFbWFpbH1cbiAgICAgIC8+XG4gICAgICA8SW5wdXRcbiAgICAgICAgbGFiZWw9XCJNb3QgZGUgcGFzc2VcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIk1vdCBkZSBwYXNzZVwiXG4gICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgIHZhbHVlPXtwYXNzd29yZH1cbiAgICAgICAgc2V0VmFsdWU9e3NldFBhc3N3b3JkfVxuICAgICAgLz5cbiAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCB0ZXh0LXhzIGgtNCB0ZXh0LWNlbnRlclwiPntlcnJvcn08L3A+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgb25DbGljaz17aGFuZGxlTG9naW59XG4gICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC00IHB5LTIgYmctYmx1ZS01MDAga3VtYmgtbWVkaXVtIHRleHQtd2hpdGUgcm91bmRlZC1sZyBtdC0yICBkaXNhYmxlZDpiZy1ibHVlLTEwMCBkaXNhYmxlZDp0ZXh0LWJsdWUtMzAwXCJcbiAgICAgID5cbiAgICAgICAgU2UgY29ubmVjdGVyXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNTaWduaW5nVXAodHJ1ZSl9XG4gICAgICAgIGNsYXNzTmFtZT1cImZvbnQtYm9sZCB0ZXh0LWNlbnRlciB0ZXh0LWJsYWNrIHRleHQtc20gbXQtMlwiXG4gICAgICA+XG4gICAgICAgIFMnaW5zY3JpcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2lnbkluRm9ybTtcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTaWduVXBGb3JtIH0gZnJvbSBcIi4uL21vbGVjdWxlcy9mb3Jtcy9TaWduVXBGb3JtXCI7XG5pbXBvcnQgU2lnbkluRm9ybSBmcm9tIFwiLi4vbW9sZWN1bGVzL2Zvcm1zL1NpZ25JbkZvcm1cIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb24gPSAoeyBjbG9zZU1vZGFsIH06IHsgY2xvc2VNb2RhbDogKCkgPT4gdm9pZCB9KSA9PiB7XG4gIGNvbnN0IFtpc1NpZ25pbmdVcCwgc2V0SXNTaWduaW5nVXBdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJwLThcIj5cbiAgICAgIHtpc1NpZ25pbmdVcCA/IChcbiAgICAgICAgPFNpZ25VcEZvcm0gY2xvc2VNb2RhbD17Y2xvc2VNb2RhbH0gc2V0SXNTaWduaW5nVXA9e3NldElzU2lnbmluZ1VwfSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNpZ25JbkZvcm0gc2V0SXNTaWduaW5nVXA9e3NldElzU2lnbmluZ1VwfSBjbG9zZU1vZGFsPXtjbG9zZU1vZGFsfSAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGNvbnN0IE1vZGFsID0gKHtcbiAgaXNWaXNpYmxlLFxuICBjbG9zZU1vZGFsLFxuICBsaW1pdFdpZHRoID0gdHJ1ZSxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgY2xvc2VNb2RhbD86ICgpID0+IHZvaWQ7XG4gIGxpbWl0V2lkdGg/OiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufSkgPT4ge1xuICBjb25zdCByZXNpemluZyA9IHVzZVJlZihmYWxzZSk7XG5cbiAgaWYgKCFpc1Zpc2libGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB3aWR0aCA9IGxpbWl0V2lkdGggPyBcInctWzQwMHB4XVwiIDogXCJcIjtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJnZi1tb2RhbFwiXG4gICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICAgICAgcmVzaXppbmcuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbk1vdXNlVXA9eygpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzaXppbmcuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfX1cbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGlmIChjbG9zZU1vZGFsICYmIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgJiYgIXJlc2l6aW5nLmN1cnJlbnQpIHtcbiAgICAgICAgICBjbG9zZU1vZGFsKCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3dpZHRofSBiZy13aGl0ZSByb3VuZGVkLWxnYH0+e2NoaWxkcmVufTwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiIsImltcG9ydCB7IENvbm5lY3Rpb24gfSBmcm9tIFwiLi4vLi4vb3JnYW5pc21zL0Nvbm5lY3Rpb25cIjtcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb25Nb2RhbCA9ICh7XG4gIGlzVmlzaWJsZSxcbiAgY2xvc2VNb2RhbCxcbn06IHtcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbCBpc1Zpc2libGU9e2lzVmlzaWJsZX0gY2xvc2VNb2RhbD17Y2xvc2VNb2RhbH0+XG4gICAgICA8Q29ubmVjdGlvbiBjbG9zZU1vZGFsPXtjbG9zZU1vZGFsfSAvPlxuICAgIDwvTW9kYWw+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9hdG9tcy9idXR0b25zL0J1dHRvblwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGFsIH0gZnJvbSBcIi4uL2F0b21zL21vZGFscy9Db25uZWN0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGNvbnN0IENvbm5lY3Rpb25QYW5lbCA9ICgpID0+IHtcbiAgY29uc3QgW2Nvbm5lY3Rpb25Nb2RhbE9wZW4sIHNldENvbm5lY3Rpb25Nb2RhbE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00XCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHRleHQtZ3JheS1mZWVkYmFjay0yMDAgdGV4dC1zbVwiPlxuICAgICAgICAgIENvbm5lY3RleiB2b3VzIHBvdXIgYWNjw6lkZXIgYXV4IGNvbW1lbnRhaXJlc1xuICAgICAgICA8L3A+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB0ZXh0PVwiU2UgY29ubmVjdGVyXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRDb25uZWN0aW9uTW9kYWxPcGVuKHRydWUpfVxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxDb25uZWN0aW9uTW9kYWxcbiAgICAgICAgaXNWaXNpYmxlPXtjb25uZWN0aW9uTW9kYWxPcGVufVxuICAgICAgICBjbG9zZU1vZGFsPXsoKSA9PiBzZXRDb25uZWN0aW9uTW9kYWxPcGVuKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59O1xuIiwidmFyIGltZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTI3JyBoZWlnaHQ9JzQzJyB2aWV3Qm94PScwIDAgMTI3IDQzJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNNy40ODY3MyA4LjA3NzY3QzguNDkxMTEgOC4wNzc2NyA5LjQxODYyIDguMjUzNzIgMTAuMjY5MyA4LjYwNTgyQzExLjEzMDIgOC45NDc1NyAxMS44ODM0IDkuNDM0MyAxMi41MjkxIDEwLjA2NkwxMi42MzY3IDguMzg4MzVIMTYuODE4MlYyMi4xMDQ5QzE2LjgxODIgMjQuMDkzMiAxNi40NDQxIDI1LjgyNzggMTUuNjk2IDI3LjMwODdDMTQuOTU4MSAyOC43ODk2IDEzLjkxNzggMjkuOTM5MiAxMi41NzUyIDMwLjc1NzNDMTEuMjQyOSAzMS41ODU4IDkuNjc0ODQgMzIgNy44NzEwNSAzMkM2Ljg3NjkyIDMyIDUuODIxMyAzMS44NjAyIDQuNzA0MTkgMzEuNTgwNkMzLjU4NzA3IDMxLjMwMSAyLjQ0NDMzIDMwLjg2NiAxLjI3NTk3IDMwLjI3NTdMMi42MTM0NCAyNi41NjMxQzMuMTI1ODcgMjYuOTk4MSAzLjg0MzI5IDI3LjM2NTcgNC43NjU2OCAyNy42NjZDNS42ODgwNyAyNy45NzY3IDYuNTc0NTkgMjguMTMyIDcuNDI1MjMgMjguMTMyQzguOTUyMyAyOC4xMzIgMTAuMTYxNyAyNy42MTQyIDExLjA1MzMgMjYuNTc4NkMxMS45NDQ5IDI1LjU1MzQgMTIuMzkwOCAyNC4xNjU3IDEyLjM5MDggMjIuNDE1NVYyMi4zODQ1QzExLjc0NTEgMjIuOTY0NCAxMS4wMDcyIDIzLjQyMDEgMTAuMTc3IDIzLjc1MTVDOS4zNDY4OCAyNC4wNzI1IDguNDUwMTEgMjQuMjMzIDcuNDg2NzMgMjQuMjMzQzYuMDUxOSAyNC4yMzMgNC43NjU2OCAyMy44ODYxIDMuNjI4MDYgMjMuMTkyMkMyLjUwMDcgMjIuNDg4IDEuNjE0MTggMjEuNTMwMSAwLjk2ODUwOSAyMC4zMTg0QzAuMzIyODM2IDE5LjA5NjQgMCAxNy43MDg3IDAgMTYuMTU1M0MwIDE0LjYwMTkgMC4zMjI4MzYgMTMuMjE5NCAwLjk2ODUwOSAxMi4wMDc4QzEuNjE0MTggMTAuNzg1OCAyLjUwMDcgOS44Mjc4MyAzLjYyODA2IDkuMTMzOThDNC43NjU2OCA4LjQyOTc3IDYuMDUxOSA4LjA3NzY3IDcuNDg2NzMgOC4wNzc2N1pNOC40ODU5OCAyMC4zNDk1QzkuNjEzMzUgMjAuMzQ5NSAxMC41NDYgMTkuOTUwOCAxMS4yODM5IDE5LjE1MzRDMTIuMDIxOCAxOC4zNTYgMTIuMzkwOCAxNy4zNTY2IDEyLjM5MDggMTYuMTU1M0MxMi4zOTA4IDE0Ljk1NCAxMi4wMjE4IDEzLjk1NDcgMTEuMjgzOSAxMy4xNTczQzEwLjU0NiAxMi4zNTk5IDkuNjEzMzUgMTEuOTYxMiA4LjQ4NTk4IDExLjk2MTJDNy4zNTg2MiAxMS45NjEyIDYuNDI1OTggMTIuMzU5OSA1LjY4ODA3IDEzLjE1NzNDNC45NTAxNiAxMy45NTQ3IDQuNTgxMiAxNC45NTQgNC41ODEyIDE2LjE1NTNDNC41ODEyIDE3LjM1NjYgNC45NTAxNiAxOC4zNTYgNS42ODgwNyAxOS4xNTM0QzYuNDI1OTggMTkuOTUwOCA3LjM1ODYyIDIwLjM0OTUgOC40ODU5OCAyMC4zNDk1WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTE4LjkxOTEgMTkuNjUwNUMxOC45MTkxIDE4LjYxNDkgMTkuMjExMiAxNy42ODggMTkuNzk1NCAxNi44Njk5QzIwLjM4OTggMTYuMDUxOCAyMS4yMDQ2IDE1LjQwNDUgMjIuMjM5NyAxNC45MjgyQzIzLjI3NDggMTQuNDUxOCAyNC40NTg2IDE0LjIxMzYgMjUuNzkwOSAxNC4yMTM2QzI2LjIxMTEgMTQuMjEzNiAyNi42NTE4IDE0LjIzOTUgMjcuMTEzIDE0LjI5MTNDMjcuNTg0NCAxNC4zNDMgMjguMDU1OSAxNC40MTA0IDI4LjUyNzMgMTQuNDkzMkMyOC4xODkxIDEyLjgwNTIgMjYuOTc0NiAxMS45NjEyIDI0Ljg4MzkgMTEuOTYxMkMyMy42NDM4IDExLjk2MTIgMjIuMzk4NiAxMi40MzI0IDIxLjE0ODIgMTMuMzc0OEwxOS42MjYzIDkuNkMyMC42OTIxIDkuMDgyMiAyMS43NDI2IDguNjk5MDMgMjIuNzc3OCA4LjQ1MDQ5QzIzLjgxMjkgOC4yMDE5NCAyNC43OTY4IDguMDc3NjcgMjUuNzI5NCA4LjA3NzY3QzI3LjIxNTUgOC4wNzc2NyAyOC41MDE3IDguMzYyNDYgMjkuNTg4MSA4LjkzMjA0QzMwLjY4NDcgOS40OTEyNiAzMS41MzUzIDEwLjI4ODcgMzIuMTQgMTEuMzI0M0MzMi43NDQ3IDEyLjM0OTUgMzMuMDQ3IDEzLjU1NiAzMy4wNDcgMTQuOTQzN1YyMy45MjIzSDI5LjMyNjdMMjkuMDM0NiAyMi4yNjAyQzI4LjQ2MDcgMjIuODcxMiAyNy43NTg3IDIzLjM1MjcgMjYuOTI4NSAyMy43MDQ5QzI2LjEwODYgMjQuMDU3IDI1LjIwNjcgMjQuMjMzIDI0LjIyMjkgMjQuMjMzQzIyLjY2NSAyNC4yMzMgMjEuMzg5MSAyMy44MDg0IDIwLjM5NDkgMjIuOTU5MkMxOS40MTExIDIyLjExIDE4LjkxOTEgMjEuMDA3MSAxOC45MTkxIDE5LjY1MDVaTTIzLjM0NjYgMTguNjI1MkMyMy4zNDY2IDE5LjE0MyAyMy41NDEzIDE5LjU2MjUgMjMuOTMwOCAxOS44ODM1QzI0LjMzMDUgMjAuMTk0MiAyNC44NTMxIDIwLjM0OTUgMjUuNDk4OCAyMC4zNDk1QzI2LjM4MDIgMjAuMzQ5NSAyNy4xMTgxIDIwLjA4MDMgMjcuNzEyNiAxOS41NDE3QzI4LjMxNzIgMTkuMDAzMiAyOC42MTk2IDE4LjM0MDUgMjguNjE5NiAxNy41NTM0VjE3LjI0MjdDMjguMjQwNCAxNy4xMTg0IDI3LjgzMDQgMTcuMDIwMSAyNy4zODk3IDE2Ljk0NzZDMjYuOTU5MyAxNi44NzUxIDI2LjUzMzkgMTYuODM4OCAyNi4xMTM3IDE2LjgzODhDMjUuMjQyNiAxNi44Mzg4IDI0LjU2MTEgMTYuOTk0MiAyNC4wNjkxIDE3LjMwNDlDMjMuNTg3NCAxNy42MTU1IDIzLjM0NjYgMTguMDU1NyAyMy4zNDY2IDE4LjYyNTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNMzkuNzc1MiAwVjIzLjkyMjNIMzUuMzQ3OFYwSDM5Ljc3NTJaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNNDEuODc2MSAxOS42NTA1QzQxLjg3NjEgMTguNjE0OSA0Mi4xNjgyIDE3LjY4OCA0Mi43NTI0IDE2Ljg2OTlDNDMuMzQ2OCAxNi4wNTE4IDQ0LjE2MTYgMTUuNDA0NSA0NS4xOTY3IDE0LjkyODJDNDYuMjMxOSAxNC40NTE4IDQ3LjQxNTYgMTQuMjEzNiA0OC43NDc5IDE0LjIxMzZDNDkuMTY4MSAxNC4yMTM2IDQ5LjYwODggMTQuMjM5NSA1MC4wNyAxNC4yOTEzQzUwLjU0MTUgMTQuMzQzIDUxLjAxMjkgMTQuNDEwNCA1MS40ODQzIDE0LjQ5MzJDNTEuMTQ2MSAxMi44MDUyIDQ5LjkzMTcgMTEuOTYxMiA0Ny44NDA5IDExLjk2MTJDNDYuNjAwOCAxMS45NjEyIDQ1LjM1NTYgMTIuNDMyNCA0NC4xMDUyIDEzLjM3NDhMNDIuNTgzMyA5LjZDNDMuNjQ5MiA5LjA4MjIgNDQuNjk5NyA4LjY5OTAzIDQ1LjczNDggOC40NTA0OUM0Ni43Njk5IDguMjAxOTQgNDcuNzUzOCA4LjA3NzY3IDQ4LjY4NjQgOC4wNzc2N0M1MC4xNzI1IDguMDc3NjcgNTEuNDU4NyA4LjM2MjQ2IDUyLjU0NTEgOC45MzIwNEM1My42NDE3IDkuNDkxMjYgNTQuNDkyNCAxMC4yODg3IDU1LjA5NyAxMS4zMjQzQzU1LjcwMTcgMTIuMzQ5NSA1Ni4wMDQxIDEzLjU1NiA1Ni4wMDQxIDE0Ljk0MzdWMjMuOTIyM0g1Mi4yODM4TDUxLjk5MTcgMjIuMjYwMkM1MS40MTc3IDIyLjg3MTIgNTAuNzE1NyAyMy4zNTI3IDQ5Ljg4NTUgMjMuNzA0OUM0OS4wNjU2IDI0LjA1NyA0OC4xNjM3IDI0LjIzMyA0Ny4xNzk5IDI0LjIzM0M0NS42MjIxIDI0LjIzMyA0NC4zNDYxIDIzLjgwODQgNDMuMzUxOSAyMi45NTkyQzQyLjM2ODEgMjIuMTEgNDEuODc2MSAyMS4wMDcxIDQxLjg3NjEgMTkuNjUwNVpNNDYuMzAzNiAxOC42MjUyQzQ2LjMwMzYgMTkuMTQzIDQ2LjQ5ODMgMTkuNTYyNSA0Ni44ODc4IDE5Ljg4MzVDNDcuMjg3NSAyMC4xOTQyIDQ3LjgxMDIgMjAuMzQ5NSA0OC40NTU4IDIwLjM0OTVDNDkuMzM3MiAyMC4zNDk1IDUwLjA3NTEgMjAuMDgwMyA1MC42Njk2IDE5LjU0MTdDNTEuMjc0MiAxOS4wMDMyIDUxLjU3NjYgMTguMzQwNSA1MS41NzY2IDE3LjU1MzRWMTcuMjQyN0M1MS4xOTc0IDE3LjExODQgNTAuNzg3NCAxNy4wMjAxIDUwLjM0NjcgMTYuOTQ3NkM0OS45MTYzIDE2Ljg3NTEgNDkuNDkxIDE2LjgzODggNDkuMDcwOCAxNi44Mzg4QzQ4LjE5OTYgMTYuODM4OCA0Ny41MTgxIDE2Ljk5NDIgNDcuMDI2MSAxNy4zMDQ5QzQ2LjU0NDQgMTcuNjE1NSA0Ni4zMDM2IDE4LjA1NTcgNDYuMzAzNiAxOC42MjUyWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTU3LjIyODcgMTYuMTU1M0M1Ny4yMjg3IDE0LjYwMTkgNTcuNTUxNSAxMy4yMTk0IDU4LjE5NzIgMTIuMDA3OEM1OC44NDI4IDEwLjc4NTggNTkuNzI5NCA5LjgyNzgzIDYwLjg1NjcgOS4xMzM5OEM2MS45OTQzIDguNDI5NzcgNjMuMjgwNiA4LjA3NzY3IDY0LjcxNTQgOC4wNzc2N0M2NS42Nzg4IDguMDc3NjcgNjYuNTc1NSA4LjI0MzM3IDY3LjQwNTcgOC41NzQ3NkM2OC4yMzU4IDguODk1NzkgNjguOTczOCA5LjM0NjI4IDY5LjYxOTQgOS45MjYyMVYwLjYyMTM1OUg3NC4wNDY5VjIzLjkyMjNINjkuODY1NEw2OS43NTc4IDIyLjI0NDdDNjkuMTEyMSAyMi44NzY0IDY4LjM1ODggMjMuMzY4MyA2Ny40OTc5IDIzLjcyMDRDNjYuNjQ3MyAyNC4wNjIxIDY1LjcxOTggMjQuMjMzIDY0LjcxNTQgMjQuMjMzQzYzLjI4MDYgMjQuMjMzIDYxLjk5NDMgMjMuODg2MSA2MC44NTY3IDIzLjE5MjJDNTkuNzI5NCAyMi40ODggNTguODQyOCAyMS41MzAxIDU4LjE5NzIgMjAuMzE4NEM1Ny41NTE1IDE5LjA5NjQgNTcuMjI4NyAxNy43MDg3IDU3LjIyODcgMTYuMTU1M1pNNjEuODA5OSAxNi4xNTUzQzYxLjgwOTkgMTcuMzU2NiA2Mi4xNzg4IDE4LjM1NiA2Mi45MTY3IDE5LjE1MzRDNjMuNjU0NiAxOS45NTA4IDY0LjU4NzMgMjAuMzQ5NSA2NS43MTQ2IDIwLjM0OTVDNjYuODQyIDIwLjM0OTUgNjcuNzc0NiAxOS45NTA4IDY4LjUxMjYgMTkuMTUzNEM2OS4yNTA1IDE4LjM1NiA2OS42MTk0IDE3LjM1NjYgNjkuNjE5NCAxNi4xNTUzQzY5LjYxOTQgMTQuOTU0IDY5LjI1MDUgMTMuOTU0NyA2OC41MTI2IDEzLjE1NzNDNjcuNzc0NiAxMi4zNTk5IDY2Ljg0MiAxMS45NjEyIDY1LjcxNDYgMTEuOTYxMkM2NC41ODczIDExLjk2MTIgNjMuNjU0NiAxMi4zNTk5IDYyLjkxNjcgMTMuMTU3M0M2Mi4xNzg4IDEzLjk1NDcgNjEuODA5OSAxNC45NTQgNjEuODA5OSAxNi4xNTUzWicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTc2LjYzOTcgMjMuOTIyM1Y4LjM4ODM1SDgwLjUxMzhMODAuNzI5IDEwLjYwOTdDODEuODQ2MSA4LjkyMTY4IDgzLjM4MzQgOC4wNzc2NyA4NS4zNDA5IDguMDc3NjdDODYuMDA3MSA4LjA3NzY3IDg2LjY5MzggOC4xODEyMyA4Ny40MDA5IDguMzg4MzVMODYuNzg2IDEyLjI1NjNDODYuMTkxNiAxMi4wNTk1IDg1LjYwNzQgMTEuOTYxMiA4NS4wMzM1IDExLjk2MTJDODMuODQ0NiAxMS45NjEyIDgyLjg4NjMgMTIuNDA2NSA4Mi4xNTg3IDEzLjI5NzFDODEuNDMxIDE0LjE3NzMgODEuMDY3MiAxNS40MzU2IDgxLjA2NzIgMTcuMDcxOFYyMy45MjIzSDc2LjYzOTdaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNODcuMTk1OCAzLjEwNjhDODcuMTk1OCAyLjM2MTE2IDg3LjQyMTMgMS43NjA1MiA4Ny44NzIzIDEuMzA0ODVDODguMzIzMiAwLjg0OTE5MSA4OC45MTc2IDAuNjIxMzU5IDg5LjY1NTUgMC42MjEzNTlDOTAuMzkzNSAwLjYyMTM1OSA5MC45ODc5IDAuODQ5MTkxIDkxLjQzODggMS4zMDQ4NUM5MS44ODk4IDEuNzYwNTIgOTIuMTE1MiAyLjM2MTE2IDkyLjExNTIgMy4xMDY4QzkyLjExNTIgMy44NTI0MyA5MS44ODk4IDQuNDUzMDcgOTEuNDM4OCA0LjkwODc0QzkwLjk4NzkgNS4zNjQ0IDkwLjM5MzUgNS41OTIyMyA4OS42NTU1IDUuNTkyMjNDODguOTE3NiA1LjU5MjIzIDg4LjMyMzIgNS4zNjQ0IDg3Ljg3MjMgNC45MDg3NEM4Ny40MjEzIDQuNDUzMDcgODcuMTk1OCAzLjg1MjQzIDg3LjE5NTggMy4xMDY4Wk04Ny40NDE4IDIzLjkyMjNWOC4zODgzNUg5MS44NjkzVjIzLjkyMjNIODcuNDQxOFonIGZpbGw9J3doaXRlJy8lM2UlM2NwYXRoIGQ9J005OC42NDM2IDIzLjkyMjNIOTQuMjE2MVY4LjM4ODM1SDk4LjM5NzZMOTguNTA1MiAxMC4wMzVDOTkuNTkxNiA4LjczMDEgMTAxLjA2MiA4LjA3NzY3IDEwMi45MTcgOC4wNzc2N0MxMDUuMjg1IDguMDc3NjcgMTA2Ljk2IDkuMDk3NzMgMTA3Ljk0NCAxMS4xMzc5QzEwOC40NTcgMTAuMTU0IDEwOS4xNDkgOS4zOTgwNiAxMTAuMDIgOC44Njk5QzExMC44OTEgOC4zNDE3NSAxMTEuOTE2IDguMDc3NjcgMTEzLjA5NCA4LjA3NzY3QzExNC45NiA4LjA3NzY3IDExNi40MSA4Ljc0MDQ1IDExNy40NDUgMTAuMDY2QzExOC40OCAxMS4zODEyIDExOC45OTggMTMuMjE0MiAxMTguOTk4IDE1LjU2NVYyMy45MjIzSDExNC41N1YxNS41NjVDMTE0LjU3IDE0LjM2MzggMTE0LjI4OCAxMy40NjI4IDExMy43MjUgMTIuODYyMUMxMTMuMTcxIDEyLjI2MTUgMTEyLjUgMTEuOTYxMiAxMTEuNzExIDExLjk2MTJDMTEwLjkxMSAxMS45NjEyIDExMC4yMyAxMi4yNzE4IDEwOS42NjYgMTIuODkzMkMxMDkuMTAyIDEzLjUxNDYgMTA4LjgyMSAxNC40NDE0IDEwOC44MjEgMTUuNjczOFYyMy45MjIzSDEwNC4zOTNWMTUuNTY1QzEwNC4zOTMgMTQuMzYzOCAxMDQuMTExIDEzLjQ2MjggMTAzLjU0OCAxMi44NjIxQzEwMi45OTQgMTIuMjYxNSAxMDIuMzIzIDExLjk2MTIgMTAxLjUzNCAxMS45NjEyQzEwMC43MzQgMTEuOTYxMiAxMDAuMDUzIDEyLjI3MTggOTkuNDg5MSAxMi44OTMyQzk4LjkyNTQgMTMuNTE0NiA5OC42NDM2IDE0LjQ0MTQgOTguNjQzNiAxNS42NzM4VjIzLjkyMjNaJyBmaWxsPSd3aGl0ZScvJTNlJTNjcGF0aCBkPSdNMTIxLjI4MyAyMS43NDc2QzEyMS4yODMgMjEuMDAxOSAxMjEuNTA4IDIwLjQwMTMgMTIxLjk1OSAxOS45NDU2QzEyMi40MSAxOS40OSAxMjMuMDA1IDE5LjI2MjEgMTIzLjc0MyAxOS4yNjIxQzEyNC40ODEgMTkuMjYyMSAxMjUuMDc1IDE5LjQ5IDEyNS41MjYgMTkuOTQ1NkMxMjUuOTc3IDIwLjQwMTMgMTI2LjIwMiAyMS4wMDE5IDEyNi4yMDIgMjEuNzQ3NkMxMjYuMjAyIDIyLjQ5MzIgMTI1Ljk3NyAyMy4wOTM5IDEyNS41MjYgMjMuNTQ5NUMxMjUuMDc1IDI0LjAwNTIgMTI0LjQ4MSAyNC4yMzMgMTIzLjc0MyAyNC4yMzNDMTIzLjAwNSAyNC4yMzMgMTIyLjQxIDI0LjAwNTIgMTIxLjk1OSAyMy41NDk1QzEyMS41MDggMjMuMDkzOSAxMjEuMjgzIDIyLjQ5MzIgMTIxLjI4MyAyMS43NDc2WicgZmlsbD0nd2hpdGUnLyUzZSUzY3BhdGggZD0nTTQ4LjgzNCA0MFYyOS43NDYxSDU1LjI0NjFWMzEuNTg1SDUwLjkzOTVWMzMuOTE2SDU0Ljk2NThWMzUuNzYxN0g1MC45Mzk1VjQwSDQ4LjgzNFpNNjMuMTQxNiAzOS4yMzQ0QzYyLjI5MzkgMzkuODM1OSA2MS4zNjY1IDQwLjEzNjcgNjAuMzU5NCA0MC4xMzY3QzU5LjYxMiA0MC4xMzY3IDU4LjkzOTggMzkuOTc3MiA1OC4zNDI4IDM5LjY1ODJDNTcuNzUwMyAzOS4zMzQ2IDU3LjI4MDkgMzguODk3MSA1Ni45MzQ2IDM4LjM0NTdDNTYuNTkyOCAzNy43OTQzIDU2LjQyMTkgMzcuMTcyMiA1Ni40MjE5IDM2LjQ3OTVDNTYuNDIxOSAzNS44MTg3IDU2LjU3NjggMzUuMjI4NSA1Ni44ODY3IDM0LjcwOUM1Ny4yMDEyIDM0LjE4OTUgNTcuNjI3MyAzMy43NzkzIDU4LjE2NSAzMy40Nzg1QzU4LjcwMjggMzMuMTc3NyA1OS4zMTM1IDMzLjAyNzMgNTkuOTk3MSAzMy4wMjczQzYwLjcwMzUgMzMuMDI3MyA2MS4zMjU1IDMzLjE5MzcgNjEuODYzMyAzMy41MjY0QzYyLjQwMSAzMy44NTQ1IDYyLjgyMDMgMzQuMzE0OCA2My4xMjExIDM0LjkwNzJDNjMuNDIxOSAzNS40OTUxIDYzLjU3MjMgMzYuMTc2NCA2My41NzIzIDM2Ljk1MTJWMzcuMTY5OUg1OC41MzQyQzU4LjYxNjIgMzcuNDM4OCA1OC43NDg0IDM3LjY3NTggNTguOTMwNyAzNy44ODA5QzU5LjExNzUgMzguMDgxNCA1OS4zNDk5IDM4LjI0MDkgNTkuNjI3OSAzOC4zNTk0QzU5LjkxMDUgMzguNDc3OSA2MC4yMzE4IDM4LjUzNzEgNjAuNTkxOCAzOC41MzcxQzYxLjI4OTEgMzguNTM3MSA2MS45Mzg1IDM4LjMxMTUgNjIuNTQgMzcuODYwNEw2My4xNDE2IDM5LjIzNDRaTTU4LjQ0NTMgMzYuMTcxOUg2MS43NjA3QzYxLjcyNDMgMzUuODc1NyA2MS42MzA5IDM1LjYxNTkgNjEuNDgwNSAzNS4zOTI2QzYxLjMzNDYgMzUuMTY0NyA2MS4xNDEgMzQuOTg3IDYwLjg5OTQgMzQuODU5NEM2MC42NjI0IDM0LjczMTggNjAuMzk1OCAzNC42NjggNjAuMDk5NiAzNC42NjhDNTkuNzk4OCAzNC42NjggNTkuNTI5OSAzNC43MzQgNTkuMjkzIDM0Ljg2NjJDNTkuMDYwNSAzNC45OTg0IDU4Ljg3MTQgMzUuMTc2MSA1OC43MjU2IDM1LjM5OTRDNTguNTc5OCAzNS42MjI3IDU4LjQ4NjMgMzUuODgwMiA1OC40NDUzIDM2LjE3MTlaTTcxLjExMjMgMzkuMjM0NEM3MC4yNjQ2IDM5LjgzNTkgNjkuMzM3MiA0MC4xMzY3IDY4LjMzMDEgNDAuMTM2N0M2Ny41ODI3IDQwLjEzNjcgNjYuOTEwNSAzOS45NzcyIDY2LjMxMzUgMzkuNjU4MkM2NS43MjEgMzkuMzM0NiA2NS4yNTE2IDM4Ljg5NzEgNjQuOTA1MyAzOC4zNDU3QzY0LjU2MzUgMzcuNzk0MyA2NC4zOTI2IDM3LjE3MjIgNjQuMzkyNiAzNi40Nzk1QzY0LjM5MjYgMzUuODE4NyA2NC41NDc1IDM1LjIyODUgNjQuODU3NCAzNC43MDlDNjUuMTcxOSAzNC4xODk1IDY1LjU5OCAzMy43NzkzIDY2LjEzNTcgMzMuNDc4NUM2Ni42NzM1IDMzLjE3NzcgNjcuMjg0MiAzMy4wMjczIDY3Ljk2NzggMzMuMDI3M0M2OC42NzQyIDMzLjAyNzMgNjkuMjk2MiAzMy4xOTM3IDY5LjgzNCAzMy41MjY0QzcwLjM3MTcgMzMuODU0NSA3MC43OTEgMzQuMzE0OCA3MS4wOTE4IDM0LjkwNzJDNzEuMzkyNiAzNS40OTUxIDcxLjU0MyAzNi4xNzY0IDcxLjU0MyAzNi45NTEyVjM3LjE2OTlINjYuNTA0OUM2Ni41ODY5IDM3LjQzODggNjYuNzE5MSAzNy42NzU4IDY2LjkwMTQgMzcuODgwOUM2Ny4wODgyIDM4LjA4MTQgNjcuMzIwNiAzOC4yNDA5IDY3LjU5ODYgMzguMzU5NEM2Ny44ODEyIDM4LjQ3NzkgNjguMjAyNSAzOC41MzcxIDY4LjU2MjUgMzguNTM3MUM2OS4yNTk4IDM4LjUzNzEgNjkuOTA5MiAzOC4zMTE1IDcwLjUxMDcgMzcuODYwNEw3MS4xMTIzIDM5LjIzNDRaTTY2LjQxNiAzNi4xNzE5SDY5LjczMTRDNjkuNjk1IDM1Ljg3NTcgNjkuNjAxNiAzNS42MTU5IDY5LjQ1MTIgMzUuMzkyNkM2OS4zMDUzIDM1LjE2NDcgNjkuMTExNyAzNC45ODcgNjguODcwMSAzNC44NTk0QzY4LjYzMzEgMzQuNzMxOCA2OC4zNjY1IDM0LjY2OCA2OC4wNzAzIDM0LjY2OEM2Ny43Njk1IDM0LjY2OCA2Ny41MDA3IDM0LjczNCA2Ny4yNjM3IDM0Ljg2NjJDNjcuMDMxMiAzNC45OTg0IDY2Ljg0MjEgMzUuMTc2MSA2Ni42OTYzIDM1LjM5OTRDNjYuNTUwNSAzNS42MjI3IDY2LjQ1NyAzNS44ODAyIDY2LjQxNiAzNi4xNzE5Wk03OS44MjgxIDQwSDc4LjEwNTVMNzguMDAyOSAzOS4wNzAzQzc3LjcxMTMgMzkuMzk4NCA3Ny4zNjA0IDM5LjY1ODIgNzYuOTUwMiAzOS44NDk2Qzc2LjU0NDYgNDAuMDQxIDc2LjEwMDMgNDAuMTM2NyA3NS42MTcyIDQwLjEzNjdDNzQuOTkyOCA0MC4xMzY3IDc0LjQzNDYgMzkuOTg0IDczLjk0MjQgMzkuNjc4N0M3My40NTQ4IDM5LjM2ODggNzMuMDY5NyAzOC45NDUgNzIuNzg3MSAzOC40MDcyQzcyLjUwNDYgMzcuODY5NSA3Mi4zNjMzIDM3LjI2MTEgNzIuMzYzMyAzNi41ODJDNzIuMzYzMyAzNS44OTg0IDcyLjUwNDYgMzUuMjkgNzIuNzg3MSAzNC43NTY4QzczLjA2OTcgMzQuMjE5MSA3My40NTQ4IDMzLjc5NzUgNzMuOTQyNCAzMy40OTIyQzc0LjQzNDYgMzMuMTgyMyA3NC45OTI4IDMzLjAyNzMgNzUuNjE3MiAzMy4wMjczQzc2LjA2MzggMzMuMDI3MyA3Ni40Nzg1IDMzLjEwOTQgNzYuODYxMyAzMy4yNzM0Qzc3LjI0ODcgMzMuNDMyOSA3Ny41ODM3IDMzLjY1NjIgNzcuODY2MiAzMy45NDM0VjI5Ljc0NjFINzkuODI4MVY0MFpNNzYuMTIzIDM4LjM3OTlDNzYuNDQ2NiAzOC4zNzk5IDc2LjczODMgMzguMzA3IDc2Ljk5OCAzOC4xNjExQzc3LjI2MjQgMzguMDE1MyA3Ny40NzIgMzcuODE3MSA3Ny42MjcgMzcuNTY2NEM3Ny43ODY1IDM3LjMxMTIgNzcuODY2MiAzNy4wMjE4IDc3Ljg2NjIgMzYuNjk4MlYzNi40NTIxQzc3Ljg2NjIgMzYuMTI4NiA3Ny43ODY1IDM1Ljg0MTUgNzcuNjI3IDM1LjU5MDhDNzcuNDcyIDM1LjM0MDIgNzcuMjYyNCAzNS4xNDQyIDc2Ljk5OCAzNS4wMDI5Qzc2LjczODMgMzQuODU3MSA3Ni40NDY2IDM0Ljc4NDIgNzYuMTIzIDM0Ljc4NDJDNzUuNzkwNCAzNC43ODQyIDc1LjQ5MTkgMzQuODYxNyA3NS4yMjc1IDM1LjAxNjZDNzQuOTYzMiAzNS4xNzE1IDc0Ljc1MzYgMzUuMzg1NyA3NC41OTg2IDM1LjY1OTJDNzQuNDQ4MiAzNS45MjgxIDc0LjM3MyAzNi4yMzU3IDc0LjM3MyAzNi41ODJDNzQuMzczIDM2LjkyMzggNzQuNDQ4MiAzNy4yMzE0IDc0LjU5ODYgMzcuNTA0OUM3NC43NTM2IDM3Ljc3MzggNzQuOTYzMiAzNy45ODggNzUuMjI3NSAzOC4xNDc1Qzc1LjQ5MTkgMzguMzAyNCA3NS43OTA0IDM4LjM3OTkgNzYuMTIzIDM4LjM3OTlaTTgzLjIxODggNDBIODEuNDk2MVYyOS43NDYxSDgzLjQ1OFYzMy45NDM0QzgzLjc0NTEgMzMuNjU2MiA4NC4wNzc4IDMzLjQzMjkgODQuNDU2MSAzMy4yNzM0Qzg0LjgzODkgMzMuMTA5NCA4NS4yNTM2IDMzLjAyNzMgODUuNzAwMiAzMy4wMjczQzg2LjMyOTEgMzMuMDI3MyA4Ni44ODc0IDMzLjE4MjMgODcuMzc1IDMzLjQ5MjJDODcuODYyNiAzMy43OTc1IDg4LjI0NzcgMzQuMjE5MSA4OC41MzAzIDM0Ljc1NjhDODguODEyOCAzNS4yOSA4OC45NTQxIDM1Ljg5ODQgODguOTU0MSAzNi41ODJDODguOTU0MSAzNy4yNjExIDg4LjgxMjggMzcuODY5NSA4OC41MzAzIDM4LjQwNzJDODguMjQ3NyAzOC45NDUgODcuODYyNiAzOS4zNjg4IDg3LjM3NSAzOS42Nzg3Qzg2Ljg4NzQgMzkuOTg0IDg2LjMyOTEgNDAuMTM2NyA4NS43MDAyIDQwLjEzNjdDODUuMjE3MSA0MC4xMzY3IDg0Ljc3MDUgNDAuMDQzMyA4NC4zNjA0IDM5Ljg1NjRDODMuOTU0OCAzOS42NjUgODMuNjA2MSAzOS40MDMgODMuMzE0NSAzOS4wNzAzTDgzLjIxODggNDBaTTg1LjIwMTIgMzguMzc5OUM4NS41MzM5IDM4LjM3OTkgODUuODMwMSAzOC4zMDI0IDg2LjA4OTggMzguMTQ3NUM4Ni4zNTQyIDM3Ljk5MjUgODYuNTYxNSAzNy43NzgzIDg2LjcxMTkgMzcuNTA0OUM4Ni44NjY5IDM3LjIzMTQgODYuOTQ0MyAzNi45MjE1IDg2Ljk0NDMgMzYuNTc1MkM4Ni45NDQzIDM2LjIzMzQgODYuODY2OSAzNS45MjgxIDg2LjcxMTkgMzUuNjU5MkM4Ni41NjE1IDM1LjM4NTcgODYuMzU0MiAzNS4xNzE1IDg2LjA4OTggMzUuMDE2NkM4NS44MzAxIDM0Ljg2MTcgODUuNTMzOSAzNC43ODQyIDg1LjIwMTIgMzQuNzg0MkM4NC44ODY3IDM0Ljc4NDIgODQuNTk5NiAzNC44NTQ4IDg0LjMzOTggMzQuOTk2MUM4NC4wODQ2IDM1LjEzNzQgODMuODc5NiAzNS4zMzExIDgzLjcyNDYgMzUuNTc3MUM4My41Njk3IDM1LjgyMzIgODMuNDgwOCAzNi4xMDU4IDgzLjQ1OCAzNi40MjQ4VjM2LjcyNTZDODMuNDgwOCAzNy4wNDQ2IDgzLjU2OTcgMzcuMzI5NCA4My43MjQ2IDM3LjU4MDFDODMuODc5NiAzNy44MjYyIDg0LjA4NDYgMzguMDIyMSA4NC4zMzk4IDM4LjE2OEM4NC41OTUxIDM4LjMwOTIgODQuODgyMiAzOC4zNzk5IDg1LjIwMTIgMzguMzc5OVpNOTYuMzAyNyA0MEg5NC41OTM4TDk0LjQ5MTIgMzkuMTg2NUM5NC4yNDA2IDM5LjQ4NzMgOTMuOTMwNyAzOS43MjIgOTMuNTYxNSAzOS44OTA2QzkzLjE5MjQgNDAuMDU0NyA5Mi43ODY4IDQwLjEzNjcgOTIuMzQ0NyA0MC4xMzY3QzkxLjg2NjIgNDAuMTM2NyA5MS40NDAxIDQwLjA0NTYgOTEuMDY2NCAzOS44NjMzQzkwLjY5MjcgMzkuNjc2NCA5MC4zOTg4IDM5LjQyMTIgOTAuMTg0NiAzOS4wOTc3Qzg5Ljk3MDQgMzguNzY5NSA4OS44NjMzIDM4LjM5ODEgODkuODYzMyAzNy45ODM0Qzg5Ljg2MzMgMzcuNTQ1OSA4OS45Nzk1IDM3LjE2MDggOTAuMjExOSAzNi44MjgxQzkwLjQ0NDMgMzYuNDk1NCA5MC43NjMzIDM2LjIzNTcgOTEuMTY4OSAzNi4wNDg4QzkxLjU3OTEgMzUuODU3NCA5Mi4wNDM5IDM1Ljc2MTcgOTIuNTYzNSAzNS43NjE3QzkyLjg2ODggMzUuNzYxNyA5My4xNzQyIDM1Ljc5NTkgOTMuNDc5NSAzNS44NjQzQzkzLjc4OTQgMzUuOTMyNiA5NC4wNzY1IDM2LjAyODMgOTQuMzQwOCAzNi4xNTE0VjM1Ljk3MzZDOTQuMzQwOCAzNS43MDAyIDk0LjI2MzMgMzUuNDY1NSA5NC4xMDg0IDM1LjI2OTVDOTMuOTU4IDM1LjA2OSA5My43NDg0IDM0LjkxNDEgOTMuNDc5NSAzNC44MDQ3QzkzLjIxNTIgMzQuNjk1MyA5Mi45MTg5IDM0LjY0MDYgOTIuNTkwOCAzNC42NDA2QzkyLjI3NjQgMzQuNjQwNiA5MS45NjQyIDM0LjY5MDggOTEuNjU0MyAzNC43OTFDOTEuMzQ5IDM0Ljg5MTMgOTEuMDY2NCAzNS4wNDE3IDkwLjgwNjYgMzUuMjQyMkw5MC4yNzM0IDMzLjc0NTFDOTAuNzMzNyAzMy41MDgxIDkxLjE5ODYgMzMuMzMwNCA5MS42NjggMzMuMjExOUM5Mi4xNDE5IDMzLjA4ODkgOTIuNTk5OSAzMy4wMjczIDkzLjA0MiAzMy4wMjczQzkzLjcwNzQgMzMuMDI3MyA5NC4yODM5IDMzLjE1OTUgOTQuNzcxNSAzMy40MjM4Qzk1LjI1OTEgMzMuNjgzNiA5NS42MzUxIDM0LjA1MjcgOTUuODk5NCAzNC41MzEyQzk2LjE2ODMgMzUuMDA1MiA5Ni4zMDI3IDM1LjU2OCA5Ni4zMDI3IDM2LjIxOTdWNDBaTTkyLjc3NTQgMzguNjI2QzkzLjAzNTIgMzguNjI2IDkzLjI4MzUgMzguNTY5IDkzLjUyMDUgMzguNDU1MUM5My43NTc1IDM4LjM0MTEgOTMuOTQ4OSAzOC4xODYyIDk0LjA5NDcgMzcuOTkwMkM5NC4yNDUxIDM3Ljc5NDMgOTQuMzI0OSAzNy41Nzc4IDk0LjMzNCAzNy4zNDA4VjM3LjI5M0M5NC4xMzM1IDM3LjE1NjIgOTMuOTEwMiAzNy4wNTE0IDkzLjY2NDEgMzYuOTc4NUM5My40MjI1IDM2LjkwMSA5My4xNzY0IDM2Ljg2MjMgOTIuOTI1OCAzNi44NjIzQzkyLjU1MjEgMzYuODYyMyA5Mi4yNDY3IDM2Ljk0NDMgOTIuMDA5OCAzNy4xMDg0QzkxLjc3MjggMzcuMjcyNSA5MS42NTQzIDM3LjQ4NDQgOTEuNjU0MyAzNy43NDQxQzkxLjY1NDMgMzcuOTEyOCA5MS43MDIxIDM4LjA2NTQgOTEuNzk3OSAzOC4yMDIxQzkxLjg5ODEgMzguMzM0MyA5Mi4wMzI2IDM4LjQzOTEgOTIuMjAxMiAzOC41MTY2QzkyLjM2OTggMzguNTg5NSA5Mi41NjEyIDM4LjYyNiA5Mi43NzU0IDM4LjYyNlpNMTAzLjg5MSAzOC45MTMxQzEwMy41NTggMzkuMjk1OSAxMDMuMTUgMzkuNTk2NyAxMDIuNjY3IDM5LjgxNTRDMTAyLjE4NCA0MC4wMjk2IDEwMS42NTMgNDAuMTM2NyAxMDEuMDc0IDQwLjEzNjdDMTAwLjM3MiA0MC4xMzY3IDk5Ljc0MzUgMzkuOTg0IDk5LjE4NzUgMzkuNjc4N0M5OC42MzYxIDM5LjM2ODggOTguMjAwOCAzOC45NDUgOTcuODgxOCAzOC40MDcyQzk3LjU2NzQgMzcuODY5NSA5Ny40MTAyIDM3LjI2MTEgOTcuNDEwMiAzNi41ODJDOTcuNDEwMiAzNS44OTg0IDk3LjU2NzQgMzUuMjkgOTcuODgxOCAzNC43NTY4Qzk4LjIwMDggMzQuMjE5MSA5OC42MzYxIDMzLjc5NzUgOTkuMTg3NSAzMy40OTIyQzk5Ljc0MzUgMzMuMTgyMyAxMDAuMzcyIDMzLjAyNzMgMTAxLjA3NCAzMy4wMjczQzEwMS42NDggMzMuMDI3MyAxMDIuMTc3IDMzLjEzNDQgMTAyLjY2IDMzLjM0ODZDMTAzLjE0MyAzMy41NjI4IDEwMy41NTEgMzMuODU5IDEwMy44ODQgMzQuMjM3M0wxMDIuNzI5IDM1LjQ0NzNDMTAyLjU1MSAzNS4yNDIyIDEwMi4zMjUgMzUuMDgyNyAxMDIuMDUyIDM0Ljk2ODhDMTAxLjc4MyAzNC44NTAzIDEwMS41IDM0Ljc5MSAxMDEuMjA0IDM0Ljc5MUMxMDAuODYyIDM0Ljc5MSAxMDAuNTU3IDM0Ljg2ODUgMTAwLjI4OCAzNS4wMjM0QzEwMC4wMTkgMzUuMTczOCA5OS44MDczIDM1LjM4MzUgOTkuNjUyMyAzNS42NTIzQzk5LjQ5NzQgMzUuOTE2NyA5OS40MTk5IDM2LjIyMiA5OS40MTk5IDM2LjU2ODRDOTkuNDE5OSAzNi45MTkzIDk5LjQ5NzQgMzcuMjMxNCA5OS42NTIzIDM3LjUwNDlDOTkuODA3MyAzNy43NzgzIDEwMC4wMTkgMzcuOTkyNSAxMDAuMjg4IDM4LjE0NzVDMTAwLjU1NyAzOC4yOTc5IDEwMC44NjIgMzguMzczIDEwMS4yMDQgMzguMzczQzEwMS41IDM4LjM3MyAxMDEuNzg1IDM4LjMxNjEgMTAyLjA1OSAzOC4yMDIxQzEwMi4zMzIgMzguMDgzNyAxMDIuNTU1IDM3LjkyMTkgMTAyLjcyOSAzNy43MTY4TDEwMy44OTEgMzguOTEzMVpNMTA3LjA1NiA0MEgxMDUuMDk0VjI5Ljc0NjFIMTA3LjA1NlYzNi4wNDg4TDEwNy43MjYgMzUuMjQyMkwxMDkuNjk0IDMzLjE2NDFIMTEyLjE0OEwxMDkuMjU3IDM2LjIwNjFMMTEyLjQ5IDQwSDEwOS45NTRMMTA3LjkxIDM3LjQzNjVMMTA3LjA1NiAzOC4yMTU4VjQwWicgZmlsbD0nJTIzMDA4NUZGJy8lM2UlM2Mvc3ZnJTNlXCI7XG4gIGV4cG9ydCBkZWZhdWx0IGltZzsiLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlRmVlZGJhY2tDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2NvbnRleHRzL0ZlZWRiYWNrQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlTWUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdXNlclwiO1xuaW1wb3J0IHsgQ2xvc2VCdXR0b24gfSBmcm9tIFwiLi4vYXRvbXMvYnV0dG9ucy9DbG9zZUJ1dHRvblwiO1xuaW1wb3J0IHsgQ29sbGFwc2VCdXR0b24gfSBmcm9tIFwiLi4vYXRvbXMvYnV0dG9ucy9Db2xsYXBzZUJ1dHRvblwiO1xuaW1wb3J0IHsgQ29ubmVjdGVkUGFuZWwgfSBmcm9tIFwiLi9Db25uZWN0ZWRQYW5lbFwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvblBhbmVsIH0gZnJvbSBcIi4vQ29ubmVjdGlvblBhbmVsXCI7XG5pbXBvcnQgTG9nb0ZlZWRiYWNrTGlnaHQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29ucy9sb2dvLWZlZWRiYWNrLWxpZ2h0LnN2Z1wiO1xuXG5leHBvcnQgY29uc3QgU2lkZUJhciA9ICgpID0+IHtcbiAgY29uc3QgW2lzQ29sbGFwc2VkLCBzZXRJc0NvbGxhcHNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgZGF0YTogbWUgfSA9IHVzZU1lKCk7XG5cbiAgY29uc3QgeyBpc09wZW4sIGNsb3NlRmVlZGJhY2tPdmVybGF5IH0gPSB1c2VGZWVkYmFja0NvbnRleHQoKTtcblxuICBjb25zdCBpc0Nvbm5lY3RlZCA9ICEhbWU7XG5cbiAgaWYgKCFpc09wZW4pIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgaWQ9XCJmZWVkYmFjay1zaWRlYmFyXCJcbiAgICAgIGNsYXNzTmFtZT17YGZpeGVkIHRvcC0wIHRyYW5zaXRpb24tYWxsIHctWzMyMHB4XSBoLXNjcmVlbiB6LVsxMDAwMDAwMF0gYmctZ3JheS1mZWVkYmFjay04MDAgdGV4dC13aGl0ZSBweC0zIHB5LTQgJHtcbiAgICAgICAgaXNDb2xsYXBzZWQgPyBcInJpZ2h0LVstMzIwcHhdXCIgOiBcInJpZ2h0LTBcIlxuICAgICAgfWB9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCB3LWZ1bGwgIGl0ZW1zLWNlbnRlciBmbGV4LWNvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8aW1nIHNyYz17TG9nb0ZlZWRiYWNrTGlnaHR9IGNsYXNzTmFtZT1cInotMTBcIiAvPlxuICAgICAgICAgIDxDbG9zZUJ1dHRvbiBvbkNsaWNrPXtjbG9zZUZlZWRiYWNrT3ZlcmxheX0gc2l6ZT1cImxhcmdlXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtpc0Nvbm5lY3RlZCA/IDxDb25uZWN0ZWRQYW5lbCAvPiA6IDxDb25uZWN0aW9uUGFuZWwgLz59XG4gICAgICAgIDxDb2xsYXBzZUJ1dHRvblxuICAgICAgICAgIGlzQ29sbGFwc2VkPXtpc0NvbGxhcHNlZH1cbiAgICAgICAgICBzZXRJc0NvbGxhcHNlZD17c2V0SXNDb2xsYXBzZWR9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4sXG4gICAgZG9jdW1lbnQuYm9keVxuICApO1xufTtcbiIsImltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT3BlbkZlZWRiYWNrQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hdG9tcy9idXR0b25zL09wZW5GZWVkYmFja0J1dHRvblwiO1xuaW1wb3J0IHsgRmVlZGJhY2tQaW5zIH0gZnJvbSBcIi4vY29tcG9uZW50cy9tb2xlY3VsZXMvZmVlZGJhY2tzL2dyb3VwL0ZlZWRiYWNrUGluc1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tJbnB1dCB9IGZyb20gXCIuL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrcy9pdGVtL0ZlZWRiYWNrSW5wdXRcIjtcbmltcG9ydCB7IFNpZGVCYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL29yZ2FuaXNtcy9TaWRlQmFyXCI7XG5pbXBvcnQgeyBGZWVkYmFja1Byb3ZpZGVyIH0gZnJvbSBcIi4vY29udGV4dHMvRmVlZGJhY2tDb250ZXh0XCI7XG5pbXBvcnQgXCIuL2luZGV4LmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWVkYmFja1Jvb3RQcm9wcyB9IGZyb20gXCIuLi9pbmRleC5kLnRzXCI7XG5cbmNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbmZ1bmN0aW9uIEZlZWRiYWNrUm9vdChwcm9wczogRmVlZGJhY2tSb290UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxGZWVkYmFja1Byb3ZpZGVyIHsuLi5wcm9wc30+XG4gICAgICAgICAgPEZlZWRiYWNrSW5wdXQgLz5cbiAgICAgICAgICA8U2lkZUJhciAvPlxuICAgICAgICAgIDxPcGVuRmVlZGJhY2tCdXR0b24gLz5cbiAgICAgICAgICA8RmVlZGJhY2tQaW5zIC8+XG4gICAgICAgIDwvRmVlZGJhY2tQcm92aWRlcj5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmVlZGJhY2tSb290O1xuIl0sIm5hbWVzIjpbIlN1YnNjcmliYWJsZSIsImNvbnN0cnVjdG9yIiwibGlzdGVuZXJzIiwiU2V0Iiwic3Vic2NyaWJlIiwiYmluZCIsImxpc3RlbmVyIiwiYWRkIiwib25TdWJzY3JpYmUiLCJkZWxldGUiLCJvblVuc3Vic2NyaWJlIiwiaGFzTGlzdGVuZXJzIiwic2l6ZSIsImdsb2JhbCIsInNlbGYiLCJ3aW5kb3ciLCJlbnYiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIm1vek5vdyIsIm1zTm93Iiwib05vdyIsIndlYmtpdE5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiYnJvd3NlciQxIiwibmV4dFRpY2siLCJpc1NlcnZlciIsImdsb2JhbFRoaXMiLCJub29wIiwiZnVuY3Rpb25hbFVwZGF0ZSIsInVwZGF0ZXIiLCJpbnB1dCIsImlzVmFsaWRUaW1lb3V0IiwidmFsdWUiLCJJbmZpbml0eSIsInRpbWVVbnRpbFN0YWxlIiwidXBkYXRlZEF0Iiwic3RhbGVUaW1lIiwiTWF0aCIsIm1heCIsInJlc29sdmVTdGFsZVRpbWUiLCJxdWVyeSIsInJlc29sdmVFbmFibGVkIiwiZW5hYmxlZCIsIm1hdGNoUXVlcnkiLCJmaWx0ZXJzIiwidHlwZSIsImV4YWN0IiwiZmV0Y2hTdGF0dXMiLCJwcmVkaWNhdGUiLCJxdWVyeUtleSIsInN0YWxlIiwicXVlcnlIYXNoIiwiaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIiwib3B0aW9ucyIsInBhcnRpYWxNYXRjaEtleSIsImlzQWN0aXZlIiwiaXNTdGFsZSIsInN0YXRlIiwibWF0Y2hNdXRhdGlvbiIsIm11dGF0aW9uIiwic3RhdHVzIiwibXV0YXRpb25LZXkiLCJoYXNoS2V5IiwiaGFzaEZuIiwicXVlcnlLZXlIYXNoRm4iLCJKU09OIiwic3RyaW5naWZ5IiwiXyIsInZhbCIsImlzUGxhaW5PYmplY3QiLCJPYmplY3QiLCJrZXlzIiwic29ydCIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsImEiLCJiIiwic29tZSIsInJlcGxhY2VFcXVhbERlZXAiLCJhcnJheSIsImlzUGxhaW5BcnJheSIsImFJdGVtcyIsImFTaXplIiwibGVuZ3RoIiwiYkl0ZW1zIiwiYlNpemUiLCJjb3B5IiwiZXF1YWxJdGVtcyIsImkiLCJpbmNsdWRlcyIsInNoYWxsb3dFcXVhbE9iamVjdHMiLCJBcnJheSIsImlzQXJyYXkiLCJvIiwiaGFzT2JqZWN0UHJvdG90eXBlIiwiY3RvciIsInByb3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmciLCJjYWxsIiwic2xlZXAiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVwbGFjZURhdGEiLCJwcmV2RGF0YSIsImRhdGEiLCJzdHJ1Y3R1cmFsU2hhcmluZyIsInByb2Nlc3MiLCJOT0RFX0VOViIsImVycm9yIiwiY29uc29sZSIsImFkZFRvRW5kIiwiaXRlbXMiLCJpdGVtIiwibmV3SXRlbXMiLCJzbGljZSIsImFkZFRvU3RhcnQiLCJza2lwVG9rZW4iLCJTeW1ib2wiLCJlbnN1cmVRdWVyeUZuIiwiZmV0Y2hPcHRpb25zIiwicXVlcnlGbiIsImluaXRpYWxQcm9taXNlIiwicmVqZWN0IiwiRXJyb3IiLCJGb2N1c01hbmFnZXIiLCJvbkZvY3VzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzZXRFdmVudExpc3RlbmVyIiwic2V0dXAiLCJmb2N1c2VkIiwic2V0Rm9jdXNlZCIsImNoYW5nZWQiLCJpc0ZvY3VzZWQiLCJmb3JFYWNoIiwiZG9jdW1lbnQiLCJ2aXNpYmlsaXR5U3RhdGUiLCJmb2N1c01hbmFnZXIiLCJPbmxpbmVNYW5hZ2VyIiwib25PbmxpbmUiLCJvbmxpbmVMaXN0ZW5lciIsIm9mZmxpbmVMaXN0ZW5lciIsInNldE9ubGluZSIsIm9ubGluZSIsImlzT25saW5lIiwib25saW5lTWFuYWdlciIsInBlbmRpbmdUaGVuYWJsZSIsInRoZW5hYmxlIiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwiY2F0Y2giLCJmaW5hbGl6ZSIsImFzc2lnbiIsInJlYXNvbiIsImRlZmF1bHRSZXRyeURlbGF5IiwiZmFpbHVyZUNvdW50IiwibWluIiwiY2FuRmV0Y2giLCJuZXR3b3JrTW9kZSIsIkNhbmNlbGxlZEVycm9yIiwicmV2ZXJ0Iiwic2lsZW50IiwiaXNDYW5jZWxsZWRFcnJvciIsImNyZWF0ZVJldHJ5ZXIiLCJjb25maWciLCJpc1JldHJ5Q2FuY2VsbGVkIiwiaXNSZXNvbHZlZCIsImNvbnRpbnVlRm4iLCJjYW5jZWwiLCJjYW5jZWxPcHRpb25zIiwiYWJvcnQiLCJjYW5jZWxSZXRyeSIsImNvbnRpbnVlUmV0cnkiLCJjYW5Db250aW51ZSIsImNhblJ1biIsImNhblN0YXJ0Iiwib25TdWNjZXNzIiwib25FcnJvciIsInBhdXNlIiwiY29udGludWVSZXNvbHZlIiwib25QYXVzZSIsInRoZW4iLCJvbkNvbnRpbnVlIiwicnVuIiwicHJvbWlzZU9yVmFsdWUiLCJmbiIsInJldHJ5IiwicmV0cnlEZWxheSIsImRlbGF5Iiwic2hvdWxkUmV0cnkiLCJvbkZhaWwiLCJwcm9taXNlIiwiY29udGludWUiLCJzdGFydCIsImNyZWF0ZU5vdGlmeU1hbmFnZXIiLCJxdWV1ZSIsInRyYW5zYWN0aW9ucyIsIm5vdGlmeUZuIiwiY2FsbGJhY2siLCJiYXRjaE5vdGlmeUZuIiwic2NoZWR1bGVGbiIsImNiIiwic2NoZWR1bGUiLCJwdXNoIiwiZmx1c2giLCJvcmlnaW5hbFF1ZXVlIiwiYmF0Y2giLCJiYXRjaENhbGxzIiwiYXJncyIsInNldE5vdGlmeUZ1bmN0aW9uIiwic2V0QmF0Y2hOb3RpZnlGdW5jdGlvbiIsInNldFNjaGVkdWxlciIsIm5vdGlmeU1hbmFnZXIiLCJSZW1vdmFibGUiLCJkZXN0cm95IiwiY2xlYXJHY1RpbWVvdXQiLCJzY2hlZHVsZUdjIiwiZ2NUaW1lIiwib3B0aW9uYWxSZW1vdmUiLCJ1cGRhdGVHY1RpbWUiLCJuZXdHY1RpbWUiLCJjbGVhclRpbWVvdXQiLCJRdWVyeSIsImRlZmF1bHRPcHRpb25zIiwic2V0T3B0aW9ucyIsIm9ic2VydmVycyIsImNhY2hlIiwiZ2V0RGVmYXVsdFN0YXRlIiwibWV0YSIsInJlbW92ZSIsInNldERhdGEiLCJuZXdEYXRhIiwiZGF0YVVwZGF0ZWRBdCIsIm1hbnVhbCIsInNldFN0YXRlIiwic2V0U3RhdGVPcHRpb25zIiwicmVzZXQiLCJvYnNlcnZlciIsImlzRGlzYWJsZWQiLCJnZXRPYnNlcnZlcnNDb3VudCIsImRhdGFVcGRhdGVDb3VudCIsImVycm9yVXBkYXRlQ291bnQiLCJpc0ludmFsaWRhdGVkIiwiZ2V0Q3VycmVudFJlc3VsdCIsImlzU3RhbGVCeVRpbWUiLCJmaW5kIiwieCIsInNob3VsZEZldGNoT25XaW5kb3dGb2N1cyIsInJlZmV0Y2giLCJjYW5jZWxSZWZldGNoIiwic2hvdWxkRmV0Y2hPblJlY29ubmVjdCIsImFkZE9ic2VydmVyIiwibm90aWZ5IiwicmVtb3ZlT2JzZXJ2ZXIiLCJmaWx0ZXIiLCJpbnZhbGlkYXRlIiwiZmV0Y2giLCJhYm9ydENvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJhZGRTaWduYWxQcm9wZXJ0eSIsIm9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInNpZ25hbCIsImZldGNoRm4iLCJxdWVyeUZuQ29udGV4dCIsInBlcnNpc3RlciIsImNvbnRleHQiLCJiZWhhdmlvciIsIm9uRmV0Y2giLCJmZXRjaE1ldGEiLCJvblNldHRsZWQiLCIjZGlzcGF0Y2giLCJhY3Rpb24iLCJyZWR1Y2VyIiwiZmV0Y2hGYWlsdXJlQ291bnQiLCJmZXRjaEZhaWx1cmVSZWFzb24iLCJmZXRjaFN0YXRlIiwiZXJyb3JVcGRhdGVkQXQiLCJvblF1ZXJ5VXBkYXRlIiwiaW5pdGlhbERhdGEiLCJoYXNEYXRhIiwiaW5pdGlhbERhdGFVcGRhdGVkQXQiLCJRdWVyeUNhY2hlIiwiTWFwIiwiYnVpbGQiLCJjbGllbnQiLCJkZWZhdWx0UXVlcnlPcHRpb25zIiwiZ2V0UXVlcnlEZWZhdWx0cyIsImhhcyIsInNldCIsInF1ZXJ5SW5NYXAiLCJjbGVhciIsImdldEFsbCIsInZhbHVlcyIsImRlZmF1bHRlZEZpbHRlcnMiLCJmaW5kQWxsIiwicXVlcmllcyIsImV2ZW50IiwiTXV0YXRpb24iLCJtdXRhdGlvbklkIiwibXV0YXRpb25DYWNoZSIsImV4ZWN1dGUiLCJ2YXJpYWJsZXMiLCJtdXRhdGlvbkZuIiwicmVzdG9yZWQiLCJpc1BhdXNlZCIsIm9uTXV0YXRlIiwicnVuTmV4dCIsImZhaWx1cmVSZWFzb24iLCJzdWJtaXR0ZWRBdCIsIm9uTXV0YXRpb25VcGRhdGUiLCJNdXRhdGlvbkNhY2hlIiwiZGVmYXVsdE11dGF0aW9uT3B0aW9ucyIsInNjb3BlIiwic2NvcGVGb3IiLCJzY29wZWRNdXRhdGlvbnMiLCJpbmRleCIsImluZGV4T2YiLCJzcGxpY2UiLCJtdXRhdGlvbnNXaXRoU2FtZVNjb3BlIiwiZmlyc3RQZW5kaW5nTXV0YXRpb24iLCJtIiwiZm91bmRNdXRhdGlvbiIsImZyb20iLCJyZXN1bWVQYXVzZWRNdXRhdGlvbnMiLCJwYXVzZWRNdXRhdGlvbnMiLCJhbGwiLCJtYXAiLCJpZCIsImluZmluaXRlUXVlcnlCZWhhdmlvciIsInBhZ2VzIiwiZGlyZWN0aW9uIiwiZmV0Y2hNb3JlIiwib2xkUGFnZXMiLCJvbGRQYWdlUGFyYW1zIiwicGFnZVBhcmFtcyIsImN1cnJlbnRQYWdlIiwiY2FuY2VsbGVkIiwiYWJvcnRlZCIsImZldGNoUGFnZSIsInBhcmFtIiwicHJldmlvdXMiLCJwYWdlUGFyYW0iLCJwYWdlIiwibWF4UGFnZXMiLCJhZGRUbyIsInBhZ2VQYXJhbUZuIiwiZ2V0UHJldmlvdXNQYWdlUGFyYW0iLCJnZXROZXh0UGFnZVBhcmFtIiwib2xkRGF0YSIsInJlbWFpbmluZ1BhZ2VzIiwiaW5pdGlhbFBhZ2VQYXJhbSIsImxhc3RJbmRleCIsIlF1ZXJ5Q2xpZW50IiwicXVlcnlDYWNoZSIsIm1vdW50IiwidW5tb3VudCIsImlzRmV0Y2hpbmciLCJpc011dGF0aW5nIiwiZ2V0UXVlcnlEYXRhIiwiZW5zdXJlUXVlcnlEYXRhIiwiZGVmYXVsdGVkT3B0aW9ucyIsImNhY2hlZERhdGEiLCJmZXRjaFF1ZXJ5IiwicmV2YWxpZGF0ZUlmU3RhbGUiLCJwcmVmZXRjaFF1ZXJ5IiwiZ2V0UXVlcmllc0RhdGEiLCJzZXRRdWVyeURhdGEiLCJzZXRRdWVyaWVzRGF0YSIsImdldFF1ZXJ5U3RhdGUiLCJyZW1vdmVRdWVyaWVzIiwicmVzZXRRdWVyaWVzIiwicmVmZXRjaEZpbHRlcnMiLCJyZWZldGNoUXVlcmllcyIsImNhbmNlbFF1ZXJpZXMiLCJkZWZhdWx0ZWRDYW5jZWxPcHRpb25zIiwicHJvbWlzZXMiLCJpbnZhbGlkYXRlUXVlcmllcyIsInJlZmV0Y2hUeXBlIiwidGhyb3dPbkVycm9yIiwiZmV0Y2hJbmZpbml0ZVF1ZXJ5IiwicHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5IiwiZW5zdXJlSW5maW5pdGVRdWVyeURhdGEiLCJnZXRRdWVyeUNhY2hlIiwiZ2V0TXV0YXRpb25DYWNoZSIsImdldERlZmF1bHRPcHRpb25zIiwic2V0RGVmYXVsdE9wdGlvbnMiLCJzZXRRdWVyeURlZmF1bHRzIiwiZGVmYXVsdHMiLCJxdWVyeURlZmF1bHQiLCJzZXRNdXRhdGlvbkRlZmF1bHRzIiwiZ2V0TXV0YXRpb25EZWZhdWx0cyIsIl9kZWZhdWx0ZWQiLCJyZWZldGNoT25SZWNvbm5lY3QiLCJzdXNwZW5zZSIsIm11dGF0aW9ucyIsIlF1ZXJ5T2JzZXJ2ZXIiLCJleHBlcmltZW50YWxfcHJlZmV0Y2hJblJlbmRlciIsImJpbmRNZXRob2RzIiwic2hvdWxkRmV0Y2hPbk1vdW50IiwidXBkYXRlUmVzdWx0Iiwic2hvdWxkRmV0Y2hPbiIsInJlZmV0Y2hPbldpbmRvd0ZvY3VzIiwibm90aWZ5T3B0aW9ucyIsInByZXZPcHRpb25zIiwicHJldlF1ZXJ5IiwibW91bnRlZCIsInNob3VsZEZldGNoT3B0aW9uYWxseSIsIm5leHRSZWZldGNoSW50ZXJ2YWwiLCJnZXRPcHRpbWlzdGljUmVzdWx0IiwiY3JlYXRlUmVzdWx0Iiwic2hvdWxkQXNzaWduT2JzZXJ2ZXJDdXJyZW50UHJvcGVydGllcyIsInRyYWNrUmVzdWx0Iiwib25Qcm9wVHJhY2tlZCIsInRyYWNrZWRSZXN1bHQiLCJjb25maWd1cmFibGUiLCJ0cmFja1Byb3AiLCJnZXRDdXJyZW50UXVlcnkiLCJmZXRjaE9wdGltaXN0aWMiLCIjZXhlY3V0ZUZldGNoIiwiI3VwZGF0ZVN0YWxlVGltZW91dCIsInRpbWUiLCIjY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCIsInJlZmV0Y2hJbnRlcnZhbCIsIiN1cGRhdGVSZWZldGNoSW50ZXJ2YWwiLCJuZXh0SW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsInJlZmV0Y2hJbnRlcnZhbEluQmFja2dyb3VuZCIsIiN1cGRhdGVUaW1lcnMiLCIjY2xlYXJTdGFsZVRpbWVvdXQiLCIjY2xlYXJSZWZldGNoSW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwicHJldlJlc3VsdCIsInByZXZSZXN1bHRTdGF0ZSIsInByZXZSZXN1bHRPcHRpb25zIiwicXVlcnlDaGFuZ2UiLCJxdWVyeUluaXRpYWxTdGF0ZSIsIm5ld1N0YXRlIiwiaXNQbGFjZWhvbGRlckRhdGEiLCJfb3B0aW1pc3RpY1Jlc3VsdHMiLCJmZXRjaE9uTW91bnQiLCJmZXRjaE9wdGlvbmFsbHkiLCJzZWxlY3QiLCJzZWxlY3RFcnJvciIsInBsYWNlaG9sZGVyRGF0YSIsImlzUGVuZGluZyIsImlzRXJyb3IiLCJpc0xvYWRpbmciLCJpc1N1Y2Nlc3MiLCJpc0luaXRpYWxMb2FkaW5nIiwiaXNGZXRjaGVkIiwiaXNGZXRjaGVkQWZ0ZXJNb3VudCIsImlzUmVmZXRjaGluZyIsImlzTG9hZGluZ0Vycm9yIiwiaXNSZWZldGNoRXJyb3IiLCJuZXh0UmVzdWx0IiwiZmluYWxpemVUaGVuYWJsZUlmUG9zc2libGUiLCJyZWNyZWF0ZVRoZW5hYmxlIiwicGVuZGluZyIsInByZXZUaGVuYWJsZSIsImRlZmF1bHROb3RpZnlPcHRpb25zIiwic2hvdWxkTm90aWZ5TGlzdGVuZXJzIiwibm90aWZ5T25DaGFuZ2VQcm9wcyIsIm5vdGlmeU9uQ2hhbmdlUHJvcHNWYWx1ZSIsImluY2x1ZGVkUHJvcHMiLCJ0eXBlZEtleSIsIiN1cGRhdGVRdWVyeSIsIiNub3RpZnkiLCJzaG91bGRMb2FkT25Nb3VudCIsInJldHJ5T25Nb3VudCIsInJlZmV0Y2hPbk1vdW50IiwiZmllbGQiLCJvcHRpbWlzdGljUmVzdWx0IiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0ZSIsIiN1cGRhdGVSZXN1bHQiLCJpc0lkbGUiLCJRdWVyeUNsaWVudENvbnRleHQiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VRdWVyeUNsaWVudCIsInF1ZXJ5Q2xpZW50IiwidXNlQ29udGV4dCIsIlF1ZXJ5Q2xpZW50UHJvdmlkZXIiLCJjaGlsZHJlbiIsInVzZUVmZmVjdCIsImpzeCIsIlByb3ZpZGVyIiwiSXNSZXN0b3JpbmdDb250ZXh0IiwidXNlSXNSZXN0b3JpbmciLCJjcmVhdGVWYWx1ZSIsImlzUmVzZXQiLCJjbGVhclJlc2V0IiwiUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0IiwidXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkiLCJzaG91bGRUaHJvd0Vycm9yIiwidGhyb3dFcnJvciIsInBhcmFtcyIsImVuc3VyZVByZXZlbnRFcnJvckJvdW5kYXJ5UmV0cnkiLCJlcnJvclJlc2V0Qm91bmRhcnkiLCJ1c2VDbGVhclJlc2V0RXJyb3JCb3VuZGFyeSIsImdldEhhc0Vycm9yIiwiZW5zdXJlU3VzcGVuc2VUaW1lcnMiLCJvcmlnaW5hbFN0YWxlVGltZSIsIndpbGxGZXRjaCIsImlzUmVzdG9yaW5nIiwic2hvdWxkU3VzcGVuZCIsInVzZUJhc2VRdWVyeSIsIk9ic2VydmVyIiwiX2V4cGVyaW1lbnRhbF9iZWZvcmVRdWVyeSIsImlzTmV3Q2FjaGVFbnRyeSIsInVzZVN0YXRlIiwic2hvdWxkU3Vic2NyaWJlIiwic3Vic2NyaWJlZCIsInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwidXNlQ2FsbGJhY2siLCJvblN0b3JlQ2hhbmdlIiwidW5zdWJzY3JpYmUiLCJfZXhwZXJpbWVudGFsX2FmdGVyUXVlcnkiLCJmaW5hbGx5IiwidXNlUXVlcnkiLCJ1c2VNdXRhdGlvbiIsIm11dGF0ZU9wdGlvbnMiLCJtdXRhdGVBc3luYyIsImF4aW9zIiwiX2pzeCIsIl9qc3hzIiwiaW1nIiwiRWRpdCIsImZhY3RvcnkiLCJtb2R1bGUiLCJ0aGlzIiwiaG9va0NhbGxiYWNrIiwiaG9va3MiLCJhcHBseSIsImFyZ3VtZW50cyIsInNldEhvb2tDYWxsYmFjayIsImlzT2JqZWN0IiwiaGFzT3duUHJvcCIsImlzT2JqZWN0RW1wdHkiLCJvYmoiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiayIsImlzVW5kZWZpbmVkIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJhcnIiLCJyZXMiLCJhcnJMZW4iLCJleHRlbmQiLCJ2YWx1ZU9mIiwiY3JlYXRlVVRDIiwiZm9ybWF0IiwibG9jYWxlIiwic3RyaWN0IiwiY3JlYXRlTG9jYWxPclVUQyIsInV0YyIsImRlZmF1bHRQYXJzaW5nRmxhZ3MiLCJlbXB0eSIsInVudXNlZFRva2VucyIsInVudXNlZElucHV0Iiwib3ZlcmZsb3ciLCJjaGFyc0xlZnRPdmVyIiwibnVsbElucHV0IiwiaW52YWxpZEVyYSIsImludmFsaWRNb250aCIsImludmFsaWRGb3JtYXQiLCJ1c2VySW52YWxpZGF0ZWQiLCJpc28iLCJwYXJzZWREYXRlUGFydHMiLCJlcmEiLCJtZXJpZGllbSIsInJmYzI4MjIiLCJ3ZWVrZGF5TWlzbWF0Y2giLCJnZXRQYXJzaW5nRmxhZ3MiLCJfcGYiLCJmdW4iLCJ0IiwibGVuIiwiaXNWYWxpZCIsImZsYWdzIiwicGFyc2VkUGFydHMiLCJpc05vd1ZhbGlkIiwiX2QiLCJpc05hTiIsImludmFsaWRXZWVrZGF5IiwiX3N0cmljdCIsImJpZ0hvdXIiLCJ1bmRlZmluZWQiLCJpc0Zyb3plbiIsIl9pc1ZhbGlkIiwiY3JlYXRlSW52YWxpZCIsIk5hTiIsIm1vbWVudFByb3BlcnRpZXMiLCJ1cGRhdGVJblByb2dyZXNzIiwiY29weUNvbmZpZyIsInRvIiwicHJvcCIsIm1vbWVudFByb3BlcnRpZXNMZW4iLCJfaXNBTW9tZW50T2JqZWN0IiwiX2kiLCJfZiIsIl9sIiwiX3R6bSIsIl9pc1VUQyIsIl9vZmZzZXQiLCJfbG9jYWxlIiwiTW9tZW50IiwidXBkYXRlT2Zmc2V0IiwiaXNNb21lbnQiLCJ3YXJuIiwibXNnIiwic3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzIiwiZGVwcmVjYXRlIiwiZmlyc3RUaW1lIiwiZGVwcmVjYXRpb25IYW5kbGVyIiwiYXJnIiwiYXJnTGVuIiwiam9pbiIsInN0YWNrIiwiZGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlU2ltcGxlIiwibmFtZSIsImlzRnVuY3Rpb24iLCJGdW5jdGlvbiIsIl9jb25maWciLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQiLCJSZWdFeHAiLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsInNvdXJjZSIsIl9vcmRpbmFsUGFyc2UiLCJtZXJnZUNvbmZpZ3MiLCJwYXJlbnRDb25maWciLCJjaGlsZENvbmZpZyIsIkxvY2FsZSIsImRlZmF1bHRDYWxlbmRhciIsInNhbWVEYXkiLCJuZXh0RGF5IiwibmV4dFdlZWsiLCJsYXN0RGF5IiwibGFzdFdlZWsiLCJzYW1lRWxzZSIsImNhbGVuZGFyIiwibW9tIiwib3V0cHV0IiwiX2NhbGVuZGFyIiwiemVyb0ZpbGwiLCJudW1iZXIiLCJ0YXJnZXRMZW5ndGgiLCJmb3JjZVNpZ24iLCJhYnNOdW1iZXIiLCJhYnMiLCJ6ZXJvc1RvRmlsbCIsInNpZ24iLCJwb3ciLCJzdWJzdHIiLCJmb3JtYXR0aW5nVG9rZW5zIiwibG9jYWxGb3JtYXR0aW5nVG9rZW5zIiwiZm9ybWF0RnVuY3Rpb25zIiwiZm9ybWF0VG9rZW5GdW5jdGlvbnMiLCJhZGRGb3JtYXRUb2tlbiIsInRva2VuIiwicGFkZGVkIiwib3JkaW5hbCIsImZ1bmMiLCJsb2NhbGVEYXRhIiwicmVtb3ZlRm9ybWF0dGluZ1Rva2VucyIsIm1hdGNoIiwicmVwbGFjZSIsIm1ha2VGb3JtYXRGdW5jdGlvbiIsImZvcm1hdE1vbWVudCIsImludmFsaWREYXRlIiwiZXhwYW5kRm9ybWF0IiwicmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zIiwibG9uZ0RhdGVGb3JtYXQiLCJ0ZXN0IiwiZGVmYXVsdExvbmdEYXRlRm9ybWF0IiwiTFRTIiwiTFQiLCJMIiwiTEwiLCJMTEwiLCJMTExMIiwiX2xvbmdEYXRlRm9ybWF0IiwiZm9ybWF0VXBwZXIiLCJ0b1VwcGVyQ2FzZSIsInRvayIsImRlZmF1bHRJbnZhbGlkRGF0ZSIsIl9pbnZhbGlkRGF0ZSIsImRlZmF1bHRPcmRpbmFsIiwiZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbCIsImRlZmF1bHRSZWxhdGl2ZVRpbWUiLCJmdXR1cmUiLCJwYXN0IiwicyIsInNzIiwibW0iLCJoIiwiaGgiLCJkIiwiZGQiLCJ3Iiwid3ciLCJNIiwiTU0iLCJ5IiwieXkiLCJyZWxhdGl2ZVRpbWUiLCJ3aXRob3V0U3VmZml4Iiwic3RyaW5nIiwiaXNGdXR1cmUiLCJfcmVsYXRpdmVUaW1lIiwicGFzdEZ1dHVyZSIsImRpZmYiLCJhbGlhc2VzIiwiRCIsImRhdGVzIiwiZGF0ZSIsImRheXMiLCJkYXkiLCJlIiwid2Vla2RheXMiLCJ3ZWVrZGF5IiwiRSIsImlzb3dlZWtkYXlzIiwiaXNvd2Vla2RheSIsIkRERCIsImRheW9meWVhcnMiLCJkYXlvZnllYXIiLCJob3VycyIsImhvdXIiLCJtcyIsIm1pbGxpc2Vjb25kcyIsIm1pbGxpc2Vjb25kIiwibWludXRlcyIsIm1pbnV0ZSIsIm1vbnRocyIsIm1vbnRoIiwiUSIsInF1YXJ0ZXJzIiwicXVhcnRlciIsInNlY29uZHMiLCJzZWNvbmQiLCJnZyIsIndlZWt5ZWFycyIsIndlZWt5ZWFyIiwiR0ciLCJpc293ZWVreWVhcnMiLCJpc293ZWVreWVhciIsIndlZWtzIiwid2VlayIsIlciLCJpc293ZWVrcyIsImlzb3dlZWsiLCJ5ZWFycyIsInllYXIiLCJub3JtYWxpemVVbml0cyIsInVuaXRzIiwidG9Mb3dlckNhc2UiLCJub3JtYWxpemVPYmplY3RVbml0cyIsImlucHV0T2JqZWN0Iiwibm9ybWFsaXplZElucHV0Iiwibm9ybWFsaXplZFByb3AiLCJwcmlvcml0aWVzIiwiaXNvV2Vla2RheSIsImRheU9mWWVhciIsIndlZWtZZWFyIiwiaXNvV2Vla1llYXIiLCJpc29XZWVrIiwiZ2V0UHJpb3JpdGl6ZWRVbml0cyIsInVuaXRzT2JqIiwidSIsInVuaXQiLCJwcmlvcml0eSIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwibWF0Y2gxdG8yTm9MZWFkaW5nWmVybyIsIm1hdGNoMXRvMkhhc1plcm8iLCJyZWdleGVzIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInVuZXNjYXBlRm9ybWF0IiwicmVnZXhFc2NhcGUiLCJtYXRjaGVkIiwicDEiLCJwMiIsInAzIiwicDQiLCJhYnNGbG9vciIsImNlaWwiLCJmbG9vciIsInRvSW50IiwiYXJndW1lbnRGb3JDb2VyY2lvbiIsImNvZXJjZWROdW1iZXIiLCJpc0Zpbml0ZSIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJ0b2tlbkxlbiIsImFkZFdlZWtQYXJzZVRva2VuIiwiX3ciLCJhZGRUaW1lVG9BcnJheUZyb21Ub2tlbiIsIl9hIiwiaXNMZWFwWWVhciIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsInBhcnNlVHdvRGlnaXRZZWFyIiwicGFyc2VJbnQiLCJkYXlzSW5ZZWFyIiwiZ2V0U2V0WWVhciIsIm1ha2VHZXRTZXQiLCJnZXRJc0xlYXBZZWFyIiwia2VlcFRpbWUiLCJzZXQkMSIsImlzVVRDIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFNlY29uZHMiLCJnZXRVVENNaW51dGVzIiwiZ2V0TWludXRlcyIsImdldFVUQ0hvdXJzIiwiZ2V0SG91cnMiLCJnZXRVVENEYXRlIiwiZ2V0RGF0ZSIsImdldFVUQ0RheSIsImdldERheSIsImdldFVUQ01vbnRoIiwiZ2V0TW9udGgiLCJnZXRVVENGdWxsWWVhciIsImdldEZ1bGxZZWFyIiwic2V0VVRDTWlsbGlzZWNvbmRzIiwic2V0TWlsbGlzZWNvbmRzIiwic2V0VVRDU2Vjb25kcyIsInNldFNlY29uZHMiLCJzZXRVVENNaW51dGVzIiwic2V0TWludXRlcyIsInNldFVUQ0hvdXJzIiwic2V0SG91cnMiLCJzZXRVVENEYXRlIiwic2V0RGF0ZSIsInNldFVUQ0Z1bGxZZWFyIiwic2V0RnVsbFllYXIiLCJzdHJpbmdHZXQiLCJzdHJpbmdTZXQiLCJwcmlvcml0aXplZCIsInByaW9yaXRpemVkTGVuIiwibW9kIiwibiIsImRheXNJbk1vbnRoIiwibW9kTW9udGgiLCJtb250aHNTaG9ydCIsIm1vbnRoc1Nob3J0UmVnZXgiLCJtb250aHNSZWdleCIsIm1vbnRoc1BhcnNlIiwiZGVmYXVsdExvY2FsZU1vbnRocyIsInNwbGl0IiwiZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0IiwiTU9OVEhTX0lOX0ZPUk1BVCIsImRlZmF1bHRNb250aHNTaG9ydFJlZ2V4IiwiZGVmYXVsdE1vbnRoc1JlZ2V4IiwibG9jYWxlTW9udGhzIiwiX21vbnRocyIsImlzRm9ybWF0IiwibG9jYWxlTW9udGhzU2hvcnQiLCJfbW9udGhzU2hvcnQiLCJoYW5kbGVTdHJpY3RQYXJzZSIsIm1vbnRoTmFtZSIsImlpIiwibGxjIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJfbW9udGhzUGFyc2UiLCJfbG9uZ01vbnRoc1BhcnNlIiwiX3Nob3J0TW9udGhzUGFyc2UiLCJsb2NhbGVNb250aHNQYXJzZSIsIl9tb250aHNQYXJzZUV4YWN0Iiwic2V0TW9udGgiLCJzZXRVVENNb250aCIsImdldFNldE1vbnRoIiwiZ2V0RGF5c0luTW9udGgiLCJjb21wdXRlTW9udGhzUGFyc2UiLCJfbW9udGhzU2hvcnRTdHJpY3RSZWdleCIsIl9tb250aHNTaG9ydFJlZ2V4IiwiX21vbnRoc1N0cmljdFJlZ2V4IiwiX21vbnRoc1JlZ2V4IiwiY21wTGVuUmV2Iiwic2hvcnRQaWVjZXMiLCJsb25nUGllY2VzIiwibWl4ZWRQaWVjZXMiLCJzaG9ydFAiLCJsb25nUCIsImNyZWF0ZURhdGUiLCJjcmVhdGVVVENEYXRlIiwiVVRDIiwiZmlyc3RXZWVrT2Zmc2V0IiwiZG93IiwiZG95IiwiZndkIiwiZndkbHciLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJsb2NhbFdlZWtkYXkiLCJ3ZWVrT2Zmc2V0IiwicmVzWWVhciIsInJlc0RheU9mWWVhciIsIndlZWtPZlllYXIiLCJyZXNXZWVrIiwid2Vla3NJblllYXIiLCJ3ZWVrT2Zmc2V0TmV4dCIsImxvY2FsZVdlZWsiLCJfd2VlayIsImRlZmF1bHRMb2NhbGVXZWVrIiwibG9jYWxlRmlyc3REYXlPZldlZWsiLCJsb2NhbGVGaXJzdERheU9mWWVhciIsImdldFNldFdlZWsiLCJnZXRTZXRJU09XZWVrIiwid2Vla2RheXNNaW4iLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXNNaW5SZWdleCIsIndlZWtkYXlzU2hvcnRSZWdleCIsIndlZWtkYXlzUmVnZXgiLCJ3ZWVrZGF5c1BhcnNlIiwicGFyc2VXZWVrZGF5IiwicGFyc2VJc29XZWVrZGF5Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwiY29uY2F0IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4iLCJkZWZhdWx0V2Vla2RheXNSZWdleCIsImRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXgiLCJkZWZhdWx0V2Vla2RheXNNaW5SZWdleCIsImxvY2FsZVdlZWtkYXlzIiwiX3dlZWtkYXlzIiwibG9jYWxlV2Vla2RheXNTaG9ydCIsIl93ZWVrZGF5c1Nob3J0IiwibG9jYWxlV2Vla2RheXNNaW4iLCJfd2Vla2RheXNNaW4iLCJoYW5kbGVTdHJpY3RQYXJzZSQxIiwid2Vla2RheU5hbWUiLCJfd2Vla2RheXNQYXJzZSIsIl9zaG9ydFdlZWtkYXlzUGFyc2UiLCJfbWluV2Vla2RheXNQYXJzZSIsImxvY2FsZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNQYXJzZUV4YWN0IiwiX2Z1bGxXZWVrZGF5c1BhcnNlIiwiZ2V0U2V0RGF5T2ZXZWVrIiwiZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIiwiZ2V0U2V0SVNPRGF5T2ZXZWVrIiwiY29tcHV0ZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1JlZ2V4IiwiX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1Nob3J0UmVnZXgiLCJfd2Vla2RheXNNaW5TdHJpY3RSZWdleCIsIl93ZWVrZGF5c01pblJlZ2V4IiwibWluUGllY2VzIiwibWlucCIsInNob3J0cCIsImxvbmdwIiwiaEZvcm1hdCIsImtGb3JtYXQiLCJsb3dlcmNhc2UiLCJtYXRjaE1lcmlkaWVtIiwiX21lcmlkaWVtUGFyc2UiLCJrSW5wdXQiLCJfaXNQbSIsImlzUE0iLCJfbWVyaWRpZW0iLCJwb3MiLCJwb3MxIiwicG9zMiIsImxvY2FsZUlzUE0iLCJjaGFyQXQiLCJkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSIsImdldFNldEhvdXIiLCJsb2NhbGVNZXJpZGllbSIsImlzTG93ZXIiLCJiYXNlQ29uZmlnIiwiZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIm1lcmlkaWVtUGFyc2UiLCJsb2NhbGVzIiwibG9jYWxlRmFtaWxpZXMiLCJnbG9iYWxMb2NhbGUiLCJjb21tb25QcmVmaXgiLCJhcnIxIiwiYXJyMiIsIm1pbmwiLCJub3JtYWxpemVMb2NhbGUiLCJjaG9vc2VMb2NhbGUiLCJuYW1lcyIsImoiLCJuZXh0IiwibG9hZExvY2FsZSIsImlzTG9jYWxlTmFtZVNhbmUiLCJvbGRMb2NhbGUiLCJhbGlhc2VkUmVxdWlyZSIsImV4cG9ydHMiLCJfYWJiciIsInJlcXVpcmUiLCJnZXRTZXRHbG9iYWxMb2NhbGUiLCJnZXRMb2NhbGUiLCJkZWZpbmVMb2NhbGUiLCJhYmJyIiwicGFyZW50TG9jYWxlIiwidXBkYXRlTG9jYWxlIiwidG1wTG9jYWxlIiwibGlzdExvY2FsZXMiLCJjaGVja092ZXJmbG93IiwiX292ZXJmbG93RGF5T2ZZZWFyIiwiX292ZXJmbG93V2Vla3MiLCJfb3ZlcmZsb3dXZWVrZGF5IiwiZXh0ZW5kZWRJc29SZWdleCIsImJhc2ljSXNvUmVnZXgiLCJ0elJlZ2V4IiwiaXNvRGF0ZXMiLCJpc29UaW1lcyIsImFzcE5ldEpzb25SZWdleCIsIm9ic09mZnNldHMiLCJVVCIsIkdNVCIsIkVEVCIsIkVTVCIsIkNEVCIsIkNTVCIsIk1EVCIsIk1TVCIsIlBEVCIsIlBTVCIsImNvbmZpZ0Zyb21JU08iLCJsIiwiZXhlYyIsImFsbG93VGltZSIsImRhdGVGb3JtYXQiLCJ0aW1lRm9ybWF0IiwidHpGb3JtYXQiLCJpc29EYXRlc0xlbiIsImlzb1RpbWVzTGVuIiwiY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCIsImV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MiLCJ5ZWFyU3RyIiwibW9udGhTdHIiLCJkYXlTdHIiLCJob3VyU3RyIiwibWludXRlU3RyIiwic2Vjb25kU3RyIiwidW50cnVuY2F0ZVllYXIiLCJwcmVwcm9jZXNzUkZDMjgyMiIsImNoZWNrV2Vla2RheSIsIndlZWtkYXlTdHIiLCJwYXJzZWRJbnB1dCIsIndlZWtkYXlQcm92aWRlZCIsIndlZWtkYXlBY3R1YWwiLCJjYWxjdWxhdGVPZmZzZXQiLCJvYnNPZmZzZXQiLCJtaWxpdGFyeU9mZnNldCIsIm51bU9mZnNldCIsImhtIiwiY29uZmlnRnJvbVJGQzI4MjIiLCJwYXJzZWRBcnJheSIsImNvbmZpZ0Zyb21TdHJpbmciLCJjcmVhdGVGcm9tSW5wdXRGYWxsYmFjayIsIl91c2VVVEMiLCJjIiwiY3VycmVudERhdGVBcnJheSIsIm5vd1ZhbHVlIiwiY29uZmlnRnJvbUFycmF5IiwiY3VycmVudERhdGUiLCJleHBlY3RlZFdlZWtkYXkiLCJ5ZWFyVG9Vc2UiLCJkYXlPZlllYXJGcm9tV2Vla0luZm8iLCJfZGF5T2ZZZWFyIiwiX25leHREYXkiLCJ0ZW1wIiwid2Vla2RheU92ZXJmbG93IiwiY3VyV2VlayIsImNyZWF0ZUxvY2FsIiwiSVNPXzg2MDEiLCJSRkNfMjgyMiIsInNraXBwZWQiLCJzdHJpbmdMZW5ndGgiLCJ0b3RhbFBhcnNlZElucHV0TGVuZ3RoIiwibWVyaWRpZW1GaXhXcmFwIiwiZXJhc0NvbnZlcnRZZWFyIiwiaXNQbSIsIm1lcmlkaWVtSG91ciIsImNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheSIsInRlbXBDb25maWciLCJiZXN0TW9tZW50Iiwic2NvcmVUb0JlYXQiLCJjdXJyZW50U2NvcmUiLCJ2YWxpZEZvcm1hdEZvdW5kIiwiYmVzdEZvcm1hdElzVmFsaWQiLCJjb25maWdmTGVuIiwic2NvcmUiLCJjb25maWdGcm9tT2JqZWN0IiwiZGF5T3JEYXRlIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsImNvbmZpZ0Zyb21JbnB1dCIsInByb3RvdHlwZU1pbiIsIm90aGVyIiwicHJvdG90eXBlTWF4IiwicGlja0J5IiwibW9tZW50cyIsIm9yZGVyaW5nIiwiaXNEdXJhdGlvblZhbGlkIiwidW5pdEhhc0RlY2ltYWwiLCJvcmRlckxlbiIsInBhcnNlRmxvYXQiLCJpc1ZhbGlkJDEiLCJjcmVhdGVJbnZhbGlkJDEiLCJjcmVhdGVEdXJhdGlvbiIsIkR1cmF0aW9uIiwiZHVyYXRpb24iLCJfbWlsbGlzZWNvbmRzIiwiX2RheXMiLCJfZGF0YSIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJyb3VuZCIsImNvbXBhcmVBcnJheXMiLCJhcnJheTEiLCJhcnJheTIiLCJkb250Q29udmVydCIsImxlbmd0aERpZmYiLCJkaWZmcyIsIm9mZnNldCIsInNlcGFyYXRvciIsInV0Y09mZnNldCIsIm9mZnNldEZyb21TdHJpbmciLCJjaHVua09mZnNldCIsIm1hdGNoZXIiLCJtYXRjaGVzIiwiY2h1bmsiLCJwYXJ0cyIsImNsb25lV2l0aE9mZnNldCIsIm1vZGVsIiwiY2xvbmUiLCJzZXRUaW1lIiwibG9jYWwiLCJnZXREYXRlT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRTZXRPZmZzZXQiLCJrZWVwTG9jYWxUaW1lIiwia2VlcE1pbnV0ZXMiLCJsb2NhbEFkanVzdCIsIl9jaGFuZ2VJblByb2dyZXNzIiwiYWRkU3VidHJhY3QiLCJnZXRTZXRab25lIiwic2V0T2Zmc2V0VG9VVEMiLCJzZXRPZmZzZXRUb0xvY2FsIiwic3VidHJhY3QiLCJzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCIsInRab25lIiwiaGFzQWxpZ25lZEhvdXJPZmZzZXQiLCJpc0RheWxpZ2h0U2F2aW5nVGltZSIsImlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCIsIl9pc0RTVFNoaWZ0ZWQiLCJ0b0FycmF5IiwiaXNMb2NhbCIsImlzVXRjT2Zmc2V0IiwiaXNVdGMiLCJhc3BOZXRSZWdleCIsImlzb1JlZ2V4IiwicmV0IiwiZGlmZlJlcyIsInBhcnNlSXNvIiwibW9tZW50c0RpZmZlcmVuY2UiLCJpbnZhbGlkIiwiaW5wIiwicG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZSIsImJhc2UiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCJjcmVhdGVBZGRlciIsInBlcmlvZCIsImR1ciIsInRtcCIsImlzQWRkaW5nIiwiaXNTdHJpbmciLCJTdHJpbmciLCJpc01vbWVudElucHV0IiwiaXNOdW1iZXJPclN0cmluZ0FycmF5IiwiaXNNb21lbnRJbnB1dE9iamVjdCIsIm9iamVjdFRlc3QiLCJwcm9wZXJ0eVRlc3QiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm9wZXJ0eUxlbiIsImFycmF5VGVzdCIsImRhdGFUeXBlVGVzdCIsImlzQ2FsZW5kYXJTcGVjIiwiZ2V0Q2FsZW5kYXJGb3JtYXQiLCJteU1vbWVudCIsImNhbGVuZGFyJDEiLCJmb3JtYXRzIiwic29kIiwic3RhcnRPZiIsImNhbGVuZGFyRm9ybWF0IiwibG9jYWxJbnB1dCIsImVuZE9mIiwiaXNCZXR3ZWVuIiwiaW5jbHVzaXZpdHkiLCJsb2NhbEZyb20iLCJsb2NhbFRvIiwiaXNTYW1lIiwiaW5wdXRNcyIsImlzU2FtZU9yQWZ0ZXIiLCJpc1NhbWVPckJlZm9yZSIsImFzRmxvYXQiLCJ0aGF0Iiwiem9uZURlbHRhIiwibW9udGhEaWZmIiwid2hvbGVNb250aERpZmYiLCJhbmNob3IiLCJhbmNob3IyIiwiYWRqdXN0IiwiZGVmYXVsdEZvcm1hdCIsImRlZmF1bHRGb3JtYXRVdGMiLCJ0b0lTT1N0cmluZyIsImtlZXBPZmZzZXQiLCJ0b0RhdGUiLCJpbnNwZWN0Iiwiem9uZSIsInByZWZpeCIsImRhdGV0aW1lIiwic3VmZml4IiwiaW5wdXRTdHJpbmciLCJwb3N0Zm9ybWF0IiwiaHVtYW5pemUiLCJmcm9tTm93IiwidG9Ob3ciLCJuZXdMb2NhbGVEYXRhIiwibGFuZyIsIk1TX1BFUl9TRUNPTkQiLCJNU19QRVJfTUlOVVRFIiwiTVNfUEVSX0hPVVIiLCJNU19QRVJfNDAwX1lFQVJTIiwibW9kJDEiLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJsb2NhbFN0YXJ0T2ZEYXRlIiwidXRjU3RhcnRPZkRhdGUiLCJzdGFydE9mRGF0ZSIsInVuaXgiLCJ0b09iamVjdCIsInRvSlNPTiIsImlzVmFsaWQkMiIsInBhcnNpbmdGbGFncyIsImludmFsaWRBdCIsImNyZWF0aW9uRGF0YSIsIm1hdGNoRXJhQWJiciIsIm1hdGNoRXJhTmFtZSIsIm1hdGNoRXJhTmFycm93IiwiZXJhc1BhcnNlIiwibWF0Y2hFcmFZZWFyT3JkaW5hbCIsIl9lcmFZZWFyT3JkaW5hbFJlZ2V4IiwiZXJhWWVhck9yZGluYWxQYXJzZSIsImxvY2FsZUVyYXMiLCJlcmFzIiwiX2VyYXMiLCJzaW5jZSIsInVudGlsIiwibG9jYWxlRXJhc1BhcnNlIiwiZXJhTmFtZSIsIm5hcnJvdyIsImxvY2FsZUVyYXNDb252ZXJ0WWVhciIsImRpciIsImdldEVyYU5hbWUiLCJnZXRFcmFOYXJyb3ciLCJnZXRFcmFBYmJyIiwiZ2V0RXJhWWVhciIsImVyYXNOYW1lUmVnZXgiLCJjb21wdXRlRXJhc1BhcnNlIiwiX2VyYXNOYW1lUmVnZXgiLCJfZXJhc1JlZ2V4IiwiZXJhc0FiYnJSZWdleCIsIl9lcmFzQWJiclJlZ2V4IiwiZXJhc05hcnJvd1JlZ2V4IiwiX2VyYXNOYXJyb3dSZWdleCIsImFiYnJQaWVjZXMiLCJuYW1lUGllY2VzIiwibmFycm93UGllY2VzIiwiZXJhc05hbWUiLCJlcmFzQWJiciIsImVyYXNOYXJyb3ciLCJhZGRXZWVrWWVhckZvcm1hdFRva2VuIiwiZ2V0dGVyIiwiZ2V0U2V0V2Vla1llYXIiLCJnZXRTZXRXZWVrWWVhckhlbHBlciIsImdldFNldElTT1dlZWtZZWFyIiwiZ2V0SVNPV2Vla3NJblllYXIiLCJnZXRJU09XZWVrc0luSVNPV2Vla1llYXIiLCJnZXRXZWVrc0luWWVhciIsIndlZWtJbmZvIiwiZ2V0V2Vla3NJbldlZWtZZWFyIiwid2Vla3NUYXJnZXQiLCJzZXRXZWVrQWxsIiwiZGF5T2ZZZWFyRGF0YSIsImdldFNldFF1YXJ0ZXIiLCJnZXRTZXREYXlPZk1vbnRoIiwiZ2V0U2V0RGF5T2ZZZWFyIiwiZ2V0U2V0TWludXRlIiwiZ2V0U2V0U2Vjb25kIiwiZ2V0U2V0TWlsbGlzZWNvbmQiLCJwYXJzZU1zIiwiZ2V0Wm9uZUFiYnIiLCJnZXRab25lTmFtZSIsInByb3RvIiwiZm9yIiwiZXJhTmFycm93IiwiZXJhQWJiciIsImVyYVllYXIiLCJpc29XZWVrcyIsIndlZWtzSW5XZWVrWWVhciIsImlzb1dlZWtzSW5ZZWFyIiwiaXNvV2Vla3NJbklTT1dlZWtZZWFyIiwicGFyc2Vab25lIiwiaXNEU1QiLCJ6b25lQWJiciIsInpvbmVOYW1lIiwiaXNEU1RTaGlmdGVkIiwiY3JlYXRlVW5peCIsImNyZWF0ZUluWm9uZSIsInByZVBhcnNlUG9zdEZvcm1hdCIsInByb3RvJDEiLCJmaXJzdERheU9mWWVhciIsImZpcnN0RGF5T2ZXZWVrIiwiZ2V0JDEiLCJzZXR0ZXIiLCJsaXN0TW9udGhzSW1wbCIsIm91dCIsImxpc3RXZWVrZGF5c0ltcGwiLCJsb2NhbGVTb3J0ZWQiLCJzaGlmdCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImxhbmdEYXRhIiwibWF0aEFicyIsImFkZFN1YnRyYWN0JDEiLCJhZGQkMSIsInN1YnRyYWN0JDEiLCJhYnNDZWlsIiwiYnViYmxlIiwibW9udGhzRnJvbURheXMiLCJtb250aHNUb0RheXMiLCJkYXlzVG9Nb250aHMiLCJhcyIsIm1ha2VBcyIsImFsaWFzIiwiYXNNaWxsaXNlY29uZHMiLCJhc1NlY29uZHMiLCJhc01pbnV0ZXMiLCJhc0hvdXJzIiwiYXNEYXlzIiwiYXNXZWVrcyIsImFzTW9udGhzIiwiYXNRdWFydGVycyIsImFzWWVhcnMiLCJ2YWx1ZU9mJDEiLCJjbG9uZSQxIiwiZ2V0JDIiLCJtYWtlR2V0dGVyIiwidGhyZXNob2xkcyIsInN1YnN0aXR1dGVUaW1lQWdvIiwicmVsYXRpdmVUaW1lJDEiLCJwb3NOZWdEdXJhdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCIsInRocmVzaG9sZCIsImxpbWl0IiwiYXJnV2l0aFN1ZmZpeCIsImFyZ1RocmVzaG9sZHMiLCJ3aXRoU3VmZml4IiwidGgiLCJhYnMkMSIsInRvSVNPU3RyaW5nJDEiLCJ0b3RhbCIsInRvdGFsU2lnbiIsInltU2lnbiIsImRheXNTaWduIiwiaG1zU2lnbiIsInRvRml4ZWQiLCJwcm90byQyIiwidG9Jc29TdHJpbmciLCJ2ZXJzaW9uIiwicmVsYXRpdmVUaW1lUm91bmRpbmciLCJyZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwiQ2xvc2UiLCJ1c2VSZWYiLCJEb3RzSG9yaXpvbnRhbCIsImZvcndhcmRSZWYiLCJjcmVhdGVQb3J0YWwiLCJDaGV2cm9uTGVmdCIsIkNoZXZyb25SaWdodCIsIkxvZ291dEljb24iLCJTZWFyY2giLCJMb2dvRmVlZGJhY2tEYXJrIiwiX0ZyYWdtZW50IiwiTG9nb0ZlZWRiYWNrTGlnaHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLElBQU1BLFlBQUEsR0FBTixNQUErQztBQUdwREMsRUFBQUEsV0FBQUEsR0FBYztBQUZkLElBQUEsSUFBQSxDQUFVQyxTQUFBLGtCQUFnQkMsSUFBQUEsR0FB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LENBQUEsRUFDTCxXQUFXLEdBQUdBLGNBQUEsQ0FBQyxjQUFjLEVBQUcsRUFBQSxDQUFBLEdBQUdBLGNBQUEsQ0FBQyxlQUFlLEVBQUEsRUFBQSxDQUFHLEVBQ3ZEQSxjQUFDLENBQUEsY0FBYyxJQUNiLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLGNBQWMsRUFBRSxjQUFjLEVBQUEsQ0FDOUIsSUFDRSxFQUNGLENBQUEsRUFDTixRQUFRLENBQUMsSUFBSSxDQUNkO0FBQ0gsQ0FBQzs7QUNoQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUU7QUFFckMsU0FBUyxZQUFZLENBQUMsS0FBd0IsRUFBQTtBQUM1QyxJQUFBLFFBQ0VBLGNBQUEsQ0FBQWc1QixtQkFBQSxFQUFBLEVBQUEsUUFBQSxFQUNFaDVCLGNBQUMsQ0FBQSxtQkFBbUIsSUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFBLFFBQUEsRUFDdENDLGVBQUMsQ0FBQSxnQkFBZ0IsRUFBSyxNQUFBLENBQUEsTUFBQSxDQUFBLEVBQUEsRUFBQSxLQUFLLGVBQ3pCRCxjQUFDLENBQUEsYUFBYSxFQUFHLEVBQUEsQ0FBQSxFQUNqQkEsY0FBQyxDQUFBLE9BQU8sRUFBRyxFQUFBLENBQUEsRUFDWEEsZUFBQyxrQkFBa0IsRUFBQSxFQUFBLENBQUcsRUFDdEJBLGNBQUEsQ0FBQyxZQUFZLEVBQUcsRUFBQSxDQUFBLENBQUEsRUFBQSxDQUFBLENBQ0MsRUFDQyxDQUFBLEVBQUEsQ0FDckI7QUFFUDs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwzOV19
|