-
Notifications
You must be signed in to change notification settings - Fork 0
/
Graphs interactifs.html
21 lines (20 loc) · 470 KB
/
Graphs interactifs.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<style>body{background-color:white;}</style>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbCgiKCIgKyBjb2RlICsgIikiKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCFlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICByZXN1bHQgPSBldmFsKGNvZGUpOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBpbml0U2l6aW5nKGVsKSB7CiAgICB2YXIgc2l6aW5nID0gc2l6aW5nUG9saWN5KGVsKTsKICAgIGlmICghc2l6aW5nKQogICAgICByZXR1cm47CgogICAgdmFyIGNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodG1sd2lkZ2V0X2NvbnRhaW5lciIpOwogICAgaWYgKCFjZWwpCiAgICAgIHJldHVybjsKCiAgICBpZiAodHlwZW9mKHNpemluZy5wYWRkaW5nKSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAiMCI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZyA9IHBhZGRpbmdUb0Nzcyh1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKSk7CiAgICB9CgogICAgaWYgKHNpemluZy5maWxsKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgaWYgKGNlbCkgewogICAgICAgIGNlbC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICAgdmFyIHBhZCA9IHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpOwogICAgICAgIGNlbC5zdHlsZS50b3AgPSBwYWQudG9wICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUucmlnaHQgPSBwYWQucmlnaHQgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5ib3R0b20gPSBwYWQuYm90dG9tICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUubGVmdCA9IHBhZC5sZWZ0ICsgInB4IjsKICAgICAgICBlbC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CgogICAgfSBlbHNlIHsKICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOwogICAgICBlbC5zdHlsZS5oZWlnaHQgPSBweChzaXppbmcuaGVpZ2h0KTsKCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwogICAgfQogIH0KCiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIG1ldGhvZHMKICB2YXIgZGVmYXVsdHMgPSB7CiAgICBmaW5kOiBmdW5jdGlvbihzY29wZSkgewogICAgICByZXR1cm4gcXVlcnlTZWxlY3RvckFsbChzY29wZSwgIi4iICsgdGhpcy5uYW1lKTsKICAgIH0sCiAgICByZW5kZXJFcnJvcjogZnVuY3Rpb24oZWwsIGVycikgewogICAgICB2YXIgJGVsID0gJChlbCk7CgogICAgICB0aGlzLmNsZWFyRXJyb3IoZWwpOwoKICAgICAgLy8gQWRkIGFsbCB0aGVzZSBlcnJvciBjbGFzc2VzLCBhcyBTaGlueSBkb2VzCiAgICAgIHZhciBlcnJDbGFzcyA9ICJzaGlueS1vdXRwdXQtZXJyb3IiOwogICAgICBpZiAoZXJyLnR5cGUgIT09IG51bGwpIHsKICAgICAgICAvLyB1c2UgdGhlIGNsYXNzZXMgb2YgdGhlIGVycm9yIGNvbmRpdGlvbiBhcyBDU1MgY2xhc3MgbmFtZXMKICAgICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiAiICsgJC5tYXAoYXNBcnJheShlcnIudHlwZSksIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgIHJldHVybiBlcnJDbGFzcyArICItIiArIHR5cGU7CiAgICAgICAgfSkuam9pbigiICIpOwogICAgICB9CiAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiIGh0bWx3aWRnZXRzLWVycm9yIjsKCiAgICAgIC8vIElzIGVsIGlubGluZSBvciBibG9jaz8gSWYgaW5saW5lIG9yIGlubGluZS1ibG9jaywganVzdCBkaXNwbGF5Om5vbmUgaXQKICAgICAgLy8gYW5kIGFkZCBhbiBpbmxpbmUgZXJyb3IuCiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmNzcygiZGlzcGxheSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBkaXNwbGF5KTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgICRlbC5oaWRlKCk7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yU3BhbiA9ICQoIjxzcGFuPiIpLmFkZENsYXNzKGVyckNsYXNzKTsKICAgICAgICAgIGVycm9yU3Bhbi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvclNwYW4pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKSB7CiAgICAgICAgLy8gSWYgYmxvY2ssIGFkZCBhbiBlcnJvciBqdXN0IGFmdGVyIHRoZSBlbCwgc2V0IHZpc2liaWxpdHk6bm9uZSBvbiB0aGUKICAgICAgICAvLyBlbCwgYW5kIHBvc2l0aW9uIHRoZSBlcnJvciB0byBiZSBvbiB0b3Agb2YgdGhlIGVsLgogICAgICAgIC8vIE1hcmsgaXQgd2l0aCBhIHVuaXF1ZSBJRCBhbmQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgbGF0ZXIuCiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JEaXYgPSAkKCI8ZGl2PiIpLmFkZENsYXNzKGVyckNsYXNzKS5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIikKICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgLy8gc2V0dGluZyB3aWR0aCBjYW4gcHVzaCBvdXQgdGhlIHBhZ2Ugc2l6ZSwgZm9yY2luZyBvdGhlcndpc2UKICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgc2Nyb2xsYmFycyB0byBhcHBlYXIgYW5kIG1ha2luZyBpdCBpbXBvc3NpYmxlIGZvcgogICAgICAgICAgICAvLyB0aGUgZWxlbWVudCB0byBzaHJpbms7IHNvIHVzZSBtYXgtd2lkdGggaW5zdGVhZAogICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgZXJyb3JEaXYudGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JEaXYpOwoKICAgICAgICAgIC8vIFJlYWxseSBkdW1iIHdheSB0byBrZWVwIHRoZSBzaXplL3Bvc2l0aW9uIG9mIHRoZSBlcnJvciBpbiBzeW5jIHdpdGgKICAgICAgICAgIC8vIHRoZSBwYXJlbnQgZWxlbWVudCBhcyB0aGUgd2luZG93IGlzIHJlc2l6ZWQgb3Igd2hhdGV2ZXIuCiAgICAgICAgICB2YXIgaW50SWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFlcnJvckRpdlswXS5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRJZCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yRGl2CiAgICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZWwpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwogICAgICB2YXIgZGlzcGxheSA9ICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBudWxsKTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgIGlmIChkaXNwbGF5KQogICAgICAgICAgJGVsLmNzcygiZGlzcGxheSIsIGRpc3BsYXkpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIil7CiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJpbmhlcml0Iik7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfQogICAgfSwKICAgIHNpemluZzoge30KICB9OwoKICAvLyBDYWxsZWQgYnkgd2lkZ2V0IGJpbmRpbmdzIHRvIHJlZ2lzdGVyIGEgbmV3IHR5cGUgb2Ygd2lkZ2V0LiBUaGUgZGVmaW5pdGlvbgogIC8vIG9iamVjdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAgLy8gLSBuYW1lIChyZXF1aXJlZCkgLSBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBiaW5kaW5nIG5hbWUsIHdoaWNoIHdpbGwgYmUKICAvLyAgIHVzZWQgYnkgZGVmYXVsdCBhcyB0aGUgQ1NTIGNsYXNzbmFtZSB0byBsb29rIGZvci4KICAvLyAtIGluaXRpYWxpemUgKG9wdGlvbmFsKSAtIEEgZnVuY3Rpb24oZWwpIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIHdpZGdldCBlbGVtZW50OyBpZiBhIHZhbHVlIGlzIHJldHVybmVkLCBpdCB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgdGhpcmQKICAvLyAgIHZhbHVlIHRvIHJlbmRlclZhbHVlLgogIC8vIC0gcmVuZGVyVmFsdWUgKHJlcXVpcmVkKSAtIEEgZnVuY3Rpb24oZWwsIGRhdGEsIGluaXRWYWx1ZSkgdGhhdCB3aWxsIGJlCiAgLy8gICBjYWxsZWQgd2l0aCBkYXRhLiBTdGF0aWMgY29udGV4dHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgZWxlbWVudDsgU2hpbnkgYXBwcyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlcgogIC8vICAgZWxlbWVudCwgYXMgdGhlIGRhdGEgY2hhbmdlcy4KICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0ID0gZnVuY3Rpb24oZGVmaW5pdGlvbikgewogICAgaWYgKCFkZWZpbml0aW9uLm5hbWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgfQogICAgaWYgKCFkZWZpbml0aW9uLnR5cGUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgdHlwZSIpOwogICAgfQogICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBvdXRwdXQgd2lkZ2V0cwogICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gIm91dHB1dCIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgd2lkZ2V0IHR5cGUgJyIgKyBkZWZpbml0aW9uLnR5cGUgKyAiJyIpOwogICAgfQogICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgLm5hbWUgaXMgYSB2YWxpZCBDU1MgY2xhc3NuYW1lCgogICAgLy8gU3VwcG9ydCBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMuIE9sZC1zdHlsZSBjbGFzcy1ib3VuZAogICAgLy8gZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0ICJvYmplY3QiIHBlciB3aWRnZXQgcGVyIHR5cGUvY2xhc3Mgb2YKICAgIC8vIHdpZGdldDsgdGhlIHJlbmRlclZhbHVlIGFuZCByZXNpemUgbWV0aG9kcyBvbiBzdWNoIHdpZGdldCBvYmplY3RzCiAgICAvLyB0YWtlIGVsIGFuZCBpbnN0YW5jZSBhcmd1bWVudHMsIGJlY2F1c2UgdGhlIHdpZGdldCBvYmplY3QgY2FuJ3QKICAgIC8vIHN0b3JlIHRoZW0uIE5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQKICAgIC8vIG9iamVjdCBwZXIgd2lkZ2V0IGluc3RhbmNlOyB0aGUgZGVmaW5pdGlvbiB0aGF0J3MgcGFzc2VkIGluIGRvZXNuJ3QKICAgIC8vIHByb3ZpZGUgcmVuZGVyVmFsdWUgb3IgcmVzaXplIG1ldGhvZHMgYXQgYWxsLCBqdXN0IHRoZSBzaW5nbGUgbWV0aG9kCiAgICAvLyAgIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpCiAgICAvLyB3aGljaCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGhhcyByZW5kZXJWYWx1ZSh4KSBhbmQgcmVzaXplKHcsIGgpLgogICAgLy8gVGhpcyBlbmFibGVzIGEgZmFyIG1vcmUgbmF0dXJhbCBwcm9ncmFtbWluZyBzdHlsZSBmb3IgdGhlIHdpZGdldAogICAgLy8gYXV0aG9yLCB3aG8gY2FuIHN0b3JlIHBlci1pbnN0YW5jZSBzdGF0ZSB1c2luZyBlaXRoZXIgT08tc3R5bGUKICAgIC8vIGluc3RhbmNlIGZpZWxkcyBvciBmdW5jdGlvbmFsLXN0eWxlIGNsb3N1cmUgdmFyaWFibGVzIChJIGd1ZXNzIHRoaXMKICAgIC8vIGlzIGluIGNvbnRyYXN0IHRvIHdoYXQgY2FuIG9ubHkgYmUgY2FsbGVkIEMtc3R5bGUgcHNldWRvLU9PIHdoaWNoIGlzCiAgICAvLyB3aGF0IHdlIHJlcXVpcmVkIGJlZm9yZSkuCiAgICBpZiAoZGVmaW5pdGlvbi5mYWN0b3J5KSB7CiAgICAgIGRlZmluaXRpb24gPSBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZpbml0aW9uKTsKICAgIH0KCiAgICBpZiAoIWRlZmluaXRpb24ucmVuZGVyVmFsdWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgcmVuZGVyVmFsdWUgZnVuY3Rpb24iKTsKICAgIH0KCiAgICAvLyBGb3Igc3RhdGljIHJlbmRlcmluZyAobm9uLVNoaW55KSwgdXNlIGEgc2ltcGxlIHdpZGdldCByZWdpc3RyYXRpb24KICAgIC8vIHNjaGVtZS4gV2UgYWxzbyB1c2UgdGhpcyBzY2hlbWUgZm9yIFNoaW55IGFwcHMvZG9jdW1lbnRzIHRoYXQgYWxzbwogICAgLy8gY29udGFpbiBzdGF0aWMgd2lkZ2V0cy4KICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICAvLyBNZXJnZSBkZWZhdWx0cyBpbnRvIHRoZSBkZWZpbml0aW9uOyBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24uCiAgICB2YXIgc3RhdGljQmluZGluZyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwogICAgb3ZlcnJpZGVNZXRob2Qoc3RhdGljQmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBzdXBlcmZ1bmMoc2NvcGUpOwogICAgICAgIC8vIEZpbHRlciBvdXQgU2hpbnkgb3V0cHV0cywgd2Ugb25seSB3YW50IHRoZSBzdGF0aWMga2luZAogICAgICAgIHJldHVybiBmaWx0ZXJCeUNsYXNzKHJlc3VsdHMsICJodG1sLXdpZGdldC1vdXRwdXQiLCBmYWxzZSk7CiAgICAgIH07CiAgICB9KTsKICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzLnB1c2goc3RhdGljQmluZGluZyk7CgogICAgaWYgKHNoaW55TW9kZSkgewogICAgICAvLyBTaGlueSBpcyBydW5uaW5nLiBSZWdpc3RlciB0aGUgZGVmaW5pdGlvbiB3aXRoIGFuIG91dHB1dCBiaW5kaW5nLgogICAgICAvLyBUaGUgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBub3QgYmUgdGhlIG91dHB1dCBiaW5kaW5nLCBpbnN0ZWFkCiAgICAgIC8vIHdlIHdpbGwgbWFrZSBhbiBvdXRwdXQgYmluZGluZyBvYmplY3QgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlCiAgICAgIC8vIGRlZmluaXRpb24uIFRoaXMgaXMgYmVjYXVzZSB3ZSBmb29saXNobHkgdXNlZCB0aGUgc2FtZSBtZXRob2QKICAgICAgLy8gbmFtZSAocmVuZGVyVmFsdWUpIGZvciBodG1sd2lkZ2V0cyBkZWZpbml0aW9uIGFuZCBTaGlueSBiaW5kaW5ncwogICAgICAvLyBidXQgdGhleSBhY3R1YWxseSBoYXZlIHF1aXRlIGRpZmZlcmVudCBzZW1hbnRpY3MgKHRoZSBTaGlueQogICAgICAvLyBiaW5kaW5ncyByZWNlaXZlIGRhdGEgdGhhdCBpbmNsdWRlcyBsb3RzIG9mIG1ldGFkYXRhIHRoYXQgaXQKICAgICAgLy8gc3RyaXBzIG9mZiBiZWZvcmUgY2FsbGluZyBodG1sd2lkZ2V0cyByZW5kZXJWYWx1ZSkuIFdlIGNhbid0CiAgICAgIC8vIGp1c3QgaWdub3JlIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gc29tZSB3aWRnZXRzIGl0J3MgaGVscGZ1bAogICAgICAvLyB0byBjYWxsIHRoaXMucmVuZGVyVmFsdWUoKSBmcm9tIGluc2lkZSBvZiByZXNpemUoKSwgYW5kIGlmCiAgICAgIC8vIHdlJ3JlIG5vdCBkZWxlZ2F0aW5nLCB0aGVuIHRoYXQgY2FsbCB3aWxsIGdvIHRvIHRoZSBTaGlueQogICAgICAvLyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIGh0bWx3aWRnZXRzIHZlcnNpb24uCgogICAgICAvLyBNZXJnZSBkZWZhdWx0cyB3aXRoIGRlZmluaXRpb24sIHdpdGhvdXQgbXV0YXRpbmcgZWl0aGVyLgogICAgICB2YXIgYmluZGluZ0RlZiA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwoKICAgICAgLy8gVGhpcyBvYmplY3Qgd2lsbCBiZSBvdXIgYWN0dWFsIFNoaW55IGJpbmRpbmcuCiAgICAgIHZhciBzaGlueUJpbmRpbmcgPSBuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpOwoKICAgICAgLy8gV2l0aCBhIGZldyBleGNlcHRpb25zLCB3ZSdsbCB3YW50IHRvIHNpbXBseSB1c2UgdGhlIGJpbmRpbmdEZWYncwogICAgICAvLyB2ZXJzaW9uIG9mIG1ldGhvZHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCiAgICAgIC8vIFNoaW55J3MgZGVmYXVsdHMuIE5PVEU6IElmIFNoaW55J3Mgb3V0cHV0IGJpbmRpbmdzIGdhaW4gYWRkaXRpb25hbAogICAgICAvLyBtZXRob2RzIGluIHRoZSBmdXR1cmUsIGFuZCB3ZSB3YW50IHRoZW0gdG8gYmUgb3ZlcnJpZGVhYmxlIGJ5CiAgICAgIC8vIEhUTUxXaWRnZXQgYmluZGluZyBkZWZpbml0aW9ucywgdGhlbiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoaXMKICAgICAgLy8gbGlzdC4KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiZ2V0SWQiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUNoYW5nZSIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAicmVuZGVyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiY2xlYXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJzaG93UHJvZ3Jlc3MiKTsKCiAgICAgIC8vIFRoZSBmaW5kLCByZW5kZXJWYWx1ZSwgYW5kIHJlc2l6ZSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB3ZQogICAgICAvLyB3YW50IHRvIGFjdHVhbGx5IGRlY29yYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgYmluZGluZ0RlZiBtZXRob2RzLgoKICAgICAgc2hpbnlCaW5kaW5nLmZpbmQgPSBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gYmluZGluZ0RlZi5maW5kKHNjb3BlKTsKCiAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzCiAgICAgICAgdmFyIGR5bmFtaWNSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoIi5odG1sLXdpZGdldC1vdXRwdXQiKTsKCiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdoYXRldmVyIGNhdXNlZCBTaGlueSB0byB0aGluayB0aGVyZSBtaWdodCBiZQogICAgICAgIC8vIG5ldyBkeW5hbWljIG91dHB1dHMsIGFsc28gY2F1c2VkIHRoZXJlIHRvIGJlIG5ldyBzdGF0aWMgb3V0cHV0cy4KICAgICAgICAvLyBTaW5jZSB0aGVyZSBtaWdodCBiZSBsb3RzIG9mIGRpZmZlcmVudCBodG1sd2lkZ2V0cyBiaW5kaW5ncywgd2UKICAgICAgICAvLyBzY2hlZHVsZSBleGVjdXRpb24gZm9yIGxhdGVyLS1ubyBuZWVkIHRvIHN0YXRpY1JlbmRlciBtdWx0aXBsZQogICAgICAgIC8vIHRpbWVzLgogICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gZHluYW1pY1Jlc3VsdHMubGVuZ3RoKQogICAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXIoKTsKCiAgICAgICAgcmV0dXJuIGR5bmFtaWNSZXN1bHRzOwogICAgICB9OwoKICAgICAgLy8gV3JhcCByZW5kZXJWYWx1ZSB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIHVuZm9ydHVuYXRlbHkgaXNuJ3QKICAgICAgLy8gc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFNoaW55IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4KCiAgICAgIHNoaW55QmluZGluZy5yZW5kZXJWYWx1ZSA9IGZ1bmN0aW9uKGVsLCBkYXRhKSB7CiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7CiAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmV2YWxzICYmIGkgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2ldKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFiaW5kaW5nRGVmLnJlbmRlck9uTnVsbFZhbHVlKSB7CiAgICAgICAgICBpZiAoZGF0YS54ID09PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJpbmhlcml0IjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgIGluaXRTaXppbmcoZWwpOwoKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiLCB0cnVlKTsKICAgICAgICAgIGlmIChiaW5kaW5nRGVmLmluaXRpYWxpemUpIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJpbmRpbmdEZWYuaW5pdGlhbGl6ZShlbCwgZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSwgW2VsLCBkYXRhLnhdKTsKICAgICAgfTsKCiAgICAgIC8vIE9ubHkgb3ZlcnJpZGUgcmVzaXplIGlmIGJpbmRpbmdEZWYgaW1wbGVtZW50cyBpdAogICAgICBpZiAoYmluZGluZ0RlZi5yZXNpemUpIHsKICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICAgIC8vIFNoaW55IGNhbiBjYWxsIHJlc2l6ZSBiZWZvcmUgaW5pdGlhbGl6ZS9yZW5kZXJWYWx1ZSBoYXZlIGJlZW4KICAgICAgICAgIC8vIGNhbGxlZCwgd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlIGZvciB3aWRnZXRzLgogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgICBiaW5kaW5nRGVmLnJlc2l6ZShlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CgogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7CiAgICB9CiAgfTsKCiAgdmFyIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgZnVuY3Rpb24gc2NoZWR1bGVTdGF0aWNSZW5kZXIoKSB7CiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgewogICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9LCAxKTsKICAgIH0KICB9CgogIC8vIFJlbmRlciBzdGF0aWMgd2lkZ2V0cyBhZnRlciB0aGUgZG9jdW1lbnQgZmluaXNoZXMgbG9hZGluZwogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzCiAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGJpbmRpbmdzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7CiAgICAgIHZhciBtYXRjaGVzID0gYmluZGluZy5maW5kKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgIGZvckVhY2gobWF0Y2hlcywgZnVuY3Rpb24oZWwpIHsKICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOwoKICAgICAgICBpZiAoaGFzQ2xhc3MoZWwsICJodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUgKyAiIGh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCI7CgogICAgICAgIHZhciBpbml0UmVzdWx0OwogICAgICAgIGlmIChiaW5kaW5nLmluaXRpYWxpemUpIHsKICAgICAgICAgIGluaXRSZXN1bHQgPSBiaW5kaW5nLmluaXRpYWxpemUoZWwsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICk7CiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsKICAgICAgICAgIHZhciBsYXN0U2l6ZSA9IHsKICAgICAgICAgICAgdzogc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgfTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCgogIGZ1bmN0aW9uIGhhc19qUXVlcnkzKCkgewogICAgaWYgKCF3aW5kb3cualF1ZXJ5KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciAkdmVyc2lvbiA9IHdpbmRvdy5qUXVlcnkuZm4uanF1ZXJ5OwogICAgdmFyICRtYWpvcl92ZXJzaW9uID0gcGFyc2VJbnQoJHZlcnNpb24uc3BsaXQoIi4iKVswXSk7CiAgICByZXR1cm4gJG1ham9yX3ZlcnNpb24gPj0gMzsKICB9CgogIC8qCiAgLyBTaGlueSAxLjQgYnVtcGVkIGpRdWVyeSBmcm9tIDEueCB0byAzLnggd2hpY2ggbWVhbnMgalF1ZXJ5J3MKICAvIG9uLXJlYWR5IGhhbmRsZXIgKGkuZS4sICQoZm4pKSBpcyBub3cgYXN5bmNyb25vdXMgKGkuZS4sIGl0IG5vdwogIC8gcmVhbGx5IG1lYW5zICQoc2V0VGltZW91dChmbikpLgogIC8gaHR0cHM6Ly9qcXVlcnkuY29tL3VwZ3JhZGUtZ3VpZGUvMy4wLyNicmVha2luZy1jaGFuZ2UtZG9jdW1lbnQtcmVhZHktaGFuZGxlcnMtYXJlLW5vdy1hc3luY2hyb25vdXMKICAvCiAgLyBTaW5jZSBTaGlueSB1c2VzICQoKSB0byBzY2hlZHVsZSBpbml0U2hpbnksIHNoaW55Pj0xLjQgY2FsbHMgaW5pdFNoaW55CiAgLyBvbmUgdGljayBsYXRlciB0aGFuIGl0IGRpZCBiZWZvcmUsIHdoaWNoIG1lYW5zIHN0YXRpY1JlbmRlcigpIGlzCiAgLyBjYWxsZWQgcmVuZGVyVmFsdWUoKSBlYXJsaWVyIHRoYW4gKGFkdmFuY2VkKSB3aWRnZXQgYXV0aG9ycyBtaWdodCBiZSBleHBlY3RpbmcuCiAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9zaGlueS9pc3N1ZXMvMjYzMAogIC8KICAvIEZvciBhIGNvbmNyZXRlIGV4YW1wbGUsIGxlYWZsZXQgaGFzIHNvbWUgbWV0aG9kcyAoZS5nLiwgdXBkYXRlQm91bmRzKQogIC8gd2hpY2ggcmVmZXJlbmNlIFNoaW55IG1ldGhvZHMgcmVnaXN0ZXJlZCBpbiBpbml0U2hpbnkgKGUuZy4sIHNldElucHV0VmFsdWUpLgogIC8gU2luY2UgbGVhZmxldCBpcyBwcml2eSB0byB0aGlzIGxpZmUtY3ljbGUsIGl0IGtub3dzIHRvIHVzZSBzZXRUaW1lb3V0KCkgdG8KICAvIGRlbGF5IGV4ZWN1dGlvbiBvZiB0aG9zZSBtZXRob2RzICh1bnRpbCBTaGlueSBtZXRob2RzIGFyZSByZWFkeSkKICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvYmxvYi8xOGVjOTgxL2phdmFzY3JpcHQvc3JjL2luZGV4LmpzI0wyNjYtTDI2OAogIC8KICAvIElkZWFsbHkgd2lkZ2V0IGF1dGhvcnMgd291bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBzZXRUaW1lb3V0KCkgaGFjayB0aGF0CiAgLyBsZWFmbGV0IHVzZXMgdG8gY2FsbCBTaGlueSBtZXRob2RzIG9uIGEgc3RhdGljUmVuZGVyKCkuIEluIHRoZSBsb25nIHJ1biwKICAvIHRoZSBsb2dpYyBpbml0U2hpbnkgc2hvdWxkIGJlIGJyb2tlbiB1cCBzbyB0aGF0IG1ldGhvZCByZWdpc3RyYXRpb24gaGFwcGVucwogIC8gcmlnaHQgYXdheSwgYnV0IGJpbmRpbmcgaGFwcGVucyBsYXRlci4KICAqLwogIGZ1bmN0aW9uIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKSB7CiAgICBpZiAoc2hpbnlNb2RlICYmIGhhc19qUXVlcnkzKCkpIHsKICAgICAgd2luZG93LmpRdWVyeSh3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgIH0KICB9CgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBhcmd1bWVudHMuY2FsbGVlLCBmYWxzZSk7CiAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgIH0sIGZhbHNlKTsKICB9IGVsc2UgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7CiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUpOwogICAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQoKCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsKICAgIC8vIElmIG5vIGtleSwgZGVmYXVsdCB0byB0aGUgZmlyc3QgaXRlbQogICAgaWYgKHR5cGVvZihrZXkpID09PSAidW5kZWZpbmVkIikKICAgICAga2V5ID0gMTsKCiAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlcG5hbWUgKyAiLSIgKyBrZXkgKyAiLWF0dGFjaG1lbnQiKTsKICAgIGlmICghbGluaykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0dGFjaG1lbnQgIiArIGRlcG5hbWUgKyAiLyIgKyBrZXkgKyAiIG5vdCBmb3VuZCBpbiBkb2N1bWVudCIpOwogICAgfQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgbGVuZ3RoOwogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgewogICAgICAgIGlmIChkZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGxlbmd0aCkgIT09ICJ1bmRlZmluZWQiICYmIGxlbmd0aCAhPT0gZGZbbmFtZV0ubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoID0gZGZbbmFtZV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBpdGVtOwogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgewogICAgICAgIGl0ZW0gPSB7fTsKICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuYW1lcy5sZW5ndGg7IGNvbCsrKSB7CiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOwogICAgICAgIH0KICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMudHJhbnNwb3NlQXJyYXkyRCA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBhcnJheTsKICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgewogICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgICByZXR1cm4gcm93W2ldCiAgICAgICAgICB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0FycmF5OwogIH07CiAgLy8gU3BsaXQgdmFsdWUgYXQgc3BsaXRDaGFyLCBidXQgYWxsb3cgc3BsaXRDaGFyIHRvIGJlIGVzY2FwZWQKICAvLyB1c2luZyBlc2NhcGVDaGFyLiBBbnkgb3RoZXIgY2hhcmFjdGVycyBlc2NhcGVkIGJ5IGVzY2FwZUNoYXIKICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLgogIGZ1bmN0aW9uIHNwbGl0V2l0aEVzY2FwZSh2YWx1ZSwgc3BsaXRDaGFyLCBlc2NhcGVDaGFyKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgIHZhciBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB2YWx1ZS5sZW5ndGg7IHBvcysrKSB7CiAgICAgIGlmICghZXNjYXBlTW9kZSkgewogICAgICAgIGlmICh2YWx1ZVtwb3NdID09PSBzcGxpdENoYXIpIHsKICAgICAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW3Bvc10gPT09IGVzY2FwZUNoYXIpIHsKICAgICAgICAgIGVzY2FwZU1vZGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UmVzdWx0ICE9PSAiIikgewogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CiAgLy8gRnVuY3Rpb24gYXV0aG9yZWQgYnkgWWlodWkvSkogQWxsYWlyZQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlciA9IGZ1bmN0aW9uKG8sIG1lbWJlcikgewogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQogICAgICBpZiAobyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gIm9iamVjdCIgJiYgcGFydCBpbiBvKSB7CiAgICAgICAgaWYgKGkgPT0gKGwgLSAxKSkgeyAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGVuIGV2YWx1bGF0ZQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikKICAgICAgICAgICAgb1twYXJ0XSA9IHRyeUV2YWwob1twYXJ0XSk7CiAgICAgICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIG5leHQgZW1iZWRkZWQgb2JqZWN0CiAgICAgICAgICBvID0gb1twYXJ0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuCiAgLy8gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCwgb3IgbnVsbCBpZiBub25lLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICByZXR1cm4gZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpOwogIH07CgogIC8vIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzY29wZSB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLAogIC8vIGFuZCByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVsZW1lbnQsIGlmIGFueS4gSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZQogIC8vIHNlbGVjdG9yLCBvciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8gSFRNTFdpZGdldAogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoZWwgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKGVsKTsKICAgIH0KICB9OwoKICAvLyBGaW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLCBhbmQKICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50cywgaW4gYW4gYXJyYXkuIElmIGVsZW1lbnRzIHRoYXQKICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBudWxscy4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZEFsbCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBub2RlcyA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0cy5wdXNoKHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShub2Rlc1tpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOwogIGZ1bmN0aW9uIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpIHsKICAgIHdoaWxlIChwb3N0UmVuZGVySGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7CiAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgaGFuZGxlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZWdpc3RlciB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUKICAvLyBuZXh0IHRpbWUgc3RhdGljIHdpZGdldHMgYXJlIHJlbmRlcmVkLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICBwb3N0UmVuZGVySGFuZGxlcnMucHVzaChjYWxsYmFjayk7CiAgfTsKCiAgLy8gVGFrZXMgYSBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbiwgYW5kIHJldHVybnMgYW4KICAvLyBvbGQtc3R5bGUgY2xhc3MtYm91bmQgZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB1cyBmcm9tIGhhdmluZwogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoCiAgLy8gdHlwZXMgb2YgZGVmaW5pdGlvbnMuCiAgZnVuY3Rpb24gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmbikgewogICAgdmFyIHJlc3VsdCA9IHsKICAgICAgbmFtZTogZGVmbi5uYW1lLAogICAgICB0eXBlOiBkZWZuLnR5cGUsCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGRlZm4uZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyVmFsdWUoeCk7CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgfQogICAgfTsKCiAgICBpZiAoZGVmbi5maW5kKQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsKICAgIGlmIChkZWZuLnJlbmRlckVycm9yKQogICAgICByZXN1bHQucmVuZGVyRXJyb3IgPSBkZWZuLnJlbmRlckVycm9yOwogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikKICAgICAgcmVzdWx0LmNsZWFyRXJyb3IgPSBkZWZuLmNsZWFyRXJyb3I7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pKCk7Cgo="></script>
<script src="data:application/javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZyB2NS43LjAgQ29weXJpZ2h0IDIwMTggTWlrZSBCb3N0b2NrCiFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/bihleHBvcnRzKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxuKTpuKHQuZDM9dC5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIHQ8bj8tMTp0Pm4/MTp0Pj1uPzA6TmFOfWZ1bmN0aW9uIGUodCl7dmFyIGU7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKGU9dCx0PWZ1bmN0aW9uKHQscil7cmV0dXJuIG4oZSh0KSxyKX0pLHtsZWZ0OmZ1bmN0aW9uKG4sZSxyLGkpe2ZvcihudWxsPT1yJiYocj0wKSxudWxsPT1pJiYoaT1uLmxlbmd0aCk7cjxpOyl7dmFyIG89citpPj4+MTt0KG5bb10sZSk8MD9yPW8rMTppPW99cmV0dXJuIHJ9LHJpZ2h0OmZ1bmN0aW9uKG4sZSxyLGkpe2ZvcihudWxsPT1yJiYocj0wKSxudWxsPT1pJiYoaT1uLmxlbmd0aCk7cjxpOyl7dmFyIG89citpPj4+MTt0KG5bb10sZSk+MD9pPW86cj1vKzF9cmV0dXJuIHJ9fX12YXIgcj1lKG4pLGk9ci5yaWdodCxvPXIubGVmdDtmdW5jdGlvbiBhKHQsbil7cmV0dXJuW3Qsbl19ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fWZ1bmN0aW9uIGYodCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0wLGE9LTEsZj0wLGM9MDtpZihudWxsPT1uKWZvcig7KythPGk7KWlzTmFOKGU9dSh0W2FdKSl8fChjKz0ocj1lLWYpKihlLShmKz1yLysrbykpKTtlbHNlIGZvcig7KythPGk7KWlzTmFOKGU9dShuKHRbYV0sYSx0KSkpfHwoYys9KHI9ZS1mKSooZS0oZis9ci8rK28pKSk7aWYobz4xKXJldHVybiBjLyhvLTEpfWZ1bmN0aW9uIGModCxuKXt2YXIgZT1mKHQsbik7cmV0dXJuIGU/TWF0aC5zcXJ0KGUpOmV9ZnVuY3Rpb24gcyh0LG4pe3ZhciBlLHIsaSxvPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09bil7Zm9yKDsrK2E8bzspaWYobnVsbCE9KGU9dFthXSkmJmU+PWUpZm9yKHI9aT1lOysrYTxvOyludWxsIT0oZT10W2FdKSYmKHI+ZSYmKHI9ZSksaTxlJiYoaT1lKSl9ZWxzZSBmb3IoOysrYTxvOylpZihudWxsIT0oZT1uKHRbYV0sYSx0KSkmJmU+PWUpZm9yKHI9aT1lOysrYTxvOyludWxsIT0oZT1uKHRbYV0sYSx0KSkmJihyPmUmJihyPWUpLGk8ZSYmKGk9ZSkpO3JldHVybltyLGldfXZhciBsPUFycmF5LnByb3RvdHlwZSxoPWwuc2xpY2UsZD1sLm1hcDtmdW5jdGlvbiBwKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiB2KHQpe3JldHVybiB0fWZ1bmN0aW9uIGcodCxuLGUpe3Q9K3Qsbj0rbixlPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KG49dCx0PTAsMSk6aTwzPzE6K2U7Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgobi10KS9lKSksbz1uZXcgQXJyYXkoaSk7KytyPGk7KW9bcl09dCtyKmU7cmV0dXJuIG99dmFyIHk9TWF0aC5zcXJ0KDUwKSxfPU1hdGguc3FydCgxMCksYj1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gbSh0LG4sZSl7dmFyIHIsaSxvLGEsdT0tMTtpZihlPStlLCh0PSt0KT09PShuPStuKSYmZT4wKXJldHVyblt0XTtpZigocj1uPHQpJiYoaT10LHQ9bixuPWkpLDA9PT0oYT14KHQsbixlKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKHQ9TWF0aC5jZWlsKHQvYSksbj1NYXRoLmZsb29yKG4vYSksbz1uZXcgQXJyYXkoaT1NYXRoLmNlaWwobi10KzEpKTsrK3U8aTspb1t1XT0odCt1KSphO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0KmEpLG49TWF0aC5jZWlsKG4qYSksbz1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1uKzEpKTsrK3U8aTspb1t1XT0odC11KS9hO3JldHVybiByJiZvLnJldmVyc2UoKSxvfWZ1bmN0aW9uIHgodCxuLGUpe3ZhciByPShuLXQpL01hdGgubWF4KDAsZSksaT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCksbz1yL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj15PzEwOm8+PV8/NTpvPj1iPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49eT8xMDpvPj1fPzU6bz49Yj8yOjEpfWZ1bmN0aW9uIHcodCxuLGUpe3ZhciByPU1hdGguYWJzKG4tdCkvTWF0aC5tYXgoMCxlKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSksbz1yL2k7cmV0dXJuIG8+PXk/aSo9MTA6bz49Xz9pKj01Om8+PWImJihpKj0yKSxuPHQ/LWk6aX1mdW5jdGlvbiBNKHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIEEodCxuLGUpe2lmKG51bGw9PWUmJihlPXUpLHI9dC5sZW5ndGgpe2lmKChuPStuKTw9MHx8cjwyKXJldHVybitlKHRbMF0sMCx0KTtpZihuPj0xKXJldHVybitlKHRbci0xXSxyLTEsdCk7dmFyIHIsaT0oci0xKSpuLG89TWF0aC5mbG9vcihpKSxhPStlKHRbb10sbyx0KTtyZXR1cm4gYSsoK2UodFtvKzFdLG8rMSx0KS1hKSooaS1vKX19ZnVuY3Rpb24gVCh0LG4pe3ZhciBlLHIsaT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PW4pe2Zvcig7KytvPGk7KWlmKG51bGwhPShlPXRbb10pJiZlPj1lKWZvcihyPWU7KytvPGk7KW51bGwhPShlPXRbb10pJiZlPnImJihyPWUpfWVsc2UgZm9yKDsrK288aTspaWYobnVsbCE9KGU9bih0W29dLG8sdCkpJiZlPj1lKWZvcihyPWU7KytvPGk7KW51bGwhPShlPW4odFtvXSxvLHQpKSYmZT5yJiYocj1lKTtyZXR1cm4gcn1mdW5jdGlvbiBOKHQpe2Zvcih2YXIgbixlLHIsaT10Lmxlbmd0aCxvPS0xLGE9MDsrK288aTspYSs9dFtvXS5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KGEpOy0taT49MDspZm9yKG49KHI9dFtpXSkubGVuZ3RoOy0tbj49MDspZVstLWFdPXJbbl07cmV0dXJuIGV9ZnVuY3Rpb24gUyh0LG4pe3ZhciBlLHIsaT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PW4pe2Zvcig7KytvPGk7KWlmKG51bGwhPShlPXRbb10pJiZlPj1lKWZvcihyPWU7KytvPGk7KW51bGwhPShlPXRbb10pJiZyPmUmJihyPWUpfWVsc2UgZm9yKDsrK288aTspaWYobnVsbCE9KGU9bih0W29dLG8sdCkpJiZlPj1lKWZvcihyPWU7KytvPGk7KW51bGwhPShlPW4odFtvXSxvLHQpKSYmcj5lJiYocj1lKTtyZXR1cm4gcn1mdW5jdGlvbiBFKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBuPS0xLGU9Uyh0LGspLHI9bmV3IEFycmF5KGUpOysrbjxlOylmb3IodmFyIGksbz0tMSxhPXJbbl09bmV3IEFycmF5KGkpOysrbzxpOylhW29dPXRbb11bbl07cmV0dXJuIHJ9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdC5sZW5ndGh9dmFyIEM9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFAodCl7cmV0dXJuIHR9dmFyIHo9MSxSPTIsTD0zLEQ9NCxVPTFlLTY7ZnVuY3Rpb24gcSh0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIE8odCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBZKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIEIodCxuKXt2YXIgZT1bXSxyPW51bGwsaT1udWxsLG89NixhPTYsdT0zLGY9dD09PXp8fHQ9PT1EPy0xOjEsYz10PT09RHx8dD09PVI/IngiOiJ5IixzPXQ9PT16fHx0PT09TD9xOk87ZnVuY3Rpb24gbChsKXt2YXIgaD1udWxsPT1yP24udGlja3M/bi50aWNrcy5hcHBseShuLGUpOm4uZG9tYWluKCk6cixkPW51bGw9PWk/bi50aWNrRm9ybWF0P24udGlja0Zvcm1hdC5hcHBseShuLGUpOlA6aSxwPU1hdGgubWF4KG8sMCkrdSx2PW4ucmFuZ2UoKSxnPSt2WzBdKy41LHk9K3Zbdi5sZW5ndGgtMV0rLjUsXz0obi5iYW5kd2lkdGg/ZnVuY3Rpb24odCl7dmFyIG49TWF0aC5tYXgoMCx0LmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIHQucm91bmQoKSYmKG49TWF0aC5yb3VuZChuKSksZnVuY3Rpb24oZSl7cmV0dXJuK3QoZSkrbn19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4rdChuKX19KShuLmNvcHkoKSksYj1sLnNlbGVjdGlvbj9sLnNlbGVjdGlvbigpOmwsbT1iLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSx4PWIuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCxuKS5vcmRlcigpLHc9eC5leGl0KCksTT14LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksQT14LnNlbGVjdCgibGluZSIpLFQ9eC5zZWxlY3QoInRleHQiKTttPW0ubWVyZ2UobS5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSkseD14Lm1lcmdlKE0pLEE9QS5tZXJnZShNLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsZipvKSksVD1ULm1lcmdlKE0uYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxmKnApLmF0dHIoImR5Iix0PT09ej8iMGVtIjp0PT09TD8iMC43MWVtIjoiMC4zMmVtIikpLGwhPT1iJiYobT1tLnRyYW5zaXRpb24obCkseD14LnRyYW5zaXRpb24obCksQT1BLnRyYW5zaXRpb24obCksVD1ULnRyYW5zaXRpb24obCksdz13LnRyYW5zaXRpb24obCkuYXR0cigib3BhY2l0eSIsVSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1fKHQpKT9zKHQpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE0uYXR0cigib3BhY2l0eSIsVSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXt2YXIgbj10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBzKG4mJmlzRmluaXRlKG49bih0KSk/bjpfKHQpKX0pKSx3LnJlbW92ZSgpLG0uYXR0cigiZCIsdD09PUR8fHQ9PVI/YT8iTSIrZiphKyIsIitnKyJIMC41ViIreSsiSCIrZiphOiJNMC41LCIrZysiViIreTphPyJNIitnKyIsIitmKmErIlYwLjVIIit5KyJWIitmKmE6Ik0iK2crIiwwLjVIIit5KSx4LmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuIHMoXyh0KSl9KSxBLmF0dHIoYysiMiIsZipvKSxULmF0dHIoYyxmKnApLnRleHQoZCksYi5maWx0ZXIoWSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdD09PVI/InN0YXJ0Ijp0PT09RD8iZW5kIjoibWlkZGxlIiksYi5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9X30pfXJldHVybiBsLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbCk6bn0sbC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBlPUMuY2FsbChhcmd1bWVudHMpLGx9LGwudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P1tdOkMuY2FsbCh0KSxsKTplLnNsaWNlKCl9LGwudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6Qy5jYWxsKHQpLGwpOnImJnIuc2xpY2UoKX0sbC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbCk6aX0sbC50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1hPSt0LGwpOm99LGwudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxsKTpvfSxsLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsbCk6YX0sbC50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxsKTp1fSxsfXZhciBGPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIEkoKXtmb3IodmFyIHQsbj0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPXt9O248ZTsrK24pe2lmKCEodD1hcmd1bWVudHNbbl0rIiIpfHx0IGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7clt0XT1bXX1yZXR1cm4gbmV3IEgocil9ZnVuY3Rpb24gSCh0KXt0aGlzLl89dH1mdW5jdGlvbiBqKHQsbil7Zm9yKHZhciBlLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKGU9dFtyXSkubmFtZT09PW4pcmV0dXJuIGUudmFsdWV9ZnVuY3Rpb24gWCh0LG4sZSl7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKHRbcl0ubmFtZT09PW4pe3Rbcl09Rix0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9ZSYmdC5wdXNoKHtuYW1lOm4sdmFsdWU6ZX0pLHR9SC5wcm90b3R5cGU9SS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkgsb246ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9dGhpcy5fLG89KHI9aSwodCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgbj0iIixlPXQuaW5kZXhPZigiLiIpO2lmKGU+PTAmJihuPXQuc2xpY2UoZSsxKSx0PXQuc2xpY2UoMCxlKSksdCYmIXIuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpLGE9LTEsdT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPW4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtmb3IoOysrYTx1OylpZihlPSh0PW9bYV0pLnR5cGUpaVtlXT1YKGlbZV0sdC5uYW1lLG4pO2Vsc2UgaWYobnVsbD09bilmb3IoZSBpbiBpKWlbZV09WChpW2VdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTx1OylpZigoZT0odD1vW2FdKS50eXBlKSYmKGU9aihpW2VdLHQubmFtZSkpKXJldHVybiBlfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sbj10aGlzLl87Zm9yKHZhciBlIGluIG4pdFtlXT1uW2VdLnNsaWNlKCk7cmV0dXJuIG5ldyBIKHQpfSxjYWxsOmZ1bmN0aW9uKHQsbil7aWYoKGU9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgZSxyLGk9bmV3IEFycmF5KGUpLG89MDtvPGU7KytvKWlbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLGU9KHI9dGhpcy5fW3RdKS5sZW5ndGg7bzxlOysrbylyW29dLnZhbHVlLmFwcGx5KG4saSl9LGFwcGx5OmZ1bmN0aW9uKHQsbixlKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgcj10aGlzLl9bdF0saT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldLnZhbHVlLmFwcGx5KG4sZSl9fTt2YXIgRz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsVj17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Ryx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uICQodCl7dmFyIG49dCs9IiIsZT1uLmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PShuPXQuc2xpY2UoMCxlKSkmJih0PXQuc2xpY2UoZSsxKSksVi5oYXNPd25Qcm9wZXJ0eShuKT97c3BhY2U6VltuXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIFcodCl7dmFyIG49JCh0KTtyZXR1cm4obi5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcy5vd25lckRvY3VtZW50LGU9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIGU9PT1HJiZuLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1HP24uY3JlYXRlRWxlbWVudCh0KTpuLmNyZWF0ZUVsZW1lbnROUyhlLHQpfX0pKG4pfWZ1bmN0aW9uIFooKXt9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gbnVsbD09dD9aOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19ZnVuY3Rpb24gSigpe3JldHVybltdfWZ1bmN0aW9uIEsodCl7cmV0dXJuIG51bGw9PXQ/SjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fXZhciB0dD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl7dmFyIG50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZighbnQubWF0Y2hlcyl7dmFyIGV0PW50LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8bnQubXNNYXRjaGVzU2VsZWN0b3J8fG50Lm1vek1hdGNoZXNTZWxlY3Rvcnx8bnQub01hdGNoZXNTZWxlY3Rvcjt0dD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZXQuY2FsbCh0aGlzLHQpfX19fXZhciBydD10dDtmdW5jdGlvbiBpdCh0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX1mdW5jdGlvbiBvdCh0LG4pe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189bn1vdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm90LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsbil9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBhdD0iJCI7ZnVuY3Rpb24gdXQodCxuLGUscixpLG8pe2Zvcih2YXIgYSx1PTAsZj1uLmxlbmd0aCxjPW8ubGVuZ3RoO3U8YzsrK3UpKGE9blt1XSk/KGEuX19kYXRhX189b1t1XSxyW3VdPWEpOmVbdV09bmV3IG90KHQsb1t1XSk7Zm9yKDt1PGY7Kyt1KShhPW5bdV0pJiYoaVt1XT1hKX1mdW5jdGlvbiBmdCh0LG4sZSxyLGksbyxhKXt2YXIgdSxmLGMscz17fSxsPW4ubGVuZ3RoLGg9by5sZW5ndGgsZD1uZXcgQXJyYXkobCk7Zm9yKHU9MDt1PGw7Kyt1KShmPW5bdV0pJiYoZFt1XT1jPWF0K2EuY2FsbChmLGYuX19kYXRhX18sdSxuKSxjIGluIHM/aVt1XT1mOnNbY109Zik7Zm9yKHU9MDt1PGg7Kyt1KShmPXNbYz1hdCthLmNhbGwodCxvW3VdLHUsbyldKT8oclt1XT1mLGYuX19kYXRhX189b1t1XSxzW2NdPW51bGwpOmVbdV09bmV3IG90KHQsb1t1XSk7Zm9yKHU9MDt1PGw7Kyt1KShmPW5bdV0pJiZzW2RbdV1dPT09ZiYmKGlbdV09Zil9ZnVuY3Rpb24gY3QodCxuKXtyZXR1cm4gdDxuPy0xOnQ+bj8xOnQ+PW4/MDpOYU59ZnVuY3Rpb24gc3QodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGx0KHQsbil7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuKXx8c3QodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUobil9ZnVuY3Rpb24gaHQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIGR0KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IHB0KHQpfWZ1bmN0aW9uIHB0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1odCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIHZ0KHQsbil7Zm9yKHZhciBlPWR0KHQpLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZS5hZGQobltyXSl9ZnVuY3Rpb24gZ3QodCxuKXtmb3IodmFyIGU9ZHQodCkscj0tMSxpPW4ubGVuZ3RoOysrcjxpOyllLnJlbW92ZShuW3JdKX1mdW5jdGlvbiB5dCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gX3QoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBidCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBtdCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIHh0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gd3QoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBNdCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCExKSx0aGlzLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBBdCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCEwKSx0aGlzLm5leHRTaWJsaW5nKX1wdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lcy5pbmRleE9mKHQpO24+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UobiwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBUdD17fTsodC5ldmVudD1udWxsLCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpJiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChUdD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7ZnVuY3Rpb24gTnQodCxuLGUpe3JldHVybiB0PVN0KHQsbixlKSxmdW5jdGlvbihuKXt2YXIgZT1uLnJlbGF0ZWRUYXJnZXQ7ZSYmKGU9PT10aGlzfHw4JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gU3QobixlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10LmV2ZW50O3QuZXZlbnQ9aTt0cnl7bi5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLHIpfWZpbmFsbHl7dC5ldmVudD1vfX19ZnVuY3Rpb24gRXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcy5fX29uO2lmKG4pe2Zvcih2YXIgZSxyPTAsaT0tMSxvPW4ubGVuZ3RoO3I8bzsrK3IpZT1uW3JdLHQudHlwZSYmZS50eXBlIT09dC50eXBlfHxlLm5hbWUhPT10Lm5hbWU/blsrK2ldPWU6dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUudHlwZSxlLmxpc3RlbmVyLGUuY2FwdHVyZSk7KytpP24ubGVuZ3RoPWk6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGt0KHQsbixlKXt2YXIgcj1UdC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP050OlN0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHUsZj10aGlzLl9fb24sYz1yKG4sbyxhKTtpZihmKWZvcih2YXIgcz0wLGw9Zi5sZW5ndGg7czxsOysrcylpZigodT1mW3NdKS50eXBlPT09dC50eXBlJiZ1Lm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih1LnR5cGUsdS5saXN0ZW5lcix1LmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih1LnR5cGUsdS5saXN0ZW5lcj1jLHUuY2FwdHVyZT1lKSx2b2lkKHUudmFsdWU9bik7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxjLGUpLHU9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOm4sbGlzdGVuZXI6YyxjYXB0dXJlOmV9LGY/Zi5wdXNoKHUpOnRoaXMuX19vbj1bdV19fWZ1bmN0aW9uIEN0KG4sZSxyLGkpe3ZhciBvPXQuZXZlbnQ7bi5zb3VyY2VFdmVudD10LmV2ZW50LHQuZXZlbnQ9bjt0cnl7cmV0dXJuIGUuYXBwbHkocixpKX1maW5hbGx5e3QuZXZlbnQ9b319ZnVuY3Rpb24gUHQodCxuLGUpe3ZhciByPXN0KHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKG4sZSk6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxlPyhpLmluaXRFdmVudChuLGUuYnViYmxlcyxlLmNhbmNlbGFibGUpLGkuZGV0YWlsPWUuZGV0YWlsKTppLmluaXRFdmVudChuLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfXZhciB6dD1bbnVsbF07ZnVuY3Rpb24gUnQodCxuKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPW59ZnVuY3Rpb24gTHQoKXtyZXR1cm4gbmV3IFJ0KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0senQpfWZ1bmN0aW9uIER0KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgUnQoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBSdChbW3RdXSx6dCl9UnQucHJvdG90eXBlPUx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6UnQsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLGEsdT1uW2ldLGY9dS5sZW5ndGgsYz1yW2ldPW5ldyBBcnJheShmKSxzPTA7czxmOysrcykobz11W3NdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyxzLHUpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxjW3NdPWEpO3JldHVybiBuZXcgUnQocix0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1LKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1bXSxpPVtdLG89MDtvPGU7KytvKWZvcih2YXIgYSx1PW5bb10sZj11Lmxlbmd0aCxjPTA7YzxmOysrYykoYT11W2NdKSYmKHIucHVzaCh0LmNhbGwoYSxhLl9fZGF0YV9fLGMsdSkpLGkucHVzaChhKSk7cmV0dXJuIG5ldyBSdChyLGkpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXJ0KHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLGE9bltpXSx1PWEubGVuZ3RoLGY9cltpXT1bXSxjPTA7Yzx1OysrYykobz1hW2NdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxjLGEpJiZmLnB1c2gobyk7cmV0dXJuIG5ldyBSdChyLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKHQsbil7aWYoIXQpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxzPS0xLHRoaXMuZWFjaChmdW5jdGlvbih0KXtwWysrc109dH0pLHA7dmFyIGUscj1uP2Z0OnV0LGk9dGhpcy5fcGFyZW50cyxvPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKGU9dCx0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9KTtmb3IodmFyIGE9by5sZW5ndGgsdT1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSkscz0wO3M8YTsrK3Mpe3ZhciBsPWlbc10saD1vW3NdLGQ9aC5sZW5ndGgscD10LmNhbGwobCxsJiZsLl9fZGF0YV9fLHMsaSksdj1wLmxlbmd0aCxnPWZbc109bmV3IEFycmF5KHYpLHk9dVtzXT1uZXcgQXJyYXkodik7cihsLGgsZyx5LGNbc109bmV3IEFycmF5KGQpLHAsbik7Zm9yKHZhciBfLGIsbT0wLHg9MDttPHY7KyttKWlmKF89Z1ttXSl7Zm9yKG0+PXgmJih4PW0rMSk7IShiPXlbeF0pJiYrK3g8djspO18uX25leHQ9Ynx8bnVsbH19cmV0dXJuKHU9bmV3IFJ0KHUsaSkpLl9lbnRlcj1mLHUuX2V4aXQ9Yyx1fSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgUnQodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaXQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSdCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGl0KSx0aGlzLl9wYXJlbnRzKX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPXQuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9ZS5sZW5ndGgsbz1NYXRoLm1pbihyLGkpLGE9bmV3IEFycmF5KHIpLHU9MDt1PG87Kyt1KWZvcih2YXIgZixjPW5bdV0scz1lW3VdLGw9Yy5sZW5ndGgsaD1hW3VdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZCkoZj1jW2RdfHxzW2RdKSYmKGhbZF09Zik7Zm9yKDt1PHI7Kyt1KWFbdV09blt1XTtyZXR1cm4gbmV3IFJ0KGEsdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxuPS0xLGU9dC5sZW5ndGg7KytuPGU7KWZvcih2YXIgcixpPXRbbl0sbz1pLmxlbmd0aC0xLGE9aVtvXTstLW8+PTA7KShyPWlbb10pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4obixlKXtyZXR1cm4gbiYmZT90KG4uX19kYXRhX18sZS5fX2RhdGFfXyk6IW4tIWV9dHx8KHQ9Y3QpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj1lLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBhLHU9ZVtvXSxmPXUubGVuZ3RoLGM9aVtvXT1uZXcgQXJyYXkoZikscz0wO3M8ZjsrK3MpKGE9dVtzXSkmJihjW3NdPWEpO2Muc29ydChuKX1yZXR1cm4gbmV3IFJ0KGksdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLG49LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RbKytuXT10aGlzfSksdH0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0wLGU9dC5sZW5ndGg7bjxlOysrbilmb3IodmFyIHI9dFtuXSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgYT1yW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK3R9KSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9MCxyPW4ubGVuZ3RoO2U8cjsrK2UpZm9yKHZhciBpLG89bltlXSxhPTAsdT1vLmxlbmd0aDthPHU7KythKShpPW9bYV0pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLGEsbyk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxuKXt2YXIgZT0kKHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIGUubG9jYWw/ci5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnIuZ2V0QXR0cmlidXRlKGUpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PW4/ZS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19OiJmdW5jdGlvbiI9PXR5cGVvZiBuP2UubG9jYWw/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX06ZS5sb2NhbD9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX0pKGUsbikpfSxzdHlsZTpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PW4/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19OiJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsZSl9fTpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4sZSl9fSkodCxuLG51bGw9PWU/IiI6ZSkpOmx0KHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1uP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX06ImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09ZX19OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1ufX0pKHQsbikpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsbil7dmFyIGU9aHQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9ZHQodGhpcy5ub2RlKCkpLGk9LTEsbz1lLmxlbmd0aDsrK2k8bzspaWYoIXIuY29udGFpbnMoZVtpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXsobi5hcHBseSh0aGlzLGFyZ3VtZW50cyk/dnQ6Z3QpKHRoaXMsdCl9fTpuP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3Z0KHRoaXMsdCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtndCh0aGlzLHQpfX0pKGUsbikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P3l0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/X3Q6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PW4/IiI6bn19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGJ0KX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKG10KX0sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Vyh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKHQsbil7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpXKHQpLHI9bnVsbD09bj94dDoiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlEobik7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHd0KX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/QXQ6TXQpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG89ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgbj0iIixlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYobj10LnNsaWNlKGUrMSksdD10LnNsaWNlKDAsZSkpLHt0eXBlOnQsbmFtZTpufX0pfSh0KyIiKSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHU9bj9rdDpFdCxudWxsPT1lJiYoZT0hMSkscj0wO3I8YTsrK3IpdGhpcy5lYWNoKHUob1tyXSxuLGUpKTtyZXR1cm4gdGhpc312YXIgdT10aGlzLm5vZGUoKS5fX29uO2lmKHUpZm9yKHZhciBmLGM9MCxzPXUubGVuZ3RoO2M8czsrK2MpZm9yKHI9MCxmPXVbY107cjxhOysrcilpZigoaT1vW3JdKS50eXBlPT09Zi50eXBlJiZpLm5hbWU9PT1mLm5hbWUpcmV0dXJuIGYudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUHQodGhpcyx0LG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX19OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFB0KHRoaXMsdCxuKX19KSh0LG4pKX19O3ZhciBVdD0wO2Z1bmN0aW9uIHF0KCl7cmV0dXJuIG5ldyBPdH1mdW5jdGlvbiBPdCgpe3RoaXMuXz0iQCIrKCsrVXQpLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBZdCgpe2Zvcih2YXIgbixlPXQuZXZlbnQ7bj1lLnNvdXJjZUV2ZW50OyllPW47cmV0dXJuIGV9ZnVuY3Rpb24gQnQodCxuKXt2YXIgZT10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihlLmNyZWF0ZVNWR1BvaW50KXt2YXIgcj1lLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIHIueD1uLmNsaWVudFgsci55PW4uY2xpZW50WSxbKHI9ci5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LHIueV19dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bbi5jbGllbnRYLWkubGVmdC10LmNsaWVudExlZnQsbi5jbGllbnRZLWkudG9wLXQuY2xpZW50VG9wXX1mdW5jdGlvbiBGdCh0KXt2YXIgbj1ZdCgpO3JldHVybiBuLmNoYW5nZWRUb3VjaGVzJiYobj1uLmNoYW5nZWRUb3VjaGVzWzBdKSxCdCh0LG4pfWZ1bmN0aW9uIEl0KHQsbixlKXthcmd1bWVudHMubGVuZ3RoPDMmJihlPW4sbj1ZdCgpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIHIsaT0wLG89bj9uLmxlbmd0aDowO2k8bzsrK2kpaWYoKHI9bltpXSkuaWRlbnRpZmllcj09PWUpcmV0dXJuIEJ0KHQscik7cmV0dXJuIG51bGx9ZnVuY3Rpb24gSHQoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGp0KCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gWHQodCl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT1EdCh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLGp0LCEwKTsib25zZWxlY3RzdGFydCJpbiBuP2Uub24oInNlbGVjdHN0YXJ0LmRyYWciLGp0LCEwKToobi5fX25vc2VsZWN0PW4uc3R5bGUuTW96VXNlclNlbGVjdCxuLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBHdCh0LG4pe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RHQodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtuJiYoci5vbigiY2xpY2suZHJhZyIsanQsITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGU/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGUuc3R5bGUuTW96VXNlclNlbGVjdD1lLl9fbm9zZWxlY3QsZGVsZXRlIGUuX19ub3NlbGVjdCl9ZnVuY3Rpb24gVnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uICR0KHQsbixlLHIsaSxvLGEsdSxmLGMpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy5zdWJqZWN0PWUsdGhpcy5pZGVudGlmaWVyPXIsdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXUsdGhpcy5keT1mLHRoaXMuXz1jfWZ1bmN0aW9uIFd0KCl7cmV0dXJuIXQuZXZlbnQuYnV0dG9ufWZ1bmN0aW9uIFp0KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBRdChuKXtyZXR1cm4gbnVsbD09bj97eDp0LmV2ZW50LngseTp0LmV2ZW50Lnl9Om59ZnVuY3Rpb24gSnQoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gS3QodCxuLGUpe3QucHJvdG90eXBlPW4ucHJvdG90eXBlPWUsZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIHRuKHQsbil7dmFyIGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIG4pZVtyXT1uW3JdO3JldHVybiBlfWZ1bmN0aW9uIG5uKCl7fU90LnByb3RvdHlwZT1xdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk90LGdldDpmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy5fOyEobiBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W25dfSxzZXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFt0aGlzLl9dPW59LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319LCR0LnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gdD09PXRoaXMuXz90aGlzOnR9O3ZhciBlbj0iXFxzKihbKy1dP1xcZCspXFxzKiIscm49IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsb249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLGFuPS9eIyhbMC05YS1mXXszfSkkLyx1bj0vXiMoWzAtOWEtZl17Nn0pJC8sZm49bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2VuLGVuLGVuXSsiXFwpJCIpLGNuPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvbixvbixvbl0rIlxcKSQiKSxzbj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2VuLGVuLGVuLHJuXSsiXFwpJCIpLGxuPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbb24sb24sb24scm5dKyJcXCkkIiksaG49bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW3JuLG9uLG9uXSsiXFwpJCIpLGRuPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbcm4sb24sb24scm5dKyJcXCkkIikscG49e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gdm4odCl7dmFyIG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChuPWFuLmV4ZWModCkpP25ldyBtbigobj1wYXJzZUludChuWzFdLDE2KSk+PjgmMTV8bj4+NCYyNDAsbj4+NCYxNXwyNDAmbiwoMTUmbik8PDR8MTUmbiwxKToobj11bi5leGVjKHQpKT9nbihwYXJzZUludChuWzFdLDE2KSk6KG49Zm4uZXhlYyh0KSk/bmV3IG1uKG5bMV0sblsyXSxuWzNdLDEpOihuPWNuLmV4ZWModCkpP25ldyBtbigyNTUqblsxXS8xMDAsMjU1Km5bMl0vMTAwLDI1NSpuWzNdLzEwMCwxKToobj1zbi5leGVjKHQpKT95bihuWzFdLG5bMl0sblszXSxuWzRdKToobj1sbi5leGVjKHQpKT95bigyNTUqblsxXS8xMDAsMjU1Km5bMl0vMTAwLDI1NSpuWzNdLzEwMCxuWzRdKToobj1obi5leGVjKHQpKT93bihuWzFdLG5bMl0vMTAwLG5bM10vMTAwLDEpOihuPWRuLmV4ZWModCkpP3duKG5bMV0sblsyXS8xMDAsblszXS8xMDAsbls0XSk6cG4uaGFzT3duUHJvcGVydHkodCk/Z24ocG5bdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBtbihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGduKHQpe3JldHVybiBuZXcgbW4odD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIHluKHQsbixlLHIpe3JldHVybiByPD0wJiYodD1uPWU9TmFOKSxuZXcgbW4odCxuLGUscil9ZnVuY3Rpb24gX24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBubnx8KHQ9dm4odCkpLHQ/bmV3IG1uKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBtbn1mdW5jdGlvbiBibih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/X24odCk6bmV3IG1uKHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBtbih0LG4sZSxyKXt0aGlzLnI9K3QsdGhpcy5nPStuLHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24geG4odCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB3bih0LG4sZSxyKXtyZXR1cm4gcjw9MD90PW49ZT1OYU46ZTw9MHx8ZT49MT90PW49TmFOOm48PTAmJih0PU5hTiksbmV3IEFuKHQsbixlLHIpfWZ1bmN0aW9uIE1uKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgQW4pcmV0dXJuIG5ldyBBbih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBubnx8KHQ9dm4odCkpLCF0KXJldHVybiBuZXcgQW47aWYodCBpbnN0YW5jZW9mIEFuKXJldHVybiB0O3ZhciBuPSh0PXQucmdiKCkpLnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihuLGUsciksbz1NYXRoLm1heChuLGUsciksYT1OYU4sdT1vLWksZj0obytpKS8yO3JldHVybiB1PyhhPW49PT1vPyhlLXIpL3UrNiooZTxyKTplPT09bz8oci1uKS91KzI6KG4tZSkvdSs0LHUvPWY8LjU/bytpOjItby1pLGEqPTYwKTp1PWY+MCYmZjwxPzA6YSxuZXcgQW4oYSx1LGYsdC5vcGFjaXR5KX0odCk6bmV3IEFuKHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBBbih0LG4sZSxyKXt0aGlzLmg9K3QsdGhpcy5zPStuLHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gVG4odCxuLGUpe3JldHVybiAyNTUqKHQ8NjA/bisoZS1uKSp0LzYwOnQ8MTgwP2U6dDwyNDA/bisoZS1uKSooMjQwLXQpLzYwOm4pfUt0KG5uLHZuLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmhleCgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLEt0KG1uLGJuLHRuKG5uLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgbW4odGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IG1uKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiAwPD10aGlzLnImJnRoaXMucjw9MjU1JiYwPD10aGlzLmcmJnRoaXMuZzw9MjU1JiYwPD10aGlzLmImJnRoaXMuYjw9MjU1JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIiMiK3huKHRoaXMucikreG4odGhpcy5nKSt4bih0aGlzLmIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKSxLdChBbixNbix0bihubix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEFuKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IEFuKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxuPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGU9dGhpcy5sLHI9ZSsoZTwuNT9lOjEtZSkqbixpPTIqZS1yO3JldHVybiBuZXcgbW4oVG4odD49MjQwP3QtMjQwOnQrMTIwLGksciksVG4odCxpLHIpLFRuKHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBObj1NYXRoLlBJLzE4MCxTbj0xODAvTWF0aC5QSSxFbj0uOTY0MjIsa249MSxDbj0uODI1MjEsUG49NC8yOSx6bj02LzI5LFJuPTMqem4qem4sTG49em4qem4qem47ZnVuY3Rpb24gRG4odCl7aWYodCBpbnN0YW5jZW9mIHFuKXJldHVybiBuZXcgcW4odC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygam4pe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBxbih0LmwsMCwwLHQub3BhY2l0eSk7dmFyIG49dC5oKk5uO3JldHVybiBuZXcgcW4odC5sLE1hdGguY29zKG4pKnQuYyxNYXRoLnNpbihuKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgbW58fCh0PV9uKHQpKTt2YXIgZSxyLGk9Rm4odC5yKSxvPUZuKHQuZyksYT1Gbih0LmIpLHU9T24oKC4yMjI1MDQ1KmkrLjcxNjg3ODYqbysuMDYwNjE2OSphKS9rbik7cmV0dXJuIGk9PT1vJiZvPT09YT9lPXI9dTooZT1PbigoLjQzNjA3NDcqaSsuMzg1MDY0OSpvKy4xNDMwODA0KmEpL0VuKSxyPU9uKCguMDEzOTMyMippKy4wOTcxMDQ1Km8rLjcxNDE3MzMqYSkvQ24pKSxuZXcgcW4oMTE2KnUtMTYsNTAwKihlLXUpLDIwMCoodS1yKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFVuKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Ebih0KTpuZXcgcW4odCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHFuKHQsbixlLHIpe3RoaXMubD0rdCx0aGlzLmE9K24sdGhpcy5iPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBPbih0KXtyZXR1cm4gdD5Mbj9NYXRoLnBvdyh0LDEvMyk6dC9SbitQbn1mdW5jdGlvbiBZbih0KXtyZXR1cm4gdD56bj90KnQqdDpSbioodC1Qbil9ZnVuY3Rpb24gQm4odCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBGbih0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBJbih0KXtpZih0IGluc3RhbmNlb2Ygam4pcmV0dXJuIG5ldyBqbih0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBxbnx8KHQ9RG4odCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBqbihOYU4sMCx0LmwsdC5vcGFjaXR5KTt2YXIgbj1NYXRoLmF0YW4yKHQuYix0LmEpKlNuO3JldHVybiBuZXcgam4objwwP24rMzYwOm4sTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gSG4odCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0luKHQpOm5ldyBqbih0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gam4odCxuLGUscil7dGhpcy5oPSt0LHRoaXMuYz0rbix0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfUt0KHFuLFVuLHRuKG5uLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHFuKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcW4odGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsbj1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLGU9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IG1uKEJuKDMuMTMzODU2MSoobj1FbipZbihuKSktMS42MTY4NjY3Kih0PWtuKlluKHQpKS0uNDkwNjE0NiooZT1DbipZbihlKSkpLEJuKC0uOTc4NzY4NCpuKzEuOTE2MTQxNSp0Ky4wMzM0NTQqZSksQm4oLjA3MTk0NTMqbi0uMjI4OTkxNCp0KzEuNDA1MjQyNyplKSx0aGlzLm9wYWNpdHkpfX0pKSxLdChqbixIbix0bihubix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqbih0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGpuKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIERuKHRoaXMpLnJnYigpfX0pKTt2YXIgWG49LS4xNDg2MSxHbj0xLjc4Mjc3LFZuPS0uMjkyMjcsJG49LS45MDY0OSxXbj0xLjk3Mjk0LFpuPVduKiRuLFFuPVduKkduLEpuPUduKlZuLSRuKlhuO2Z1bmN0aW9uIEtuKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgdGUpcmV0dXJuIG5ldyB0ZSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBtbnx8KHQ9X24odCkpO3ZhciBuPXQuci8yNTUsZT10LmcvMjU1LHI9dC5iLzI1NSxpPShKbipyK1puKm4tUW4qZSkvKEpuK1puLVFuKSxvPXItaSxhPShXbiooZS1pKS1WbipvKS8kbix1PU1hdGguc3FydChhKmErbypvKS8oV24qaSooMS1pKSksZj11P01hdGguYXRhbjIoYSxvKSpTbi0xMjA6TmFOO3JldHVybiBuZXcgdGUoZjwwP2YrMzYwOmYsdSxpLHQub3BhY2l0eSl9KHQpOm5ldyB0ZSh0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gdGUodCxuLGUscil7dGhpcy5oPSt0LHRoaXMucz0rbix0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIG5lKHQsbixlLHIsaSl7dmFyIG89dCp0LGE9byp0O3JldHVybigoMS0zKnQrMypvLWEpKm4rKDQtNipvKzMqYSkqZSsoMSszKnQrMypvLTMqYSkqcithKmkpLzZ9ZnVuY3Rpb24gZWUodCl7dmFyIG49dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9ZTw9MD9lPTA6ZT49MT8oZT0xLG4tMSk6TWF0aC5mbG9vcihlKm4pLGk9dFtyXSxvPXRbcisxXSxhPXI+MD90W3ItMV06MippLW8sdT1yPG4tMT90W3IrMl06MipvLWk7cmV0dXJuIG5lKChlLXIvbikqbixhLGksbyx1KX19ZnVuY3Rpb24gcmUodCl7dmFyIG49dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPU1hdGguZmxvb3IoKChlJT0xKTwwPysrZTplKSpuKSxpPXRbKHIrbi0xKSVuXSxvPXRbciVuXSxhPXRbKHIrMSklbl0sdT10WyhyKzIpJW5dO3JldHVybiBuZSgoZS1yL24pKm4saSxvLGEsdSl9fWZ1bmN0aW9uIGllKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvZSh0LG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCtlKm59fWZ1bmN0aW9uIGFlKHQsbil7dmFyIGU9bi10O3JldHVybiBlP29lKHQsZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTppZShpc05hTih0KT9uOnQpfWZ1bmN0aW9uIHVlKHQpe3JldHVybiAxPT0odD0rdCk/ZmU6ZnVuY3Rpb24obixlKXtyZXR1cm4gZS1uP2Z1bmN0aW9uKHQsbixlKXtyZXR1cm4gdD1NYXRoLnBvdyh0LGUpLG49TWF0aC5wb3cobixlKS10LGU9MS9lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnBvdyh0K3IqbixlKX19KG4sZSx0KTppZShpc05hTihuKT9lOm4pfX1mdW5jdGlvbiBmZSh0LG4pe3ZhciBlPW4tdDtyZXR1cm4gZT9vZSh0LGUpOmllKGlzTmFOKHQpP246dCl9S3QodGUsS24sdG4obm4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyB0ZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyB0ZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqTm4sbj0rdGhpcy5sLGU9aXNOYU4odGhpcy5zKT8wOnRoaXMucypuKigxLW4pLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IG1uKDI1NSoobitlKihYbipyK0duKmkpKSwyNTUqKG4rZSooVm4qciskbippKSksMjU1KihuK2UqKFduKnIpKSx0aGlzLm9wYWNpdHkpfX0pKTt2YXIgY2U9ZnVuY3Rpb24gdChuKXt2YXIgZT11ZShuKTtmdW5jdGlvbiByKHQsbil7dmFyIHI9ZSgodD1ibih0KSkuciwobj1ibihuKSkuciksaT1lKHQuZyxuLmcpLG89ZSh0LmIsbi5iKSxhPWZlKHQub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5yPXIobiksdC5nPWkobiksdC5iPW8obiksdC5vcGFjaXR5PWEobiksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBzZSh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGUscixpPW4ubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHU9bmV3IEFycmF5KGkpO2ZvcihlPTA7ZTxpOysrZSlyPWJuKG5bZV0pLG9bZV09ci5yfHwwLGFbZV09ci5nfHwwLHVbZV09ci5ifHwwO3JldHVybiBvPXQobyksYT10KGEpLHU9dCh1KSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPW8odCksci5nPWEodCksci5iPXUodCkscisiIn19fXZhciBsZT1zZShlZSksaGU9c2UocmUpO2Z1bmN0aW9uIGRlKHQsbil7dmFyIGUscj1uP24ubGVuZ3RoOjAsaT10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkocik7Zm9yKGU9MDtlPGk7KytlKW9bZV09bWUodFtlXSxuW2VdKTtmb3IoO2U8cjsrK2UpYVtlXT1uW2VdO3JldHVybiBmdW5jdGlvbih0KXtmb3IoZT0wO2U8aTsrK2UpYVtlXT1vW2VdKHQpO3JldHVybiBhfX1mdW5jdGlvbiBwZSh0LG4pe3ZhciBlPW5ldyBEYXRlO3JldHVybiBuLT10PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlLnNldFRpbWUodCtuKnIpLGV9fWZ1bmN0aW9uIHZlKHQsbil7cmV0dXJuIG4tPXQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBnZSh0LG4pe3ZhciBlLHI9e30saT17fTtmb3IoZSBpbiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2Ygbnx8KG49e30pLG4pZSBpbiB0P3JbZV09bWUodFtlXSxuW2VdKTppW2VdPW5bZV07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihlIGluIHIpaVtlXT1yW2VdKHQpO3JldHVybiBpfX12YXIgeWU9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLF9lPW5ldyBSZWdFeHAoeWUuc291cmNlLCJnIik7ZnVuY3Rpb24gYmUodCxuKXt2YXIgZSxyLGksbz15ZS5sYXN0SW5kZXg9X2UubGFzdEluZGV4PTAsYT0tMSx1PVtdLGY9W107Zm9yKHQrPSIiLG4rPSIiOyhlPXllLmV4ZWModCkpJiYocj1fZS5leGVjKG4pKTspKGk9ci5pbmRleCk+byYmKGk9bi5zbGljZShvLGkpLHVbYV0/dVthXSs9aTp1WysrYV09aSksKGU9ZVswXSk9PT0ocj1yWzBdKT91W2FdP3VbYV0rPXI6dVsrK2FdPXI6KHVbKythXT1udWxsLGYucHVzaCh7aTphLHg6dmUoZSxyKX0pKSxvPV9lLmxhc3RJbmRleDtyZXR1cm4gbzxuLmxlbmd0aCYmKGk9bi5zbGljZShvKSx1W2FdP3VbYV0rPWk6dVsrK2FdPWkpLHUubGVuZ3RoPDI/ZlswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQobikrIiJ9fShmWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0obik6KG49Zi5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9MDtyPG47KytyKXVbKGU9ZltyXSkuaV09ZS54KHQpO3JldHVybiB1LmpvaW4oIiIpfSl9ZnVuY3Rpb24gbWUodCxuKXt2YXIgZSxyPXR5cGVvZiBuO3JldHVybiBudWxsPT1ufHwiYm9vbGVhbiI9PT1yP2llKG4pOigibnVtYmVyIj09PXI/dmU6InN0cmluZyI9PT1yPyhlPXZuKG4pKT8obj1lLGNlKTpiZTpuIGluc3RhbmNlb2Ygdm4/Y2U6biBpbnN0YW5jZW9mIERhdGU/cGU6QXJyYXkuaXNBcnJheShuKT9kZToiZnVuY3Rpb24iIT10eXBlb2Ygbi52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2Ygbi50b1N0cmluZ3x8aXNOYU4obik/Z2U6dmUpKHQsbil9ZnVuY3Rpb24geGUodCxuKXtyZXR1cm4gbi09dD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZCh0K24qZSl9fXZhciB3ZSxNZSxBZSxUZSxOZT0xODAvTWF0aC5QSSxTZT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBFZSh0LG4sZSxyLGksbyl7dmFyIGEsdSxmO3JldHVybihhPU1hdGguc3FydCh0KnQrbipuKSkmJih0Lz1hLG4vPWEpLChmPXQqZStuKnIpJiYoZS09dCpmLHItPW4qZiksKHU9TWF0aC5zcXJ0KGUqZStyKnIpKSYmKGUvPXUsci89dSxmLz11KSx0KnI8biplJiYodD0tdCxuPS1uLGY9LWYsYT0tYSkse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIobix0KSpOZSxza2V3WDpNYXRoLmF0YW4oZikqTmUsc2NhbGVYOmEsc2NhbGVZOnV9fWZ1bmN0aW9uIGtlKHQsbixlLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihvLGEpe3ZhciB1PVtdLGY9W107cmV0dXJuIG89dChvKSxhPXQoYSksZnVuY3Rpb24odCxyLGksbyxhLHUpe2lmKHQhPT1pfHxyIT09byl7dmFyIGY9YS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLG4sbnVsbCxlKTt1LnB1c2goe2k6Zi00LHg6dmUodCxpKX0se2k6Zi0yLHg6dmUocixvKX0pfWVsc2UoaXx8bykmJmEucHVzaCgidHJhbnNsYXRlKCIraStuK28rZSl9KG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSx1LGYpLGZ1bmN0aW9uKHQsbixlLG8pe3QhPT1uPyh0LW4+MTgwP24rPTM2MDpuLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6ZS5wdXNoKGkoZSkrInJvdGF0ZSgiLG51bGwsciktMix4OnZlKHQsbil9KSk6biYmZS5wdXNoKGkoZSkrInJvdGF0ZSgiK24rcil9KG8ucm90YXRlLGEucm90YXRlLHUsZiksZnVuY3Rpb24odCxuLGUsbyl7dCE9PW4/by5wdXNoKHtpOmUucHVzaChpKGUpKyJza2V3WCgiLG51bGwsciktMix4OnZlKHQsbil9KTpuJiZlLnB1c2goaShlKSsic2tld1goIituK3IpfShvLnNrZXdYLGEuc2tld1gsdSxmKSxmdW5jdGlvbih0LG4sZSxyLG8sYSl7aWYodCE9PWV8fG4hPT1yKXt2YXIgdT1vLnB1c2goaShvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnUtNCx4OnZlKHQsZSl9LHtpOnUtMix4OnZlKG4scil9KX1lbHNlIDE9PT1lJiYxPT09cnx8by5wdXNoKGkobykrInNjYWxlKCIrZSsiLCIrcisiKSIpfShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSx1LGYpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPS0xLHI9Zi5sZW5ndGg7KytlPHI7KXVbKG49ZltlXSkuaV09bi54KHQpO3JldHVybiB1LmpvaW4oIiIpfX19dmFyIENlPWtlKGZ1bmN0aW9uKHQpe3JldHVybiJub25lIj09PXQ/U2U6KHdlfHwod2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksTWU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEFlPWRvY3VtZW50LmRlZmF1bHRWaWV3KSx3ZS5zdHlsZS50cmFuc2Zvcm09dCx0PUFlLmdldENvbXB1dGVkU3R5bGUoTWUuYXBwZW5kQ2hpbGQod2UpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLE1lLnJlbW92ZUNoaWxkKHdlKSxFZSgrKHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpKVswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSwicHgsICIsInB4KSIsImRlZykiKSxQZT1rZShmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9TZTooVGV8fChUZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxUZS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9VGUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/RWUoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6U2UpfSwiLCAiLCIpIiwiKSIpLHplPU1hdGguU1FSVDIsUmU9MixMZT00LERlPTFlLTEyO2Z1bmN0aW9uIFVlKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIHFlKHQsbil7dmFyIGUscixpPXRbMF0sbz10WzFdLGE9dFsyXSx1PW5bMF0sZj1uWzFdLGM9blsyXSxzPXUtaSxsPWYtbyxoPXMqcytsKmw7aWYoaDxEZSlyPU1hdGgubG9nKGMvYSkvemUsZT1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnMsbyt0KmwsYSpNYXRoLmV4cCh6ZSp0KnIpXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoaCkscD0oYypjLWEqYStMZSpoKS8oMiphKlJlKmQpLHY9KGMqYy1hKmEtTGUqaCkvKDIqYypSZSpkKSxnPU1hdGgubG9nKE1hdGguc3FydChwKnArMSktcCkseT1NYXRoLmxvZyhNYXRoLnNxcnQodip2KzEpLXYpO3I9KHktZykvemUsZT1mdW5jdGlvbih0KXt2YXIgbixlPXQqcix1PVVlKGcpLGY9YS8oUmUqZCkqKHUqKG49emUqZStnLCgobj1NYXRoLmV4cCgyKm4pKS0xKS8obisxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KGcpKTtyZXR1cm5baStmKnMsbytmKmwsYSp1L1VlKHplKmUrZyldfX1yZXR1cm4gZS5kdXJhdGlvbj0xZTMqcixlfWZ1bmN0aW9uIE9lKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQoKG49TW4obikpLmgsKGU9TW4oZSkpLmgpLGk9ZmUobi5zLGUucyksbz1mZShuLmwsZS5sKSxhPWZlKG4ub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPXIodCksbi5zPWkodCksbi5sPW8odCksbi5vcGFjaXR5PWEodCksbisiIn19fXZhciBZZT1PZShhZSksQmU9T2UoZmUpO2Z1bmN0aW9uIEZlKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQoKG49SG4obikpLmgsKGU9SG4oZSkpLmgpLGk9ZmUobi5jLGUuYyksbz1mZShuLmwsZS5sKSxhPWZlKG4ub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPXIodCksbi5jPWkodCksbi5sPW8odCksbi5vcGFjaXR5PWEodCksbisiIn19fXZhciBJZT1GZShhZSksSGU9RmUoZmUpO2Z1bmN0aW9uIGplKHQpe3JldHVybiBmdW5jdGlvbiBuKGUpe2Z1bmN0aW9uIHIobixyKXt2YXIgaT10KChuPUtuKG4pKS5oLChyPUtuKHIpKS5oKSxvPWZlKG4ucyxyLnMpLGE9ZmUobi5sLHIubCksdT1mZShuLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1pKHQpLG4ucz1vKHQpLG4ubD1hKE1hdGgucG93KHQsZSkpLG4ub3BhY2l0eT11KHQpLG4rIiJ9fXJldHVybiBlPStlLHIuZ2FtbWE9bixyfSgxKX12YXIgWGU9amUoYWUpLEdlPWplKGZlKTt2YXIgVmUsJGUsV2U9MCxaZT0wLFFlPTAsSmU9MWUzLEtlPTAsdHI9MCxucj0wLGVyPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHJyPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIGlyKCl7cmV0dXJuIHRyfHwocnIob3IpLHRyPWVyLm5vdygpK25yKX1mdW5jdGlvbiBvcigpe3RyPTB9ZnVuY3Rpb24gYXIoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIHVyKHQsbixlKXt2YXIgcj1uZXcgYXI7cmV0dXJuIHIucmVzdGFydCh0LG4sZSkscn1mdW5jdGlvbiBmcigpe2lyKCksKytXZTtmb3IodmFyIHQsbj1WZTtuOykodD10ci1uLl90aW1lKT49MCYmbi5fY2FsbC5jYWxsKG51bGwsdCksbj1uLl9uZXh0Oy0tV2V9ZnVuY3Rpb24gY3IoKXt0cj0oS2U9ZXIubm93KCkpK25yLFdlPVplPTA7dHJ5e2ZyKCl9ZmluYWxseXtXZT0wLGZ1bmN0aW9uKCl7dmFyIHQsbixlPVZlLHI9MS8wO2Zvcig7ZTspZS5fY2FsbD8ocj5lLl90aW1lJiYocj1lLl90aW1lKSx0PWUsZT1lLl9uZXh0KToobj1lLl9uZXh0LGUuX25leHQ9bnVsbCxlPXQ/dC5fbmV4dD1uOlZlPW4pOyRlPXQsbHIocil9KCksdHI9MH19ZnVuY3Rpb24gc3IoKXt2YXIgdD1lci5ub3coKSxuPXQtS2U7bj5KZSYmKG5yLT1uLEtlPXQpfWZ1bmN0aW9uIGxyKHQpe1dlfHwoWmUmJihaZT1jbGVhclRpbWVvdXQoWmUpKSx0LXRyPjI0Pyh0PDEvMCYmKFplPXNldFRpbWVvdXQoY3IsdC1lci5ub3coKS1ucikpLFFlJiYoUWU9Y2xlYXJJbnRlcnZhbChRZSkpKTooUWV8fChLZT1lci5ub3coKSxRZT1zZXRJbnRlcnZhbChzcixKZSkpLFdlPTEscnIoY3IpKSl9ZnVuY3Rpb24gaHIodCxuLGUpe3ZhciByPW5ldyBhcjtyZXR1cm4gbj1udWxsPT1uPzA6K24sci5yZXN0YXJ0KGZ1bmN0aW9uKGUpe3Iuc3RvcCgpLHQoZStuKX0sbixlKSxyfWFyLnByb3RvdHlwZT11ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFyLHJlc3RhcnQ6ZnVuY3Rpb24odCxuLGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7ZT0obnVsbD09ZT9pcigpOitlKSsobnVsbD09bj8wOituKSx0aGlzLl9uZXh0fHwkZT09PXRoaXN8fCgkZT8kZS5fbmV4dD10aGlzOlZlPXRoaXMsJGU9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9ZSxscigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxscigpKX19O3ZhciBkcj1JKCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLHByPVtdLHZyPTAsZ3I9MSx5cj0yLF9yPTMsYnI9NCxtcj01LHhyPTY7ZnVuY3Rpb24gd3IodCxuLGUscixpLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKGUgaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24odCxuLGUpe3ZhciByLGk9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyhmKXt2YXIgYyxzLGwsaDtpZihlLnN0YXRlIT09Z3IpcmV0dXJuIHUoKTtmb3IoYyBpbiBpKWlmKChoPWlbY10pLm5hbWU9PT1lLm5hbWUpe2lmKGguc3RhdGU9PT1fcilyZXR1cm4gaHIobyk7aC5zdGF0ZT09PWJyPyhoLnN0YXRlPXhyLGgudGltZXIuc3RvcCgpLGgub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18saC5pbmRleCxoLmdyb3VwKSxkZWxldGUgaVtjXSk6K2M8biYmKGguc3RhdGU9eHIsaC50aW1lci5zdG9wKCksZGVsZXRlIGlbY10pfWlmKGhyKGZ1bmN0aW9uKCl7ZS5zdGF0ZT09PV9yJiYoZS5zdGF0ZT1icixlLnRpbWVyLnJlc3RhcnQoYSxlLmRlbGF5LGUudGltZSksYShmKSl9KSxlLnN0YXRlPXlyLGUub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGUuc3RhdGU9PT15cil7Zm9yKGUuc3RhdGU9X3Iscj1uZXcgQXJyYXkobD1lLnR3ZWVuLmxlbmd0aCksYz0wLHM9LTE7YzxsOysrYykoaD1lLnR3ZWVuW2NdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCkpJiYoclsrK3NdPWgpO3IubGVuZ3RoPXMrMX19ZnVuY3Rpb24gYShuKXtmb3IodmFyIGk9bjxlLmR1cmF0aW9uP2UuZWFzZS5jYWxsKG51bGwsbi9lLmR1cmF0aW9uKTooZS50aW1lci5yZXN0YXJ0KHUpLGUuc3RhdGU9bXIsMSksbz0tMSxhPXIubGVuZ3RoOysrbzxhOylyW29dLmNhbGwobnVsbCxpKTtlLnN0YXRlPT09bXImJihlLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksdSgpKX1mdW5jdGlvbiB1KCl7Zm9yKHZhciByIGluIGUuc3RhdGU9eHIsZS50aW1lci5zdG9wKCksZGVsZXRlIGlbbl0saSlyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufWlbbl09ZSxlLnRpbWVyPXVyKGZ1bmN0aW9uKHQpe2Uuc3RhdGU9Z3IsZS50aW1lci5yZXN0YXJ0KG8sZS5kZWxheSxlLnRpbWUpLGUuZGVsYXk8PXQmJm8odC1lLmRlbGF5KX0sMCxlLnRpbWUpfSh0LGUse25hbWU6bixpbmRleDpyLGdyb3VwOmksb246ZHIsdHdlZW46cHIsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6dnJ9KX1mdW5jdGlvbiBNcih0LG4pe3ZhciBlPVRyKHQsbik7aWYoZS5zdGF0ZT52cil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEFyKHQsbil7dmFyIGU9VHIodCxuKTtpZihlLnN0YXRlPnlyKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc3RhcnRlZCIpO3JldHVybiBlfWZ1bmN0aW9uIFRyKHQsbil7dmFyIGU9dC5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW25dKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gTnIodCxuKXt2YXIgZSxyLGksbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihpIGluIG49bnVsbD09bj9udWxsOm4rIiIsbykoZT1vW2ldKS5uYW1lPT09bj8ocj1lLnN0YXRlPnlyJiZlLnN0YXRlPG1yLGUuc3RhdGU9eHIsZS50aW1lci5zdG9wKCksciYmZS5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGRlbGV0ZSBvW2ldKTphPSExO2EmJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gU3IodCxuLGUpe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1Bcih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW25dPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24odCl7cmV0dXJuIFRyKHQscikudmFsdWVbbl19fWZ1bmN0aW9uIEVyKHQsbil7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2Ygbj92ZTpuIGluc3RhbmNlb2Ygdm4/Y2U6KGU9dm4obikpPyhuPWUsY2UpOmJlKSh0LG4pfXZhciBrcj1MdC5wcm90b3R5cGUuY29uc3RydWN0b3I7dmFyIENyPTA7ZnVuY3Rpb24gUHIodCxuLGUscil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1uLHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1yfWZ1bmN0aW9uIHpyKHQpe3JldHVybiBMdCgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gUnIoKXtyZXR1cm4rK0NyfXZhciBMcj1MdC5wcm90b3R5cGU7ZnVuY3Rpb24gRHIodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9ZnVuY3Rpb24gVXIodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9UHIucHJvdG90eXBlPXpyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UHIsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9USh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9MDthPGk7KythKWZvcih2YXIgdSxmLGM9clthXSxzPWMubGVuZ3RoLGw9b1thXT1uZXcgQXJyYXkocyksaD0wO2g8czsrK2gpKHU9Y1toXSkmJihmPXQuY2FsbCh1LHUuX19kYXRhX18saCxjKSkmJigiX19kYXRhX18iaW4gdSYmKGYuX19kYXRhX189dS5fX2RhdGFfXyksbFtoXT1mLHdyKGxbaF0sbixlLGgsbCxUcih1LGUpKSk7cmV0dXJuIG5ldyBQcihvLHRoaXMuX3BhcmVudHMsbixlKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Syh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89W10sYT1bXSx1PTA7dTxpOysrdSlmb3IodmFyIGYsYz1yW3VdLHM9Yy5sZW5ndGgsbD0wO2w8czsrK2wpaWYoZj1jW2xdKXtmb3IodmFyIGgsZD10LmNhbGwoZixmLl9fZGF0YV9fLGwsYykscD1UcihmLGUpLHY9MCxnPWQubGVuZ3RoO3Y8ZzsrK3YpKGg9ZFt2XSkmJndyKGgsbixlLHYsZCxwKTtvLnB1c2goZCksYS5wdXNoKGYpfXJldHVybiBuZXcgUHIobyxhLG4sZSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cnQodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlmb3IodmFyIG8sYT1uW2ldLHU9YS5sZW5ndGgsZj1yW2ldPVtdLGM9MDtjPHU7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJmYucHVzaChvKTtyZXR1cm4gbmV3IFByKHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPXQuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9ZS5sZW5ndGgsbz1NYXRoLm1pbihyLGkpLGE9bmV3IEFycmF5KHIpLHU9MDt1PG87Kyt1KWZvcih2YXIgZixjPW5bdV0scz1lW3VdLGw9Yy5sZW5ndGgsaD1hW3VdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZCkoZj1jW2RdfHxzW2RdKSYmKGhbZF09Zik7Zm9yKDt1PHI7Kyt1KWFbdV09blt1XTtyZXR1cm4gbmV3IFByKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrcih0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxuPXRoaXMuX2lkLGU9UnIoKSxyPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYSx1PXJbb10sZj11Lmxlbmd0aCxjPTA7YzxmOysrYylpZihhPXVbY10pe3ZhciBzPVRyKGEsbik7d3IoYSx0LGUsYyx1LHt0aW1lOnMudGltZStzLmRlbGF5K3MuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlfSl9cmV0dXJuIG5ldyBQcihyLHRoaXMuX3BhcmVudHMsdCxlKX0sY2FsbDpMci5jYWxsLG5vZGVzOkxyLm5vZGVzLG5vZGU6THIubm9kZSxzaXplOkxyLnNpemUsZW1wdHk6THIuZW1wdHksZWFjaDpMci5lYWNoLG9uOmZ1bmN0aW9uKHQsbil7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9Ucih0aGlzLm5vZGUoKSxlKS5vbi5vbih0KTp0aGlzLmVhY2goZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbz1mdW5jdGlvbih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYodD10LnNsaWNlKDAsbikpLCF0fHwic3RhcnQiPT09dH0pfShuKT9NcjpBcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsdCksdT1hLm9uO3UhPT1yJiYoaT0ocj11KS5jb3B5KCkpLm9uKG4sZSksYS5vbj1pfX0oZSx0LG4pKX0sYXR0cjpmdW5jdGlvbih0LG4pe3ZhciBlPSQodCkscj0idHJhbnNmb3JtIj09PWU/UGU6RXI7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIG4/KGUubG9jYWw/ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx1PWUodGhpcyk7aWYobnVsbCE9dSlyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09dT9udWxsOmE9PT1yJiZ1PT09aT9vOm89bihyPWEsaT11KTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHU9ZSh0aGlzKTtpZihudWxsIT11KXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PXU/bnVsbDphPT09ciYmdT09PWk/bzpvPW4ocj1hLGk9dSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fSkoZSxyLFNyKHRoaXMsImF0dHIuIit0LG4pKTpudWxsPT1uPyhlLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKGUpOihlLmxvY2FsP2Z1bmN0aW9uKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fTpmdW5jdGlvbih0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fSkoZSxyLG4rIiIpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsbil7dmFyIGU9ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjt2YXIgcj0kKHQpO3JldHVybiB0aGlzLnR3ZWVuKGUsKHIubG9jYWw/ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpcyxyPW4uYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihuKXtlLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKG4pKX19cmV0dXJuIGUuX3ZhbHVlPW4sZX06ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpcyxyPW4uYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihuKXtlLnNldEF0dHJpYnV0ZSh0LHIobikpfX1yZXR1cm4gZS5fdmFsdWU9bixlfSkocixuKSl9LHN0eWxlOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9DZTpFcjtyZXR1cm4gbnVsbD09bj90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LG4pe3ZhciBlLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1sdCh0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksbHQodGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PWUmJmE9PT1yP2k6aT1uKGU9byxyPWEpfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19KHQpKTp0aGlzLnN0eWxlVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWx0KHRoaXMsdCksdT1lKHRoaXMpO3JldHVybiBudWxsPT11JiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSx1PWx0KHRoaXMsdCkpLGE9PT11P251bGw6YT09PXImJnU9PT1pP286bz1uKHI9YSxpPXUpfX0odCxyLFNyKHRoaXMsInN0eWxlLiIrdCxuKSk6ZnVuY3Rpb24odCxuLGUpe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bHQodGhpcyx0KTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fSh0LHIsbisiIiksZSl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxuLGUpe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1uKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIoKXt2YXIgcj10aGlzLGk9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKG4pe3Iuc3R5bGUuc2V0UHJvcGVydHkodCxpKG4pLGUpfX1yZXR1cm4gci5fdmFsdWU9bixyfSh0LG4sbnVsbD09ZT8iIjplKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1uPyIiOm59fShTcih0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwodD10aGlzLl9pZCxmdW5jdGlvbigpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGUgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2UhPT10KXJldHVybjtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfSkpO3ZhciB0fSx0d2VlbjpmdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9VHIodGhpcy5ub2RlKCksZSkudHdlZW4sbz0wLGE9aS5sZW5ndGg7bzxhOysrbylpZigocj1pW29dKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP2Z1bmN0aW9uKHQsbil7dmFyIGUscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1Bcih0aGlzLHQpLG89aS50d2VlbjtpZihvIT09ZSlmb3IodmFyIGE9MCx1PShyPWU9bykubGVuZ3RoO2E8dTsrK2EpaWYoclthXS5uYW1lPT09bil7KHI9ci5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31pLnR3ZWVuPXJ9fTpmdW5jdGlvbih0LG4sZSl7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QXIodGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PXIpe2k9KHI9YSkuc2xpY2UoKTtmb3IodmFyIHU9e25hbWU6bix2YWx1ZTplfSxmPTAsYz1pLmxlbmd0aDtmPGM7KytmKWlmKGlbZl0ubmFtZT09PW4pe2lbZl09dTticmVha31mPT09YyYmaS5wdXNoKHUpfW8udHdlZW49aX19KShlLHQsbikpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7TXIodGhpcyx0KS5kZWxheT0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7TXIodGhpcyx0KS5kZWxheT1ufX0pKG4sdCkpOlRyKHRoaXMubm9kZSgpLG4pLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7QXIodGhpcyx0KS5kdXJhdGlvbj0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7QXIodGhpcyx0KS5kdXJhdGlvbj1ufX0pKG4sdCkpOlRyKHRoaXMubm9kZSgpLG4pLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbih0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtBcih0aGlzLHQpLmVhc2U9bn19KG4sdCkpOlRyKHRoaXMubm9kZSgpLG4pLmVhc2V9fTt2YXIgcXI9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfSgzKSxPcj1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LG4pfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfSgzKSxZcj1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LG4pOjItTWF0aC5wb3coMi10LG4pKS8yfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfSgzKSxCcj1NYXRoLlBJLEZyPUJyLzI7ZnVuY3Rpb24gSXIodCl7cmV0dXJuKDEtTWF0aC5jb3MoQnIqdCkpLzJ9ZnVuY3Rpb24gSHIodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiBqcih0KXtyZXR1cm4oKHQqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtdCp0KTpNYXRoLnNxcnQoMS0odC09MikqdCkrMSkvMn12YXIgWHI9NC8xMSxHcj02LzExLFZyPTgvMTEsJHI9Ljc1LFdyPTkvMTEsWnI9MTAvMTEsUXI9LjkzNzUsSnI9MjEvMjIsS3I9NjMvNjQsdGk9MS9Yci9YcjtmdW5jdGlvbiBuaSh0KXtyZXR1cm4odD0rdCk8WHI/dGkqdCp0OnQ8VnI/dGkqKHQtPUdyKSp0KyRyOnQ8WnI/dGkqKHQtPVdyKSp0K1FyOnRpKih0LT1KcikqdCtLcn12YXIgZWk9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiB0KnQqKChuKzEpKnQtbil9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfSgxLjcwMTU4KSxyaT1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuLS10KnQqKChuKzEpKnQrbikrMX1yZXR1cm4gbj0rbixlLm92ZXJzaG9vdD10LGV9KDEuNzAxNTgpLGlpPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigobisxKSp0LW4pOih0LT0yKSp0KigobisxKSp0K24pKzIpLzJ9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfSgxLjcwMTU4KSxvaT0yKk1hdGguUEksYWk9ZnVuY3Rpb24gdChuLGUpe3ZhciByPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89b2kpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG4qTWF0aC5wb3coMiwxMCotLXQpKk1hdGguc2luKChyLXQpL2UpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqb2kpfSxpLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxpfSgxLC4zKSx1aT1mdW5jdGlvbiB0KG4sZSl7dmFyIHI9TWF0aC5hc2luKDEvKG49TWF0aC5tYXgoMSxuKSkpKihlLz1vaSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMS1uKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQrcikvZSl9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4sZSpvaSl9LGkucGVyaW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSl9LGl9KDEsLjMpLGZpPWZ1bmN0aW9uIHQobixlKXt2YXIgcj1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPW9pKTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9uKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKHItdCkvZSk6Mi1uKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChyK3QpL2UpKS8yfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqb2kpfSxpLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxpfSgxLC4zKSxjaT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6VXJ9O2Z1bmN0aW9uIHNpKHQsbil7Zm9yKHZhciBlOyEoZT10Ll9fdHJhbnNpdGlvbil8fCEoZT1lW25dKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIGNpLnRpbWU9aXIoKSxjaTtyZXR1cm4gZX1MdC5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtOcih0aGlzLHQpfSl9LEx0LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuLGU7dCBpbnN0YW5jZW9mIFByPyhuPXQuX2lkLHQ9dC5fbmFtZSk6KG49UnIoKSwoZT1jaSkudGltZT1pcigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEsdT1yW29dLGY9dS5sZW5ndGgsYz0wO2M8ZjsrK2MpKGE9dVtjXSkmJndyKGEsdCxuLGMsdSxlfHxzaShhLG4pKTtyZXR1cm4gbmV3IFByKHIsdGhpcy5fcGFyZW50cyx0LG4pfTt2YXIgbGk9W251bGxdO2Z1bmN0aW9uIGhpKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBkaSh0LG4sZSl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9bix0aGlzLnNlbGVjdGlvbj1lfWZ1bmN0aW9uIHBpKCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiB2aSgpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBnaT17bmFtZToiZHJhZyJ9LHlpPXtuYW1lOiJzcGFjZSJ9LF9pPXtuYW1lOiJoYW5kbGUifSxiaT17bmFtZToiY2VudGVyIn0sbWk9e25hbWU6IngiLGhhbmRsZXM6WyJlIiwidyJdLm1hcChFaSksaW5wdXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCYmW1t0WzBdLG5bMF1bMV1dLFt0WzFdLG5bMV1bMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVswXSx0WzFdWzBdXX19LHhpPXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAoRWkpLGlucHV0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQmJltbblswXVswXSx0WzBdXSxbblsxXVswXSx0WzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMV0sdFsxXVsxXV19fSx3aT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoRWkpLGlucHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxNaT17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sQWk9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFRpPXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxOaT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxTaT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBFaSh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBraSgpe3JldHVybiF0LmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiBDaSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBQaSh0KXtmb3IoOyF0Ll9fYnJ1c2g7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdC5fX2JydXNofWZ1bmN0aW9uIHppKHQpe3JldHVybiB0WzBdWzBdPT09dFsxXVswXXx8dFswXVsxXT09PXRbMV1bMV19ZnVuY3Rpb24gUmkobil7dmFyIGUscj1DaSxpPWtpLG89SSh1LCJzdGFydCIsImJydXNoIiwiZW5kIiksYT02O2Z1bmN0aW9uIHUodCl7dmFyIGU9dC5wcm9wZXJ0eSgiX19icnVzaCIsaCkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW0VpKCJvdmVybGF5IildKTtlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLE1pLm92ZXJsYXkpLm1lcmdlKGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1QaSh0aGlzKS5leHRlbnQ7RHQodGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSksdC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5kYXRhKFtFaSgic2VsZWN0aW9uIildKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwic2VsZWN0aW9uIikuYXR0cigiY3Vyc29yIixNaS5zZWxlY3Rpb24pLmF0dHIoImZpbGwiLCIjNzc3IikuYXR0cigiZmlsbC1vcGFjaXR5IiwuMykuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgcj10LnNlbGVjdEFsbCgiLmhhbmRsZSIpLmRhdGEobi5oYW5kbGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KTtyLmV4aXQoKS5yZW1vdmUoKSxyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJoYW5kbGUgaGFuZGxlLS0iK3QudHlwZX0pLmF0dHIoImN1cnNvciIsZnVuY3Rpb24odCl7cmV0dXJuIE1pW3QudHlwZV19KSx0LmVhY2goZikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCB0b3VjaHN0YXJ0LmJydXNoIixsKX1mdW5jdGlvbiBmKCl7dmFyIHQ9RHQodGhpcyksbj1QaSh0aGlzKS5zZWxlY3Rpb247bj8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsblswXVswXSkuYXR0cigieSIsblswXVsxXSkuYXR0cigid2lkdGgiLG5bMV1bMF0tblswXVswXSkuYXR0cigiaGVpZ2h0IixuWzFdWzFdLW5bMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZVt0LnR5cGUubGVuZ3RoLTFdP25bMV1bMF0tYS8yOm5bMF1bMF0tYS8yfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP25bMV1bMV0tYS8yOm5bMF1bMV0tYS8yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiJuIj09PXQudHlwZXx8InMiPT09dC50eXBlP25bMV1bMF0tblswXVswXSthOmF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZXx8InciPT09dC50eXBlP25bMV1bMV0tblswXVsxXSthOmF9KSk6dC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGModCxuKXtyZXR1cm4gdC5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBzKHQsbil9ZnVuY3Rpb24gcyh0LG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1uLHRoaXMuc3RhdGU9dC5fX2JydXNoLHRoaXMuYWN0aXZlPTB9ZnVuY3Rpb24gbCgpe2lmKHQuZXZlbnQudG91Y2hlcyl7aWYodC5ldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg8dC5ldmVudC50b3VjaGVzLmxlbmd0aClyZXR1cm4gdmkoKX1lbHNlIGlmKGUpcmV0dXJuO2lmKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgcixvLGEsdSxzLGwsaCxkLHAsdixnLHksXyxiPXRoaXMsbT10LmV2ZW50LnRhcmdldC5fX2RhdGFfXy50eXBlLHg9InNlbGVjdGlvbiI9PT0odC5ldmVudC5tZXRhS2V5P209Im92ZXJsYXkiOm0pP2dpOnQuZXZlbnQuYWx0S2V5P2JpOl9pLHc9bj09PXhpP251bGw6TmlbbV0sTT1uPT09bWk/bnVsbDpTaVttXSxBPVBpKGIpLFQ9QS5leHRlbnQsTj1BLnNlbGVjdGlvbixTPVRbMF1bMF0sRT1UWzBdWzFdLGs9VFsxXVswXSxDPVRbMV1bMV0sUD13JiZNJiZ0LmV2ZW50LnNoaWZ0S2V5LHo9RnQoYiksUj16LEw9YyhiLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT1tP0Euc2VsZWN0aW9uPU49W1tyPW49PT14aT9TOnpbMF0sYT1uPT09bWk/RTp6WzFdXSxbcz1uPT09eGk/azpyLGg9bj09PW1pP0M6YV1dOihyPU5bMF1bMF0sYT1OWzBdWzFdLHM9TlsxXVswXSxoPU5bMV1bMV0pLG89cix1PWEsbD1zLGQ9aDt2YXIgRD1EdChiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxVPUQuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsTWlbbV0pO2lmKHQuZXZlbnQudG91Y2hlcylELm9uKCJ0b3VjaG1vdmUuYnJ1c2giLE8sITApLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsQiwhMCk7ZWxzZXt2YXIgcT1EdCh0LmV2ZW50LnZpZXcpLm9uKCJrZXlkb3duLmJydXNoIixmdW5jdGlvbigpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6UD13JiZNO2JyZWFrO2Nhc2UgMTg6eD09PV9pJiYodyYmKHM9bC1wKncscj1vK3AqdyksTSYmKGg9ZC12Kk0sYT11K3YqTSkseD1iaSxZKCkpO2JyZWFrO2Nhc2UgMzI6eCE9PV9pJiZ4IT09Yml8fCh3PDA/cz1sLXA6dz4wJiYocj1vLXApLE08MD9oPWQtdjpNPjAmJihhPXUtdikseD15aSxVLmF0dHIoImN1cnNvciIsTWkuc2VsZWN0aW9uKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXZpKCl9LCEwKS5vbigia2V5dXAuYnJ1c2giLGZ1bmN0aW9uKCl7c3dpdGNoKHQuZXZlbnQua2V5Q29kZSl7Y2FzZSAxNjpQJiYoeT1fPVA9ITEsWSgpKTticmVhaztjYXNlIDE4Ong9PT1iaSYmKHc8MD9zPWw6dz4wJiYocj1vKSxNPDA/aD1kOk0+MCYmKGE9dSkseD1faSxZKCkpO2JyZWFrO2Nhc2UgMzI6eD09PXlpJiYodC5ldmVudC5hbHRLZXk/KHcmJihzPWwtcCp3LHI9bytwKncpLE0mJihoPWQtdipNLGE9dSt2Kk0pLHg9YmkpOih3PDA/cz1sOnc+MCYmKHI9byksTTwwP2g9ZDpNPjAmJihhPXUpLHg9X2kpLFUuYXR0cigiY3Vyc29yIixNaVttXSksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn12aSgpfSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsTywhMCkub24oIm1vdXNldXAuYnJ1c2giLEIsITApO1h0KHQuZXZlbnQudmlldyl9cGkoKSxOcihiKSxmLmNhbGwoYiksTC5zdGFydCgpfWZ1bmN0aW9uIE8oKXt2YXIgdD1GdChiKTshUHx8eXx8X3x8KE1hdGguYWJzKHRbMF0tUlswXSk+TWF0aC5hYnModFsxXS1SWzFdKT9fPSEwOnk9ITApLFI9dCxnPSEwLHZpKCksWSgpfWZ1bmN0aW9uIFkoKXt2YXIgdDtzd2l0Y2gocD1SWzBdLXpbMF0sdj1SWzFdLXpbMV0seCl7Y2FzZSB5aTpjYXNlIGdpOncmJihwPU1hdGgubWF4KFMtcixNYXRoLm1pbihrLXMscCkpLG89citwLGw9cytwKSxNJiYodj1NYXRoLm1heChFLWEsTWF0aC5taW4oQy1oLHYpKSx1PWErdixkPWgrdik7YnJlYWs7Y2FzZSBfaTp3PDA/KHA9TWF0aC5tYXgoUy1yLE1hdGgubWluKGstcixwKSksbz1yK3AsbD1zKTp3PjAmJihwPU1hdGgubWF4KFMtcyxNYXRoLm1pbihrLXMscCkpLG89cixsPXMrcCksTTwwPyh2PU1hdGgubWF4KEUtYSxNYXRoLm1pbihDLWEsdikpLHU9YSt2LGQ9aCk6TT4wJiYodj1NYXRoLm1heChFLWgsTWF0aC5taW4oQy1oLHYpKSx1PWEsZD1oK3YpO2JyZWFrO2Nhc2UgYmk6dyYmKG89TWF0aC5tYXgoUyxNYXRoLm1pbihrLHItcCp3KSksbD1NYXRoLm1heChTLE1hdGgubWluKGsscytwKncpKSksTSYmKHU9TWF0aC5tYXgoRSxNYXRoLm1pbihDLGEtdipNKSksZD1NYXRoLm1heChFLE1hdGgubWluKEMsaCt2Kk0pKSl9bDxvJiYodyo9LTEsdD1yLHI9cyxzPXQsdD1vLG89bCxsPXQsbSBpbiBBaSYmVS5hdHRyKCJjdXJzb3IiLE1pW209QWlbbV1dKSksZDx1JiYoTSo9LTEsdD1hLGE9aCxoPXQsdD11LHU9ZCxkPXQsbSBpbiBUaSYmVS5hdHRyKCJjdXJzb3IiLE1pW209VGlbbV1dKSksQS5zZWxlY3Rpb24mJihOPUEuc2VsZWN0aW9uKSx5JiYobz1OWzBdWzBdLGw9TlsxXVswXSksXyYmKHU9TlswXVsxXSxkPU5bMV1bMV0pLE5bMF1bMF09PT1vJiZOWzBdWzFdPT09dSYmTlsxXVswXT09PWwmJk5bMV1bMV09PT1kfHwoQS5zZWxlY3Rpb249W1tvLHVdLFtsLGRdXSxmLmNhbGwoYiksTC5icnVzaCgpKX1mdW5jdGlvbiBCKCl7aWYocGkoKSx0LmV2ZW50LnRvdWNoZXMpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO2UmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPW51bGx9LDUwMCksRC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIEd0KHQuZXZlbnQudmlldyxnKSxxLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtELmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksVS5hdHRyKCJjdXJzb3IiLE1pLm92ZXJsYXkpLEEuc2VsZWN0aW9uJiYoTj1BLnNlbGVjdGlvbiksemkoTikmJihBLnNlbGVjdGlvbj1udWxsLGYuY2FsbChiKSksTC5lbmQoKX19ZnVuY3Rpb24gaCgpe3ZhciB0PXRoaXMuX19icnVzaHx8e3NlbGVjdGlvbjpudWxsfTtyZXR1cm4gdC5leHRlbnQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC5kaW09bix0fXJldHVybiB1Lm1vdmU9ZnVuY3Rpb24odCxlKXt0LnNlbGVjdGlvbj90Lm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtjKHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXtjKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9dC5fX2JydXNoLGk9Yyh0LGFyZ3VtZW50cyksbz1yLnNlbGVjdGlvbixhPW4uaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSxyLmV4dGVudCksdT1tZShvLGEpO2Z1bmN0aW9uIHMobil7ci5zZWxlY3Rpb249MT09PW4mJnppKGEpP251bGw6dShuKSxmLmNhbGwodCksaS5icnVzaCgpfXJldHVybiBvJiZhP3M6cygxKX0pOnQuZWFjaChmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cyxyPXRoaXMuX19icnVzaCxpPW4uaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLHQpOmUsci5leHRlbnQpLG89Yyh0aGlzLHQpLmJlZm9yZXN0YXJ0KCk7TnIodGhpcyksci5zZWxlY3Rpb249bnVsbD09aXx8emkoaSk/bnVsbDppLGYuY2FsbCh0aGlzKSxvLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxzLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuc3RhdGUuZW1pdHRlcj10aGlzLHRoaXMuc3RhcnRpbmc9ITApLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRpbmcmJih0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sYnJ1c2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe0N0KG5ldyBkaSh1LHQsbi5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pKSxvLmFwcGx5LG8sW3QsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sdS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpoaShbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSksdSk6cn0sdS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpoaSghIXQpLHUpOml9LHUuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCx1KTphfSx1Lm9uPWZ1bmN0aW9uKCl7dmFyIHQ9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1vP3U6dH0sdX12YXIgTGk9TWF0aC5jb3MsRGk9TWF0aC5zaW4sVWk9TWF0aC5QSSxxaT1VaS8yLE9pPTIqVWksWWk9TWF0aC5tYXg7dmFyIEJpPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBGaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIElpPU1hdGguUEksSGk9MipJaSxqaT1IaS0xZS02O2Z1bmN0aW9uIFhpKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gR2koKXtyZXR1cm4gbmV3IFhpfWZ1bmN0aW9uIFZpKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiAkaSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gV2kodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIFppKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gUWkodCl7cmV0dXJuIHQuZW5kQW5nbGV9WGkucHJvdG90eXBlPUdpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WGksbW92ZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStuKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxuKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K24pfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIpe3RoaXMuXys9IlEiKyArdCsiLCIrICtuKyIsIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3IpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArbisiLCIrICtlKyIsIisgK3IrIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKHQsbixlLHIsaSl7dD0rdCxuPStuLGU9K2Uscj0rcixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEsdT1lLXQsZj1yLW4sYz1vLXQscz1hLW4sbD1jKmMrcypzO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9bik7ZWxzZSBpZihsPjFlLTYpaWYoTWF0aC5hYnMocyp1LWYqYyk+MWUtNiYmaSl7dmFyIGg9ZS1vLGQ9ci1hLHA9dSp1K2YqZix2PWgqaCtkKmQsZz1NYXRoLnNxcnQocCkseT1NYXRoLnNxcnQobCksXz1pKk1hdGgudGFuKChJaS1NYXRoLmFjb3MoKHArbC12KS8oMipnKnkpKSkvMiksYj1fL3ksbT1fL2c7TWF0aC5hYnMoYi0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrYipjKSsiLCIrKG4rYipzKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHMqaD5jKmQpKyIsIisodGhpcy5feDE9dCttKnUpKyIsIisodGhpcy5feTE9bittKmYpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9bik7ZWxzZTt9LGFyYzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dD0rdCxuPStuO3ZhciBhPShlPStlKSpNYXRoLmNvcyhyKSx1PWUqTWF0aC5zaW4ociksZj10K2EsYz1uK3Uscz0xXm8sbD1vP3ItaTppLXI7aWYoZTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2UpO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitmKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1mKT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS1jKT4xZS02KSYmKHRoaXMuXys9IkwiK2YrIiwiK2MpLGUmJihsPDAmJihsPWwlSGkrSGkpLGw+amk/dGhpcy5fKz0iQSIrZSsiLCIrZSsiLDAsMSwiK3MrIiwiKyh0LWEpKyIsIisobi11KSsiQSIrZSsiLCIrZSsiLDAsMSwiK3MrIiwiKyh0aGlzLl94MT1mKSsiLCIrKHRoaXMuX3kxPWMpOmw+MWUtNiYmKHRoaXMuXys9IkEiK2UrIiwiK2UrIiwwLCIrICsobD49SWkpKyIsIitzKyIsIisodGhpcy5feDE9dCtlKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPW4rZSpNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbih0LG4sZSxyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K24pKyJoIisgK2UrInYiKyArcisiaCIrLWUrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBKaSgpe31mdW5jdGlvbiBLaSh0LG4pe3ZhciBlPW5ldyBKaTtpZih0IGluc3RhbmNlb2YgSmkpdC5lYWNoKGZ1bmN0aW9uKHQsbil7ZS5zZXQobix0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHIsaT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PW4pZm9yKDsrK2k8bzspZS5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPG87KWUuc2V0KG4ocj10W2ldLGksdCkscil9ZWxzZSBpZih0KWZvcih2YXIgYSBpbiB0KWUuc2V0KGEsdFthXSk7cmV0dXJuIGV9ZnVuY3Rpb24gdG8oKXtyZXR1cm57fX1mdW5jdGlvbiBubyh0LG4sZSl7dFtuXT1lfWZ1bmN0aW9uIGVvKCl7cmV0dXJuIEtpKCl9ZnVuY3Rpb24gcm8odCxuLGUpe3Quc2V0KG4sZSl9ZnVuY3Rpb24gaW8oKXt9SmkucHJvdG90eXBlPUtpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SmksaGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzWyIkIit0XT1uLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgbj0iJCIrdDtyZXR1cm4gbiBpbiB0aGlzJiZkZWxldGUgdGhpc1tuXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKSIkIj09PW5bMF0mJnQucHVzaChuLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBuIGluIHRoaXMpIiQiPT09blswXSYmdC5wdXNoKHRoaXNbbl0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBuIGluIHRoaXMpIiQiPT09blswXSYmdC5wdXNoKHtrZXk6bi5zbGljZSgxKSx2YWx1ZTp0aGlzW25dfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgbiBpbiB0aGlzKSIkIj09PW5bMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0aGlzKSIkIj09PW5bMF0mJnQodGhpc1tuXSxuLnNsaWNlKDEpLHRoaXMpfX07dmFyIG9vPUtpLnByb3RvdHlwZTtmdW5jdGlvbiBhbyh0LG4pe3ZhciBlPW5ldyBpbztpZih0IGluc3RhbmNlb2YgaW8pdC5lYWNoKGZ1bmN0aW9uKHQpe2UuYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgcj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PW4pZm9yKDsrK3I8aTspZS5hZGQodFtyXSk7ZWxzZSBmb3IoOysrcjxpOyllLmFkZChuKHRbcl0scix0KSl9cmV0dXJuIGV9aW8ucHJvdG90eXBlPWFvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aW8saGFzOm9vLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOm9vLnJlbW92ZSxjbGVhcjpvby5jbGVhcix2YWx1ZXM6b28ua2V5cyxzaXplOm9vLnNpemUsZW1wdHk6b28uZW1wdHksZWFjaDpvby5lYWNofTt2YXIgdW89QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGZvKHQsbil7cmV0dXJuIHQtbn1mdW5jdGlvbiBjbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gc28odCxuKXtmb3IodmFyIGUscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihlPWxvKHQsbltyXSkpcmV0dXJuIGU7cmV0dXJuIDB9ZnVuY3Rpb24gbG8odCxuKXtmb3IodmFyIGU9blswXSxyPW5bMV0saT0tMSxvPTAsYT10Lmxlbmd0aCx1PWEtMTtvPGE7dT1vKyspe3ZhciBmPXRbb10sYz1mWzBdLHM9ZlsxXSxsPXRbdV0saD1sWzBdLGQ9bFsxXTtpZihobyhmLGwsbikpcmV0dXJuIDA7cz5yIT1kPnImJmU8KGgtYykqKHItcykvKGQtcykrYyYmKGk9LWkpfXJldHVybiBpfWZ1bmN0aW9uIGhvKHQsbixlKXt2YXIgcixpLG8sYTtyZXR1cm4gZnVuY3Rpb24odCxuLGUpe3JldHVybihuWzBdLXRbMF0pKihlWzFdLXRbMV0pPT0oZVswXS10WzBdKSooblsxXS10WzFdKX0odCxuLGUpJiYoaT10W3I9Kyh0WzBdPT09blswXSldLG89ZVtyXSxhPW5bcl0saTw9byYmbzw9YXx8YTw9byYmbzw9aSl9ZnVuY3Rpb24gcG8oKXt9dmFyIHZvPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gZ28oKXt2YXIgdD0xLG49MSxlPU0scj11O2Z1bmN0aW9uIGkodCl7dmFyIG49ZSh0KTtpZihBcnJheS5pc0FycmF5KG4pKW49bi5zbGljZSgpLnNvcnQoZm8pO2Vsc2V7dmFyIHI9cyh0KSxpPXJbMF0sYT1yWzFdO249dyhpLGEsbiksbj1nKE1hdGguZmxvb3IoaS9uKSpuLE1hdGguZmxvb3IoYS9uKSpuLG4pfXJldHVybiBuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbyh0LG4pfSl9ZnVuY3Rpb24gbyhlLGkpe3ZhciBvPVtdLHU9W107cmV0dXJuIGZ1bmN0aW9uKGUscixpKXt2YXIgbyx1LGYsYyxzLGwsaD1uZXcgQXJyYXksZD1uZXcgQXJyYXk7bz11PS0xLGM9ZVswXT49cix2b1tjPDwxXS5mb3JFYWNoKHApO2Zvcig7KytvPHQtMTspZj1jLGM9ZVtvKzFdPj1yLHZvW2Z8Yzw8MV0uZm9yRWFjaChwKTt2b1tjPDwwXS5mb3JFYWNoKHApO2Zvcig7Kyt1PG4tMTspe2ZvcihvPS0xLGM9ZVt1KnQrdF0+PXIscz1lW3UqdF0+PXIsdm9bYzw8MXxzPDwyXS5mb3JFYWNoKHApOysrbzx0LTE7KWY9YyxjPWVbdSp0K3QrbysxXT49cixsPXMscz1lW3UqdCtvKzFdPj1yLHZvW2Z8Yzw8MXxzPDwyfGw8PDNdLmZvckVhY2gocCk7dm9bY3xzPDwzXS5mb3JFYWNoKHApfW89LTEscz1lW3UqdF0+PXIsdm9bczw8Ml0uZm9yRWFjaChwKTtmb3IoOysrbzx0LTE7KWw9cyxzPWVbdSp0K28rMV0+PXIsdm9bczw8MnxsPDwzXS5mb3JFYWNoKHApO2Z1bmN0aW9uIHAodCl7dmFyIG4sZSxyPVt0WzBdWzBdK28sdFswXVsxXSt1XSxmPVt0WzFdWzBdK28sdFsxXVsxXSt1XSxjPWEocikscz1hKGYpOyhuPWRbY10pPyhlPWhbc10pPyhkZWxldGUgZFtuLmVuZF0sZGVsZXRlIGhbZS5zdGFydF0sbj09PWU/KG4ucmluZy5wdXNoKGYpLGkobi5yaW5nKSk6aFtuLnN0YXJ0XT1kW2UuZW5kXT17c3RhcnQ6bi5zdGFydCxlbmQ6ZS5lbmQscmluZzpuLnJpbmcuY29uY2F0KGUucmluZyl9KTooZGVsZXRlIGRbbi5lbmRdLG4ucmluZy5wdXNoKGYpLGRbbi5lbmQ9c109bik6KG49aFtzXSk/KGU9ZFtjXSk/KGRlbGV0ZSBoW24uc3RhcnRdLGRlbGV0ZSBkW2UuZW5kXSxuPT09ZT8obi5yaW5nLnB1c2goZiksaShuLnJpbmcpKTpoW2Uuc3RhcnRdPWRbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgaFtuLnN0YXJ0XSxuLnJpbmcudW5zaGlmdChyKSxoW24uc3RhcnQ9Y109bik6aFtjXT1kW3NdPXtzdGFydDpjLGVuZDpzLHJpbmc6W3IsZl19fXZvW3M8PDNdLmZvckVhY2gocCl9KGUsaSxmdW5jdGlvbih0KXtyKHQsZSxpKSxmdW5jdGlvbih0KXtmb3IodmFyIG49MCxlPXQubGVuZ3RoLHI9dFtlLTFdWzFdKnRbMF1bMF0tdFtlLTFdWzBdKnRbMF1bMV07KytuPGU7KXIrPXRbbi0xXVsxXSp0W25dWzBdLXRbbi0xXVswXSp0W25dWzFdO3JldHVybiByfSh0KT4wP28ucHVzaChbdF0pOnUucHVzaCh0KX0pLHUuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0wLHI9by5sZW5ndGg7ZTxyOysrZSlpZigtMSE9PXNvKChuPW9bZV0pWzBdLHQpKXJldHVybiB2b2lkIG4ucHVzaCh0KX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOmksY29vcmRpbmF0ZXM6b319ZnVuY3Rpb24gYShuKXtyZXR1cm4gMipuWzBdK25bMV0qKHQrMSkqNH1mdW5jdGlvbiB1KGUscixpKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG8sYT1lWzBdLHU9ZVsxXSxmPTB8YSxjPTB8dSxzPXJbYyp0K2ZdO2E+MCYmYTx0JiZmPT09YSYmKG89cltjKnQrZi0xXSxlWzBdPWErKGktbykvKHMtbyktLjUpLHU+MCYmdTxuJiZjPT09dSYmKG89clsoYy0xKSp0K2ZdLGVbMV09dSsoaS1vKS8ocy1vKS0uNSl9KX1yZXR1cm4gaS5jb250b3VyPW8saS5zaXplPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVyblt0LG5dO3ZhciByPU1hdGguY2VpbChlWzBdKSxvPU1hdGguY2VpbChlWzFdKTtpZighKHI+MCYmbz4wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiB0PXIsbj1vLGl9LGkudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/Y28odW8uY2FsbCh0KSk6Y28odCksaSk6ZX0saS5zbW9vdGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dD91OnBvLGkpOnI9PT11fSxpfWZ1bmN0aW9uIHlvKHQsbixlKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LG89MSsoZTw8MSksYT0wO2E8aTsrK2EpZm9yKHZhciB1PTAsZj0wO3U8citlOysrdSl1PHImJihmKz10LmRhdGFbdSthKnJdKSx1Pj1lJiYodT49byYmKGYtPXQuZGF0YVt1LW8rYSpyXSksbi5kYXRhW3UtZSthKnJdPWYvTWF0aC5taW4odSsxLHItMStvLXUsbykpfWZ1bmN0aW9uIF9vKHQsbixlKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LG89MSsoZTw8MSksYT0wO2E8cjsrK2EpZm9yKHZhciB1PTAsZj0wO3U8aStlOysrdSl1PGkmJihmKz10LmRhdGFbYSt1KnJdKSx1Pj1lJiYodT49byYmKGYtPXQuZGF0YVthKyh1LW8pKnJdKSxuLmRhdGFbYSsodS1lKSpyXT1mL01hdGgubWluKHUrMSxpLTErby11LG8pKX1mdW5jdGlvbiBibyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBtbyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB4bygpe3JldHVybiAxfXZhciB3bz17fSxNbz17fSxBbz0zNCxUbz0xMCxObz0xMztmdW5jdGlvbiBTbyh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIituKyJdIn0pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEVvKHQpe3ZhciBuPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLGU9dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIHIodCxuKXt2YXIgcixpPVtdLG89dC5sZW5ndGgsYT0wLHU9MCxmPW88PTAsYz0hMTtmdW5jdGlvbiBzKCl7aWYoZilyZXR1cm4gTW87aWYoYylyZXR1cm4gYz0hMSx3bzt2YXIgbixyLGk9YTtpZih0LmNoYXJDb2RlQXQoaSk9PT1Bbyl7Zm9yKDthKys8byYmdC5jaGFyQ29kZUF0KGEpIT09QW98fHQuY2hhckNvZGVBdCgrK2EpPT09QW87KTtyZXR1cm4obj1hKT49bz9mPSEwOihyPXQuY2hhckNvZGVBdChhKyspKT09PVRvP2M9ITA6cj09PU5vJiYoYz0hMCx0LmNoYXJDb2RlQXQoYSk9PT1UbyYmKythKSx0LnNsaWNlKGkrMSxuLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2E8bzspe2lmKChyPXQuY2hhckNvZGVBdChuPWErKykpPT09VG8pYz0hMDtlbHNlIGlmKHI9PT1ObyljPSEwLHQuY2hhckNvZGVBdChhKT09PVRvJiYrK2E7ZWxzZSBpZihyIT09ZSljb250aW51ZTtyZXR1cm4gdC5zbGljZShpLG4pfXJldHVybiBmPSEwLHQuc2xpY2UoaSxvKX1mb3IodC5jaGFyQ29kZUF0KG8tMSk9PT1UbyYmLS1vLHQuY2hhckNvZGVBdChvLTEpPT09Tm8mJi0tbzsocj1zKCkpIT09TW87KXtmb3IodmFyIGw9W107ciE9PXdvJiZyIT09TW87KWwucHVzaChyKSxyPXMoKTtuJiZudWxsPT0obD1uKGwsdSsrKSl8fGkucHVzaChsKX1yZXR1cm4gaX1mdW5jdGlvbiBpKG4pe3JldHVybiBuLm1hcChvKS5qb2luKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXQ/IiI6bi50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uKHQsbil7dmFyIGUsaSxvPXIodCxmdW5jdGlvbih0LHIpe2lmKGUpcmV0dXJuIGUodCxyLTEpO2k9dCxlPW4/ZnVuY3Rpb24odCxuKXt2YXIgZT1Tbyh0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gbihlKHIpLGksdCl9fSh0LG4pOlNvKHQpfSk7cmV0dXJuIG8uY29sdW1ucz1pfHxbXSxvfSxwYXJzZVJvd3M6cixmb3JtYXQ6ZnVuY3Rpb24obixlKXtyZXR1cm4gbnVsbD09ZSYmKGU9ZnVuY3Rpb24odCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxlPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBufHxlLnB1c2gobltyXT1yKX0pLGV9KG4pKSxbZS5tYXAobykuam9pbih0KV0uY29uY2F0KG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbyhuW3RdKX0pLmpvaW4odCl9KSkuam9pbigiXG4iKX0sZm9ybWF0Um93czpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoaSkuam9pbigiXG4iKX19fXZhciBrbz1FbygiLCIpLENvPWtvLnBhcnNlLFBvPWtvLnBhcnNlUm93cyx6bz1rby5mb3JtYXQsUm89a28uZm9ybWF0Um93cyxMbz1FbygiXHQiKSxEbz1Mby5wYXJzZSxVbz1Mby5wYXJzZVJvd3MscW89TG8uZm9ybWF0LE9vPUxvLmZvcm1hdFJvd3M7ZnVuY3Rpb24gWW8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX1mdW5jdGlvbiBCbyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX1mdW5jdGlvbiBGbyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQudGV4dCgpfWZ1bmN0aW9uIElvKHQsbil7cmV0dXJuIGZldGNoKHQsbikudGhlbihGbyl9ZnVuY3Rpb24gSG8odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9dm9pZCAwKSxJbyhuLGUpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHQobixyKX0pfX12YXIgam89SG8oQ28pLFhvPUhvKERvKTtmdW5jdGlvbiBHbyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuanNvbigpfWZ1bmN0aW9uIFZvKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3JldHVybiBJbyhuLGUpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhuLHQpfSl9fXZhciAkbz1WbygiYXBwbGljYXRpb24veG1sIiksV289Vm8oInRleHQvaHRtbCIpLFpvPVZvKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gUW8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEpvKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfWZ1bmN0aW9uIEtvKHQsbixlLHIpe2lmKGlzTmFOKG4pfHxpc05hTihlKSlyZXR1cm4gdDt2YXIgaSxvLGEsdSxmLGMscyxsLGgsZD10Ll9yb290LHA9e2RhdGE6cn0sdj10Ll94MCxnPXQuX3kwLHk9dC5feDEsXz10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKGM9bj49KG89KHYreSkvMikpP3Y9bzp5PW8sKHM9ZT49KGE9KGcrXykvMikpP2c9YTpfPWEsaT1kLCEoZD1kW2w9czw8MXxjXSkpcmV0dXJuIGlbbF09cCx0O2lmKHU9K3QuX3guY2FsbChudWxsLGQuZGF0YSksZj0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxuPT09dSYmZT09PWYpcmV0dXJuIHAubmV4dD1kLGk/aVtsXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2xdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1uPj0obz0odit5KS8yKSk/dj1vOnk9bywocz1lPj0oYT0oZytfKS8yKSk/Zz1hOl89YX13aGlsZSgobD1zPDwxfGMpPT0oaD0oZj49YSk8PDF8dT49bykpO3JldHVybiBpW2hdPWQsaVtsXT1wLHR9ZnVuY3Rpb24gdGEodCxuLGUscixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPW4sdGhpcy55MD1lLHRoaXMueDE9cix0aGlzLnkxPWl9ZnVuY3Rpb24gbmEodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gZWEodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gcmEodCxuLGUpe3ZhciByPW5ldyBpYShudWxsPT1uP25hOm4sbnVsbD09ZT9lYTplLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/cjpyLmFkZEFsbCh0KX1mdW5jdGlvbiBpYSh0LG4sZSxyLGksbyl7dGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIG9hKHQpe2Zvcih2YXIgbj17ZGF0YTp0LmRhdGF9LGU9bjt0PXQubmV4dDspZT1lLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gbn12YXIgYWE9cmEucHJvdG90eXBlPWlhLnByb3RvdHlwZTtmdW5jdGlvbiB1YSh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gZmEodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGNhKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIHNhKHQsbil7dmFyIGU9dC5nZXQobik7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK24pO3JldHVybiBlfWZ1bmN0aW9uIGxhKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gaGEodCl7cmV0dXJuIHQueX1hYS5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsbixlPW5ldyBpYSh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHI9dGhpcy5fcm9vdDtpZighcilyZXR1cm4gZTtpZighci5sZW5ndGgpcmV0dXJuIGUuX3Jvb3Q9b2EociksZTtmb3IodD1be3NvdXJjZTpyLHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3I9dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj1yLnNvdXJjZVtpXSkmJihuLmxlbmd0aD90LnB1c2goe3NvdXJjZTpuLHRhcmdldDpyLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpyLnRhcmdldFtpXT1vYShuKSk7cmV0dXJuIGV9LGFhLmFkZD1mdW5jdGlvbih0KXt2YXIgbj0rdGhpcy5feC5jYWxsKG51bGwsdCksZT0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIEtvKHRoaXMuY292ZXIobixlKSxuLGUsdCl9LGFhLmFkZEFsbD1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvPXQubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHU9bmV3IEFycmF5KG8pLGY9MS8wLGM9MS8wLHM9LTEvMCxsPS0xLzA7Zm9yKGU9MDtlPG87KytlKWlzTmFOKHI9K3RoaXMuX3guY2FsbChudWxsLG49dFtlXSkpfHxpc05hTihpPSt0aGlzLl95LmNhbGwobnVsbCxuKSl8fChhW2VdPXIsdVtlXT1pLHI8ZiYmKGY9cikscj5zJiYocz1yKSxpPGMmJihjPWkpLGk+bCYmKGw9aSkpO2ZvcihzPGYmJihmPXRoaXMuX3gwLHM9dGhpcy5feDEpLGw8YyYmKGM9dGhpcy5feTAsbD10aGlzLl95MSksdGhpcy5jb3ZlcihmLGMpLmNvdmVyKHMsbCksZT0wO2U8bzsrK2UpS28odGhpcyxhW2VdLHVbZV0sdFtlXSk7cmV0dXJuIHRoaXN9LGFhLmNvdmVyPWZ1bmN0aW9uKHQsbil7aWYoaXNOYU4odD0rdCl8fGlzTmFOKG49K24pKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuX3gwLHI9dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKGUpKWk9KGU9TWF0aC5mbG9vcih0KSkrMSxvPShyPU1hdGguZmxvb3IobikpKzE7ZWxzZXtpZighKGU+dHx8dD5pfHxyPm58fG4+bykpcmV0dXJuIHRoaXM7dmFyIGEsdSxmPWktZSxjPXRoaXMuX3Jvb3Q7c3dpdGNoKHU9KG48KHIrbykvMik8PDF8dDwoZStpKS8yKXtjYXNlIDA6ZG97KGE9bmV3IEFycmF5KDQpKVt1XT1jLGM9YX13aGlsZShvPXIrKGYqPTIpLHQ+KGk9ZStmKXx8bj5vKTticmVhaztjYXNlIDE6ZG97KGE9bmV3IEFycmF5KDQpKVt1XT1jLGM9YX13aGlsZShvPXIrKGYqPTIpLChlPWktZik+dHx8bj5vKTticmVhaztjYXNlIDI6ZG97KGE9bmV3IEFycmF5KDQpKVt1XT1jLGM9YX13aGlsZShyPW8tKGYqPTIpLHQ+KGk9ZStmKXx8cj5uKTticmVhaztjYXNlIDM6ZG97KGE9bmV3IEFycmF5KDQpKVt1XT1jLGM9YX13aGlsZShyPW8tKGYqPTIpLChlPWktZik+dHx8cj5uKX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Yyl9cmV0dXJuIHRoaXMuX3gwPWUsdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc30sYWEuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClkb3t0LnB1c2gobi5kYXRhKX13aGlsZShuPW4ubmV4dCl9KSx0fSxhYS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LGFhLmZpbmQ9ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbyxhLHUsZixjLHM9dGhpcy5feDAsbD10aGlzLl95MCxoPXRoaXMuX3gxLGQ9dGhpcy5feTEscD1bXSx2PXRoaXMuX3Jvb3Q7Zm9yKHYmJnAucHVzaChuZXcgdGEodixzLGwsaCxkKSksbnVsbD09ZT9lPTEvMDoocz10LWUsbD1uLWUsaD10K2UsZD1uK2UsZSo9ZSk7Zj1wLnBvcCgpOylpZighKCEodj1mLm5vZGUpfHwoaT1mLngwKT5ofHwobz1mLnkwKT5kfHwoYT1mLngxKTxzfHwodT1mLnkxKTxsKSlpZih2Lmxlbmd0aCl7dmFyIGc9KGkrYSkvMix5PShvK3UpLzI7cC5wdXNoKG5ldyB0YSh2WzNdLGcseSxhLHUpLG5ldyB0YSh2WzJdLGkseSxnLHUpLG5ldyB0YSh2WzFdLGcsbyxhLHkpLG5ldyB0YSh2WzBdLGksbyxnLHkpKSwoYz0obj49eSk8PDF8dD49ZykmJihmPXBbcC5sZW5ndGgtMV0scFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTEtY10scFtwLmxlbmd0aC0xLWNdPWYpfWVsc2V7dmFyIF89dC0rdGhpcy5feC5jYWxsKG51bGwsdi5kYXRhKSxiPW4tK3RoaXMuX3kuY2FsbChudWxsLHYuZGF0YSksbT1fKl8rYipiO2lmKG08ZSl7dmFyIHg9TWF0aC5zcXJ0KGU9bSk7cz10LXgsbD1uLXgsaD10K3gsZD1uK3gscj12LmRhdGF9fXJldHVybiByfSxhYS5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4obz0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIG4sZSxyLGksbyxhLHUsZixjLHMsbCxoLGQ9dGhpcy5fcm9vdCxwPXRoaXMuX3gwLHY9dGhpcy5feTAsZz10aGlzLl94MSx5PXRoaXMuX3kxO2lmKCFkKXJldHVybiB0aGlzO2lmKGQubGVuZ3RoKWZvcig7Oyl7aWYoKGM9bz49KHU9KHArZykvMikpP3A9dTpnPXUsKHM9YT49KGY9KHYreSkvMikpP3Y9Zjp5PWYsbj1kLCEoZD1kW2w9czw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIWQubGVuZ3RoKWJyZWFrOyhuW2wrMSYzXXx8bltsKzImM118fG5bbCszJjNdKSYmKGU9bixoPWwpfWZvcig7ZC5kYXRhIT09dDspaWYocj1kLCEoZD1kLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPWQubmV4dCkmJmRlbGV0ZSBkLm5leHQscj8oaT9yLm5leHQ9aTpkZWxldGUgci5uZXh0LHRoaXMpOm4/KGk/bltsXT1pOmRlbGV0ZSBuW2xdLChkPW5bMF18fG5bMV18fG5bMl18fG5bM10pJiZkPT09KG5bM118fG5bMl18fG5bMV18fG5bMF0pJiYhZC5sZW5ndGgmJihlP2VbaF09ZDp0aGlzLl9yb290PWQpLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LGFhLnJlbW92ZUFsbD1mdW5jdGlvbih0KXtmb3IodmFyIG49MCxlPXQubGVuZ3RoO248ZTsrK24pdGhpcy5yZW1vdmUodFtuXSk7cmV0dXJuIHRoaXN9LGFhLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sYWEuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24obil7aWYoIW4ubGVuZ3RoKWRveysrdH13aGlsZShuPW4ubmV4dCl9KSx0fSxhYS52aXNpdD1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvLGEsdT1bXSxmPXRoaXMuX3Jvb3Q7Zm9yKGYmJnUucHVzaChuZXcgdGEoZix0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dS5wb3AoKTspaWYoIXQoZj1uLm5vZGUscj1uLngwLGk9bi55MCxvPW4ueDEsYT1uLnkxKSYmZi5sZW5ndGgpe3ZhciBjPShyK28pLzIscz0oaSthKS8yOyhlPWZbM10pJiZ1LnB1c2gobmV3IHRhKGUsYyxzLG8sYSkpLChlPWZbMl0pJiZ1LnB1c2gobmV3IHRhKGUscixzLGMsYSkpLChlPWZbMV0pJiZ1LnB1c2gobmV3IHRhKGUsYyxpLG8scykpLChlPWZbMF0pJiZ1LnB1c2gobmV3IHRhKGUscixpLGMscykpfXJldHVybiB0aGlzfSxhYS52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBuLGU9W10scj1bXTtmb3IodGhpcy5fcm9vdCYmZS5wdXNoKG5ldyB0YSh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7bj1lLnBvcCgpOyl7dmFyIGk9bi5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgbyxhPW4ueDAsdT1uLnkwLGY9bi54MSxjPW4ueTEscz0oYStmKS8yLGw9KHUrYykvMjsobz1pWzBdKSYmZS5wdXNoKG5ldyB0YShvLGEsdSxzLGwpKSwobz1pWzFdKSYmZS5wdXNoKG5ldyB0YShvLHMsdSxmLGwpKSwobz1pWzJdKSYmZS5wdXNoKG5ldyB0YShvLGEsbCxzLGMpKSwobz1pWzNdKSYmZS5wdXNoKG5ldyB0YShvLHMsbCxmLGMpKX1yLnB1c2gobil9Zm9yKDtuPXIucG9wKCk7KXQobi5ub2RlLG4ueDAsbi55MCxuLngxLG4ueTEpO3JldHVybiB0aGlzfSxhYS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sYWEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O3ZhciBkYT0xMCxwYT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gdmEodCxuKXtpZigoZT0odD1uP3QudG9FeHBvbmVudGlhbChuLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGUscj10LnNsaWNlKDAsZSk7cmV0dXJuW3IubGVuZ3RoPjE/clswXStyLnNsaWNlKDIpOnIsK3Quc2xpY2UoZSsxKV19ZnVuY3Rpb24gZ2EodCl7cmV0dXJuKHQ9dmEoTWF0aC5hYnModCkpKT90WzFdOk5hTn12YXIgeWEsX2E9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gYmEodCl7cmV0dXJuIG5ldyBtYSh0KX1mdW5jdGlvbiBtYSh0KXtpZighKG49X2EuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgbjt0aGlzLmZpbGw9blsxXXx8IiAiLHRoaXMuYWxpZ249blsyXXx8Ij4iLHRoaXMuc2lnbj1uWzNdfHwiLSIsdGhpcy5zeW1ib2w9bls0XXx8IiIsdGhpcy56ZXJvPSEhbls1XSx0aGlzLndpZHRoPW5bNl0mJituWzZdLHRoaXMuY29tbWE9ISFuWzddLHRoaXMucHJlY2lzaW9uPW5bOF0mJituWzhdLnNsaWNlKDEpLHRoaXMudHJpbT0hIW5bOV0sdGhpcy50eXBlPW5bMTBdfHwiIn1mdW5jdGlvbiB4YSh0LG4pe3ZhciBlPXZhKHQsbik7aWYoIWUpcmV0dXJuIHQrIiI7dmFyIHI9ZVswXSxpPWVbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK3I6ci5sZW5ndGg+aSsxP3Iuc2xpY2UoMCxpKzEpKyIuIityLnNsaWNlKGkrMSk6cituZXcgQXJyYXkoaS1yLmxlbmd0aCsyKS5qb2luKCIwIil9YmEucHJvdG90eXBlPW1hLnByb3RvdHlwZSxtYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsobnVsbD09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKG51bGw9PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgd2E9eyIlIjpmdW5jdGlvbih0LG4pe3JldHVybigxMDAqdCkudG9GaXhlZChuKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKG4pfSxmOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9GaXhlZChuKX0sZzpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvUHJlY2lzaW9uKG4pfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHhhKDEwMCp0LG4pfSxyOnhhLHM6ZnVuY3Rpb24odCxuKXt2YXIgZT12YSh0LG4pO2lmKCFlKXJldHVybiB0KyIiO3ZhciByPWVbMF0saT1lWzFdLG89aS0oeWE9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLGE9ci5sZW5ndGg7cmV0dXJuIG89PT1hP3I6bz5hP3IrbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP3Iuc2xpY2UoMCxvKSsiLiIrci5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKSt2YSh0LE1hdGgubWF4KDAsbitvLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBNYSh0KXtyZXR1cm4gdH12YXIgQWEsVGE9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIE5hKHQpe3ZhciBuLGUscj10Lmdyb3VwaW5nJiZ0LnRob3VzYW5kcz8obj10Lmdyb3VwaW5nLGU9dC50aG91c2FuZHMsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsbz1bXSxhPTAsdT1uWzBdLGY9MDtpPjAmJnU+MCYmKGYrdSsxPnImJih1PU1hdGgubWF4KDEsci1mKSksby5wdXNoKHQuc3Vic3RyaW5nKGktPXUsaSt1KSksISgoZis9dSsxKT5yKSk7KXU9blthPShhKzEpJW4ubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbihlKX0pOk1hLGk9dC5jdXJyZW5jeSxvPXQuZGVjaW1hbCxhPXQubnVtZXJhbHM/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24obil7cmV0dXJuIHRbK25dfSl9fSh0Lm51bWVyYWxzKTpNYSx1PXQucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGYodCl7dmFyIG49KHQ9YmEodCkpLmZpbGwsZT10LmFsaWduLGY9dC5zaWduLGM9dC5zeW1ib2wscz10Lnplcm8sbD10LndpZHRoLGg9dC5jb21tYSxkPXQucHJlY2lzaW9uLHA9dC50cmltLHY9dC50eXBlOyJuIj09PXY/KGg9ITAsdj0iZyIpOndhW3ZdfHwobnVsbD09ZCYmKGQ9MTIpLHA9ITAsdj0iZyIpLChzfHwiMCI9PT1uJiYiPSI9PT1lKSYmKHM9ITAsbj0iMCIsZT0iPSIpO3ZhciBnPSIkIj09PWM/aVswXToiIyI9PT1jJiYvW2JveFhdLy50ZXN0KHYpPyIwIit2LnRvTG93ZXJDYXNlKCk6IiIseT0iJCI9PT1jP2lbMV06L1slcF0vLnRlc3Qodik/dToiIixfPXdhW3ZdLGI9L1tkZWZncHJzJV0vLnRlc3Qodik7ZnVuY3Rpb24gbSh0KXt2YXIgaSx1LGMsbT1nLHg9eTtpZigiYyI9PT12KXg9Xyh0KSt4LHQ9IiI7ZWxzZXt2YXIgdz0odD0rdCk8MDtpZih0PV8oTWF0aC5hYnModCksZCkscCYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIG4sZT10Lmxlbmd0aCxyPTEsaT0tMTtyPGU7KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9bj1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLG49cjticmVhaztkZWZhdWx0OmlmKGk+MCl7aWYoISt0W3JdKWJyZWFrIHQ7aT0wfX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKG4rMSk6dH0odCkpLHcmJjA9PSt0JiYodz0hMSksbT0odz8iKCI9PT1mP2Y6Ii0iOiItIj09PWZ8fCIoIj09PWY/IiI6ZikrbSx4PSgicyI9PT12P1RhWzgreWEvM106IiIpK3grKHcmJiIoIj09PWY/IikiOiIiKSxiKWZvcihpPS0xLHU9dC5sZW5ndGg7KytpPHU7KWlmKDQ4PihjPXQuY2hhckNvZGVBdChpKSl8fGM+NTcpe3g9KDQ2PT09Yz9vK3Quc2xpY2UoaSsxKTp0LnNsaWNlKGkpKSt4LHQ9dC5zbGljZSgwLGkpO2JyZWFrfX1oJiYhcyYmKHQ9cih0LDEvMCkpO3ZhciBNPW0ubGVuZ3RoK3QubGVuZ3RoK3gubGVuZ3RoLEE9TTxsP25ldyBBcnJheShsLU0rMSkuam9pbihuKToiIjtzd2l0Y2goaCYmcyYmKHQ9cihBK3QsQS5sZW5ndGg/bC14Lmxlbmd0aDoxLzApLEE9IiIpLGUpe2Nhc2UiPCI6dD1tK3QreCtBO2JyZWFrO2Nhc2UiPSI6dD1tK0ErdCt4O2JyZWFrO2Nhc2UiXiI6dD1BLnNsaWNlKDAsTT1BLmxlbmd0aD4+MSkrbSt0K3grQS5zbGljZShNKTticmVhaztkZWZhdWx0OnQ9QSttK3QreH1yZXR1cm4gYSh0KX1yZXR1cm4gZD1udWxsPT1kPzY6L1tncHJzXS8udGVzdCh2KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGQpKSxtLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LG19cmV0dXJue2Zvcm1hdDpmLGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LG4pe3ZhciBlPWYoKCh0PWJhKHQpKS50eXBlPSJmIix0KSkscj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihnYShuKS8zKSkpLGk9TWF0aC5wb3coMTAsLXIpLG89VGFbOCtyLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZShpKnQpK299fX19ZnVuY3Rpb24gU2Eobil7cmV0dXJuIEFhPU5hKG4pLHQuZm9ybWF0PUFhLmZvcm1hdCx0LmZvcm1hdFByZWZpeD1BYS5mb3JtYXRQcmVmaXgsQWF9ZnVuY3Rpb24gRWEodCl7cmV0dXJuIE1hdGgubWF4KDAsLWdhKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24ga2EodCxuKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihnYShuKS8zKSkpLWdhKE1hdGguYWJzKHQpKSl9ZnVuY3Rpb24gQ2EodCxuKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxuPU1hdGguYWJzKG4pLXQsTWF0aC5tYXgoMCxnYShuKS1nYSh0KSkrMX1mdW5jdGlvbiBQYSgpe3JldHVybiBuZXcgemF9ZnVuY3Rpb24gemEoKXt0aGlzLnJlc2V0KCl9U2Eoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSksemEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6YSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe0xhKFJhLHQsdGhpcy50KSxMYSh0aGlzLFJhLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1SYS50OnRoaXMucz1SYS50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBSYT1uZXcgemE7ZnVuY3Rpb24gTGEodCxuLGUpe3ZhciByPXQucz1uK2UsaT1yLW4sbz1yLWk7dC50PW4tbysoZS1pKX12YXIgRGE9MWUtNixVYT0xZS0xMixxYT1NYXRoLlBJLE9hPXFhLzIsWWE9cWEvNCxCYT0yKnFhLEZhPTE4MC9xYSxJYT1xYS8xODAsSGE9TWF0aC5hYnMsamE9TWF0aC5hdGFuLFhhPU1hdGguYXRhbjIsR2E9TWF0aC5jb3MsVmE9TWF0aC5jZWlsLCRhPU1hdGguZXhwLFdhPU1hdGgubG9nLFphPU1hdGgucG93LFFhPU1hdGguc2luLEphPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxLYT1NYXRoLnNxcnQsdHU9TWF0aC50YW47ZnVuY3Rpb24gbnUodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/cWE6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIGV1KHQpe3JldHVybiB0PjE/T2E6dDwtMT8tT2E6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHJ1KHQpe3JldHVybih0PVFhKHQvMikpKnR9ZnVuY3Rpb24gaXUoKXt9ZnVuY3Rpb24gb3UodCxuKXt0JiZ1dS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZ1dVt0LnR5cGVdKHQsbil9dmFyIGF1PXtGZWF0dXJlOmZ1bmN0aW9uKHQsbil7b3UodC5nZW9tZXRyeSxuKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW91KGVbcl0uZ2VvbWV0cnksbil9fSx1dT17U3BoZXJlOmZ1bmN0aW9uKHQsbil7bi5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxuKXt0PXQuY29vcmRpbmF0ZXMsbi5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXQ9ZVtyXSxuLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe2Z1KHQuY29vcmRpbmF0ZXMsbiwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylmdShlW3JdLG4sMCl9LFBvbHlnb246ZnVuY3Rpb24odCxuKXtjdSh0LmNvb3JkaW5hdGVzLG4pfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWN1KGVbcl0sbil9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10Lmdlb21ldHJpZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylvdShlW3JdLG4pfX07ZnVuY3Rpb24gZnUodCxuLGUpe3ZhciByLGk9LTEsbz10Lmxlbmd0aC1lO2ZvcihuLmxpbmVTdGFydCgpOysraTxvOylyPXRbaV0sbi5wb2ludChyWzBdLHJbMV0sclsyXSk7bi5saW5lRW5kKCl9ZnVuY3Rpb24gY3UodCxuKXt2YXIgZT0tMSxyPXQubGVuZ3RoO2ZvcihuLnBvbHlnb25TdGFydCgpOysrZTxyOylmdSh0W2VdLG4sMSk7bi5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gc3UodCxuKXt0JiZhdS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP2F1W3QudHlwZV0odCxuKTpvdSh0LG4pfXZhciBsdSxodSxkdSxwdSx2dSxndT1QYSgpLHl1PVBhKCksX3U9e3BvaW50Oml1LGxpbmVTdGFydDppdSxsaW5lRW5kOml1LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2d1LnJlc2V0KCksX3UubGluZVN0YXJ0PWJ1LF91LmxpbmVFbmQ9bXV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rZ3U7eXUuYWRkKHQ8MD9CYSt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PWl1fSxzcGhlcmU6ZnVuY3Rpb24oKXt5dS5hZGQoQmEpfX07ZnVuY3Rpb24gYnUoKXtfdS5wb2ludD14dX1mdW5jdGlvbiBtdSgpe3d1KGx1LGh1KX1mdW5jdGlvbiB4dSh0LG4pe191LnBvaW50PXd1LGx1PXQsaHU9bixkdT10Kj1JYSxwdT1HYShuPShuKj1JYSkvMitZYSksdnU9UWEobil9ZnVuY3Rpb24gd3UodCxuKXt2YXIgZT0odCo9SWEpLWR1LHI9ZT49MD8xOi0xLGk9ciplLG89R2Eobj0obio9SWEpLzIrWWEpLGE9UWEobiksdT12dSphLGY9cHUqbyt1KkdhKGkpLGM9dSpyKlFhKGkpO2d1LmFkZChYYShjLGYpKSxkdT10LHB1PW8sdnU9YX1mdW5jdGlvbiBNdSh0KXtyZXR1cm5bWGEodFsxXSx0WzBdKSxldSh0WzJdKV19ZnVuY3Rpb24gQXUodCl7dmFyIG49dFswXSxlPXRbMV0scj1HYShlKTtyZXR1cm5bcipHYShuKSxyKlFhKG4pLFFhKGUpXX1mdW5jdGlvbiBUdSh0LG4pe3JldHVybiB0WzBdKm5bMF0rdFsxXSpuWzFdK3RbMl0qblsyXX1mdW5jdGlvbiBOdSh0LG4pe3JldHVyblt0WzFdKm5bMl0tdFsyXSpuWzFdLHRbMl0qblswXS10WzBdKm5bMl0sdFswXSpuWzFdLXRbMV0qblswXV19ZnVuY3Rpb24gU3UodCxuKXt0WzBdKz1uWzBdLHRbMV0rPW5bMV0sdFsyXSs9blsyXX1mdW5jdGlvbiBFdSh0LG4pe3JldHVyblt0WzBdKm4sdFsxXSpuLHRbMl0qbl19ZnVuY3Rpb24ga3UodCl7dmFyIG49S2EodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPW4sdFsxXS89bix0WzJdLz1ufXZhciBDdSxQdSx6dSxSdSxMdSxEdSxVdSxxdSxPdSxZdSxCdSxGdSxJdSxIdSxqdSxYdSxHdSxWdSwkdSxXdSxadSxRdSxKdSxLdSx0ZixuZixlZj1QYSgpLHJmPXtwb2ludDpvZixsaW5lU3RhcnQ6dWYsbGluZUVuZDpmZixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtyZi5wb2ludD1jZixyZi5saW5lU3RhcnQ9c2YscmYubGluZUVuZD1sZixlZi5yZXNldCgpLF91LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7X3UucG9seWdvbkVuZCgpLHJmLnBvaW50PW9mLHJmLmxpbmVTdGFydD11ZixyZi5saW5lRW5kPWZmLGd1PDA/KEN1PS0oenU9MTgwKSxQdT0tKFJ1PTkwKSk6ZWY+RGE/UnU9OTA6ZWY8LURhJiYoUHU9LTkwKSxZdVswXT1DdSxZdVsxXT16dX19O2Z1bmN0aW9uIG9mKHQsbil7T3UucHVzaChZdT1bQ3U9dCx6dT10XSksbjxQdSYmKFB1PW4pLG4+UnUmJihSdT1uKX1mdW5jdGlvbiBhZih0LG4pe3ZhciBlPUF1KFt0KklhLG4qSWFdKTtpZihxdSl7dmFyIHI9TnUocXUsZSksaT1OdShbclsxXSwtclswXSwwXSxyKTtrdShpKSxpPU11KGkpO3ZhciBvLGE9dC1MdSx1PWE+MD8xOi0xLGY9aVswXSpGYSp1LGM9SGEoYSk+MTgwO2NeKHUqTHU8ZiYmZjx1KnQpPyhvPWlbMV0qRmEpPlJ1JiYoUnU9byk6Y14odSpMdTwoZj0oZiszNjApJTM2MC0xODApJiZmPHUqdCk/KG89LWlbMV0qRmEpPFB1JiYoUHU9byk6KG48UHUmJihQdT1uKSxuPlJ1JiYoUnU9bikpLGM/dDxMdT9oZihDdSx0KT5oZihDdSx6dSkmJih6dT10KTpoZih0LHp1KT5oZihDdSx6dSkmJihDdT10KTp6dT49Q3U/KHQ8Q3UmJihDdT10KSx0Pnp1JiYoenU9dCkpOnQ+THU/aGYoQ3UsdCk+aGYoQ3UsenUpJiYoenU9dCk6aGYodCx6dSk+aGYoQ3UsenUpJiYoQ3U9dCl9ZWxzZSBPdS5wdXNoKFl1PVtDdT10LHp1PXRdKTtuPFB1JiYoUHU9biksbj5SdSYmKFJ1PW4pLHF1PWUsTHU9dH1mdW5jdGlvbiB1Zigpe3JmLnBvaW50PWFmfWZ1bmN0aW9uIGZmKCl7WXVbMF09Q3UsWXVbMV09enUscmYucG9pbnQ9b2YscXU9bnVsbH1mdW5jdGlvbiBjZih0LG4pe2lmKHF1KXt2YXIgZT10LUx1O2VmLmFkZChIYShlKT4xODA/ZSsoZT4wPzM2MDotMzYwKTplKX1lbHNlIER1PXQsVXU9bjtfdS5wb2ludCh0LG4pLGFmKHQsbil9ZnVuY3Rpb24gc2YoKXtfdS5saW5lU3RhcnQoKX1mdW5jdGlvbiBsZigpe2NmKER1LFV1KSxfdS5saW5lRW5kKCksSGEoZWYpPkRhJiYoQ3U9LSh6dT0xODApKSxZdVswXT1DdSxZdVsxXT16dSxxdT1udWxsfWZ1bmN0aW9uIGhmKHQsbil7cmV0dXJuKG4tPXQpPDA/biszNjA6bn1mdW5jdGlvbiBkZih0LG4pe3JldHVybiB0WzBdLW5bMF19ZnVuY3Rpb24gcGYodCxuKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1uJiZuPD10WzFdOm48dFswXXx8dFsxXTxufXZhciB2Zj17c3BoZXJlOml1LHBvaW50OmdmLGxpbmVTdGFydDpfZixsaW5lRW5kOnhmLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3ZmLmxpbmVTdGFydD13Zix2Zi5saW5lRW5kPU1mfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmYubGluZVN0YXJ0PV9mLHZmLmxpbmVFbmQ9eGZ9fTtmdW5jdGlvbiBnZih0LG4pe3QqPUlhO3ZhciBlPUdhKG4qPUlhKTt5ZihlKkdhKHQpLGUqUWEodCksUWEobikpfWZ1bmN0aW9uIHlmKHQsbixlKXtJdSs9KHQtSXUpLysrQnUsSHUrPShuLUh1KS9CdSxqdSs9KGUtanUpL0J1fWZ1bmN0aW9uIF9mKCl7dmYucG9pbnQ9YmZ9ZnVuY3Rpb24gYmYodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSk7S3U9ZSpHYSh0KSx0Zj1lKlFhKHQpLG5mPVFhKG4pLHZmLnBvaW50PW1mLHlmKEt1LHRmLG5mKX1mdW5jdGlvbiBtZih0LG4pe3QqPUlhO3ZhciBlPUdhKG4qPUlhKSxyPWUqR2EodCksaT1lKlFhKHQpLG89UWEobiksYT1YYShLYSgoYT10ZipvLW5mKmkpKmErKGE9bmYqci1LdSpvKSphKyhhPUt1KmktdGYqcikqYSksS3Uqcit0ZippK25mKm8pO0Z1Kz1hLFh1Kz1hKihLdSsoS3U9cikpLEd1Kz1hKih0ZisodGY9aSkpLFZ1Kz1hKihuZisobmY9bykpLHlmKEt1LHRmLG5mKX1mdW5jdGlvbiB4Zigpe3ZmLnBvaW50PWdmfWZ1bmN0aW9uIHdmKCl7dmYucG9pbnQ9QWZ9ZnVuY3Rpb24gTWYoKXtUZihRdSxKdSksdmYucG9pbnQ9Z2Z9ZnVuY3Rpb24gQWYodCxuKXtRdT10LEp1PW4sdCo9SWEsbio9SWEsdmYucG9pbnQ9VGY7dmFyIGU9R2Eobik7S3U9ZSpHYSh0KSx0Zj1lKlFhKHQpLG5mPVFhKG4pLHlmKEt1LHRmLG5mKX1mdW5jdGlvbiBUZih0LG4pe3QqPUlhO3ZhciBlPUdhKG4qPUlhKSxyPWUqR2EodCksaT1lKlFhKHQpLG89UWEobiksYT10ZipvLW5mKmksdT1uZipyLUt1Km8sZj1LdSppLXRmKnIsYz1LYShhKmErdSp1K2YqZikscz1ldShjKSxsPWMmJi1zL2M7JHUrPWwqYSxXdSs9bCp1LFp1Kz1sKmYsRnUrPXMsWHUrPXMqKEt1KyhLdT1yKSksR3UrPXMqKHRmKyh0Zj1pKSksVnUrPXMqKG5mKyhuZj1vKSkseWYoS3UsdGYsbmYpfWZ1bmN0aW9uIE5mKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBTZih0LG4pe2Z1bmN0aW9uIGUoZSxyKXtyZXR1cm4gZT10KGUsciksbihlWzBdLGVbMV0pfXJldHVybiB0LmludmVydCYmbi5pbnZlcnQmJihlLmludmVydD1mdW5jdGlvbihlLHIpe3JldHVybihlPW4uaW52ZXJ0KGUscikpJiZ0LmludmVydChlWzBdLGVbMV0pfSksZX1mdW5jdGlvbiBFZih0LG4pe3JldHVyblt0PnFhP3QtQmE6dDwtcWE/dCtCYTp0LG5dfWZ1bmN0aW9uIGtmKHQsbixlKXtyZXR1cm4odCU9QmEpP258fGU/U2YoUGYodCksemYobixlKSk6UGYodCk6bnx8ZT96ZihuLGUpOkVmfWZ1bmN0aW9uIENmKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3JldHVyblsobis9dCk+cWE/bi1CYTpuPC1xYT9uK0JhOm4sZV19fWZ1bmN0aW9uIFBmKHQpe3ZhciBuPUNmKHQpO3JldHVybiBuLmludmVydD1DZigtdCksbn1mdW5jdGlvbiB6Zih0LG4pe3ZhciBlPUdhKHQpLHI9UWEodCksaT1HYShuKSxvPVFhKG4pO2Z1bmN0aW9uIGEodCxuKXt2YXIgYT1HYShuKSx1PUdhKHQpKmEsZj1RYSh0KSphLGM9UWEobikscz1jKmUrdSpyO3JldHVybltYYShmKmktcypvLHUqZS1jKnIpLGV1KHMqaStmKm8pXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgYT1HYShuKSx1PUdhKHQpKmEsZj1RYSh0KSphLGM9UWEobikscz1jKmktZipvO3JldHVybltYYShmKmkrYypvLHUqZStzKnIpLGV1KHMqZS11KnIpXX0sYX1mdW5jdGlvbiBSZih0KXtmdW5jdGlvbiBuKG4pe3JldHVybihuPXQoblswXSpJYSxuWzFdKklhKSlbMF0qPUZhLG5bMV0qPUZhLG59cmV0dXJuIHQ9a2YodFswXSpJYSx0WzFdKklhLHQubGVuZ3RoPjI/dFsyXSpJYTowKSxuLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4obj10LmludmVydChuWzBdKklhLG5bMV0qSWEpKVswXSo9RmEsblsxXSo9RmEsbn0sbn1mdW5jdGlvbiBMZih0LG4sZSxyLGksbyl7aWYoZSl7dmFyIGE9R2EobiksdT1RYShuKSxmPXIqZTtudWxsPT1pPyhpPW4rcipCYSxvPW4tZi8yKTooaT1EZihhLGkpLG89RGYoYSxvKSwocj4wP2k8bzppPm8pJiYoaSs9cipCYSkpO2Zvcih2YXIgYyxzPWk7cj4wP3M+bzpzPG87cy09ZiljPU11KFthLC11KkdhKHMpLC11KlFhKHMpXSksdC5wb2ludChjWzBdLGNbMV0pfX1mdW5jdGlvbiBEZih0LG4peyhuPUF1KG4pKVswXS09dCxrdShuKTt2YXIgZT1udSgtblsxXSk7cmV0dXJuKCgtblsyXTwwPy1lOmUpK0JhLURhKSVCYX1mdW5jdGlvbiBVZigpe3ZhciB0LG49W107cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4sZSl7dC5wdXNoKFtuLGVdKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7bi5wdXNoKHQ9W10pfSxsaW5lRW5kOml1LHJlam9pbjpmdW5jdGlvbigpe24ubGVuZ3RoPjEmJm4ucHVzaChuLnBvcCgpLmNvbmNhdChuLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9bjtyZXR1cm4gbj1bXSx0PW51bGwsZX19fWZ1bmN0aW9uIHFmKHQsbil7cmV0dXJuIEhhKHRbMF0tblswXSk8RGEmJkhhKHRbMV0tblsxXSk8RGF9ZnVuY3Rpb24gT2YodCxuLGUscil7dGhpcy54PXQsdGhpcy56PW4sdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBZZih0LG4sZSxyLGkpe3ZhciBvLGEsdT1bXSxmPVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChuPXQubGVuZ3RoLTEpPD0wKSl7dmFyIG4sZSxyPXRbMF0sYT10W25dO2lmKHFmKHIsYSkpe2ZvcihpLmxpbmVTdGFydCgpLG89MDtvPG47KytvKWkucG9pbnQoKHI9dFtvXSlbMF0sclsxXSk7aS5saW5lRW5kKCl9ZWxzZSB1LnB1c2goZT1uZXcgT2Yocix0LG51bGwsITApKSxmLnB1c2goZS5vPW5ldyBPZihyLG51bGwsZSwhMSkpLHUucHVzaChlPW5ldyBPZihhLHQsbnVsbCwhMSkpLGYucHVzaChlLm89bmV3IE9mKGEsbnVsbCxlLCEwKSl9fSksdS5sZW5ndGgpe2ZvcihmLnNvcnQobiksQmYodSksQmYoZiksbz0wLGE9Zi5sZW5ndGg7bzxhOysrbylmW29dLmU9ZT0hZTtmb3IodmFyIGMscyxsPXVbMF07Oyl7Zm9yKHZhciBoPWwsZD0hMDtoLnY7KWlmKChoPWgubik9PT1sKXJldHVybjtjPWgueixpLmxpbmVTdGFydCgpO2Rve2lmKGgudj1oLm8udj0hMCxoLmUpe2lmKGQpZm9yKG89MCxhPWMubGVuZ3RoO288YTsrK28paS5wb2ludCgocz1jW29dKVswXSxzWzFdKTtlbHNlIHIoaC54LGgubi54LDEsaSk7aD1oLm59ZWxzZXtpZihkKWZvcihjPWgucC56LG89Yy5sZW5ndGgtMTtvPj0wOy0tbylpLnBvaW50KChzPWNbb10pWzBdLHNbMV0pO2Vsc2UgcihoLngsaC5wLngsLTEsaSk7aD1oLnB9Yz0oaD1oLm8pLnosZD0hZH13aGlsZSghaC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIEJmKHQpe2lmKG49dC5sZW5ndGgpe2Zvcih2YXIgbixlLHI9MCxpPXRbMF07KytyPG47KWkubj1lPXRbcl0sZS5wPWksaT1lO2kubj1lPXRbMF0sZS5wPWl9fUVmLmludmVydD1FZjt2YXIgRmY9UGEoKTtmdW5jdGlvbiBJZih0LG4pe3ZhciBlPW5bMF0scj1uWzFdLGk9UWEociksbz1bUWEoZSksLUdhKGUpLDBdLGE9MCx1PTA7RmYucmVzZXQoKSwxPT09aT9yPU9hK0RhOi0xPT09aSYmKHI9LU9hLURhKTtmb3IodmFyIGY9MCxjPXQubGVuZ3RoO2Y8YzsrK2YpaWYobD0ocz10W2ZdKS5sZW5ndGgpZm9yKHZhciBzLGwsaD1zW2wtMV0sZD1oWzBdLHA9aFsxXS8yK1lhLHY9UWEocCksZz1HYShwKSx5PTA7eTxsOysreSxkPWIsdj14LGc9dyxoPV8pe3ZhciBfPXNbeV0sYj1fWzBdLG09X1sxXS8yK1lhLHg9UWEobSksdz1HYShtKSxNPWItZCxBPU0+PTA/MTotMSxUPUEqTSxOPVQ+cWEsUz12Kng7aWYoRmYuYWRkKFhhKFMqQSpRYShUKSxnKncrUypHYShUKSkpLGErPU4/TStBKkJhOk0sTl5kPj1lXmI+PWUpe3ZhciBFPU51KEF1KGgpLEF1KF8pKTtrdShFKTt2YXIgaz1OdShvLEUpO2t1KGspO3ZhciBDPShOXk0+PTA/LTE6MSkqZXUoa1syXSk7KHI+Q3x8cj09PUMmJihFWzBdfHxFWzFdKSkmJih1Kz1OXk0+PTA/MTotMSl9fXJldHVybihhPC1EYXx8YTxEYSYmRmY8LURhKV4xJnV9ZnVuY3Rpb24gSGYodCxuLGUscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvLGEsdSxmPW4oaSksYz1VZigpLHM9bihjKSxsPSExLGg9e3BvaW50OmQsbGluZVN0YXJ0OnYsbGluZUVuZDpnLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2gucG9pbnQ9eSxoLmxpbmVTdGFydD1fLGgubGluZUVuZD1iLGE9W10sbz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2gucG9pbnQ9ZCxoLmxpbmVTdGFydD12LGgubGluZUVuZD1nLGE9TihhKTt2YXIgdD1JZihvLHIpO2EubGVuZ3RoPyhsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxZZihhLFhmLHQsZSxpKSk6dCYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLGE9bz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIGQobixlKXt0KG4sZSkmJmkucG9pbnQobixlKX1mdW5jdGlvbiBwKHQsbil7Zi5wb2ludCh0LG4pfWZ1bmN0aW9uIHYoKXtoLnBvaW50PXAsZi5saW5lU3RhcnQoKX1mdW5jdGlvbiBnKCl7aC5wb2ludD1kLGYubGluZUVuZCgpfWZ1bmN0aW9uIHkodCxuKXt1LnB1c2goW3Qsbl0pLHMucG9pbnQodCxuKX1mdW5jdGlvbiBfKCl7cy5saW5lU3RhcnQoKSx1PVtdfWZ1bmN0aW9uIGIoKXt5KHVbMF1bMF0sdVswXVsxXSkscy5saW5lRW5kKCk7dmFyIHQsbixlLHIsZj1zLmNsZWFuKCksaD1jLnJlc3VsdCgpLGQ9aC5sZW5ndGg7aWYodS5wb3AoKSxvLnB1c2godSksdT1udWxsLGQpaWYoMSZmKXtpZigobj0oZT1oWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksdD0wO3Q8bjsrK3QpaS5wb2ludCgocj1lW3RdKVswXSxyWzFdKTtpLmxpbmVFbmQoKX19ZWxzZSBkPjEmJjImZiYmaC5wdXNoKGgucG9wKCkuY29uY2F0KGguc2hpZnQoKSkpLGEucHVzaChoLmZpbHRlcihqZikpfXJldHVybiBofX1mdW5jdGlvbiBqZih0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBYZih0LG4pe3JldHVybigodD10LngpWzBdPDA/dFsxXS1PYS1EYTpPYS10WzFdKS0oKG49bi54KVswXTwwP25bMV0tT2EtRGE6T2EtblsxXSl9dmFyIEdmPUhmKGZ1bmN0aW9uKCl7cmV0dXJuITB9LGZ1bmN0aW9uKHQpe3ZhciBuLGU9TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLG49MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgdT1vPjA/cWE6LXFhLGY9SGEoby1lKTtIYShmLXFhKTxEYT8odC5wb2ludChlLHI9KHIrYSkvMj4wP09hOi1PYSksdC5wb2ludChpLHIpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh1LHIpLHQucG9pbnQobyxyKSxuPTApOmkhPT11JiZmPj1xYSYmKEhhKGUtaSk8RGEmJihlLT1pKkRhKSxIYShvLXUpPERhJiYoby09dSpEYSkscj1mdW5jdGlvbih0LG4sZSxyKXt2YXIgaSxvLGE9UWEodC1lKTtyZXR1cm4gSGEoYSk+RGE/amEoKFFhKG4pKihvPUdhKHIpKSpRYShlKS1RYShyKSooaT1HYShuKSkqUWEodCkpLyhpKm8qYSkpOihuK3IpLzJ9KGUscixvLGEpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodSxyKSxuPTApLHQucG9pbnQoZT1vLHI9YSksaT11fSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksZT1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1ufX19LGZ1bmN0aW9uKHQsbixlLHIpe3ZhciBpO2lmKG51bGw9PXQpaT1lKk9hLHIucG9pbnQoLXFhLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KHFhLGkpLHIucG9pbnQocWEsMCksci5wb2ludChxYSwtaSksci5wb2ludCgwLC1pKSxyLnBvaW50KC1xYSwtaSksci5wb2ludCgtcWEsMCksci5wb2ludCgtcWEsaSk7ZWxzZSBpZihIYSh0WzBdLW5bMF0pPkRhKXt2YXIgbz10WzBdPG5bMF0/cWE6LXFhO2k9ZSpvLzIsci5wb2ludCgtbyxpKSxyLnBvaW50KDAsaSksci5wb2ludChvLGkpfWVsc2Ugci5wb2ludChuWzBdLG5bMV0pfSxbLXFhLC1PYV0pO2Z1bmN0aW9uIFZmKHQpe3ZhciBuPUdhKHQpLGU9NipJYSxyPW4+MCxpPUhhKG4pPkRhO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gR2EodCkqR2EoZSk+bn1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgaT1bMSwwLDBdLG89TnUoQXUodCksQXUoZSkpLGE9VHUobyxvKSx1PW9bMF0sZj1hLXUqdTtpZighZilyZXR1cm4hciYmdDt2YXIgYz1uKmEvZixzPS1uKnUvZixsPU51KGksbyksaD1FdShpLGMpO1N1KGgsRXUobyxzKSk7dmFyIGQ9bCxwPVR1KGgsZCksdj1UdShkLGQpLGc9cCpwLXYqKFR1KGgsaCktMSk7aWYoIShnPDApKXt2YXIgeT1LYShnKSxfPUV1KGQsKC1wLXkpL3YpO2lmKFN1KF8saCksXz1NdShfKSwhcilyZXR1cm4gXzt2YXIgYixtPXRbMF0seD1lWzBdLHc9dFsxXSxNPWVbMV07eDxtJiYoYj1tLG09eCx4PWIpO3ZhciBBPXgtbSxUPUhhKEEtcWEpPERhO2lmKCFUJiZNPHcmJihiPXcsdz1NLE09YiksVHx8QTxEYT9UP3crTT4wXl9bMV08KEhhKF9bMF0tbSk8RGE/dzpNKTp3PD1fWzFdJiZfWzFdPD1NOkE+cWFeKG08PV9bMF0mJl9bMF08PXgpKXt2YXIgTj1FdShkLCgtcCt5KS92KTtyZXR1cm4gU3UoTixoKSxbXyxNdShOKV19fX1mdW5jdGlvbiB1KG4sZSl7dmFyIGk9cj90OnFhLXQsbz0wO3JldHVybiBuPC1pP298PTE6bj5pJiYob3w9MiksZTwtaT9vfD00OmU+aSYmKG98PTgpLG99cmV0dXJuIEhmKG8sZnVuY3Rpb24odCl7dmFyIG4sZSxmLGMscztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7Yz1mPSExLHM9MX0scG9pbnQ6ZnVuY3Rpb24obCxoKXt2YXIgZCxwPVtsLGhdLHY9byhsLGgpLGc9cj92PzA6dShsLGgpOnY/dShsKyhsPDA/cWE6LXFhKSxoKTowO2lmKCFuJiYoYz1mPXYpJiZ0LmxpbmVTdGFydCgpLHYhPT1mJiYoIShkPWEobixwKSl8fHFmKG4sZCl8fHFmKHAsZCkpJiYocFswXSs9RGEscFsxXSs9RGEsdj1vKHBbMF0scFsxXSkpLHYhPT1mKXM9MCx2Pyh0LmxpbmVTdGFydCgpLGQ9YShwLG4pLHQucG9pbnQoZFswXSxkWzFdKSk6KGQ9YShuLHApLHQucG9pbnQoZFswXSxkWzFdKSx0LmxpbmVFbmQoKSksbj1kO2Vsc2UgaWYoaSYmbiYmcl52KXt2YXIgeTtnJmV8fCEoeT1hKHAsbiwhMCkpfHwocz0wLHI/KHQubGluZVN0YXJ0KCksdC5wb2ludCh5WzBdWzBdLHlbMF1bMV0pLHQucG9pbnQoeVsxXVswXSx5WzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQoeVsxXVswXSx5WzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQoeVswXVswXSx5WzBdWzFdKSkpfSF2fHxuJiZxZihuLHApfHx0LnBvaW50KHBbMF0scFsxXSksbj1wLGY9dixlPWd9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmJiZ0LmxpbmVFbmQoKSxuPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHN8KGMmJmYpPDwxfX19LGZ1bmN0aW9uKG4scixpLG8pe0xmKG8sdCxlLGksbixyKX0scj9bMCwtdF06Wy1xYSx0LXFhXSl9dmFyICRmPTFlOSxXZj0tJGY7ZnVuY3Rpb24gWmYodCxuLGUscil7ZnVuY3Rpb24gaShpLG8pe3JldHVybiB0PD1pJiZpPD1lJiZuPD1vJiZvPD1yfWZ1bmN0aW9uIG8oaSxvLHUsYyl7dmFyIHM9MCxsPTA7aWYobnVsbD09aXx8KHM9YShpLHUpKSE9PShsPWEobyx1KSl8fGYoaSxvKTwwXnU+MClkb3tjLnBvaW50KDA9PT1zfHwzPT09cz90OmUscz4xP3I6bil9d2hpbGUoKHM9KHMrdSs0KSU0KSE9PWwpO2Vsc2UgYy5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIGEocixpKXtyZXR1cm4gSGEoclswXS10KTxEYT9pPjA/MDozOkhhKHJbMF0tZSk8RGE/aT4wPzI6MTpIYShyWzFdLW4pPERhP2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiB1KHQsbil7cmV0dXJuIGYodC54LG4ueCl9ZnVuY3Rpb24gZih0LG4pe3ZhciBlPWEodCwxKSxyPWEobiwxKTtyZXR1cm4gZSE9PXI/ZS1yOjA9PT1lP25bMV0tdFsxXToxPT09ZT90WzBdLW5bMF06Mj09PWU/dFsxXS1uWzFdOm5bMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGYsYyxzLGwsaCxkLHAsdixnLHksXyxiPWEsbT1VZigpLHg9e3BvaW50OncsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7eC5wb2ludD1NLGMmJmMucHVzaChzPVtdKTt5PSEwLGc9ITEscD12PU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2YmJihNKGwsaCksZCYmZyYmbS5yZWpvaW4oKSxmLnB1c2gobS5yZXN1bHQoKSkpO3gucG9pbnQ9dyxnJiZiLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yj1tLGY9W10sYz1bXSxfPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIG49ZnVuY3Rpb24oKXtmb3IodmFyIG49MCxlPTAsaT1jLmxlbmd0aDtlPGk7KytlKWZvcih2YXIgbyxhLHU9Y1tlXSxmPTEscz11Lmxlbmd0aCxsPXVbMF0saD1sWzBdLGQ9bFsxXTtmPHM7KytmKW89aCxhPWQsbD11W2ZdLGg9bFswXSxkPWxbMV0sYTw9cj9kPnImJihoLW8pKihyLWEpPihkLWEpKih0LW8pJiYrK246ZDw9ciYmKGgtbykqKHItYSk8KGQtYSkqKHQtbykmJi0tbjtyZXR1cm4gbn0oKSxlPV8mJm4saT0oZj1OKGYpKS5sZW5ndGg7KGV8fGkpJiYoYS5wb2x5Z29uU3RhcnQoKSxlJiYoYS5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSxpJiZZZihmLHUsbixvLGEpLGEucG9seWdvbkVuZCgpKTtiPWEsZj1jPXM9bnVsbH19O2Z1bmN0aW9uIHcodCxuKXtpKHQsbikmJmIucG9pbnQodCxuKX1mdW5jdGlvbiBNKG8sYSl7dmFyIHU9aShvLGEpO2lmKGMmJnMucHVzaChbbyxhXSkseSlsPW8saD1hLGQ9dSx5PSExLHUmJihiLmxpbmVTdGFydCgpLGIucG9pbnQobyxhKSk7ZWxzZSBpZih1JiZnKWIucG9pbnQobyxhKTtlbHNle3ZhciBmPVtwPU1hdGgubWF4KFdmLE1hdGgubWluKCRmLHApKSx2PU1hdGgubWF4KFdmLE1hdGgubWluKCRmLHYpKV0sbT1bbz1NYXRoLm1heChXZixNYXRoLm1pbigkZixvKSksYT1NYXRoLm1heChXZixNYXRoLm1pbigkZixhKSldOyFmdW5jdGlvbih0LG4sZSxyLGksbyl7dmFyIGEsdT10WzBdLGY9dFsxXSxjPTAscz0xLGw9blswXS11LGg9blsxXS1mO2lmKGE9ZS11LGx8fCEoYT4wKSl7aWYoYS89bCxsPDApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1lbHNlIGlmKGw+MCl7aWYoYT5zKXJldHVybjthPmMmJihjPWEpfWlmKGE9aS11LGx8fCEoYTwwKSl7aWYoYS89bCxsPDApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1lbHNlIGlmKGw+MCl7aWYoYTxjKXJldHVybjthPHMmJihzPWEpfWlmKGE9ci1mLGh8fCEoYT4wKSl7aWYoYS89aCxoPDApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1lbHNlIGlmKGg+MCl7aWYoYT5zKXJldHVybjthPmMmJihjPWEpfWlmKGE9by1mLGh8fCEoYTwwKSl7aWYoYS89aCxoPDApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1lbHNlIGlmKGg+MCl7aWYoYTxjKXJldHVybjthPHMmJihzPWEpfXJldHVybiBjPjAmJih0WzBdPXUrYypsLHRbMV09ZitjKmgpLHM8MSYmKG5bMF09dStzKmwsblsxXT1mK3MqaCksITB9fX19fShmLG0sdCxuLGUscik/dSYmKGIubGluZVN0YXJ0KCksYi5wb2ludChvLGEpLF89ITEpOihnfHwoYi5saW5lU3RhcnQoKSxiLnBvaW50KGZbMF0sZlsxXSkpLGIucG9pbnQobVswXSxtWzFdKSx1fHxiLmxpbmVFbmQoKSxfPSExKX1wPW8sdj1hLGc9dX1yZXR1cm4geH19dmFyIFFmLEpmLEtmLHRjPVBhKCksbmM9e3NwaGVyZTppdSxwb2ludDppdSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuYy5wb2ludD1yYyxuYy5saW5lRW5kPWVjfSxsaW5lRW5kOml1LHBvbHlnb25TdGFydDppdSxwb2x5Z29uRW5kOml1fTtmdW5jdGlvbiBlYygpe25jLnBvaW50PW5jLmxpbmVFbmQ9aXV9ZnVuY3Rpb24gcmModCxuKXtRZj10Kj1JYSxKZj1RYShuKj1JYSksS2Y9R2EobiksbmMucG9pbnQ9aWN9ZnVuY3Rpb24gaWModCxuKXt0Kj1JYTt2YXIgZT1RYShuKj1JYSkscj1HYShuKSxpPUhhKHQtUWYpLG89R2EoaSksYT1yKlFhKGkpLHU9S2YqZS1KZipyKm8sZj1KZiplK0tmKnIqbzt0Yy5hZGQoWGEoS2EoYSphK3UqdSksZikpLFFmPXQsSmY9ZSxLZj1yfWZ1bmN0aW9uIG9jKHQpe3JldHVybiB0Yy5yZXNldCgpLHN1KHQsbmMpLCt0Y312YXIgYWM9W251bGwsbnVsbF0sdWM9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmFjfTtmdW5jdGlvbiBmYyh0LG4pe3JldHVybiBhY1swXT10LGFjWzFdPW4sb2ModWMpfXZhciBjYz17RmVhdHVyZTpmdW5jdGlvbih0LG4pe3JldHVybiBsYyh0Lmdlb21ldHJ5LG4pfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmZlYXR1cmVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYobGMoZVtyXS5nZW9tZXRyeSxuKSlyZXR1cm4hMDtyZXR1cm4hMX19LHNjPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gaGModC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoaGMoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe3JldHVybiBkYyh0LmNvb3JkaW5hdGVzLG4pfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGRjKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxuKXtyZXR1cm4gcGModC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihwYyhlW3JdLG4pKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5nZW9tZXRyaWVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYobGMoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIGxjKHQsbil7cmV0dXJuISghdHx8IXNjLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZzY1t0LnR5cGVdKHQsbil9ZnVuY3Rpb24gaGModCxuKXtyZXR1cm4gMD09PWZjKHQsbil9ZnVuY3Rpb24gZGModCxuKXt2YXIgZT1mYyh0WzBdLHRbMV0pO3JldHVybiBmYyh0WzBdLG4pK2ZjKG4sdFsxXSk8PWUrRGF9ZnVuY3Rpb24gcGModCxuKXtyZXR1cm4hIUlmKHQubWFwKHZjKSxnYyhuKSl9ZnVuY3Rpb24gdmModCl7cmV0dXJuKHQ9dC5tYXAoZ2MpKS5wb3AoKSx0fWZ1bmN0aW9uIGdjKHQpe3JldHVyblt0WzBdKklhLHRbMV0qSWFdfWZ1bmN0aW9uIHljKHQsbixlKXt2YXIgcj1nKHQsbi1EYSxlKS5jb25jYXQobik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcChmdW5jdGlvbihuKXtyZXR1cm5bdCxuXX0pfX1mdW5jdGlvbiBfYyh0LG4sZSl7dmFyIHI9Zyh0LG4tRGEsZSkuY29uY2F0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obil7cmV0dXJuW24sdF19KX19ZnVuY3Rpb24gYmMoKXt2YXIgdCxuLGUscixpLG8sYSx1LGYsYyxzLGwsaD0xMCxkPWgscD05MCx2PTM2MCx5PTIuNTtmdW5jdGlvbiBfKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6YigpfX1mdW5jdGlvbiBiKCl7cmV0dXJuIGcoVmEoci9wKSpwLGUscCkubWFwKHMpLmNvbmNhdChnKFZhKHUvdikqdixhLHYpLm1hcChsKSkuY29uY2F0KGcoVmEobi9oKSpoLHQsaCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBIYSh0JXApPkRhfSkubWFwKGYpKS5jb25jYXQoZyhWYShvL2QpKmQsaSxkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIEhhKHQldik+RGF9KS5tYXAoYykpfXJldHVybiBfLmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGIoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSl9LF8ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbcyhyKS5jb25jYXQobChhKS5zbGljZSgxKSxzKGUpLnJldmVyc2UoKS5zbGljZSgxKSxsKHUpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sXy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Xy5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTpfLmV4dGVudE1pbm9yKCl9LF8uZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sZT0rdFsxXVswXSx1PSt0WzBdWzFdLGE9K3RbMV1bMV0scj5lJiYodD1yLHI9ZSxlPXQpLHU+YSYmKHQ9dSx1PWEsYT10KSxfLnByZWNpc2lvbih5KSk6W1tyLHVdLFtlLGFdXX0sXy5leHRlbnRNaW5vcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZVswXVswXSx0PStlWzFdWzBdLG89K2VbMF1bMV0saT0rZVsxXVsxXSxuPnQmJihlPW4sbj10LHQ9ZSksbz5pJiYoZT1vLG89aSxpPWUpLF8ucHJlY2lzaW9uKHkpKTpbW24sb10sW3QsaV1dfSxfLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Xy5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOl8uc3RlcE1pbm9yKCl9LF8uc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLHY9K3RbMV0sXyk6W3Asdl19LF8uc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0WzBdLGQ9K3RbMV0sXyk6W2gsZF19LF8ucHJlY2lzaW9uPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PStoLGY9eWMobyxpLDkwKSxjPV9jKG4sdCx5KSxzPXljKHUsYSw5MCksbD1fYyhyLGUseSksXyk6eX0sXy5leHRlbnRNYWpvcihbWy0xODAsLTkwK0RhXSxbMTgwLDkwLURhXV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAtRGFdLFsxODAsODArRGFdXSl9ZnVuY3Rpb24gbWModCl7cmV0dXJuIHR9dmFyIHhjLHdjLE1jLEFjLFRjPVBhKCksTmM9UGEoKSxTYz17cG9pbnQ6aXUsbGluZVN0YXJ0Oml1LGxpbmVFbmQ6aXUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7U2MubGluZVN0YXJ0PUVjLFNjLmxpbmVFbmQ9UGN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtTYy5saW5lU3RhcnQ9U2MubGluZUVuZD1TYy5wb2ludD1pdSxUYy5hZGQoSGEoTmMpKSxOYy5yZXNldCgpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1UYy8yO3JldHVybiBUYy5yZXNldCgpLHR9fTtmdW5jdGlvbiBFYygpe1NjLnBvaW50PWtjfWZ1bmN0aW9uIGtjKHQsbil7U2MucG9pbnQ9Q2MseGM9TWM9dCx3Yz1BYz1ufWZ1bmN0aW9uIENjKHQsbil7TmMuYWRkKEFjKnQtTWMqbiksTWM9dCxBYz1ufWZ1bmN0aW9uIFBjKCl7Q2MoeGMsd2MpfXZhciB6Yz0xLzAsUmM9emMsTGM9LXpjLERjPUxjLFVjPXtwb2ludDpmdW5jdGlvbih0LG4pe3Q8emMmJih6Yz10KTt0PkxjJiYoTGM9dCk7bjxSYyYmKFJjPW4pO24+RGMmJihEYz1uKX0sbGluZVN0YXJ0Oml1LGxpbmVFbmQ6aXUscG9seWdvblN0YXJ0Oml1LHBvbHlnb25FbmQ6aXUscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9W1t6YyxSY10sW0xjLERjXV07cmV0dXJuIExjPURjPS0oUmM9emM9MS8wKSx0fX07dmFyIHFjLE9jLFljLEJjLEZjPTAsSWM9MCxIYz0wLGpjPTAsWGM9MCxHYz0wLFZjPTAsJGM9MCxXYz0wLFpjPXtwb2ludDpRYyxsaW5lU3RhcnQ6SmMsbGluZUVuZDpucyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtaYy5saW5lU3RhcnQ9ZXMsWmMubGluZUVuZD1yc30scG9seWdvbkVuZDpmdW5jdGlvbigpe1pjLnBvaW50PVFjLFpjLmxpbmVTdGFydD1KYyxaYy5saW5lRW5kPW5zfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1XYz9bVmMvV2MsJGMvV2NdOkdjP1tqYy9HYyxYYy9HY106SGM/W0ZjL0hjLEljL0hjXTpbTmFOLE5hTl07cmV0dXJuIEZjPUljPUhjPWpjPVhjPUdjPVZjPSRjPVdjPTAsdH19O2Z1bmN0aW9uIFFjKHQsbil7RmMrPXQsSWMrPW4sKytIY31mdW5jdGlvbiBKYygpe1pjLnBvaW50PUtjfWZ1bmN0aW9uIEtjKHQsbil7WmMucG9pbnQ9dHMsUWMoWWM9dCxCYz1uKX1mdW5jdGlvbiB0cyh0LG4pe3ZhciBlPXQtWWMscj1uLUJjLGk9S2EoZSplK3Iqcik7amMrPWkqKFljK3QpLzIsWGMrPWkqKEJjK24pLzIsR2MrPWksUWMoWWM9dCxCYz1uKX1mdW5jdGlvbiBucygpe1pjLnBvaW50PVFjfWZ1bmN0aW9uIGVzKCl7WmMucG9pbnQ9aXN9ZnVuY3Rpb24gcnMoKXtvcyhxYyxPYyl9ZnVuY3Rpb24gaXModCxuKXtaYy5wb2ludD1vcyxRYyhxYz1ZYz10LE9jPUJjPW4pfWZ1bmN0aW9uIG9zKHQsbil7dmFyIGU9dC1ZYyxyPW4tQmMsaT1LYShlKmUrcipyKTtqYys9aSooWWMrdCkvMixYYys9aSooQmMrbikvMixHYys9aSxWYys9KGk9QmMqdC1ZYypuKSooWWMrdCksJGMrPWkqKEJjK24pLFdjKz0zKmksUWMoWWM9dCxCYz1uKX1mdW5jdGlvbiBhcyh0KXt0aGlzLl9jb250ZXh0PXR9YXMucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsbiksdGhpcy5fY29udGV4dC5hcmModCxuLHRoaXMuX3JhZGl1cywwLEJhKX19LHJlc3VsdDppdX07dmFyIHVzLGZzLGNzLHNzLGxzLGhzPVBhKCksZHM9e3BvaW50Oml1LGxpbmVTdGFydDpmdW5jdGlvbigpe2RzLnBvaW50PXBzfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dXMmJnZzKGZzLGNzKSxkcy5wb2ludD1pdX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dXM9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt1cz1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0raHM7cmV0dXJuIGhzLnJlc2V0KCksdH19O2Z1bmN0aW9uIHBzKHQsbil7ZHMucG9pbnQ9dnMsZnM9c3M9dCxjcz1scz1ufWZ1bmN0aW9uIHZzKHQsbil7c3MtPXQsbHMtPW4saHMuYWRkKEthKHNzKnNzK2xzKmxzKSksc3M9dCxscz1ufWZ1bmN0aW9uIGdzKCl7dGhpcy5fc3RyaW5nPVtdfWZ1bmN0aW9uIHlzKHQpe3JldHVybiJtMCwiK3QrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLTIqdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIisyKnQrInoifWZ1bmN0aW9uIF9zKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1uZXcgYnM7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdO3JldHVybiBlLnN0cmVhbT1uLGV9fWZ1bmN0aW9uIGJzKCl7fWZ1bmN0aW9uIG1zKHQsbixlKXt2YXIgcj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQobnVsbCksc3UoZSx0LnN0cmVhbShVYykpLG4oVWMucmVzdWx0KCkpLG51bGwhPXImJnQuY2xpcEV4dGVudChyKSx0fWZ1bmN0aW9uIHhzKHQsbixlKXtyZXR1cm4gbXModCxmdW5jdGlvbihlKXt2YXIgcj1uWzFdWzBdLW5bMF1bMF0saT1uWzFdWzFdLW5bMF1bMV0sbz1NYXRoLm1pbihyLyhlWzFdWzBdLWVbMF1bMF0pLGkvKGVbMV1bMV0tZVswXVsxXSkpLGE9K25bMF1bMF0rKHItbyooZVsxXVswXStlWzBdWzBdKSkvMix1PStuWzBdWzFdKyhpLW8qKGVbMV1bMV0rZVswXVsxXSkpLzI7dC5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHVdKX0sZSl9ZnVuY3Rpb24gd3ModCxuLGUpe3JldHVybiB4cyh0LFtbMCwwXSxuXSxlKX1mdW5jdGlvbiBNcyh0LG4sZSl7cmV0dXJuIG1zKHQsZnVuY3Rpb24oZSl7dmFyIHI9K24saT1yLyhlWzFdWzBdLWVbMF1bMF0pLG89KHItaSooZVsxXVswXStlWzBdWzBdKSkvMixhPS1pKmVbMF1bMV07dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFtvLGFdKX0sZSl9ZnVuY3Rpb24gQXModCxuLGUpe3JldHVybiBtcyh0LGZ1bmN0aW9uKGUpe3ZhciByPStuLGk9ci8oZVsxXVsxXS1lWzBdWzFdKSxvPS1pKmVbMF1bMF0sYT0oci1pKihlWzFdWzFdK2VbMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbbyxhXSl9LGUpfWdzLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTp5cyg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz10LHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsbiksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fc3RyaW5nLnB1c2goIkwiLHQsIiwiLG4pO2JyZWFrO2RlZmF1bHQ6bnVsbD09dGhpcy5fY2lyY2xlJiYodGhpcy5fY2lyY2xlPXlzKHRoaXMuX3JhZGl1cykpLHRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixuLHRoaXMuX2NpcmNsZSl9fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgdD10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSx0fXJldHVybiBudWxsfX0sYnMucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjpicyxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuc3RyZWFtLnBvaW50KHQsbil9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fTt2YXIgVHM9MTYsTnM9R2EoMzAqSWEpO2Z1bmN0aW9uIFNzKHQsbil7cmV0dXJuK24/ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKHIsaSxvLGEsdSxmLGMscyxsLGgsZCxwLHYsZyl7dmFyIHk9Yy1yLF89cy1pLGI9eSp5K18qXztpZihiPjQqbiYmdi0tKXt2YXIgbT1hK2gseD11K2Qsdz1mK3AsTT1LYShtKm0reCp4K3cqdyksQT1ldSh3Lz1NKSxUPUhhKEhhKHcpLTEpPERhfHxIYShvLWwpPERhPyhvK2wpLzI6WGEoeCxtKSxOPXQoVCxBKSxTPU5bMF0sRT1OWzFdLGs9Uy1yLEM9RS1pLFA9XyprLXkqQzsoUCpQL2I+bnx8SGEoKHkqaytfKkMpL2ItLjUpPi4zfHxhKmgrdSpkK2YqcDxOcykmJihlKHIsaSxvLGEsdSxmLFMsRSxULG0vPU0seC89TSx3LHYsZyksZy5wb2ludChTLEUpLGUoUyxFLFQsbSx4LHcsYyxzLGwsaCxkLHAsdixnKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLG8sYSx1LGYsYyxzLGwsaCxkLHAsdj17cG9pbnQ6ZyxsaW5lU3RhcnQ6eSxsaW5lRW5kOmIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSx2LmxpbmVTdGFydD1tfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksdi5saW5lU3RhcnQ9eX19O2Z1bmN0aW9uIGcoZSxyKXtlPXQoZSxyKSxuLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24geSgpe3M9TmFOLHYucG9pbnQ9XyxuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIF8ocixpKXt2YXIgbz1BdShbcixpXSksYT10KHIsaSk7ZShzLGwsYyxoLGQscCxzPWFbMF0sbD1hWzFdLGM9cixoPW9bMF0sZD1vWzFdLHA9b1syXSxUcyxuKSxuLnBvaW50KHMsbCl9ZnVuY3Rpb24gYigpe3YucG9pbnQ9ZyxuLmxpbmVFbmQoKX1mdW5jdGlvbiBtKCl7eSgpLHYucG9pbnQ9eCx2LmxpbmVFbmQ9d31mdW5jdGlvbiB4KHQsbil7XyhyPXQsbiksaT1zLG89bCxhPWgsdT1kLGY9cCx2LnBvaW50PV99ZnVuY3Rpb24gdygpe2UocyxsLGMsaCxkLHAsaSxvLHIsYSx1LGYsVHMsbiksdi5saW5lRW5kPWIsYigpfXJldHVybiB2fX0odCxuKTpmdW5jdGlvbih0KXtyZXR1cm4gX3Moe3BvaW50OmZ1bmN0aW9uKG4sZSl7bj10KG4sZSksdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX0odCl9dmFyIEVzPV9zKHtwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuc3RyZWFtLnBvaW50KHQqSWEsbipJYSl9fSk7ZnVuY3Rpb24ga3ModCxuLGUscil7dmFyIGk9R2Eociksbz1RYShyKSxhPWkqdCx1PW8qdCxmPWkvdCxjPW8vdCxzPShvKmUtaSpuKS90LGw9KG8qbitpKmUpL3Q7ZnVuY3Rpb24gaCh0LHIpe3JldHVyblthKnQtdSpyK24sZS11KnQtYSpyXX1yZXR1cm4gaC5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bZip0LWMqbitzLGwtYyp0LWYqbl19LGh9ZnVuY3Rpb24gQ3ModCl7cmV0dXJuIFBzKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSgpfWZ1bmN0aW9uIFBzKHQpe3ZhciBuLGUscixpLG8sYSx1LGYsYyxzLGw9MTUwLGg9NDgwLGQ9MjUwLHA9MCx2PTAsZz0wLHk9MCxfPTAsYj0wLG09bnVsbCx4PUdmLHc9bnVsbCxNPW1jLEE9LjU7ZnVuY3Rpb24gVCh0KXtyZXR1cm4gZih0WzBdKklhLHRbMV0qSWEpfWZ1bmN0aW9uIE4odCl7cmV0dXJuKHQ9Zi5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKkZhLHRbMV0qRmFdfWZ1bmN0aW9uIFMoKXt2YXIgdD1rcyhsLDAsMCxiKS5hcHBseShudWxsLG4ocCx2KSkscj0oYj9rczpmdW5jdGlvbih0LG4sZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybltuK3QqcixlLXQqaV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsaSl7cmV0dXJuWyhyLW4pL3QsKGUtaSkvdF19LHJ9KShsLGgtdFswXSxkLXRbMV0sYik7cmV0dXJuIGU9a2YoZyx5LF8pLHU9U2YobixyKSxmPVNmKGUsdSksYT1Tcyh1LEEpLEUoKX1mdW5jdGlvbiBFKCl7cmV0dXJuIGM9cz1udWxsLFR9cmV0dXJuIFQuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZzPT09dD9jOmM9RXMoZnVuY3Rpb24odCl7cmV0dXJuIF9zKHtwb2ludDpmdW5jdGlvbihuLGUpe3ZhciByPXQobixlKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoclswXSxyWzFdKX19KX0oZSkoeChhKE0ocz10KSkpKSl9LFQucHJlY2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD10LG09dm9pZCAwLEUoKSk6eH0sVC5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT10LHc9cj1pPW89bnVsbCxFKCkpOk19LFQuY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PSt0P1ZmKG09dCpJYSk6KG09bnVsbCxHZiksRSgpKTptKkZhfSxULmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09bnVsbD09dD8odz1yPWk9bz1udWxsLG1jKTpaZih3PSt0WzBdWzBdLHI9K3RbMF1bMV0saT0rdFsxXVswXSxvPSt0WzFdWzFdKSxFKCkpOm51bGw9PXc/bnVsbDpbW3cscl0sW2ksb11dfSxULnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LFMoKSk6bH0sVC50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3RbMF0sZD0rdFsxXSxTKCkpOltoLGRdfSxULmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10WzBdJTM2MCpJYSx2PXRbMV0lMzYwKklhLFMoKSk6W3AqRmEsdipGYV19LFQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPXRbMF0lMzYwKklhLHk9dFsxXSUzNjAqSWEsXz10Lmxlbmd0aD4yP3RbMl0lMzYwKklhOjAsUygpKTpbZypGYSx5KkZhLF8qRmFdfSxULmFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQlMzYwKklhLFMoKSk6YipGYX0sVC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9U3ModSxBPXQqdCksRSgpKTpLYShBKX0sVC5maXRFeHRlbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4geHMoVCx0LG4pfSxULmZpdFNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gd3MoVCx0LG4pfSxULmZpdFdpZHRoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1zKFQsdCxuKX0sVC5maXRIZWlnaHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQXMoVCx0LG4pfSxmdW5jdGlvbigpe3JldHVybiBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFQuaW52ZXJ0PW4uaW52ZXJ0JiZOLFMoKX19ZnVuY3Rpb24genModCl7dmFyIG49MCxlPXFhLzMscj1Qcyh0KSxpPXIobixlKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihuPXRbMF0qSWEsZT10WzFdKklhKTpbbipGYSxlKkZhXX0saX1mdW5jdGlvbiBScyh0LG4pe3ZhciBlPVFhKHQpLHI9KGUrUWEobikpLzI7aWYoSGEocik8RGEpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPUdhKHQpO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm5bdCpuLFFhKGUpL25dfXJldHVybiBlLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L24sZXUoZSpuKV19LGV9KHQpO3ZhciBpPTErZSooMipyLWUpLG89S2EoaSkvcjtmdW5jdGlvbiBhKHQsbil7dmFyIGU9S2EoaS0yKnIqUWEobikpL3I7cmV0dXJuW2UqUWEodCo9ciksby1lKkdhKHQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1vLW47cmV0dXJuW1hhKHQsSGEoZSkpL3IqSmEoZSksZXUoKGktKHQqdCtlKmUpKnIqcikvKDIqcikpXX0sYX1mdW5jdGlvbiBMcygpe3JldHVybiB6cyhScykuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX1mdW5jdGlvbiBEcygpe3JldHVybiBMcygpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfWZ1bmN0aW9uIFVzKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPUdhKG4pLGk9R2EoZSksbz10KHIqaSk7cmV0dXJuW28qaSpRYShuKSxvKlFhKGUpXX19ZnVuY3Rpb24gcXModCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9S2EobipuK2UqZSksaT10KHIpLG89UWEoaSksYT1HYShpKTtyZXR1cm5bWGEobipvLHIqYSksZXUociYmZSpvL3IpXX19dmFyIE9zPVVzKGZ1bmN0aW9uKHQpe3JldHVybiBLYSgyLygxK3QpKX0pO09zLmludmVydD1xcyhmdW5jdGlvbih0KXtyZXR1cm4gMipldSh0LzIpfSk7dmFyIFlzPVVzKGZ1bmN0aW9uKHQpe3JldHVybih0PW51KHQpKSYmdC9RYSh0KX0pO2Z1bmN0aW9uIEJzKHQsbil7cmV0dXJuW3QsV2EodHUoKE9hK24pLzIpKV19ZnVuY3Rpb24gRnModCl7dmFyIG4sZSxyLGk9Q3ModCksbz1pLmNlbnRlcixhPWkuc2NhbGUsdT1pLnRyYW5zbGF0ZSxmPWkuY2xpcEV4dGVudCxjPW51bGw7ZnVuY3Rpb24gcygpe3ZhciBvPXFhKmEoKSx1PWkoUmYoaS5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIGYobnVsbD09Yz9bW3VbMF0tbyx1WzFdLW9dLFt1WzBdK28sdVsxXStvXV06dD09PUJzP1tbTWF0aC5tYXgodVswXS1vLGMpLG5dLFtNYXRoLm1pbih1WzBdK28sZSkscl1dOltbYyxNYXRoLm1heCh1WzFdLW8sbildLFtlLE1hdGgubWluKHVbMV0rbyxyKV1dKX1yZXR1cm4gaS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSh0KSxzKCkpOmEoKX0saS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUodCkscygpKTp1KCl9LGkuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLHMoKSk6bygpfSxpLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/Yz1uPWU9cj1udWxsOihjPSt0WzBdWzBdLG49K3RbMF1bMV0sZT0rdFsxXVswXSxyPSt0WzFdWzFdKSxzKCkpOm51bGw9PWM/bnVsbDpbW2Msbl0sW2Uscl1dfSxzKCl9ZnVuY3Rpb24gSXModCl7cmV0dXJuIHR1KChPYSt0KS8yKX1mdW5jdGlvbiBIcyh0LG4pe3ZhciBlPUdhKHQpLHI9dD09PW4/UWEodCk6V2EoZS9HYShuKSkvV2EoSXMobikvSXModCkpLGk9ZSpaYShJcyh0KSxyKS9yO2lmKCFyKXJldHVybiBCcztmdW5jdGlvbiBvKHQsbil7aT4wP248LU9hK0RhJiYobj0tT2ErRGEpOm4+T2EtRGEmJihuPU9hLURhKTt2YXIgZT1pL1phKElzKG4pLHIpO3JldHVybltlKlFhKHIqdCksaS1lKkdhKHIqdCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBlPWktbixvPUphKHIpKkthKHQqdCtlKmUpO3JldHVybltYYSh0LEhhKGUpKS9yKkphKGUpLDIqamEoWmEoaS9vLDEvcikpLU9hXX0sb31mdW5jdGlvbiBqcyh0LG4pe3JldHVyblt0LG5dfWZ1bmN0aW9uIFhzKHQsbil7dmFyIGU9R2EodCkscj10PT09bj9RYSh0KTooZS1HYShuKSkvKG4tdCksaT1lL3IrdDtpZihIYShyKTxEYSlyZXR1cm4ganM7ZnVuY3Rpb24gbyh0LG4pe3ZhciBlPWktbixvPXIqdDtyZXR1cm5bZSpRYShvKSxpLWUqR2EobyldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBlPWktbjtyZXR1cm5bWGEodCxIYShlKSkvcipKYShlKSxpLUphKHIpKkthKHQqdCtlKmUpXX0sb31Zcy5pbnZlcnQ9cXMoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxCcy5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bdCwyKmphKCRhKG4pKS1PYV19LGpzLmludmVydD1qczt2YXIgR3M9MS4zNDAyNjQsVnM9LS4wODExMDYsJHM9ODkzZS02LFdzPS4wMDM3OTYsWnM9S2EoMykvMjtmdW5jdGlvbiBRcyh0LG4pe3ZhciBlPWV1KFpzKlFhKG4pKSxyPWUqZSxpPXIqcipyO3JldHVyblt0KkdhKGUpLyhacyooR3MrMypWcypyK2kqKDcqJHMrOSpXcypyKSkpLGUqKEdzK1ZzKnIraSooJHMrV3MqcikpXX1mdW5jdGlvbiBKcyh0LG4pe3ZhciBlPUdhKG4pLHI9R2EodCkqZTtyZXR1cm5bZSpRYSh0KS9yLFFhKG4pL3JdfWZ1bmN0aW9uIEtzKHQsbixlLHIpe3JldHVybiAxPT09dCYmMT09PW4mJjA9PT1lJiYwPT09cj9tYzpfcyh7cG9pbnQ6ZnVuY3Rpb24oaSxvKXt0aGlzLnN0cmVhbS5wb2ludChpKnQrZSxvKm4rcil9fSl9ZnVuY3Rpb24gdGwodCxuKXt2YXIgZT1uKm4scj1lKmU7cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqZStyKihyKiguMDAzOTcxKmUtLjAwMTUyOSpyKS0uMDEzNzkxKSksbiooMS4wMDcyMjYrZSooLjAxNTA4NStyKiguMDI4ODc0KmUtLjA0NDQ3NS0uMDA1OTE2KnIpKSldfWZ1bmN0aW9uIG5sKHQsbil7cmV0dXJuW0dhKG4pKlFhKHQpLFFhKG4pXX1mdW5jdGlvbiBlbCh0LG4pe3ZhciBlPUdhKG4pLHI9MStHYSh0KSplO3JldHVybltlKlFhKHQpL3IsUWEobikvcl19ZnVuY3Rpb24gcmwodCxuKXtyZXR1cm5bV2EodHUoKE9hK24pLzIpKSwtdF19ZnVuY3Rpb24gaWwodCxuKXtyZXR1cm4gdC5wYXJlbnQ9PT1uLnBhcmVudD8xOjJ9ZnVuY3Rpb24gb2wodCxuKXtyZXR1cm4gdCtuLnh9ZnVuY3Rpb24gYWwodCxuKXtyZXR1cm4gTWF0aC5tYXgodCxuLnkpfWZ1bmN0aW9uIHVsKHQpe3ZhciBuPTAsZT10LmNoaWxkcmVuLHI9ZSYmZS5sZW5ndGg7aWYocilmb3IoOy0tcj49MDspbis9ZVtyXS52YWx1ZTtlbHNlIG49MTt0LnZhbHVlPW59ZnVuY3Rpb24gZmwodCxuKXt2YXIgZSxyLGksbyxhLHU9bmV3IGhsKHQpLGY9K3QudmFsdWUmJih1LnZhbHVlPXQudmFsdWUpLGM9W3VdO2ZvcihudWxsPT1uJiYobj1jbCk7ZT1jLnBvcCgpOylpZihmJiYoZS52YWx1ZT0rZS5kYXRhLnZhbHVlKSwoaT1uKGUuZGF0YSkpJiYoYT1pLmxlbmd0aCkpZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKWMucHVzaChyPWUuY2hpbGRyZW5bb109bmV3IGhsKGlbb10pKSxyLnBhcmVudD1lLHIuZGVwdGg9ZS5kZXB0aCsxO3JldHVybiB1LmVhY2hCZWZvcmUobGwpfWZ1bmN0aW9uIGNsKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHNsKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBsbCh0KXt2YXIgbj0wO2Rve3QuaGVpZ2h0PW59d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK24pfWZ1bmN0aW9uIGhsKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfVFzLmludmVydD1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZSxyPW4saT1yKnIsbz1pKmkqaSxhPTA7YTwxMiYmKG89KGk9KHItPWU9KHIqKEdzK1ZzKmkrbyooJHMrV3MqaSkpLW4pLyhHcyszKlZzKmkrbyooNyokcys5KldzKmkpKSkqcikqaSppLCEoSGEoZSk8VWEpKTsrK2EpO3JldHVybltacyp0KihHcyszKlZzKmkrbyooNyokcys5KldzKmkpKS9HYShyKSxldShRYShyKS9acyldfSxKcy5pbnZlcnQ9cXMoamEpLHRsLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBlLHI9bixpPTI1O2Rve3ZhciBvPXIqcixhPW8qbztyLT1lPShyKigxLjAwNzIyNitvKiguMDE1MDg1K2EqKC4wMjg4NzQqby0uMDQ0NDc1LS4wMDU5MTYqYSkpKS1uKS8oMS4wMDcyMjYrbyooLjA0NTI1NSthKiguMjU5ODY2Km8tLjMxMTMyNS0uMDA1OTE2KjExKmEpKSl9d2hpbGUoSGEoZSk+RGEmJi0taT4wKTtyZXR1cm5bdC8oLjg3MDcrKG89cipyKSoobyoobypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKS0uMDEzNzkxKS0uMTMxOTc5KSkscl19LG5sLmludmVydD1xcyhldSksZWwuaW52ZXJ0PXFzKGZ1bmN0aW9uKHQpe3JldHVybiAyKmphKHQpfSkscmwuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuWy1uLDIqamEoJGEodCkpLU9hXX0saGwucHJvdG90eXBlPWZsLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aGwsY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIodWwpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG89dGhpcyxhPVtvXTtkb3tmb3Iobj1hLnJldmVyc2UoKSxhPVtdO289bi5wb3AoKTspaWYodChvKSxlPW8uY2hpbGRyZW4pZm9yKHI9MCxpPWUubGVuZ3RoO3I8aTsrK3IpYS5wdXNoKGVbcl0pfXdoaWxlKGEubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHIsaT10aGlzLG89W2ldLGE9W107aT1vLnBvcCgpOylpZihhLnB1c2goaSksbj1pLmNoaWxkcmVuKWZvcihlPTAscj1uLmxlbmd0aDtlPHI7KytlKW8ucHVzaChuW2VdKTtmb3IoO2k9YS5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPXRoaXMsaT1bcl07cj1pLnBvcCgpOylpZih0KHIpLG49ci5jaGlsZHJlbilmb3IoZT1uLmxlbmd0aC0xO2U+PTA7LS1lKWkucHVzaChuW2VdKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihuKXtmb3IodmFyIGU9K3Qobi5kYXRhKXx8MCxyPW4uY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KWUrPXJbaV0udmFsdWU7bi52YWx1ZT1lfSl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiZuLmNoaWxkcmVuLnNvcnQodCl9KX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcyxlPWZ1bmN0aW9uKHQsbil7aWYodD09PW4pcmV0dXJuIHQ7dmFyIGU9dC5hbmNlc3RvcnMoKSxyPW4uYW5jZXN0b3JzKCksaT1udWxsO2Zvcih0PWUucG9wKCksbj1yLnBvcCgpO3Q9PT1uOylpPXQsdD1lLnBvcCgpLG49ci5wb3AoKTtyZXR1cm4gaX0obix0KSxyPVtuXTtuIT09ZTspbj1uLnBhcmVudCxyLnB1c2gobik7Zm9yKHZhciBpPXIubGVuZ3RoO3QhPT1lOylyLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sYW5jZXN0b3JzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsbj1bdF07dD10LnBhcmVudDspbi5wdXNoKHQpO3JldHVybiBufSxkZXNjZW5kYW50czpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7dC5wdXNoKG4pfSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihuKXtuLmNoaWxkcmVufHx0LnB1c2gobil9KSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1bXTtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKGUpe2UhPT10JiZuLnB1c2goe3NvdXJjZTplLnBhcmVudCx0YXJnZXQ6ZX0pfSksbn0sY29weTpmdW5jdGlvbigpe3JldHVybiBmbCh0aGlzKS5lYWNoQmVmb3JlKHNsKX19O3ZhciBkbD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gcGwodCl7Zm9yKHZhciBuLGUscj0wLGk9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj10Lmxlbmd0aDtyOyllPU1hdGgucmFuZG9tKCkqci0tfDAsbj10W3JdLHRbcl09dFtlXSx0W2VdPW47cmV0dXJuIHR9KGRsLmNhbGwodCkpKS5sZW5ndGgsbz1bXTtyPGk7KW49dFtyXSxlJiZ5bChlLG4pPysrcjooZT1ibChvPXZsKG8sbikpLHI9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gdmwodCxuKXt2YXIgZSxyO2lmKF9sKG4sdCkpcmV0dXJuW25dO2ZvcihlPTA7ZTx0Lmxlbmd0aDsrK2UpaWYoZ2wobix0W2VdKSYmX2wobWwodFtlXSxuKSx0KSlyZXR1cm5bdFtlXSxuXTtmb3IoZT0wO2U8dC5sZW5ndGgtMTsrK2UpZm9yKHI9ZSsxO3I8dC5sZW5ndGg7KytyKWlmKGdsKG1sKHRbZV0sdFtyXSksbikmJmdsKG1sKHRbZV0sbiksdFtyXSkmJmdsKG1sKHRbcl0sbiksdFtlXSkmJl9sKHhsKHRbZV0sdFtyXSxuKSx0KSlyZXR1cm5bdFtlXSx0W3JdLG5dO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBnbCh0LG4pe3ZhciBlPXQuci1uLnIscj1uLngtdC54LGk9bi55LXQueTtyZXR1cm4gZTwwfHxlKmU8cipyK2kqaX1mdW5jdGlvbiB5bCh0LG4pe3ZhciBlPXQuci1uLnIrMWUtNixyPW4ueC10LngsaT1uLnktdC55O3JldHVybiBlPjAmJmUqZT5yKnIraSppfWZ1bmN0aW9uIF9sKHQsbil7Zm9yKHZhciBlPTA7ZTxuLmxlbmd0aDsrK2UpaWYoIXlsKHQsbltlXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gYmwodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KG49dFswXSkueCx5Om4ueSxyOm4ucn07Y2FzZSAyOnJldHVybiBtbCh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4geGwodFswXSx0WzFdLHRbMl0pfXZhciBufWZ1bmN0aW9uIG1sKHQsbil7dmFyIGU9dC54LHI9dC55LGk9dC5yLG89bi54LGE9bi55LHU9bi5yLGY9by1lLGM9YS1yLHM9dS1pLGw9TWF0aC5zcXJ0KGYqZitjKmMpO3JldHVybnt4OihlK28rZi9sKnMpLzIseToocithK2MvbCpzKS8yLHI6KGwraSt1KS8yfX1mdW5jdGlvbiB4bCh0LG4sZSl7dmFyIHI9dC54LGk9dC55LG89dC5yLGE9bi54LHU9bi55LGY9bi5yLGM9ZS54LHM9ZS55LGw9ZS5yLGg9ci1hLGQ9ci1jLHA9aS11LHY9aS1zLGc9Zi1vLHk9bC1vLF89cipyK2kqaS1vKm8sYj1fLWEqYS11KnUrZipmLG09Xy1jKmMtcypzK2wqbCx4PWQqcC1oKnYsdz0ocCptLXYqYikvKDIqeCktcixNPSh2KmctcCp5KS94LEE9KGQqYi1oKm0pLygyKngpLWksVD0oaCp5LWQqZykveCxOPU0qTStUKlQtMSxTPTIqKG8rdypNK0EqVCksRT13KncrQSpBLW8qbyxrPS0oTj8oUytNYXRoLnNxcnQoUypTLTQqTipFKSkvKDIqTik6RS9TKTtyZXR1cm57eDpyK3crTSprLHk6aStBK1QqayxyOmt9fWZ1bmN0aW9uIHdsKHQsbixlKXt2YXIgcixpLG8sYSx1PXQueC1uLngsZj10Lnktbi55LGM9dSp1K2YqZjtjPyhpPW4ucitlLnIsaSo9aSxhPXQucitlLnIsaT4oYSo9YSk/KHI9KGMrYS1pKS8oMipjKSxvPU1hdGguc3FydChNYXRoLm1heCgwLGEvYy1yKnIpKSxlLng9dC54LXIqdS1vKmYsZS55PXQueS1yKmYrbyp1KToocj0oYytpLWEpLygyKmMpLG89TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS9jLXIqcikpLGUueD1uLngrcip1LW8qZixlLnk9bi55K3IqZitvKnUpKTooZS54PW4ueCtlLnIsZS55PW4ueSl9ZnVuY3Rpb24gTWwodCxuKXt2YXIgZT10LnIrbi5yLTFlLTYscj1uLngtdC54LGk9bi55LXQueTtyZXR1cm4gZT4wJiZlKmU+cipyK2kqaX1mdW5jdGlvbiBBbCh0KXt2YXIgbj10Ll8sZT10Lm5leHQuXyxyPW4ucitlLnIsaT0obi54KmUucitlLngqbi5yKS9yLG89KG4ueSplLnIrZS55Km4ucikvcjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBUbCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gTmwodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgbixlLHIsaSxvLGEsdSxmLGMscyxsO2lmKChuPXRbMF0pLng9MCxuLnk9MCwhKGk+MSkpcmV0dXJuIG4ucjtpZihlPXRbMV0sbi54PS1lLnIsZS54PW4ucixlLnk9MCwhKGk+MikpcmV0dXJuIG4ucitlLnI7d2woZSxuLHI9dFsyXSksbj1uZXcgVGwobiksZT1uZXcgVGwoZSkscj1uZXcgVGwociksbi5uZXh0PXIucHJldmlvdXM9ZSxlLm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD1lLnByZXZpb3VzPW47dDpmb3IodT0zO3U8aTsrK3Upe3dsKG4uXyxlLl8scj10W3VdKSxyPW5ldyBUbChyKSxmPWUubmV4dCxjPW4ucHJldmlvdXMscz1lLl8ucixsPW4uXy5yO2Rve2lmKHM8PWwpe2lmKE1sKGYuXyxyLl8pKXtlPWYsbi5uZXh0PWUsZS5wcmV2aW91cz1uLC0tdTtjb250aW51ZSB0fXMrPWYuXy5yLGY9Zi5uZXh0fWVsc2V7aWYoTWwoYy5fLHIuXykpeyhuPWMpLm5leHQ9ZSxlLnByZXZpb3VzPW4sLS11O2NvbnRpbnVlIHR9bCs9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShmIT09Yy5uZXh0KTtmb3Ioci5wcmV2aW91cz1uLHIubmV4dD1lLG4ubmV4dD1lLnByZXZpb3VzPWU9cixvPUFsKG4pOyhyPXIubmV4dCkhPT1lOykoYT1BbChyKSk8byYmKG49cixvPWEpO2U9bi5uZXh0fWZvcihuPVtlLl9dLHI9ZTsocj1yLm5leHQpIT09ZTspbi5wdXNoKHIuXyk7Zm9yKHI9cGwobiksdT0wO3U8aTsrK3UpKG49dFt1XSkueC09ci54LG4ueS09ci55O3JldHVybiByLnJ9ZnVuY3Rpb24gU2wodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIEVsKCl7cmV0dXJuIDB9ZnVuY3Rpb24ga2wodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIENsKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9ZnVuY3Rpb24gUGwodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uY2hpbGRyZW58fChuLnI9TWF0aC5tYXgoMCwrdChuKXx8MCkpfX1mdW5jdGlvbiB6bCh0LG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihyPWUuY2hpbGRyZW4pe3ZhciByLGksbyxhPXIubGVuZ3RoLHU9dChlKSpufHwwO2lmKHUpZm9yKGk9MDtpPGE7KytpKXJbaV0ucis9dTtpZihvPU5sKHIpLHUpZm9yKGk9MDtpPGE7KytpKXJbaV0uci09dTtlLnI9byt1fX19ZnVuY3Rpb24gUmwodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPW4ucGFyZW50O24ucio9dCxlJiYobi54PWUueCt0Km4ueCxuLnk9ZS55K3Qqbi55KX19ZnVuY3Rpb24gTGwodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIERsKHQsbixlLHIsaSl7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbix1PS0xLGY9YS5sZW5ndGgsYz10LnZhbHVlJiYoci1uKS90LnZhbHVlOysrdTxmOykobz1hW3VdKS55MD1lLG8ueTE9aSxvLngwPW4sby54MT1uKz1vLnZhbHVlKmN9dmFyIFVsPSIkIixxbD17ZGVwdGg6LTF9LE9sPXt9O2Z1bmN0aW9uIFlsKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIEJsKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIEZsKHQsbil7cmV0dXJuIHQucGFyZW50PT09bi5wYXJlbnQ/MToyfWZ1bmN0aW9uIElsKHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIG4/blswXTp0LnR9ZnVuY3Rpb24gSGwodCl7dmFyIG49dC5jaGlsZHJlbjtyZXR1cm4gbj9uW24ubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBqbCh0LG4sZSl7dmFyIHI9ZS8obi5pLXQuaSk7bi5jLT1yLG4ucys9ZSx0LmMrPXIsbi56Kz1lLG4ubSs9ZX1mdW5jdGlvbiBYbCh0LG4sZSl7cmV0dXJuIHQuYS5wYXJlbnQ9PT1uLnBhcmVudD90LmE6ZX1mdW5jdGlvbiBHbCh0LG4pe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1ufWZ1bmN0aW9uIFZsKHQsbixlLHIsaSl7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbix1PS0xLGY9YS5sZW5ndGgsYz10LnZhbHVlJiYoaS1lKS90LnZhbHVlOysrdTxmOykobz1hW3VdKS54MD1uLG8ueDE9cixvLnkwPWUsby55MT1lKz1vLnZhbHVlKmN9R2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaGwucHJvdG90eXBlKTt2YXIgJGw9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIFdsKHQsbixlLHIsaSxvKXtmb3IodmFyIGEsdSxmLGMscyxsLGgsZCxwLHYsZyx5PVtdLF89bi5jaGlsZHJlbixiPTAsbT0wLHg9Xy5sZW5ndGgsdz1uLnZhbHVlO2I8eDspe2Y9aS1lLGM9by1yO2Rve3M9X1ttKytdLnZhbHVlfXdoaWxlKCFzJiZtPHgpO2ZvcihsPWg9cyxnPXMqcyoodj1NYXRoLm1heChjL2YsZi9jKS8odyp0KSkscD1NYXRoLm1heChoL2csZy9sKTttPHg7KyttKXtpZihzKz11PV9bbV0udmFsdWUsdTxsJiYobD11KSx1PmgmJihoPXUpLGc9cypzKnYsKGQ9TWF0aC5tYXgoaC9nLGcvbCkpPnApe3MtPXU7YnJlYWt9cD1kfXkucHVzaChhPXt2YWx1ZTpzLGRpY2U6ZjxjLGNoaWxkcmVuOl8uc2xpY2UoYixtKX0pLGEuZGljZT9EbChhLGUscixpLHc/cis9YypzL3c6byk6VmwoYSxlLHIsdz9lKz1mKnMvdzppLG8pLHctPXMsYj1tfXJldHVybiB5fXZhciBabD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCxlLHIsaSxvKXtXbChuLHQsZSxyLGksbyl9cmV0dXJuIGUucmF0aW89ZnVuY3Rpb24obil7cmV0dXJuIHQoKG49K24pPjE/bjoxKX0sZX0oJGwpO3ZhciBRbD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCxlLHIsaSxvKXtpZigoYT10Ll9zcXVhcmlmeSkmJmEucmF0aW89PT1uKWZvcih2YXIgYSx1LGYsYyxzLGw9LTEsaD1hLmxlbmd0aCxkPXQudmFsdWU7KytsPGg7KXtmb3IoZj0odT1hW2xdKS5jaGlsZHJlbixjPXUudmFsdWU9MCxzPWYubGVuZ3RoO2M8czsrK2MpdS52YWx1ZSs9ZltjXS52YWx1ZTt1LmRpY2U/RGwodSxlLHIsaSxyKz0oby1yKSp1LnZhbHVlL2QpOlZsKHUsZSxyLGUrPShpLWUpKnUudmFsdWUvZCxvKSxkLT11LnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT1XbChuLHQsZSxyLGksbyksYS5yYXRpbz1ufXJldHVybiBlLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiB0KChuPStuKT4xP246MSl9LGV9KCRsKTtmdW5jdGlvbiBKbCh0LG4pe3JldHVybiB0WzBdLW5bMF18fHRbMV0tblsxXX1mdW5jdGlvbiBLbCh0KXtmb3IodmFyIG4sZSxyLGk9dC5sZW5ndGgsbz1bMCwxXSxhPTIsdT0yO3U8aTsrK3Upe2Zvcig7YT4xJiYobj10W29bYS0yXV0sZT10W29bYS0xXV0scj10W3VdLChlWzBdLW5bMF0pKihyWzFdLW5bMV0pLShlWzFdLW5bMV0pKihyWzBdLW5bMF0pPD0wKTspLS1hO29bYSsrXT11fXJldHVybiBvLnNsaWNlKDAsYSl9ZnVuY3Rpb24gdGgoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12YXIgbmg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQ9bnVsbD09dD8wOit0LGU9bnVsbD09ZT8xOitlLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhlPXQsdD0wKTplLT10LGZ1bmN0aW9uKCl7cmV0dXJuIG4oKSplK3R9fXJldHVybiBlLnNvdXJjZT10LGV9KHRoKSxlaD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCxlKXt2YXIgcixpO3JldHVybiB0PW51bGw9PXQ/MDordCxlPW51bGw9PWU/MTorZSxmdW5jdGlvbigpe3ZhciBvO2lmKG51bGwhPXIpbz1yLHI9bnVsbDtlbHNlIGRve3I9MipuKCktMSxvPTIqbigpLTEsaT1yKnIrbypvfXdoaWxlKCFpfHxpPjEpO3JldHVybiB0K2UqbypNYXRoLnNxcnQoLTIqTWF0aC5sb2coaSkvaSl9fXJldHVybiBlLnNvdXJjZT10LGV9KHRoKSxyaD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUoKXt2YXIgdD1laC5zb3VyY2UobikuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh0aCksaWg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7KytyKWUrPW4oKTtyZXR1cm4gZX19cmV0dXJuIGUuc291cmNlPXQsZX0odGgpLG9oPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXt2YXIgZT1paC5zb3VyY2UobikodCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUoKS90fX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh0aCksYWg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLW4oKSkvdH19cmV0dXJuIGUuc291cmNlPXQsZX0odGgpLHVoPUFycmF5LnByb3RvdHlwZSxmaD11aC5tYXAsY2g9dWguc2xpY2Usc2g9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gbGgodCl7dmFyIG49S2koKSxlPVtdLHI9c2g7ZnVuY3Rpb24gaShpKXt2YXIgbz1pKyIiLGE9bi5nZXQobyk7aWYoIWEpe2lmKHIhPT1zaClyZXR1cm4gcjtuLnNldChvLGE9ZS5wdXNoKGkpKX1yZXR1cm4gdFsoYS0xKSV0Lmxlbmd0aF19cmV0dXJuIHQ9bnVsbD09dD9bXTpjaC5jYWxsKHQpLGkuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXSxuPUtpKCk7Zm9yKHZhciByLG8sYT0tMSx1PXQubGVuZ3RoOysrYTx1OyluLmhhcyhvPShyPXRbYV0pKyIiKXx8bi5zZXQobyxlLnB1c2gocikpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWNoLmNhbGwobiksaSk6dC5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbGgoKS5kb21haW4oZSkucmFuZ2UodCkudW5rbm93bihyKX0saX1mdW5jdGlvbiBoaCgpe3ZhciB0LG4sZT1saCgpLnVua25vd24odm9pZCAwKSxyPWUuZG9tYWluLGk9ZS5yYW5nZSxvPVswLDFdLGE9ITEsdT0wLGY9MCxjPS41O2Z1bmN0aW9uIHMoKXt2YXIgZT1yKCkubGVuZ3RoLHM9b1sxXTxvWzBdLGw9b1tzLTBdLGg9b1sxLXNdO3Q9KGgtbCkvTWF0aC5tYXgoMSxlLXUrMipmKSxhJiYodD1NYXRoLmZsb29yKHQpKSxsKz0oaC1sLXQqKGUtdSkpKmMsbj10KigxLXUpLGEmJihsPU1hdGgucm91bmQobCksbj1NYXRoLnJvdW5kKG4pKTt2YXIgZD1nKGUpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbCt0Km59KTtyZXR1cm4gaShzP2QucmV2ZXJzZSgpOmQpfXJldHVybiBkZWxldGUgZS51bmtub3duLGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHQpLHMoKSk6cigpfSxlLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVsrdFswXSwrdFsxXV0scygpKTpvLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gbz1bK3RbMF0sK3RbMV1dLGE9ITAscygpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBufSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQscygpKTphfSxlLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9Zj1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHMoKSk6dX0sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxzKCkpOnV9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkscygpKTpmfSxlLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkscygpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gaGgoKS5kb21haW4ocigpKS5yYW5nZShvKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIodSkucGFkZGluZ091dGVyKGYpLmFsaWduKGMpfSxzKCl9ZnVuY3Rpb24gZGgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHBoKHQpe3JldHVybit0fXZhciB2aD1bMCwxXTtmdW5jdGlvbiBnaCh0LG4pe3JldHVybihuLT10PSt0KT9mdW5jdGlvbihlKXtyZXR1cm4oZS10KS9ufTpkaChuKX1mdW5jdGlvbiB5aCh0LG4sZSxyKXt2YXIgaT10WzBdLG89dFsxXSxhPW5bMF0sdT1uWzFdO3JldHVybiBvPGk/KGk9ZShvLGkpLGE9cih1LGEpKTooaT1lKGksbyksYT1yKGEsdSkpLGZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX1mdW5jdGlvbiBfaCh0LG4sZSxyKXt2YXIgbz1NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCktMSxhPW5ldyBBcnJheShvKSx1PW5ldyBBcnJheShvKSxmPS0xO2Zvcih0W29dPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksbj1uLnNsaWNlKCkucmV2ZXJzZSgpKTsrK2Y8bzspYVtmXT1lKHRbZl0sdFtmKzFdKSx1W2ZdPXIobltmXSxuW2YrMV0pO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1pKHQsbiwxLG8pLTE7cmV0dXJuIHVbZV0oYVtlXShuKSl9fWZ1bmN0aW9uIGJoKHQsbil7cmV0dXJuIG4uZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpfWZ1bmN0aW9uIG1oKHQsbil7dmFyIGUscixpLG89dmgsYT12aCx1PW1lLGY9ITE7ZnVuY3Rpb24gYygpe3JldHVybiBlPU1hdGgubWluKG8ubGVuZ3RoLGEubGVuZ3RoKT4yP19oOnloLHI9aT1udWxsLHN9ZnVuY3Rpb24gcyhuKXtyZXR1cm4ocnx8KHI9ZShvLGEsZj9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KG49K24sZT0rZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD1uPzA6dD49ZT8xOnIodCl9fX0odCk6dCx1KSkpKCtuKX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuKGl8fChpPWUoYSxvLGdoLGY/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9dChuPStuLGU9K2UpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD9uOnQ+PTE/ZTpyKHQpfX19KG4pOm4pKSkoK3QpfSxzLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1maC5jYWxsKHQscGgpLGMoKSk6by5zbGljZSgpfSxzLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWNoLmNhbGwodCksYygpKTphLnNsaWNlKCl9LHMucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYT1jaC5jYWxsKHQpLHU9eGUsYygpfSxzLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSEhdCxjKCkpOmZ9LHMuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxjKCkpOnV9LGMoKX1mdW5jdGlvbiB4aChuKXt2YXIgZT1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbih0KXt2YXIgbj1lKCk7cmV0dXJuIG0oblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihuLHIpe3JldHVybiBmdW5jdGlvbihuLGUscil7dmFyIGksbz1uWzBdLGE9bltuLmxlbmd0aC0xXSx1PXcobyxhLG51bGw9PWU/MTA6ZSk7c3dpdGNoKChyPWJhKG51bGw9PXI/IixmIjpyKSkudHlwZSl7Y2FzZSJzIjp2YXIgZj1NYXRoLm1heChNYXRoLmFicyhvKSxNYXRoLmFicyhhKSk7cmV0dXJuIG51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPWthKHUsZikpfHwoci5wcmVjaXNpb249aSksdC5mb3JtYXRQcmVmaXgocixmKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1DYSh1LE1hdGgubWF4KE1hdGguYWJzKG8pLE1hdGguYWJzKGEpKSkpfHwoci5wcmVjaXNpb249aS0oImUiPT09ci50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPUVhKHUpKXx8KHIucHJlY2lzaW9uPWktMiooIiUiPT09ci50eXBlKSl9cmV0dXJuIHQuZm9ybWF0KHIpfShlKCksbixyKX0sbi5uaWNlPWZ1bmN0aW9uKHQpe251bGw9PXQmJih0PTEwKTt2YXIgcixpPWUoKSxvPTAsYT1pLmxlbmd0aC0xLHU9aVtvXSxmPWlbYV07cmV0dXJuIGY8dSYmKHI9dSx1PWYsZj1yLHI9byxvPWEsYT1yKSwocj14KHUsZix0KSk+MD9yPXgodT1NYXRoLmZsb29yKHUvcikqcixmPU1hdGguY2VpbChmL3IpKnIsdCk6cjwwJiYocj14KHU9TWF0aC5jZWlsKHUqcikvcixmPU1hdGguZmxvb3IoZipyKS9yLHQpKSxyPjA/KGlbb109TWF0aC5mbG9vcih1L3IpKnIsaVthXT1NYXRoLmNlaWwoZi9yKSpyLGUoaSkpOnI8MCYmKGlbb109TWF0aC5jZWlsKHUqcikvcixpW2FdPU1hdGguZmxvb3IoZipyKS9yLGUoaSkpLG59LG59ZnVuY3Rpb24gd2godCxuKXt2YXIgZSxyPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLG89dFtyXSxhPXRbaV07cmV0dXJuIGE8byYmKGU9cixyPWksaT1lLGU9byxvPWEsYT1lKSx0W3JdPW4uZmxvb3IobyksdFtpXT1uLmNlaWwoYSksdH1mdW5jdGlvbiBNaCh0LG4pe3JldHVybihuPU1hdGgubG9nKG4vdCkpP2Z1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlL3QpL259OmRoKG4pfWZ1bmN0aW9uIEFoKHQsbil7cmV0dXJuIHQ8MD9mdW5jdGlvbihlKXtyZXR1cm4tTWF0aC5wb3coLW4sZSkqTWF0aC5wb3coLXQsMS1lKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KG4sZSkqTWF0aC5wb3codCwxLWUpfX1mdW5jdGlvbiBUaCh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24gTmgodCl7cmV0dXJuIDEwPT09dD9UaDp0PT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBTaCh0KXtyZXR1cm4gdD09PU1hdGguRT9NYXRoLmxvZzoxMD09PXQmJk1hdGgubG9nMTB8fDI9PT10JiZNYXRoLmxvZzJ8fCh0PU1hdGgubG9nKHQpLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLmxvZyhuKS90fSl9ZnVuY3Rpb24gRWgodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybi10KC1uKX19ZnVuY3Rpb24ga2godCxuKXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxuKTpNYXRoLnBvdyh0LG4pfWZ1bmN0aW9uIENoKCl7dmFyIHQ9MSxuPW1oKGZ1bmN0aW9uKG4sZSl7cmV0dXJuKGU9a2goZSx0KS0obj1raChuLHQpKSk/ZnVuY3Rpb24ocil7cmV0dXJuKGtoKHIsdCktbikvZX06ZGgoZSl9LGZ1bmN0aW9uKG4sZSl7cmV0dXJuIGU9a2goZSx0KS0obj1raChuLHQpKSxmdW5jdGlvbihyKXtyZXR1cm4ga2gobitlKnIsMS90KX19KSxlPW4uZG9tYWluO3JldHVybiBuLmV4cG9uZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuLGUoZSgpKSk6dH0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKG4sQ2goKS5leHBvbmVudCh0KSl9LHhoKG4pfXZhciBQaD1uZXcgRGF0ZSx6aD1uZXcgRGF0ZTtmdW5jdGlvbiBSaCh0LG4sZSxyKXtmdW5jdGlvbiBpKG4pe3JldHVybiB0KG49bmV3IERhdGUoK24pKSxufXJldHVybiBpLmZsb29yPWksaS5jZWlsPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoZS0xKSksbihlLDEpLHQoZSksZX0saS5yb3VuZD1mdW5jdGlvbih0KXt2YXIgbj1pKHQpLGU9aS5jZWlsKHQpO3JldHVybiB0LW48ZS10P246ZX0saS5vZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0PW5ldyBEYXRlKCt0KSxudWxsPT1lPzE6TWF0aC5mbG9vcihlKSksdH0saS5yYW5nZT1mdW5jdGlvbihlLHIsbyl7dmFyIGEsdT1bXTtpZihlPWkuY2VpbChlKSxvPW51bGw9PW8/MTpNYXRoLmZsb29yKG8pLCEoZTxyJiZvPjApKXJldHVybiB1O2Rve3UucHVzaChhPW5ldyBEYXRlKCtlKSksbihlLG8pLHQoZSl9d2hpbGUoYTxlJiZlPHIpO3JldHVybiB1fSxpLmZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gUmgoZnVuY3Rpb24obil7aWYobj49bilmb3IoO3QobiksIWUobik7KW4uc2V0VGltZShuLTEpfSxmdW5jdGlvbih0LHIpe2lmKHQ+PXQpaWYocjwwKWZvcig7KytyPD0wOylmb3IoO24odCwtMSksIWUodCk7KTtlbHNlIGZvcig7LS1yPj0wOylmb3IoO24odCwxKSwhZSh0KTspO30pfSxlJiYoaS5jb3VudD1mdW5jdGlvbihuLHIpe3JldHVybiBQaC5zZXRUaW1lKCtuKSx6aC5zZXRUaW1lKCtyKSx0KFBoKSx0KHpoKSxNYXRoLmZsb29yKGUoUGgsemgpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24obil7cmV0dXJuIHIobikldD09MH06ZnVuY3Rpb24obil7cmV0dXJuIGkuY291bnQoMCxuKSV0PT0wfSk6aTpudWxsfSksaX12YXIgTGg9UmgoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLXR9KTtMaC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP1JoKGZ1bmN0aW9uKG4pe24uc2V0VGltZShNYXRoLmZsb29yKG4vdCkqdCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRUaW1lKCtuK2UqdCl9LGZ1bmN0aW9uKG4sZSl7cmV0dXJuKGUtbikvdH0pOkxoOm51bGx9O3ZhciBEaD1MaC5yYW5nZSxVaD02ZTQscWg9NjA0OGU1LE9oPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSgxZTMqTWF0aC5mbG9vcih0LzFlMykpfSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCsxZTMqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvMWUzfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSxZaD1PaC5yYW5nZSxCaD1SaChmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L1VoKSpVaCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qVWgpfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL1VofSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSxGaD1CaC5yYW5nZSxJaD1SaChmdW5jdGlvbih0KXt2YXIgbj10LmdldFRpbWV6b25lT2Zmc2V0KCkqVWglMzZlNTtuPDAmJihuKz0zNmU1KSx0LnNldFRpbWUoMzZlNSpNYXRoLmZsb29yKCgrdC1uKS8zNmU1KStuKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrMzZlNSpuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS8zNmU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSksSGg9SWgucmFuZ2Usamg9UmgoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldERhdGUodC5nZXREYXRlKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdC0obi5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVWgpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pLFhoPWpoLnJhbmdlO2Z1bmN0aW9uIEdoKHQpe3JldHVybiBSaChmdW5jdGlvbihuKXtuLnNldERhdGUobi5nZXREYXRlKCktKG4uZ2V0RGF5KCkrNy10KSU3KSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3Km4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQtKG4uZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlVoKS9xaH0pfXZhciBWaD1HaCgwKSwkaD1HaCgxKSxXaD1HaCgyKSxaaD1HaCgzKSxRaD1HaCg0KSxKaD1HaCg1KSxLaD1HaCg2KSx0ZD1WaC5yYW5nZSxuZD0kaC5yYW5nZSxlZD1XaC5yYW5nZSxyZD1aaC5yYW5nZSxpZD1RaC5yYW5nZSxvZD1KaC5yYW5nZSxhZD1LaC5yYW5nZSx1ZD1SaChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4gbi5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMioobi5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxmZD11ZC5yYW5nZSxjZD1SaChmdW5jdGlvbih0KXt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4gbi5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pO2NkLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/UmgoZnVuY3Rpb24obil7bi5zZXRGdWxsWWVhcihNYXRoLmZsb29yKG4uZ2V0RnVsbFllYXIoKS90KSp0KSxuLnNldE1vbnRoKDAsMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obixlKXtuLnNldEZ1bGxZZWFyKG4uZ2V0RnVsbFllYXIoKStlKnQpfSk6bnVsbH07dmFyIHNkPWNkLnJhbmdlLGxkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKlVoKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9VaH0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSksaGQ9bGQucmFuZ2UsZGQ9UmgoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrMzZlNSpuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS8zNmU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSkscGQ9ZGQucmFuZ2UsdmQ9UmgoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvODY0ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSksZ2Q9dmQucmFuZ2U7ZnVuY3Rpb24geWQodCl7cmV0dXJuIFJoKGZ1bmN0aW9uKG4pe24uc2V0VVRDRGF0ZShuLmdldFVUQ0RhdGUoKS0obi5nZXRVVENEYXkoKSs3LXQpJTcpLG4uc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvcWh9KX12YXIgX2Q9eWQoMCksYmQ9eWQoMSksbWQ9eWQoMikseGQ9eWQoMyksd2Q9eWQoNCksTWQ9eWQoNSksQWQ9eWQoNiksVGQ9X2QucmFuZ2UsTmQ9YmQucmFuZ2UsU2Q9bWQucmFuZ2UsRWQ9eGQucmFuZ2Usa2Q9d2QucmFuZ2UsQ2Q9TWQucmFuZ2UsUGQ9QWQucmFuZ2UsemQ9UmgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKG4uZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSksUmQ9emQucmFuZ2UsTGQ9UmgoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KTtMZC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1JoKGZ1bmN0aW9uKG4pe24uc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihuLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksbi5zZXRVVENNb250aCgwLDEpLG4uc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRVVENGdWxsWWVhcihuLmdldFVUQ0Z1bGxZZWFyKCkrZSp0KX0pOm51bGx9O3ZhciBEZD1MZC5yYW5nZTtmdW5jdGlvbiBVZCh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBuPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LnkpLG59cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gcWQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgbj1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBuLnNldFVUQ0Z1bGxZZWFyKHQueSksbn1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gT2QodCl7cmV0dXJue3k6dCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gWWQodCl7dmFyIG49dC5kYXRlVGltZSxlPXQuZGF0ZSxyPXQudGltZSxpPXQucGVyaW9kcyxvPXQuZGF5cyxhPXQuc2hvcnREYXlzLHU9dC5tb250aHMsZj10LnNob3J0TW9udGhzLGM9VmQoaSkscz0kZChpKSxsPVZkKG8pLGg9JGQobyksZD1WZChhKSxwPSRkKGEpLHY9VmQodSksZz0kZCh1KSx5PVZkKGYpLF89JGQoZiksYj17YTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gZlt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOnBwLGU6cHAsZjpicCxIOnZwLEk6Z3Asajp5cCxMOl9wLG06bXAsTTp4cCxwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRIb3VycygpPj0xMildfSxROldwLHM6WnAsUzp3cCx1Ok1wLFU6QXAsVjpUcCx3Ok5wLFc6U3AseDpudWxsLFg6bnVsbCx5OkVwLFk6a3AsWjpDcCwiJSI6JHB9LG09e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGZbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpQcCxlOlBwLGY6VXAsSDp6cCxJOlJwLGo6THAsTDpEcCxtOnFwLE06T3AscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0sUTpXcCxzOlpwLFM6WXAsdTpCcCxVOkZwLFY6SXAsdzpIcCxXOmpwLHg6bnVsbCxYOm51bGwseTpYcCxZOkdwLFo6VnAsIiUiOiRwfSx4PXthOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1kLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz1wW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWwuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC53PWhbclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9eS5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lm09X1tyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj12LmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQubT1nW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBBKHQsbixlLHIpfSxkOmlwLGU6aXAsZjpzcCxIOmFwLEk6YXAsajpvcCxMOmNwLG06cnAsTTp1cCxwOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1jLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQucD1zW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9LFE6aHAsczpkcCxTOmZwLHU6WmQsVTpRZCxWOkpkLHc6V2QsVzpLZCx4OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gQSh0LGUsbixyKX0sWDpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIEEodCxyLG4sZSl9LHk6bnAsWTp0cCxaOmVwLCIlIjpscH07ZnVuY3Rpb24gdyh0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixpLG8sYT1bXSx1PS0xLGY9MCxjPXQubGVuZ3RoO2ZvcihlIGluc3RhbmNlb2YgRGF0ZXx8KGU9bmV3IERhdGUoK2UpKTsrK3U8YzspMzc9PT10LmNoYXJDb2RlQXQodSkmJihhLnB1c2godC5zbGljZShmLHUpKSxudWxsIT0oaT1GZFtyPXQuY2hhckF0KCsrdSldKT9yPXQuY2hhckF0KCsrdSk6aT0iZSI9PT1yPyIgIjoiMCIsKG89bltyXSkmJihyPW8oZSxpKSksYS5wdXNoKHIpLGY9dSsxKTtyZXR1cm4gYS5wdXNoKHQuc2xpY2UoZix1KSksYS5qb2luKCIiKX19ZnVuY3Rpb24gTSh0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixpLG89T2QoMTkwMCk7aWYoQShvLHQsZSs9IiIsMCkhPWUubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIG8pcmV0dXJuIG5ldyBEYXRlKG8uUSk7aWYoInAiaW4gbyYmKG8uSD1vLkglMTIrMTIqby5wKSwiViJpbiBvKXtpZihvLlY8MXx8by5WPjUzKXJldHVybiBudWxsOyJ3ImluIG98fChvLnc9MSksIloiaW4gbz8oaT0ocj1xZChPZChvLnkpKSkuZ2V0VVRDRGF5KCkscj1pPjR8fDA9PT1pP2JkLmNlaWwocik6YmQocikscj12ZC5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldFVUQ0Z1bGxZZWFyKCksby5tPXIuZ2V0VVRDTW9udGgoKSxvLmQ9ci5nZXRVVENEYXRlKCkrKG8udys2KSU3KTooaT0ocj1uKE9kKG8ueSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/JGguY2VpbChyKTokaChyKSxyPWpoLm9mZnNldChyLDcqKG8uVi0xKSksby55PXIuZ2V0RnVsbFllYXIoKSxvLm09ci5nZXRNb250aCgpLG8uZD1yLmdldERhdGUoKSsoby53KzYpJTcpfWVsc2UoIlciaW4gb3x8IlUiaW4gbykmJigidyJpbiBvfHwoby53PSJ1ImluIG8/by51JTc6IlciaW4gbz8xOjApLGk9IloiaW4gbz9xZChPZChvLnkpKS5nZXRVVENEYXkoKTpuKE9kKG8ueSkpLmdldERheSgpLG8ubT0wLG8uZD0iVyJpbiBvPyhvLncrNiklNys3Km8uVy0oaSs1KSU3Om8udys3Km8uVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBvPyhvLkgrPW8uWi8xMDB8MCxvLk0rPW8uWiUxMDAscWQobykpOm4obyl9fWZ1bmN0aW9uIEEodCxuLGUscil7Zm9yKHZhciBpLG8sYT0wLHU9bi5sZW5ndGgsZj1lLmxlbmd0aDthPHU7KXtpZihyPj1mKXJldHVybi0xO2lmKDM3PT09KGk9bi5jaGFyQ29kZUF0KGErKykpKXtpZihpPW4uY2hhckF0KGErKyksIShvPXhbaSBpbiBGZD9uLmNoYXJBdChhKyspOmldKXx8KHI9byh0LGUscikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1lLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1yZXR1cm4gYi54PXcoZSxiKSxiLlg9dyhyLGIpLGIuYz13KG4sYiksbS54PXcoZSxtKSxtLlg9dyhyLG0pLG0uYz13KG4sbSkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgbj13KHQrPSIiLGIpO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG59LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBuPU0odCs9IiIsVWQpO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG59LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgbj13KHQrPSIiLG0pO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG59LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBuPU0odCxxZCk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbn19fXZhciBCZCxGZD17Ii0iOiIiLF86IiAiLDA6IjAifSxJZD0vXlxzKlxkKy8sSGQ9L14lLyxqZD0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gWGQodCxuLGUpe3ZhciByPXQ8MD8iLSI6IiIsaT0ocj8tdDp0KSsiIixvPWkubGVuZ3RoO3JldHVybiByKyhvPGU/bmV3IEFycmF5KGUtbysxKS5qb2luKG4pK2k6aSl9ZnVuY3Rpb24gR2QodCl7cmV0dXJuIHQucmVwbGFjZShqZCwiXFwkJiIpfWZ1bmN0aW9uIFZkKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChHZCkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uICRkKHQpe2Zvcih2YXIgbj17fSxlPS0xLHI9dC5sZW5ndGg7KytlPHI7KW5bdFtlXS50b0xvd2VyQ2FzZSgpXT1lO3JldHVybiBufWZ1bmN0aW9uIFdkKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj8odC53PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFpkKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj8odC51PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFkKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5VPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEpkKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5WPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtkKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzQpKTtyZXR1cm4gcj8odC55PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5wKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC55PStyWzBdKygrclswXT42OD8xOTAwOjJlMyksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXAodCxuLGUpe3ZhciByPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKG4uc2xpY2UoZSxlKzYpKTtyZXR1cm4gcj8odC5aPXJbMV0/MDotKHJbMl0rKHJbM118fCIwMCIpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBycCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQubT1yWzBdLTEsZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0LmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb3AodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrMykpO3JldHVybiByPyh0Lm09MCx0LmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYXAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lkg9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdXAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZnAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0LlM9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY3AodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrMykpO3JldHVybiByPyh0Lkw9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc3AodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrNikpO3JldHVybiByPyh0Lkw9TWF0aC5mbG9vcihyWzBdLzFlMyksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbHAodCxuLGUpe3ZhciByPUhkLmV4ZWMobi5zbGljZShlLGUrMSkpO3JldHVybiByP2UrclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gaHAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQuUT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkcCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5RPTFlMyorclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwcCh0LG4pe3JldHVybiBYZCh0LmdldERhdGUoKSxuLDIpfWZ1bmN0aW9uIHZwKHQsbil7cmV0dXJuIFhkKHQuZ2V0SG91cnMoKSxuLDIpfWZ1bmN0aW9uIGdwKHQsbil7cmV0dXJuIFhkKHQuZ2V0SG91cnMoKSUxMnx8MTIsbiwyKX1mdW5jdGlvbiB5cCh0LG4pe3JldHVybiBYZCgxK2poLmNvdW50KGNkKHQpLHQpLG4sMyl9ZnVuY3Rpb24gX3AodCxuKXtyZXR1cm4gWGQodC5nZXRNaWxsaXNlY29uZHMoKSxuLDMpfWZ1bmN0aW9uIGJwKHQsbil7cmV0dXJuIF9wKHQsbikrIjAwMCJ9ZnVuY3Rpb24gbXAodCxuKXtyZXR1cm4gWGQodC5nZXRNb250aCgpKzEsbiwyKX1mdW5jdGlvbiB4cCh0LG4pe3JldHVybiBYZCh0LmdldE1pbnV0ZXMoKSxuLDIpfWZ1bmN0aW9uIHdwKHQsbil7cmV0dXJuIFhkKHQuZ2V0U2Vjb25kcygpLG4sMil9ZnVuY3Rpb24gTXAodCl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gMD09PW4/NzpufWZ1bmN0aW9uIEFwKHQsbil7cmV0dXJuIFhkKFZoLmNvdW50KGNkKHQpLHQpLG4sMil9ZnVuY3Rpb24gVHAodCxuKXt2YXIgZT10LmdldERheSgpO3JldHVybiB0PWU+PTR8fDA9PT1lP1FoKHQpOlFoLmNlaWwodCksWGQoUWguY291bnQoY2QodCksdCkrKDQ9PT1jZCh0KS5nZXREYXkoKSksbiwyKX1mdW5jdGlvbiBOcCh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBTcCh0LG4pe3JldHVybiBYZCgkaC5jb3VudChjZCh0KSx0KSxuLDIpfWZ1bmN0aW9uIEVwKHQsbil7cmV0dXJuIFhkKHQuZ2V0RnVsbFllYXIoKSUxMDAsbiwyKX1mdW5jdGlvbiBrcCh0LG4pe3JldHVybiBYZCh0LmdldEZ1bGxZZWFyKCklMWU0LG4sNCl9ZnVuY3Rpb24gQ3AodCl7dmFyIG49dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihuPjA/Ii0iOihuKj0tMSwiKyIpKStYZChuLzYwfDAsIjAiLDIpK1hkKG4lNjAsIjAiLDIpfWZ1bmN0aW9uIFBwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDRGF0ZSgpLG4sMil9ZnVuY3Rpb24genAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENIb3VycygpLG4sMil9ZnVuY3Rpb24gUnAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENIb3VycygpJTEyfHwxMixuLDIpfWZ1bmN0aW9uIExwKHQsbil7cmV0dXJuIFhkKDErdmQuY291bnQoTGQodCksdCksbiwzKX1mdW5jdGlvbiBEcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ01pbGxpc2Vjb25kcygpLG4sMyl9ZnVuY3Rpb24gVXAodCxuKXtyZXR1cm4gRHAodCxuKSsiMDAwIn1mdW5jdGlvbiBxcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ01vbnRoKCkrMSxuLDIpfWZ1bmN0aW9uIE9wKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDTWludXRlcygpLG4sMil9ZnVuY3Rpb24gWXAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENTZWNvbmRzKCksbiwyKX1mdW5jdGlvbiBCcCh0KXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiAwPT09bj83Om59ZnVuY3Rpb24gRnAodCxuKXtyZXR1cm4gWGQoX2QuY291bnQoTGQodCksdCksbiwyKX1mdW5jdGlvbiBJcCh0LG4pe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9ZT49NHx8MD09PWU/d2QodCk6d2QuY2VpbCh0KSxYZCh3ZC5jb3VudChMZCh0KSx0KSsoND09PUxkKHQpLmdldFVUQ0RheSgpKSxuLDIpfWZ1bmN0aW9uIEhwKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIGpwKHQsbil7cmV0dXJuIFhkKGJkLmNvdW50KExkKHQpLHQpLG4sMil9ZnVuY3Rpb24gWHAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENGdWxsWWVhcigpJTEwMCxuLDIpfWZ1bmN0aW9uIEdwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsbiw0KX1mdW5jdGlvbiBWcCgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gJHAoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gV3AodCl7cmV0dXJuK3R9ZnVuY3Rpb24gWnAodCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBRcChuKXtyZXR1cm4gQmQ9WWQobiksdC50aW1lRm9ybWF0PUJkLmZvcm1hdCx0LnRpbWVQYXJzZT1CZC5wYXJzZSx0LnV0Y0Zvcm1hdD1CZC51dGNGb3JtYXQsdC51dGNQYXJzZT1CZC51dGNQYXJzZSxCZH1RcCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciBKcD1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbih0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTp0LnV0Y0Zvcm1hdCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIEtwPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24odCl7dmFyIG49bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKG4pP251bGw6bn06dC51dGNQYXJzZSgiJVktJW0tJWRUJUg6JU06JVMuJUxaIiksdHY9MWUzLG52PTYwKnR2LGV2PTYwKm52LHJ2PTI0KmV2LGl2PTcqcnYsb3Y9MzAqcnYsYXY9MzY1KnJ2O2Z1bmN0aW9uIHV2KHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBmdih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBjdih0LG4scixpLG8sYSx1LGYsYyl7dmFyIHM9bWgoZ2gsdmUpLGw9cy5pbnZlcnQsaD1zLmRvbWFpbixkPWMoIi4lTCIpLHA9YygiOiVTIiksdj1jKCIlSTolTSIpLGc9YygiJUkgJXAiKSx5PWMoIiVhICVkIiksXz1jKCIlYiAlZCIpLGI9YygiJUIiKSxtPWMoIiVZIikseD1bW3UsMSx0dl0sW3UsNSw1KnR2XSxbdSwxNSwxNSp0dl0sW3UsMzAsMzAqdHZdLFthLDEsbnZdLFthLDUsNSpudl0sW2EsMTUsMTUqbnZdLFthLDMwLDMwKm52XSxbbywxLGV2XSxbbywzLDMqZXZdLFtvLDYsNipldl0sW28sMTIsMTIqZXZdLFtpLDEscnZdLFtpLDIsMipydl0sW3IsMSxpdl0sW24sMSxvdl0sW24sMywzKm92XSxbdCwxLGF2XV07ZnVuY3Rpb24gTShlKXtyZXR1cm4odShlKTxlP2Q6YShlKTxlP3A6byhlKTxlP3Y6aShlKTxlP2c6bihlKTxlP3IoZSk8ZT95Ol86dChlKTxlP2I6bSkoZSl9ZnVuY3Rpb24gQShuLHIsaSxvKXtpZihudWxsPT1uJiYobj0xMCksIm51bWJlciI9PXR5cGVvZiBuKXt2YXIgYT1NYXRoLmFicyhpLXIpL24sdT1lKGZ1bmN0aW9uKHQpe3JldHVybiB0WzJdfSkucmlnaHQoeCxhKTt1PT09eC5sZW5ndGg/KG89dyhyL2F2LGkvYXYsbiksbj10KTp1PyhvPSh1PXhbYS94W3UtMV1bMl08eFt1XVsyXS9hP3UtMTp1XSlbMV0sbj11WzBdKToobz1NYXRoLm1heCh3KHIsaSxuKSwxKSxuPWYpfXJldHVybiBudWxsPT1vP246bi5ldmVyeShvKX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGwodCkpfSxzLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKGZoLmNhbGwodCxmdikpOmgoKS5tYXAodXYpfSxzLnRpY2tzPWZ1bmN0aW9uKHQsbil7dmFyIGUscj1oKCksaT1yWzBdLG89cltyLmxlbmd0aC0xXSxhPW88aTtyZXR1cm4gYSYmKGU9aSxpPW8sbz1lKSxlPShlPUEodCxpLG8sbikpP2UucmFuZ2UoaSxvKzEpOltdLGE/ZS5yZXZlcnNlKCk6ZX0scy50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PW4/TTpjKG4pfSxzLm5pY2U9ZnVuY3Rpb24odCxuKXt2YXIgZT1oKCk7cmV0dXJuKHQ9QSh0LGVbMF0sZVtlLmxlbmd0aC0xXSxuKSk/aCh3aChlLHQpKTpzfSxzLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYmgocyxjdih0LG4scixpLG8sYSx1LGYsYykpfSxzfWZ1bmN0aW9uIHN2KHQpe2Zvcih2YXIgbj10Lmxlbmd0aC82fDAsZT1uZXcgQXJyYXkobikscj0wO3I8bjspZVtyXT0iIyIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBlfXZhciBsdj1zdigiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksaHY9c3YoIjdmYzk3ZmJlYWVkNGZkYzA4NmZmZmY5OTM4NmNiMGYwMDI3ZmJmNWIxNzY2NjY2NiIpLGR2PXN2KCIxYjllNzdkOTVmMDI3NTcwYjNlNzI5OGE2NmE2MWVlNmFiMDJhNjc2MWQ2NjY2NjYiKSxwdj1zdigiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4IiksdnY9c3YoImZiYjRhZWIzY2RlM2NjZWJjNWRlY2JlNGZlZDlhNmZmZmZjY2U1ZDhiZGZkZGFlY2YyZjJmMiIpLGd2PXN2KCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2MiKSx5dj1zdigiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5IiksX3Y9c3YoIjY2YzJhNWZjOGQ2MjhkYTBjYmU3OGFjM2E2ZDg1NGZmZDkyZmU1YzQ5NGIzYjNiMyIpLGJ2PXN2KCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmYiKTtmdW5jdGlvbiBtdih0KXtyZXR1cm4gbGUodFt0Lmxlbmd0aC0xXSl9dmFyIHh2PW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChzdiksd3Y9bXYoeHYpLE12PW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChzdiksQXY9bXYoTXYpLFR2PW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChzdiksTnY9bXYoVHYpLFN2PW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChzdiksRXY9bXYoU3YpLGt2PW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChzdiksQ3Y9bXYoa3YpLFB2PW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChzdiksenY9bXYoUHYpLFJ2PW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChzdiksTHY9bXYoUnYpLER2PW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChzdiksVXY9bXYoRHYpLHF2PW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChzdiksT3Y9bXYocXYpLFl2PW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChzdiksQnY9bXYoWXYpLEZ2PW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChzdiksSXY9bXYoRnYpLEh2PW5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChzdiksanY9bXYoSHYpLFh2PW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChzdiksR3Y9bXYoWHYpLFZ2PW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChzdiksJHY9bXYoVnYpLFd2PW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChzdiksWnY9bXYoV3YpLFF2PW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChzdiksSnY9bXYoUXYpLEt2PW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChzdiksdGc9bXYoS3YpLG5nPW5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChzdiksZWc9bXYobmcpLHJnPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChzdiksaWc9bXYocmcpLG9nPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChzdiksYWc9bXYob2cpLHVnPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChzdiksZmc9bXYodWcpLGNnPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChzdiksc2c9bXYoY2cpLGxnPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChzdiksaGc9bXYobGcpLGRnPW5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChzdikscGc9bXYoZGcpLHZnPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChzdiksZ2c9bXYodmcpLHlnPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChzdiksX2c9bXYoeWcpLGJnPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChzdiksbWc9bXYoYmcpLHhnPUdlKEtuKDMwMCwuNSwwKSxLbigtMjQwLC41LDEpKSx3Zz1HZShLbigtMTAwLC43NSwuMzUpLEtuKDgwLDEuNSwuOCkpLE1nPUdlKEtuKDI2MCwuNzUsLjM1KSxLbig4MCwxLjUsLjgpKSxBZz1LbigpO3ZhciBUZz1ibigpLE5nPU1hdGguUEkvMyxTZz0yKk1hdGguUEkvMztmdW5jdGlvbiBFZyh0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihuLTEsTWF0aC5mbG9vcihlKm4pKSldfX12YXIga2c9RWcoc3YoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxDZz1FZyhzdigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLFBnPUVnKHN2KCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksemc9RWcoc3YoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKTtmdW5jdGlvbiBSZyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIExnPU1hdGguYWJzLERnPU1hdGguYXRhbjIsVWc9TWF0aC5jb3MscWc9TWF0aC5tYXgsT2c9TWF0aC5taW4sWWc9TWF0aC5zaW4sQmc9TWF0aC5zcXJ0LEZnPTFlLTEyLElnPU1hdGguUEksSGc9SWcvMixqZz0yKklnO2Z1bmN0aW9uIFhnKHQpe3JldHVybiB0Pj0xP0hnOnQ8PS0xPy1IZzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gR2codCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gVmcodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gJGcodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBXZyh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBaZyh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBRZyh0LG4sZSxyLGksbyxhKXt2YXIgdT10LWUsZj1uLXIsYz0oYT9vOi1vKS9CZyh1KnUrZipmKSxzPWMqZixsPS1jKnUsaD10K3MsZD1uK2wscD1lK3Msdj1yK2wsZz0oaCtwKS8yLHk9KGQrdikvMixfPXAtaCxiPXYtZCxtPV8qXytiKmIseD1pLW8sdz1oKnYtcCpkLE09KGI8MD8tMToxKSpCZyhxZygwLHgqeCptLXcqdykpLEE9KHcqYi1fKk0pL20sVD0oLXcqXy1iKk0pL20sTj0odypiK18qTSkvbSxTPSgtdypfK2IqTSkvbSxFPUEtZyxrPVQteSxDPU4tZyxQPVMteTtyZXR1cm4gRSpFK2sqaz5DKkMrUCpQJiYoQT1OLFQ9Uykse2N4OkEsY3k6VCx4MDE6LXMseTAxOi1sLHgxMTpBKihpL3gtMSkseTExOlQqKGkveC0xKX19ZnVuY3Rpb24gSmcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEtnKHQpe3JldHVybiBuZXcgSmcodCl9ZnVuY3Rpb24gdHkodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gbnkodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gZXkoKXt2YXIgdD10eSxuPW55LGU9UmcoITApLHI9bnVsbCxpPUtnLG89bnVsbDtmdW5jdGlvbiBhKGEpe3ZhciB1LGYsYyxzPWEubGVuZ3RoLGw9ITE7Zm9yKG51bGw9PXImJihvPWkoYz1HaSgpKSksdT0wO3U8PXM7Kyt1KSEodTxzJiZlKGY9YVt1XSx1LGEpKT09PWwmJigobD0hbCk/by5saW5lU3RhcnQoKTpvLmxpbmVFbmQoKSksbCYmby5wb2ludCgrdChmLHUsYSksK24oZix1LGEpKTtpZihjKXJldHVybiBvPW51bGwsYysiInx8bnVsbH1yZXR1cm4gYS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UmcoK24pLGEpOnR9LGEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxhKTpufSxhLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZyghIXQpLGEpOmV9LGEuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYobz1pKHIpKSxhKTppfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1vPW51bGw6bz1pKHI9dCksYSk6cn0sYX1mdW5jdGlvbiByeSgpe3ZhciB0PXR5LG49bnVsbCxlPVJnKDApLHI9bnksaT1SZyghMCksbz1udWxsLGE9S2csdT1udWxsO2Z1bmN0aW9uIGYoZil7dmFyIGMscyxsLGgsZCxwPWYubGVuZ3RoLHY9ITEsZz1uZXcgQXJyYXkocCkseT1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PW8mJih1PWEoZD1HaSgpKSksYz0wO2M8PXA7KytjKXtpZighKGM8cCYmaShoPWZbY10sYyxmKSk9PT12KWlmKHY9IXYpcz1jLHUuYXJlYVN0YXJ0KCksdS5saW5lU3RhcnQoKTtlbHNle2Zvcih1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLGw9Yy0xO2w+PXM7LS1sKXUucG9pbnQoZ1tsXSx5W2xdKTt1LmxpbmVFbmQoKSx1LmFyZWFFbmQoKX12JiYoZ1tjXT0rdChoLGMsZikseVtjXT0rZShoLGMsZiksdS5wb2ludChuPytuKGgsYyxmKTpnW2NdLHI/K3IoaCxjLGYpOnlbY10pKX1pZihkKXJldHVybiB1PW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiBjKCl7cmV0dXJuIGV5KCkuZGVmaW5lZChpKS5jdXJ2ZShhKS5jb250ZXh0KG8pfXJldHVybiBmLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpSZygrZSksbj1udWxsLGYpOnR9LGYueDA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpSZygrbiksZik6dH0sZi54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6bn0sZi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLHI9bnVsbCxmKTplfSxmLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOmV9LGYueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOnJ9LGYubGluZVgwPWYubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkoZSl9LGYubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkocil9LGYubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KG4pLnkoZSl9LGYuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCEhdCksZik6aX0sZi5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG51bGwhPW8mJih1PWEobykpLGYpOmF9LGYuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9vPXU9bnVsbDp1PWEobz10KSxmKTpvfSxmfWZ1bmN0aW9uIGl5KHQsbil7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIG95KHQpe3JldHVybiB0fUpnLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pfX19O3ZhciBheT1meShLZyk7ZnVuY3Rpb24gdXkodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBmeSh0KXtmdW5jdGlvbiBuKG4pe3JldHVybiBuZXcgdXkodChuKSl9cmV0dXJuIG4uX2N1cnZlPXQsbn1mdW5jdGlvbiBjeSh0KXt2YXIgbj10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihmeSh0KSk6bigpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBzeSgpe3JldHVybiBjeShleSgpLmN1cnZlKGF5KSl9ZnVuY3Rpb24gbHkoKXt2YXIgdD1yeSgpLmN1cnZlKGF5KSxuPXQuY3VydmUsZT10LmxpbmVYMCxyPXQubGluZVgxLGk9dC5saW5lWTAsbz10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGN5KGUoKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBjeShyKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gY3koaSgpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIGN5KG8oKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZnkodCkpOm4oKS5fY3VydmV9LHR9ZnVuY3Rpb24gaHkodCxuKXtyZXR1cm5bKG49K24pKk1hdGguY29zKHQtPU1hdGguUEkvMiksbipNYXRoLnNpbih0KV19dXkucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5fY3VydmUucG9pbnQobipNYXRoLnNpbih0KSxuKi1NYXRoLmNvcyh0KSl9fTt2YXIgZHk9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIHB5KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiB2eSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gZ3kodCl7dmFyIG49cHksZT12eSxyPXR5LGk9bnksbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgYSx1PWR5LmNhbGwoYXJndW1lbnRzKSxmPW4uYXBwbHkodGhpcyx1KSxjPWUuYXBwbHkodGhpcyx1KTtpZihvfHwobz1hPUdpKCkpLHQobywrci5hcHBseSh0aGlzLCh1WzBdPWYsdSkpLCtpLmFwcGx5KHRoaXMsdSksK3IuYXBwbHkodGhpcywodVswXT1jLHUpKSwraS5hcHBseSh0aGlzLHUpKSxhKXJldHVybiBvPW51bGwsYSsiInx8bnVsbH1yZXR1cm4gYS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKTpufSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGEpOmV9LGEueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxhKTpyfSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDp0LGEpOm99LGF9ZnVuY3Rpb24geXkodCxuLGUscixpKXt0Lm1vdmVUbyhuLGUpLHQuYmV6aWVyQ3VydmVUbyhuPShuK3IpLzIsZSxuLGkscixpKX1mdW5jdGlvbiBfeSh0LG4sZSxyLGkpe3QubW92ZVRvKG4sZSksdC5iZXppZXJDdXJ2ZVRvKG4sZT0oZStpKS8yLHIsZSxyLGkpfWZ1bmN0aW9uIGJ5KHQsbixlLHIsaSl7dmFyIG89aHkobixlKSxhPWh5KG4sZT0oZStpKS8yKSx1PWh5KHIsZSksZj1oeShyLGkpO3QubW92ZVRvKG9bMF0sb1sxXSksdC5iZXppZXJDdXJ2ZVRvKGFbMF0sYVsxXSx1WzBdLHVbMV0sZlswXSxmWzFdKX12YXIgbXk9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi9JZyk7dC5tb3ZlVG8oZSwwKSx0LmFyYygwLDAsZSwwLGpnKX19LHh5PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vNSkvMjt0Lm1vdmVUbygtMyplLC1lKSx0LmxpbmVUbygtZSwtZSksdC5saW5lVG8oLWUsLTMqZSksdC5saW5lVG8oZSwtMyplKSx0LmxpbmVUbyhlLC1lKSx0LmxpbmVUbygzKmUsLWUpLHQubGluZVRvKDMqZSxlKSx0LmxpbmVUbyhlLGUpLHQubGluZVRvKGUsMyplKSx0LmxpbmVUbygtZSwzKmUpLHQubGluZVRvKC1lLGUpLHQubGluZVRvKC0zKmUsZSksdC5jbG9zZVBhdGgoKX19LHd5PU1hdGguc3FydCgxLzMpLE15PTIqd3ksQXk9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi9NeSkscj1lKnd5O3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsMCksdC5saW5lVG8oMCxlKSx0LmxpbmVUbygtciwwKSx0LmNsb3NlUGF0aCgpfX0sVHk9TWF0aC5zaW4oSWcvMTApL01hdGguc2luKDcqSWcvMTApLE55PU1hdGguc2luKGpnLzEwKSpUeSxTeT0tTWF0aC5jb3MoamcvMTApKlR5LEV5PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKm4pLHI9TnkqZSxpPVN5KmU7dC5tb3ZlVG8oMCwtZSksdC5saW5lVG8ocixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1qZypvLzUsdT1NYXRoLmNvcyhhKSxmPU1hdGguc2luKGEpO3QubGluZVRvKGYqZSwtdSplKSx0LmxpbmVUbyh1KnItZippLGYqcit1KmkpfXQuY2xvc2VQYXRoKCl9fSxreT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuKSxyPS1lLzI7dC5yZWN0KHIscixlLGUpfX0sQ3k9TWF0aC5zcXJ0KDMpLFB5PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9LU1hdGguc3FydChuLygzKkN5KSk7dC5tb3ZlVG8oMCwyKmUpLHQubGluZVRvKC1DeSplLC1lKSx0LmxpbmVUbyhDeSplLC1lKSx0LmNsb3NlUGF0aCgpfX0senk9TWF0aC5zcXJ0KDMpLzIsUnk9MS9NYXRoLnNxcnQoMTIpLEx5PTMqKFJ5LzIrMSksRHk9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi9MeSkscj1lLzIsaT1lKlJ5LG89cixhPWUqUnkrZSx1PS1vLGY9YTt0Lm1vdmVUbyhyLGkpLHQubGluZVRvKG8sYSksdC5saW5lVG8odSxmKSx0LmxpbmVUbygtLjUqci16eSppLHp5KnIrLS41KmkpLHQubGluZVRvKC0uNSpvLXp5KmEsenkqbystLjUqYSksdC5saW5lVG8oLS41KnUtenkqZix6eSp1Ky0uNSpmKSx0LmxpbmVUbygtLjUqcit6eSppLC0uNSppLXp5KnIpLHQubGluZVRvKC0uNSpvK3p5KmEsLS41KmEtenkqbyksdC5saW5lVG8oLS41KnUrenkqZiwtLjUqZi16eSp1KSx0LmNsb3NlUGF0aCgpfX0sVXk9W215LHh5LEF5LGt5LEV5LFB5LER5XTtmdW5jdGlvbiBxeSgpe31mdW5jdGlvbiBPeSh0LG4sZSl7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK24pLzYsKHQuX3kwKzQqdC5feTErZSkvNil9ZnVuY3Rpb24gWXkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEJ5KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBGeSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSXkodCxuKXt0aGlzLl9iYXNpcz1uZXcgWXkodCksdGhpcy5fYmV0YT1ufVl5LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6T3kodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6T3kodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19LEJ5LnByb3RvdHlwZT17YXJlYVN0YXJ0OnF5LGFyZWFFbmQ6cXksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9bjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PW4sdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStuKS82KTticmVhaztkZWZhdWx0Ok95KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fSxGeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgZT0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LHI9KHRoaXMuX3kwKzQqdGhpcy5feTErbikvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUscik6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSxyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok95KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fSxJeS5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsbj10aGlzLl95LGU9dC5sZW5ndGgtMTtpZihlPjApZm9yKHZhciByLGk9dFswXSxvPW5bMF0sYT10W2VdLWksdT1uW2VdLW8sZj0tMTsrK2Y8PWU7KXI9Zi9lLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtmXSsoMS10aGlzLl9iZXRhKSooaStyKmEpLHRoaXMuX2JldGEqbltmXSsoMS10aGlzLl9iZXRhKSoobytyKnUpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX07dmFyIEh5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gMT09PW4/bmV3IFl5KHQpOm5ldyBJeSh0LG4pfXJldHVybiBlLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguODUpO2Z1bmN0aW9uIGp5KHQsbixlKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1uKSx0Ll95Mit0Ll9rKih0Ll95MS1lKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gWHkodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fVh5LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpqeSh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1uO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ankodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBHeT1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBYeSh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtmdW5jdGlvbiBWeSh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9VnkucHJvdG90eXBlPXthcmVhU3RhcnQ6cXksYXJlYUVuZDpxeSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PW4pO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9bjticmVhaztkZWZhdWx0Omp5KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgJHk9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgVnkodCxuKX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oMCk7ZnVuY3Rpb24gV3kodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fVd5LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Omp5KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgWnk9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgV3kodCxuKX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oMCk7ZnVuY3Rpb24gUXkodCxuLGUpe3ZhciByPXQuX3gxLGk9dC5feTEsbz10Ll94MixhPXQuX3kyO2lmKHQuX2wwMV9hPkZnKXt2YXIgdT0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxmPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtyPShyKnUtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvZixpPShpKnUtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvZn1pZih0Ll9sMjNfYT5GZyl7dmFyIGM9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEscz0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7bz0obypjK3QuX3gxKnQuX2wyM18yYS1uKnQuX2wxMl8yYSkvcyxhPShhKmMrdC5feTEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9zfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyLGksbyxhLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBKeSh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufUp5LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6UXkodGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgS3k9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyBKeSh0LG4pOm5ldyBYeSh0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO2Z1bmN0aW9uIHRfKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59dF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6cXksYXJlYUVuZDpxeSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1uKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PW47YnJlYWs7ZGVmYXVsdDpReSh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBuXz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IHRfKHQsbik6bmV3IFZ5KHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7ZnVuY3Rpb24gZV8odCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1lXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6UXkodGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgcl89ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyBlXyh0LG4pOm5ldyBXeSh0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO2Z1bmN0aW9uIGlfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBvXyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gYV8odCxuLGUpe3ZhciByPXQuX3gxLXQuX3gwLGk9bi10Ll94MSxvPSh0Ll95MS10Ll95MCkvKHJ8fGk8MCYmLTApLGE9KGUtdC5feTEpLyhpfHxyPDAmJi0wKSx1PShvKmkrYSpyKS8ocitpKTtyZXR1cm4ob18obykrb18oYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHUpKXx8MH1mdW5jdGlvbiB1Xyh0LG4pe3ZhciBlPXQuX3gxLXQuX3gwO3JldHVybiBlPygzKih0Ll95MS10Ll95MCkvZS1uKS8yOm59ZnVuY3Rpb24gZl8odCxuLGUpe3ZhciByPXQuX3gwLGk9dC5feTAsbz10Ll94MSxhPXQuX3kxLHU9KG8tcikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocit1LGkrdSpuLG8tdSxhLXUqZSxvLGEpfWZ1bmN0aW9uIGNfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBzXyh0KXt0aGlzLl9jb250ZXh0PW5ldyBsXyh0KX1mdW5jdGlvbiBsXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gaF8odCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGRfKHQpe3ZhciBuLGUscj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsb1swXT0yLGFbMF09dFswXSsyKnRbMV0sbj0xO248ci0xOysrbilpW25dPTEsb1tuXT00LGFbbl09NCp0W25dKzIqdFtuKzFdO2ZvcihpW3ItMV09MixvW3ItMV09NyxhW3ItMV09OCp0W3ItMV0rdFtyXSxuPTE7bjxyOysrbillPWlbbl0vb1tuLTFdLG9bbl0tPWUsYVtuXS09ZSphW24tMV07Zm9yKGlbci0xXT1hW3ItMV0vb1tyLTFdLG49ci0yO24+PTA7LS1uKWlbbl09KGFbbl0taVtuKzFdKS9vW25dO2ZvcihvW3ItMV09KHRbcl0raVtyLTFdKS8yLG49MDtuPHItMTsrK24pb1tuXT0yKnRbbisxXS1pW24rMV07cmV0dXJuW2ksb119ZnVuY3Rpb24gcF8odCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1ufWZ1bmN0aW9uIHZfKHQsbil7aWYoKGk9dC5sZW5ndGgpPjEpZm9yKHZhciBlLHIsaSxvPTEsYT10W25bMF1dLHU9YS5sZW5ndGg7bzxpOysrbylmb3Iocj1hLGE9dFtuW29dXSxlPTA7ZTx1OysrZSlhW2VdWzFdKz1hW2VdWzBdPWlzTmFOKHJbZV1bMV0pP3JbZV1bMF06cltlXVsxXX1mdW5jdGlvbiBnXyh0KXtmb3IodmFyIG49dC5sZW5ndGgsZT1uZXcgQXJyYXkobik7LS1uPj0wOyllW25dPW47cmV0dXJuIGV9ZnVuY3Rpb24geV8odCxuKXtyZXR1cm4gdFtuXX1mdW5jdGlvbiBfXyh0KXt2YXIgbj10Lm1hcChiXyk7cmV0dXJuIGdfKHQpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gblt0XS1uW2VdfSl9ZnVuY3Rpb24gYl8odCl7Zm9yKHZhciBuLGU9MCxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KShuPSt0W3JdWzFdKSYmKGUrPW4pO3JldHVybiBlfWZ1bmN0aW9uIG1fKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiB4Xyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3Xyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBNXygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIEFfKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gVF8odCxuKXt2YXIgZT1uLHI9bi5SLGk9ZS5VO2k/aS5MPT09ZT9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxlLlU9cixlLlI9ci5MLGUuUiYmKGUuUi5VPWUpLHIuTD1lfWZ1bmN0aW9uIE5fKHQsbil7dmFyIGU9bixyPW4uTCxpPWUuVTtpP2kuTD09PWU/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksZS5VPXIsZS5MPXIuUixlLkwmJihlLkwuVT1lKSxyLlI9ZX1mdW5jdGlvbiBTXyh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gRV8odCxuLGUscil7dmFyIGk9W251bGwsbnVsbF0sbz1KXy5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9bixlJiZDXyhpLHQsbixlKSxyJiZDXyhpLG4sdCxyKSxaX1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxaX1tuLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIGtfKHQsbixlKXt2YXIgcj1bbixlXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBDXyh0LG4sZSxyKXt0WzBdfHx0WzFdP3QubGVmdD09PWU/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1uLHQucmlnaHQ9ZSl9ZnVuY3Rpb24gUF8odCxuLGUscixpKXt2YXIgbyxhPXRbMF0sdT10WzFdLGY9YVswXSxjPWFbMV0scz0wLGw9MSxoPXVbMF0tZixkPXVbMV0tYztpZihvPW4tZixofHwhKG8+MCkpe2lmKG8vPWgsaDwwKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9ZWxzZSBpZihoPjApe2lmKG8+bClyZXR1cm47bz5zJiYocz1vKX1pZihvPXItZixofHwhKG88MCkpe2lmKG8vPWgsaDwwKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9ZWxzZSBpZihoPjApe2lmKG88cylyZXR1cm47bzxsJiYobD1vKX1pZihvPWUtYyxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9ZWxzZSBpZihkPjApe2lmKG8+bClyZXR1cm47bz5zJiYocz1vKX1pZihvPWktYyxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9ZWxzZSBpZihkPjApe2lmKG88cylyZXR1cm47bzxsJiYobD1vKX1yZXR1cm4hKHM+MHx8bDwxKXx8KHM+MCYmKHRbMF09W2YrcypoLGMrcypkXSksbDwxJiYodFsxXT1bZitsKmgsYytsKmRdKSwhMCl9fX19fWZ1bmN0aW9uIHpfKHQsbixlLHIsaSl7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHUsZj10WzBdLGM9dC5sZWZ0LHM9dC5yaWdodCxsPWNbMF0saD1jWzFdLGQ9c1swXSxwPXNbMV0sdj0obCtkKS8yLGc9KGgrcCkvMjtpZihwPT09aCl7aWYodjxufHx2Pj1yKXJldHVybjtpZihsPmQpe2lmKGYpe2lmKGZbMV0+PWkpcmV0dXJufWVsc2UgZj1bdixlXTtvPVt2LGldfWVsc2V7aWYoZil7aWYoZlsxXTxlKXJldHVybn1lbHNlIGY9W3YsaV07bz1bdixlXX19ZWxzZSBpZih1PWctKGE9KGwtZCkvKHAtaCkpKnYsYTwtMXx8YT4xKWlmKGw+ZCl7aWYoZil7aWYoZlsxXT49aSlyZXR1cm59ZWxzZSBmPVsoZS11KS9hLGVdO289WyhpLXUpL2EsaV19ZWxzZXtpZihmKXtpZihmWzFdPGUpcmV0dXJufWVsc2UgZj1bKGktdSkvYSxpXTtvPVsoZS11KS9hLGVdfWVsc2UgaWYoaDxwKXtpZihmKXtpZihmWzBdPj1yKXJldHVybn1lbHNlIGY9W24sYSpuK3VdO289W3IsYSpyK3VdfWVsc2V7aWYoZil7aWYoZlswXTxuKXJldHVybn1lbHNlIGY9W3IsYSpyK3VdO289W24sYSpuK3VdfXJldHVybiB0WzBdPWYsdFsxXT1vLCEwfWZ1bmN0aW9uIFJfKHQsbil7dmFyIGU9dC5zaXRlLHI9bi5sZWZ0LGk9bi5yaWdodDtyZXR1cm4gZT09PWkmJihpPXIscj1lKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KGU9PT1yPyhyPW5bMV0saT1uWzBdKToocj1uWzBdLGk9blsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24gTF8odCxuKXtyZXR1cm4gblsrKG4ubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIERfKHQsbil7cmV0dXJuIG5bKyhuLmxlZnQ9PT10LnNpdGUpXX1pXy5wcm90b3R5cGU9e2FyZWFTdGFydDpxeSxhcmVhRW5kOnF5LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0PSt0LG49K24sdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pKX19LGNfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpmXyh0aGlzLHRoaXMuX3QwLHVfKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7dmFyIGU9TmFOO2lmKG49K24sKHQ9K3QpIT09dGhpcy5feDF8fG4hPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxmXyh0aGlzLHVfKHRoaXMsZT1hXyh0aGlzLHQsbikpLGUpO2JyZWFrO2RlZmF1bHQ6Zl8odGhpcyx0aGlzLl90MCxlPWFfKHRoaXMsdCxuKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1uLHRoaXMuX3QwPWV9fX0sKHNfLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGNfLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsbil7Y18ucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxuLHQpfSxsXy5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuX2NvbnRleHQubW92ZVRvKG4sdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuX2NvbnRleHQubGluZVRvKG4sdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxuLGUscixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuLHQscixlLG8saSl9fSxoXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LG49dGhpcy5feSxlPXQubGVuZ3RoO2lmKGUpaWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLG5bMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sblswXSksMj09PWUpdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxuWzFdKTtlbHNlIGZvcih2YXIgcj1kXyh0KSxpPWRfKG4pLG89MCxhPTE7YTxlOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bb10saVswXVtvXSxyWzFdW29dLGlbMV1bb10sdFthXSxuW2FdKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1lKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrbil9fSxwXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LG4pLHRoaXMuX2NvbnRleHQubGluZVRvKHQsbik7ZWxzZXt2YXIgZT10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsbil9fXRoaXMuX3g9dCx0aGlzLl95PW59fSxNXy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1fLGluc2VydDpmdW5jdGlvbih0LG4pe3ZhciBlLHIsaTtpZih0KXtpZihuLlA9dCxuLk49dC5OLHQuTiYmKHQuTi5QPW4pLHQuTj1uLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPW59ZWxzZSB0LlI9bjtlPXR9ZWxzZSB0aGlzLl8/KHQ9U18odGhpcy5fKSxuLlA9bnVsbCxuLk49dCx0LlA9dC5MPW4sZT10KToobi5QPW4uTj1udWxsLHRoaXMuXz1uLGU9bnVsbCk7Zm9yKG4uTD1uLlI9bnVsbCxuLlU9ZSxuLkM9ITAsdD1uO2UmJmUuQzspZT09PShyPWUuVSkuTD8oaT1yLlIpJiZpLkM/KGUuQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1lLlImJihUXyh0aGlzLGUpLGU9KHQ9ZSkuVSksZS5DPSExLHIuQz0hMCxOXyh0aGlzLHIpKTooaT1yLkwpJiZpLkM/KGUuQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1lLkwmJihOXyh0aGlzLGUpLGU9KHQ9ZSkuVSksZS5DPSExLHIuQz0hMCxUXyh0aGlzLHIpKSxlPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIG4sZSxyLGk9dC5VLG89dC5MLGE9dC5SO2lmKGU9bz9hP1NfKGEpOm86YSxpP2kuTD09PXQ/aS5MPWU6aS5SPWU6dGhpcy5fPWUsbyYmYT8ocj1lLkMsZS5DPXQuQyxlLkw9byxvLlU9ZSxlIT09YT8oaT1lLlUsZS5VPXQuVSx0PWUuUixpLkw9dCxlLlI9YSxhLlU9ZSk6KGUuVT1pLGk9ZSx0PWUuUikpOihyPXQuQyx0PWUpLHQmJih0LlU9aSksIXIpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYoKG49aS5SKS5DJiYobi5DPSExLGkuQz0hMCxUXyh0aGlzLGkpLG49aS5SKSxuLkwmJm4uTC5DfHxuLlImJm4uUi5DKXtuLlImJm4uUi5DfHwobi5MLkM9ITEsbi5DPSEwLE5fKHRoaXMsbiksbj1pLlIpLG4uQz1pLkMsaS5DPW4uUi5DPSExLFRfKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKG49aS5MKS5DJiYobi5DPSExLGkuQz0hMCxOXyh0aGlzLGkpLG49aS5MKSxuLkwmJm4uTC5DfHxuLlImJm4uUi5DKXtuLkwmJm4uTC5DfHwobi5SLkM9ITEsbi5DPSEwLFRfKHRoaXMsbiksbj1pLkwpLG4uQz1pLkMsaS5DPW4uTC5DPSExLE5fKHRoaXMsaSksdD10aGlzLl87YnJlYWt9bi5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgVV8scV89W107ZnVuY3Rpb24gT18oKXtBXyh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gWV8odCl7dmFyIG49dC5QLGU9dC5OO2lmKG4mJmUpe3ZhciByPW4uc2l0ZSxpPXQuc2l0ZSxvPWUuc2l0ZTtpZihyIT09byl7dmFyIGE9aVswXSx1PWlbMV0sZj1yWzBdLWEsYz1yWzFdLXUscz1vWzBdLWEsbD1vWzFdLXUsaD0yKihmKmwtYypzKTtpZighKGg+PS10Yikpe3ZhciBkPWYqZitjKmMscD1zKnMrbCpsLHY9KGwqZC1jKnApL2gsZz0oZipwLXMqZCkvaCx5PXFfLnBvcCgpfHxuZXcgT187eS5hcmM9dCx5LnNpdGU9aSx5Lng9dithLHkueT0oeS5jeT1nK3UpK01hdGguc3FydCh2KnYrZypnKSx0LmNpcmNsZT15O2Zvcih2YXIgXz1udWxsLGI9UV8uXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KXtpZighYi5MKXtfPWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe189YjticmVha31iPWIuUn1RXy5pbnNlcnQoXyx5KSxffHwoVV89eSl9fX19ZnVuY3Rpb24gQl8odCl7dmFyIG49dC5jaXJjbGU7biYmKG4uUHx8KFVfPW4uTiksUV8ucmVtb3ZlKG4pLHFfLnB1c2gobiksQV8obiksdC5jaXJjbGU9bnVsbCl9dmFyIEZfPVtdO2Z1bmN0aW9uIElfKCl7QV8odGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEhfKHQpe3ZhciBuPUZfLnBvcCgpfHxuZXcgSV87cmV0dXJuIG4uc2l0ZT10LG59ZnVuY3Rpb24gal8odCl7Ql8odCksV18ucmVtb3ZlKHQpLEZfLnB1c2godCksQV8odCl9ZnVuY3Rpb24gWF8odCl7dmFyIG49dC5jaXJjbGUsZT1uLngscj1uLmN5LGk9W2Uscl0sbz10LlAsYT10Lk4sdT1bdF07al8odCk7Zm9yKHZhciBmPW87Zi5jaXJjbGUmJk1hdGguYWJzKGUtZi5jaXJjbGUueCk8S18mJk1hdGguYWJzKHItZi5jaXJjbGUuY3kpPEtfOylvPWYuUCx1LnVuc2hpZnQoZiksal8oZiksZj1vO3UudW5zaGlmdChmKSxCXyhmKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTxLXyYmTWF0aC5hYnMoci1jLmNpcmNsZS5jeSk8S187KWE9Yy5OLHUucHVzaChjKSxqXyhjKSxjPWE7dS5wdXNoKGMpLEJfKGMpO3ZhciBzLGw9dS5sZW5ndGg7Zm9yKHM9MTtzPGw7KytzKWM9dVtzXSxmPXVbcy0xXSxDXyhjLmVkZ2UsZi5zaXRlLGMuc2l0ZSxpKTtmPXVbMF0sKGM9dVtsLTFdKS5lZGdlPUVfKGYuc2l0ZSxjLnNpdGUsbnVsbCxpKSxZXyhmKSxZXyhjKX1mdW5jdGlvbiBHXyh0KXtmb3IodmFyIG4sZSxyLGksbz10WzBdLGE9dFsxXSx1PVdfLl87dTspaWYoKHI9Vl8odSxhKS1vKT5LXyl1PXUuTDtlbHNle2lmKCEoKGk9by0kXyh1LGEpKT5LXykpe3I+LUtfPyhuPXUuUCxlPXUpOmk+LUtfPyhuPXUsZT11Lk4pOm49ZT11O2JyZWFrfWlmKCF1LlIpe249dTticmVha311PXUuUn0hZnVuY3Rpb24odCl7Wl9bdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSh0KTt2YXIgZj1IXyh0KTtpZihXXy5pbnNlcnQobixmKSxufHxlKXtpZihuPT09ZSlyZXR1cm4gQl8obiksZT1IXyhuLnNpdGUpLFdfLmluc2VydChmLGUpLGYuZWRnZT1lLmVkZ2U9RV8obi5zaXRlLGYuc2l0ZSksWV8obiksdm9pZCBZXyhlKTtpZihlKXtCXyhuKSxCXyhlKTt2YXIgYz1uLnNpdGUscz1jWzBdLGw9Y1sxXSxoPXRbMF0tcyxkPXRbMV0tbCxwPWUuc2l0ZSx2PXBbMF0tcyxnPXBbMV0tbCx5PTIqKGgqZy1kKnYpLF89aCpoK2QqZCxiPXYqditnKmcsbT1bKGcqXy1kKmIpL3krcywoaCpiLXYqXykveStsXTtDXyhlLmVkZ2UsYyxwLG0pLGYuZWRnZT1FXyhjLHQsbnVsbCxtKSxlLmVkZ2U9RV8odCxwLG51bGwsbSksWV8obiksWV8oZSl9ZWxzZSBmLmVkZ2U9RV8obi5zaXRlLGYuc2l0ZSl9fWZ1bmN0aW9uIFZfKHQsbil7dmFyIGU9dC5zaXRlLHI9ZVswXSxpPWVbMV0sbz1pLW47aWYoIW8pcmV0dXJuIHI7dmFyIGE9dC5QO2lmKCFhKXJldHVybi0xLzA7dmFyIHU9KGU9YS5zaXRlKVswXSxmPWVbMV0sYz1mLW47aWYoIWMpcmV0dXJuIHU7dmFyIHM9dS1yLGw9MS9vLTEvYyxoPXMvYztyZXR1cm4gbD8oLWgrTWF0aC5zcXJ0KGgqaC0yKmwqKHMqcy8oLTIqYyktZitjLzIraS1vLzIpKSkvbCtyOihyK3UpLzJ9ZnVuY3Rpb24gJF8odCxuKXt2YXIgZT10Lk47aWYoZSlyZXR1cm4gVl8oZSxuKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1uP3JbMF06MS8wfXZhciBXXyxaXyxRXyxKXyxLXz0xZS02LHRiPTFlLTEyO2Z1bmN0aW9uIG5iKHQsbil7cmV0dXJuIG5bMV0tdFsxXXx8blswXS10WzBdfWZ1bmN0aW9uIGViKHQsbil7dmFyIGUscixpLG89dC5zb3J0KG5iKS5wb3AoKTtmb3IoSl89W10sWl89bmV3IEFycmF5KHQubGVuZ3RoKSxXXz1uZXcgTV8sUV89bmV3IE1fOzspaWYoaT1VXyxvJiYoIWl8fG9bMV08aS55fHxvWzFdPT09aS55JiZvWzBdPGkueCkpb1swXT09PWUmJm9bMV09PT1yfHwoR18obyksZT1vWzBdLHI9b1sxXSksbz10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7WF8oaS5hcmMpfWlmKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LG4sZSxyLGk9MCxvPVpfLmxlbmd0aDtpPG87KytpKWlmKCh0PVpfW2ldKSYmKHI9KG49dC5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShyKSx1PW5ldyBBcnJheShyKTtmb3IoZT0wO2U8cjsrK2UpYVtlXT1lLHVbZV09Ul8odCxKX1tuW2VdXSk7Zm9yKGEuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiB1W25dLXVbdF19KSxlPTA7ZTxyOysrZSl1W2VdPW5bYVtlXV07Zm9yKGU9MDtlPHI7KytlKW5bZV09dVtlXX19KCksbil7dmFyIGE9K25bMF1bMF0sdT0rblswXVsxXSxmPStuWzFdWzBdLGM9K25bMV1bMV07IWZ1bmN0aW9uKHQsbixlLHIpe2Zvcih2YXIgaSxvPUpfLmxlbmd0aDtvLS07KXpfKGk9Sl9bb10sdCxuLGUscikmJlBfKGksdCxuLGUscikmJihNYXRoLmFicyhpWzBdWzBdLWlbMV1bMF0pPktffHxNYXRoLmFicyhpWzBdWzFdLWlbMV1bMV0pPktfKXx8ZGVsZXRlIEpfW29dfShhLHUsZixjKSxmdW5jdGlvbih0LG4sZSxyKXt2YXIgaSxvLGEsdSxmLGMscyxsLGgsZCxwLHYsZz1aXy5sZW5ndGgseT0hMDtmb3IoaT0wO2k8ZzsrK2kpaWYobz1aX1tpXSl7Zm9yKGE9by5zaXRlLHU9KGY9by5oYWxmZWRnZXMpLmxlbmd0aDt1LS07KUpfW2ZbdV1dfHxmLnNwbGljZSh1LDEpO2Zvcih1PTAsYz1mLmxlbmd0aDt1PGM7KXA9KGQ9RF8obyxKX1tmW3VdXSkpWzBdLHY9ZFsxXSxsPShzPUxfKG8sSl9bZlsrK3UlY11dKSlbMF0saD1zWzFdLChNYXRoLmFicyhwLWwpPktffHxNYXRoLmFicyh2LWgpPktfKSYmKGYuc3BsaWNlKHUsMCxKXy5wdXNoKGtfKGEsZCxNYXRoLmFicyhwLXQpPEtfJiZyLXY+S18/W3QsTWF0aC5hYnMobC10KTxLXz9oOnJdOk1hdGguYWJzKHYtcik8S18mJmUtcD5LXz9bTWF0aC5hYnMoaC1yKTxLXz9sOmUscl06TWF0aC5hYnMocC1lKTxLXyYmdi1uPktfP1tlLE1hdGguYWJzKGwtZSk8S18/aDpuXTpNYXRoLmFicyh2LW4pPEtfJiZwLXQ+S18/W01hdGguYWJzKGgtbik8S18/bDp0LG5dOm51bGwpKS0xKSwrK2MpO2MmJih5PSExKX1pZih5KXt2YXIgXyxiLG0seD0xLzA7Zm9yKGk9MCx5PW51bGw7aTxnOysraSkobz1aX1tpXSkmJihtPShfPShhPW8uc2l0ZSlbMF0tdCkqXysoYj1hWzFdLW4pKmIpPHgmJih4PW0seT1vKTtpZih5KXt2YXIgdz1bdCxuXSxNPVt0LHJdLEE9W2Uscl0sVD1bZSxuXTt5LmhhbGZlZGdlcy5wdXNoKEpfLnB1c2goa18oYT15LnNpdGUsdyxNKSktMSxKXy5wdXNoKGtfKGEsTSxBKSktMSxKXy5wdXNoKGtfKGEsQSxUKSktMSxKXy5wdXNoKGtfKGEsVCx3KSktMSl9fWZvcihpPTA7aTxnOysraSkobz1aX1tpXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBaX1tpXSl9KGEsdSxmLGMpfXRoaXMuZWRnZXM9Sl8sdGhpcy5jZWxscz1aXyxXXz1RXz1KXz1aXz1udWxsfWZ1bmN0aW9uIHJiKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBpYih0LG4sZSl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9bix0aGlzLnRyYW5zZm9ybT1lfWZ1bmN0aW9uIG9iKHQsbixlKXt0aGlzLms9dCx0aGlzLng9bix0aGlzLnk9ZX1lYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmViLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24obil7dmFyIGU9bi5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBMXyhuLHRbZV0pfSk7cmV0dXJuIGUuZGF0YT1uLnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciB0PVtdLG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7aWYobz0oaT1lLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxvLGEsdSxmLGMscz1lLnNpdGUsbD0tMSxoPW5baVtvLTFdXSxkPWgubGVmdD09PXM/aC5yaWdodDpoLmxlZnQ7KytsPG87KWE9ZCxkPShoPW5baVtsXV0pLmxlZnQ9PT1zP2gucmlnaHQ6aC5sZWZ0LGEmJmQmJnI8YS5pbmRleCYmcjxkLmluZGV4JiYoZj1hLGM9ZCwoKHU9cylbMF0tY1swXSkqKGZbMV0tdVsxXSktKHVbMF0tZlswXSkqKGNbMV0tdVsxXSk8MCkmJnQucHVzaChbcy5kYXRhLGEuZGF0YSxkLmRhdGFdKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJpZ2h0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbih0LG4sZSl7Zm9yKHZhciByLGksbz10aGlzLGE9by5fZm91bmR8fDAsdT1vLmNlbGxzLmxlbmd0aDshKGk9by5jZWxsc1thXSk7KWlmKCsrYT49dSlyZXR1cm4gbnVsbDt2YXIgZj10LWkuc2l0ZVswXSxjPW4taS5zaXRlWzFdLHM9ZipmK2MqYztkb3tpPW8uY2VsbHNbcj1hXSxhPW51bGwsaS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1vLmVkZ2VzW2VdLHU9ci5sZWZ0O2lmKHUhPT1pLnNpdGUmJnV8fCh1PXIucmlnaHQpKXt2YXIgZj10LXVbMF0sYz1uLXVbMV0sbD1mKmYrYypjO2w8cyYmKHM9bCxhPXUuaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1hKTtyZXR1cm4gby5fZm91bmQ9cixudWxsPT1lfHxzPD1lKmU/aS5zaXRlOm51bGx9fSxvYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm9iLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBvYih0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIDA9PT10JjA9PT1uP3RoaXM6bmV3IG9iKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuaypuKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIGFiPW5ldyBvYigxLDAsMCk7ZnVuY3Rpb24gdWIodCl7cmV0dXJuIHQuX196b29tfHxhYn1mdW5jdGlvbiBmYigpe3QuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gY2IoKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBzYigpe3JldHVybiF0LmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiBsYigpe3ZhciB0LG4sZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8odD0oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSkud2lkdGguYmFzZVZhbC52YWx1ZSxuPWUuaGVpZ2h0LmJhc2VWYWwudmFsdWUpOih0PWUuY2xpZW50V2lkdGgsbj1lLmNsaWVudEhlaWdodCksW1swLDBdLFt0LG5dXX1mdW5jdGlvbiBoYigpe3JldHVybiB0aGlzLl9fem9vbXx8YWJ9ZnVuY3Rpb24gZGIoKXtyZXR1cm4tdC5ldmVudC5kZWx0YVkqKHQuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gcGIoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gdmIodCxuLGUpe3ZhciByPXQuaW52ZXJ0WChuWzBdWzBdKS1lWzBdWzBdLGk9dC5pbnZlcnRYKG5bMV1bMF0pLWVbMV1bMF0sbz10LmludmVydFkoblswXVsxXSktZVswXVsxXSxhPXQuaW52ZXJ0WShuWzFdWzFdKS1lWzFdWzFdO3JldHVybiB0LnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLGE+bz8obythKS8yOk1hdGgubWluKDAsbyl8fE1hdGgubWF4KDAsYSkpfXViLnByb3RvdHlwZT1vYi5wcm90b3R5cGUsdC52ZXJzaW9uPSI1LjcuMCIsdC5iaXNlY3Q9aSx0LmJpc2VjdFJpZ2h0PWksdC5iaXNlY3RMZWZ0PW8sdC5hc2NlbmRpbmc9bix0LmJpc2VjdG9yPWUsdC5jcm9zcz1mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvLHUsZj10Lmxlbmd0aCxjPW4ubGVuZ3RoLHM9bmV3IEFycmF5KGYqYyk7Zm9yKG51bGw9PWUmJihlPWEpLHI9bz0wO3I8ZjsrK3IpZm9yKHU9dFtyXSxpPTA7aTxjOysraSwrK28pc1tvXT1lKHUsbltpXSk7cmV0dXJuIHN9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LG4pe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD1zLHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9dixuPXMsZT1NO2Z1bmN0aW9uIHIocil7dmFyIG8sYSx1PXIubGVuZ3RoLGY9bmV3IEFycmF5KHUpO2ZvcihvPTA7bzx1OysrbylmW29dPXQocltvXSxvLHIpO3ZhciBjPW4oZikscz1jWzBdLGw9Y1sxXSxoPWUoZixzLGwpO0FycmF5LmlzQXJyYXkoaCl8fChoPXcocyxsLGgpLGg9ZyhNYXRoLmNlaWwocy9oKSpoLGwsaCkpO2Zvcih2YXIgZD1oLmxlbmd0aDtoWzBdPD1zOyloLnNoaWZ0KCksLS1kO2Zvcig7aFtkLTFdPmw7KWgucG9wKCksLS1kO3ZhciBwLHY9bmV3IEFycmF5KGQrMSk7Zm9yKG89MDtvPD1kOysrbykocD12W29dPVtdKS54MD1vPjA/aFtvLTFdOnMscC54MT1vPGQ/aFtvXTpsO2ZvcihvPTA7bzx1OysrbylzPD0oYT1mW29dKSYmYTw9bCYmdltpKGgsYSwwLGQpXS5wdXNoKHJbb10pO3JldHVybiB2fXJldHVybiByLnZhbHVlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246cChuKSxyKTp0fSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnAoW3RbMF0sdFsxXV0pLHIpOm59LHIudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/cChoLmNhbGwodCkpOnAodCkscik6ZX0scn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD1kLmNhbGwodCx1KS5zb3J0KG4pLE1hdGguY2VpbCgoci1lKS8oMiooQSh0LC43NSktQSh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxuLGUpe3JldHVybiBNYXRoLmNlaWwoKGUtbikvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz1NLHQubWF4PVQsdC5tZWFuPWZ1bmN0aW9uKHQsbil7dmFyIGUscj10Lmxlbmd0aCxpPXIsbz0tMSxhPTA7aWYobnVsbD09bilmb3IoOysrbzxyOylpc05hTihlPXUodFtvXSkpPy0taTphKz1lO2Vsc2UgZm9yKDsrK288cjspaXNOYU4oZT11KG4odFtvXSxvLHQpKSk/LS1pOmErPWU7aWYoaSlyZXR1cm4gYS9pfSx0Lm1lZGlhbj1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5sZW5ndGgsbz0tMSxhPVtdO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4ocj11KHRbb10pKXx8YS5wdXNoKHIpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4ocj11KGUodFtvXSxvLHQpKSl8fGEucHVzaChyKTtyZXR1cm4gQShhLnNvcnQobiksLjUpfSx0Lm1lcmdlPU4sdC5taW49Uyx0LnBhaXJzPWZ1bmN0aW9uKHQsbil7bnVsbD09biYmKG49YSk7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xLGk9dFswXSxvPW5ldyBBcnJheShyPDA/MDpyKTtlPHI7KW9bZV09bihpLGk9dFsrK2VdKTtyZXR1cm4gb30sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT10W25bZV1dO3JldHVybiByfSx0LnF1YW50aWxlPUEsdC5yYW5nZT1nLHQuc2Nhbj1mdW5jdGlvbih0LGUpe2lmKHI9dC5sZW5ndGgpe3ZhciByLGksbz0wLGE9MCx1PXRbYV07Zm9yKG51bGw9PWUmJihlPW4pOysrbzxyOykoZShpPXRbb10sdSk8MHx8MCE9PWUodSx1KSkmJih1PWksYT1vKTtyZXR1cm4gMD09PWUodSx1KT9hOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LG4sZSl7Zm9yKHZhciByLGksbz0obnVsbD09ZT90Lmxlbmd0aDplKS0obj1udWxsPT1uPzA6K24pO287KWk9TWF0aC5yYW5kb20oKSpvLS18MCxyPXRbbytuXSx0W28rbl09dFtpK25dLHRbaStuXT1yO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LG4pe3ZhciBlLHI9dC5sZW5ndGgsaT0tMSxvPTA7aWYobnVsbD09bilmb3IoOysraTxyOykoZT0rdFtpXSkmJihvKz1lKTtlbHNlIGZvcig7KytpPHI7KShlPStuKHRbaV0saSx0KSkmJihvKz1lKTtyZXR1cm4gb30sdC50aWNrcz1tLHQudGlja0luY3JlbWVudD14LHQudGlja1N0ZXA9dyx0LnRyYW5zcG9zZT1FLHQudmFyaWFuY2U9Zix0LnppcD1mdW5jdGlvbigpe3JldHVybiBFKGFyZ3VtZW50cyl9LHQuYXhpc1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gQih6LHQpfSx0LmF4aXNSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gQihSLHQpfSx0LmF4aXNCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIEIoTCx0KX0sdC5heGlzTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gQihELHQpfSx0LmJydXNoPWZ1bmN0aW9uKCl7cmV0dXJuIFJpKHdpKX0sdC5icnVzaFg9ZnVuY3Rpb24oKXtyZXR1cm4gUmkobWkpfSx0LmJydXNoWT1mdW5jdGlvbigpe3JldHVybiBSaSh4aSl9LHQuYnJ1c2hTZWxlY3Rpb249ZnVuY3Rpb24odCl7dmFyIG49dC5fX2JydXNoO3JldHVybiBuP24uZGltLm91dHB1dChuLnNlbGVjdGlvbik6bnVsbH0sdC5jaG9yZD1mdW5jdGlvbigpe3ZhciB0PTAsbj1udWxsLGU9bnVsbCxyPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgbyxhLHUsZixjLHMsbD1pLmxlbmd0aCxoPVtdLGQ9ZyhsKSxwPVtdLHY9W10seT12Lmdyb3Vwcz1uZXcgQXJyYXkobCksXz1uZXcgQXJyYXkobCpsKTtmb3Iobz0wLGM9LTE7KytjPGw7KXtmb3IoYT0wLHM9LTE7KytzPGw7KWErPWlbY11bc107aC5wdXNoKGEpLHAucHVzaChnKGwpKSxvKz1hfWZvcihuJiZkLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihoW3RdLGhbZV0pfSksZSYmcC5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGUoaVtuXVt0XSxpW25dW3JdKX0pfSksZj0obz1ZaSgwLE9pLXQqbCkvbyk/dDpPaS9sLGE9MCxjPS0xOysrYzxsOyl7Zm9yKHU9YSxzPS0xOysrczxsOyl7dmFyIGI9ZFtjXSxtPXBbYl1bc10seD1pW2JdW21dLHc9YSxNPWErPXgqbztfW20qbCtiXT17aW5kZXg6YixzdWJpbmRleDptLHN0YXJ0QW5nbGU6dyxlbmRBbmdsZTpNLHZhbHVlOnh9fXlbYl09e2luZGV4OmIsc3RhcnRBbmdsZTp1LGVuZEFuZ2xlOmEsdmFsdWU6aFtiXX0sYSs9Zn1mb3IoYz0tMTsrK2M8bDspZm9yKHM9Yy0xOysrczxsOyl7dmFyIEE9X1tzKmwrY10sVD1fW2MqbCtzXTsoQS52YWx1ZXx8VC52YWx1ZSkmJnYucHVzaChBLnZhbHVlPFQudmFsdWU/e3NvdXJjZTpULHRhcmdldDpBfTp7c291cmNlOkEsdGFyZ2V0OlR9KX1yZXR1cm4gcj92LnNvcnQocik6dn1yZXR1cm4gaS5wYWRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1ZaSgwLG4pLGkpOnR9LGkuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkpOm59LGkuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGkpOmV9LGkuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9yPW51bGw6KG49dCxyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUsZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpfSkuXz10LGkpOnImJnIuXzt2YXIgbn0saX0sdC5yaWJib249ZnVuY3Rpb24oKXt2YXIgdD1WaSxuPSRpLGU9V2kscj1aaSxpPVFpLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEsdT1CaS5jYWxsKGFyZ3VtZW50cyksZj10LmFwcGx5KHRoaXMsdSksYz1uLmFwcGx5KHRoaXMsdSkscz0rZS5hcHBseSh0aGlzLCh1WzBdPWYsdSkpLGw9ci5hcHBseSh0aGlzLHUpLXFpLGg9aS5hcHBseSh0aGlzLHUpLXFpLGQ9cypMaShsKSxwPXMqRGkobCksdj0rZS5hcHBseSh0aGlzLCh1WzBdPWMsdSkpLGc9ci5hcHBseSh0aGlzLHUpLXFpLHk9aS5hcHBseSh0aGlzLHUpLXFpO2lmKG98fChvPWE9R2koKSksby5tb3ZlVG8oZCxwKSxvLmFyYygwLDAscyxsLGgpLGw9PT1nJiZoPT09eXx8KG8ucXVhZHJhdGljQ3VydmVUbygwLDAsdipMaShnKSx2KkRpKGcpKSxvLmFyYygwLDAsdixnLHkpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksby5jbG9zZVBhdGgoKSxhKXJldHVybiBvPW51bGwsYSsiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGaSgrdCksYSk6ZX0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RmkoK3QpLGEpOnJ9LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGaSgrdCksYSk6aX0sYS5zb3VyY2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixhKTp0fSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEpOm59LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfSx0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgdCxuLGUscj1bXSxpPVtdO2Z1bmN0aW9uIG8oZSxpLGEsdSl7aWYoaT49ci5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJmUuc29ydCh0KSxudWxsIT1uP24oZSk6ZTtmb3IodmFyIGYsYyxzLGw9LTEsaD1lLmxlbmd0aCxkPXJbaSsrXSxwPUtpKCksdj1hKCk7KytsPGg7KShzPXAuZ2V0KGY9ZChjPWVbbF0pKyIiKSk/cy5wdXNoKGMpOnAuc2V0KGYsW2NdKTtyZXR1cm4gcC5lYWNoKGZ1bmN0aW9uKHQsbil7dSh2LG4sbyh0LGksYSx1KSl9KSx2fXJldHVybiBlPXtvYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCwwLHRvLG5vKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsMCxlbyxybyl9LGVudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxvKXtpZigrK28+ci5sZW5ndGgpcmV0dXJuIGU7dmFyIGEsdT1pW28tMV07cmV0dXJuIG51bGwhPW4mJm8+PXIubGVuZ3RoP2E9ZS5lbnRyaWVzKCk6KGE9W10sZS5lYWNoKGZ1bmN0aW9uKG4sZSl7YS5wdXNoKHtrZXk6ZSx2YWx1ZXM6dChuLG8pfSl9KSksbnVsbCE9dT9hLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gdSh0LmtleSxuLmtleSl9KTphfShvKHQsMCxlbyxybyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gci5wdXNoKHQpLGV9LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpW3IubGVuZ3RoLTFdPXQsZX0sc29ydFZhbHVlczpmdW5jdGlvbihuKXtyZXR1cm4gdD1uLGV9LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gbj10LGV9fX0sdC5zZXQ9YW8sdC5tYXA9S2ksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaChlKTtyZXR1cm4gbn0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIG49W107Zm9yKHZhciBlIGluIHQpbi5wdXNoKHRbZV0pO3JldHVybiBufSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIG49W107Zm9yKHZhciBlIGluIHQpbi5wdXNoKHtrZXk6ZSx2YWx1ZTp0W2VdfSk7cmV0dXJuIG59LHQuY29sb3I9dm4sdC5yZ2I9Ym4sdC5oc2w9TW4sdC5sYWI9VW4sdC5oY2w9SG4sdC5sY2g9ZnVuY3Rpb24odCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0luKHQpOm5ldyBqbihlLG4sdCxudWxsPT1yPzE6cil9LHQuZ3JheT1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgcW4odCwwLDAsbnVsbD09bj8xOm4pfSx0LmN1YmVoZWxpeD1Lbix0LmNvbnRvdXJzPWdvLHQuY29udG91ckRlbnNpdHk9ZnVuY3Rpb24oKXt2YXIgdD1ibyxuPW1vLGU9eG8scj05NjAsaT01MDAsbz0yMCxhPTIsdT0zKm8sZj1yKzIqdT4+YSxjPWkrMip1Pj5hLHM9Y28oMjApO2Z1bmN0aW9uIGwocil7dmFyIGk9bmV3IEZsb2F0MzJBcnJheShmKmMpLGw9bmV3IEZsb2F0MzJBcnJheShmKmMpO3IuZm9yRWFjaChmdW5jdGlvbihyLG8scyl7dmFyIGw9K3QocixvLHMpK3U+PmEsaD0rbihyLG8scykrdT4+YSxkPStlKHIsbyxzKTtsPj0wJiZsPGYmJmg+PTAmJmg8YyYmKGlbbCtoKmZdKz1kKX0pLHlvKHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6aX0se3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTpsfSxvPj5hKSxfbyh7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOmx9LHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6aX0sbz4+YSkseW8oe3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTppfSx7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOmx9LG8+PmEpLF9vKHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6bH0se3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTppfSxvPj5hKSx5byh7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOml9LHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6bH0sbz4+YSksX28oe3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTpsfSx7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOml9LG8+PmEpO3ZhciBkPXMoaSk7aWYoIUFycmF5LmlzQXJyYXkoZCkpe3ZhciBwPVQoaSk7ZD13KDAscCxkKSwoZD1nKDAsTWF0aC5mbG9vcihwL2QpKmQsZCkpLnNoaWZ0KCl9cmV0dXJuIGdvKCkudGhyZXNob2xkcyhkKS5zaXplKFtmLGNdKShpKS5tYXAoaCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC52YWx1ZSo9TWF0aC5wb3coMiwtMiphKSx0LmNvb3JkaW5hdGVzLmZvckVhY2goZCksdH1mdW5jdGlvbiBkKHQpe3QuZm9yRWFjaChwKX1mdW5jdGlvbiBwKHQpe3QuZm9yRWFjaCh2KX1mdW5jdGlvbiB2KHQpe3RbMF09dFswXSpNYXRoLnBvdygyLGEpLXUsdFsxXT10WzFdKk1hdGgucG93KDIsYSktdX1mdW5jdGlvbiB5KCl7cmV0dXJuIGY9cisyKih1PTMqbyk+PmEsYz1pKzIqdT4+YSxsfXJldHVybiBsLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpjbygrbiksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Y28oK3QpLGwpOm59LGwud2VpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Y28oK3QpLGwpOmV9LGwuc2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bcixpXTt2YXIgbj1NYXRoLmNlaWwodFswXSksZT1NYXRoLmNlaWwodFsxXSk7aWYoIShuPj0wfHxuPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiByPW4saT1lLHkoKX0sbC5jZWxsU2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8YTtpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiBhPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHkoKX0sbC50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9jbyh1by5jYWxsKHQpKTpjbyh0KSxsKTpzfSxsLmJhbmR3aWR0aD1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KG8qKG8rMSkpO2lmKCEoKHQ9K3QpPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYmFuZHdpZHRoIik7cmV0dXJuIG89TWF0aC5yb3VuZCgoTWF0aC5zcXJ0KDQqdCp0KzEpLTEpLzIpLHkoKX0sbH0sdC5kaXNwYXRjaD1JLHQuZHJhZz1mdW5jdGlvbigpe3ZhciBuLGUscixpLG89V3QsYT1adCx1PVF0LGY9SnQsYz17fSxzPUkoInN0YXJ0IiwiZHJhZyIsImVuZCIpLGw9MCxoPTA7ZnVuY3Rpb24gZCh0KXt0Lm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKGYpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLHkpLm9uKCJ0b3VjaG1vdmUuZHJhZyIsXykub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIsYikuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighaSYmby5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB1PW0oIm1vdXNlIixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxGdCx0aGlzLGFyZ3VtZW50cyk7dSYmKER0KHQuZXZlbnQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIix2LCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxYdCh0LmV2ZW50LnZpZXcpLEh0KCkscj0hMSxuPXQuZXZlbnQuY2xpZW50WCxlPXQuZXZlbnQuY2xpZW50WSx1KCJzdGFydCIpKX19ZnVuY3Rpb24gdigpe2lmKGp0KCksIXIpe3ZhciBpPXQuZXZlbnQuY2xpZW50WC1uLG89dC5ldmVudC5jbGllbnRZLWU7cj1pKmkrbypvPmh9Yy5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIGcoKXtEdCh0LmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLEd0KHQuZXZlbnQudmlldyxyKSxqdCgpLGMubW91c2UoImVuZCIpfWZ1bmN0aW9uIHkoKXtpZihvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4sZSxyPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsaT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx1PXIubGVuZ3RoO2ZvcihuPTA7bjx1OysrbikoZT1tKHJbbl0uaWRlbnRpZmllcixpLEl0LHRoaXMsYXJndW1lbnRzKSkmJihIdCgpLGUoInN0YXJ0IikpfX1mdW5jdGlvbiBfKCl7dmFyIG4sZSxyPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsaT1yLmxlbmd0aDtmb3Iobj0wO248aTsrK24pKGU9Y1tyW25dLmlkZW50aWZpZXJdKSYmKGp0KCksZSgiZHJhZyIpKX1mdW5jdGlvbiBiKCl7dmFyIG4sZSxyPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz1yLmxlbmd0aDtmb3IoaSYmY2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dChmdW5jdGlvbigpe2k9bnVsbH0sNTAwKSxuPTA7bjxvOysrbikoZT1jW3Jbbl0uaWRlbnRpZmllcl0pJiYoSHQoKSxlKCJlbmQiKSl9ZnVuY3Rpb24gbShuLGUscixpLG8pe3ZhciBhLGYsaCxwPXIoZSxuKSx2PXMuY29weSgpO2lmKEN0KG5ldyAkdChkLCJiZWZvcmVzdGFydCIsYSxuLGwscFswXSxwWzFdLDAsMCx2KSxmdW5jdGlvbigpe3JldHVybiBudWxsIT0odC5ldmVudC5zdWJqZWN0PWE9dS5hcHBseShpLG8pKSYmKGY9YS54LXBbMF18fDAsaD1hLnktcFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gdCh1KXt2YXIgcyxnPXA7c3dpdGNoKHUpe2Nhc2Uic3RhcnQiOmNbbl09dCxzPWwrKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGNbbl0sLS1sO2Nhc2UiZHJhZyI6cD1yKGUsbikscz1sfUN0KG5ldyAkdChkLHUsYSxuLHMscFswXStmLHBbMV0raCxwWzBdLWdbMF0scFsxXS1nWzFdLHYpLHYuYXBwbHksdixbdSxpLG9dKX19cmV0dXJuIGQuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VnQoISF0KSxkKTpvfSxkLmNvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlZ0KHQpLGQpOmF9LGQuc3ViamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlZ0KHQpLGQpOnV9LGQudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VnQoISF0KSxkKTpmfSxkLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9cy5vbi5hcHBseShzLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1zP2Q6dH0sZC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSh0PSt0KSp0LGQpOk1hdGguc3FydChoKX0sZH0sdC5kcmFnRGlzYWJsZT1YdCx0LmRyYWdFbmFibGU9R3QsdC5kc3ZGb3JtYXQ9RW8sdC5jc3ZQYXJzZT1Dbyx0LmNzdlBhcnNlUm93cz1Qbyx0LmNzdkZvcm1hdD16byx0LmNzdkZvcm1hdFJvd3M9Um8sdC50c3ZQYXJzZT1Ebyx0LnRzdlBhcnNlUm93cz1Vbyx0LnRzdkZvcm1hdD1xbyx0LnRzdkZvcm1hdFJvd3M9T28sdC5lYXNlTGluZWFyPWZ1bmN0aW9uKHQpe3JldHVybit0fSx0LmVhc2VRdWFkPURyLHQuZWFzZVF1YWRJbj1mdW5jdGlvbih0KXtyZXR1cm4gdCp0fSx0LmVhc2VRdWFkT3V0PWZ1bmN0aW9uKHQpe3JldHVybiB0KigyLXQpfSx0LmVhc2VRdWFkSW5PdXQ9RHIsdC5lYXNlQ3ViaWM9VXIsdC5lYXNlQ3ViaWNJbj1mdW5jdGlvbih0KXtyZXR1cm4gdCp0KnR9LHQuZWFzZUN1YmljT3V0PWZ1bmN0aW9uKHQpe3JldHVybi0tdCp0KnQrMX0sdC5lYXNlQ3ViaWNJbk91dD1Vcix0LmVhc2VQb2x5PVlyLHQuZWFzZVBvbHlJbj1xcix0LmVhc2VQb2x5T3V0PU9yLHQuZWFzZVBvbHlJbk91dD1Zcix0LmVhc2VTaW49SXIsdC5lYXNlU2luSW49ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5jb3ModCpGcil9LHQuZWFzZVNpbk91dD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zaW4odCpGcil9LHQuZWFzZVNpbkluT3V0PUlyLHQuZWFzZUV4cD1Icix0LmVhc2VFeHBJbj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCp0LTEwKX0sdC5lYXNlRXhwT3V0PWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKnQpfSx0LmVhc2VFeHBJbk91dD1Icix0LmVhc2VDaXJjbGU9anIsdC5lYXNlQ2lyY2xlSW49ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX0sdC5lYXNlQ2lyY2xlT3V0PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfSx0LmVhc2VDaXJjbGVJbk91dD1qcix0LmVhc2VCb3VuY2U9bmksdC5lYXNlQm91bmNlSW49ZnVuY3Rpb24odCl7cmV0dXJuIDEtbmkoMS10KX0sdC5lYXNlQm91bmNlT3V0PW5pLHQuZWFzZUJvdW5jZUluT3V0PWZ1bmN0aW9uKHQpe3JldHVybigodCo9Mik8PTE/MS1uaSgxLXQpOm5pKHQtMSkrMSkvMn0sdC5lYXNlQmFjaz1paSx0LmVhc2VCYWNrSW49ZWksdC5lYXNlQmFja091dD1yaSx0LmVhc2VCYWNrSW5PdXQ9aWksdC5lYXNlRWxhc3RpYz11aSx0LmVhc2VFbGFzdGljSW49YWksdC5lYXNlRWxhc3RpY091dD11aSx0LmVhc2VFbGFzdGljSW5PdXQ9ZmksdC5ibG9iPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZldGNoKHQsbikudGhlbihZbyl9LHQuYnVmZmVyPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZldGNoKHQsbikudGhlbihCbyl9LHQuZHN2PWZ1bmN0aW9uKHQsbixlLHIpezM9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPXZvaWQgMCk7dmFyIGk9RW8odCk7cmV0dXJuIElvKG4sZSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJzZSh0LHIpfSl9LHQuY3N2PWpvLHQudHN2PVhvLHQuaW1hZ2U9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxyKXt2YXIgaT1uZXcgSW1hZ2U7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2kub25lcnJvcj1yLGkub25sb2FkPWZ1bmN0aW9uKCl7ZShpKX0saS5zcmM9dH0pfSx0Lmpzb249ZnVuY3Rpb24odCxuKXtyZXR1cm4gZmV0Y2godCxuKS50aGVuKEdvKX0sdC50ZXh0PUlvLHQueG1sPSRvLHQuaHRtbD1Xbyx0LnN2Zz1abyx0LmZvcmNlQ2VudGVyPWZ1bmN0aW9uKHQsbil7dmFyIGU7ZnVuY3Rpb24gcigpe3ZhciByLGksbz1lLmxlbmd0aCxhPTAsdT0wO2ZvcihyPTA7cjxvOysrcilhKz0oaT1lW3JdKS54LHUrPWkueTtmb3IoYT1hL28tdCx1PXUvby1uLHI9MDtyPG87KytyKShpPWVbcl0pLngtPWEsaS55LT11fXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1uJiYobj0wKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10fSxyLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K24scik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHIpOm59LHJ9LHQuZm9yY2VDb2xsaWRlPWZ1bmN0aW9uKHQpe3ZhciBuLGUscj0xLGk9MTtmdW5jdGlvbiBvKCl7Zm9yKHZhciB0LG8sdSxmLGMscyxsLGg9bi5sZW5ndGgsZD0wO2Q8aTsrK2QpZm9yKG89cmEobix1YSxmYSkudmlzaXRBZnRlcihhKSx0PTA7dDxoOysrdCl1PW5bdF0scz1lW3UuaW5kZXhdLGw9cypzLGY9dS54K3UudngsYz11LnkrdS52eSxvLnZpc2l0KHApO2Z1bmN0aW9uIHAodCxuLGUsaSxvKXt2YXIgYT10LmRhdGEsaD10LnIsZD1zK2g7aWYoIWEpcmV0dXJuIG4+ZitkfHxpPGYtZHx8ZT5jK2R8fG88Yy1kO2lmKGEuaW5kZXg+dS5pbmRleCl7dmFyIHA9Zi1hLngtYS52eCx2PWMtYS55LWEudnksZz1wKnArdip2O2c8ZCpkJiYoMD09PXAmJihnKz0ocD1KbygpKSpwKSwwPT09diYmKGcrPSh2PUpvKCkpKnYpLGc9KGQtKGc9TWF0aC5zcXJ0KGcpKSkvZypyLHUudngrPShwKj1nKSooZD0oaCo9aCkvKGwraCkpLHUudnkrPSh2Kj1nKSpkLGEudngtPXAqKGQ9MS1kKSxhLnZ5LT12KmQpfX19ZnVuY3Rpb24gYSh0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1lW3QuZGF0YS5pbmRleF07Zm9yKHZhciBuPXQucj0wO248NDsrK24pdFtuXSYmdFtuXS5yPnQuciYmKHQucj10W25dLnIpfWZ1bmN0aW9uIHUoKXtpZihuKXt2YXIgcixpLG89bi5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KG8pLHI9MDtyPG87KytyKWk9bltyXSxlW2kuaW5kZXhdPSt0KGkscixuKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVFvKG51bGw9PXQ/MTordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsdSgpfSxvLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbyk6aX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxvKTpyfSxvLnJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlFvKCtuKSx1KCksbyk6dH0sb30sdC5mb3JjZUxpbms9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbyxhPWNhLHU9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oaVt0LnNvdXJjZS5pbmRleF0saVt0LnRhcmdldC5pbmRleF0pfSxmPVFvKDMwKSxjPTE7ZnVuY3Rpb24gcyhyKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YzsrK2kpZm9yKHZhciB1LGYscyxsLGgsZCxwLHY9MDt2PGE7Kyt2KWY9KHU9dFt2XSkuc291cmNlLGw9KHM9dS50YXJnZXQpLngrcy52eC1mLngtZi52eHx8Sm8oKSxoPXMueStzLnZ5LWYueS1mLnZ5fHxKbygpLGwqPWQ9KChkPU1hdGguc3FydChsKmwraCpoKSktZVt2XSkvZCpyKm5bdl0saCo9ZCxzLnZ4LT1sKihwPW9bdl0pLHMudnktPWgqcCxmLnZ4Kz1sKihwPTEtcCksZi52eSs9aCpwfWZ1bmN0aW9uIGwoKXtpZihyKXt2YXIgdSxmLGM9ci5sZW5ndGgscz10Lmxlbmd0aCxsPUtpKHIsYSk7Zm9yKHU9MCxpPW5ldyBBcnJheShjKTt1PHM7Kyt1KShmPXRbdV0pLmluZGV4PXUsIm9iamVjdCIhPXR5cGVvZiBmLnNvdXJjZSYmKGYuc291cmNlPXNhKGwsZi5zb3VyY2UpKSwib2JqZWN0IiE9dHlwZW9mIGYudGFyZ2V0JiYoZi50YXJnZXQ9c2EobCxmLnRhcmdldCkpLGlbZi5zb3VyY2UuaW5kZXhdPShpW2Yuc291cmNlLmluZGV4XXx8MCkrMSxpW2YudGFyZ2V0LmluZGV4XT0oaVtmLnRhcmdldC5pbmRleF18fDApKzE7Zm9yKHU9MCxvPW5ldyBBcnJheShzKTt1PHM7Kyt1KWY9dFt1XSxvW3VdPWlbZi5zb3VyY2UuaW5kZXhdLyhpW2Yuc291cmNlLmluZGV4XStpW2YudGFyZ2V0LmluZGV4XSk7bj1uZXcgQXJyYXkocyksaCgpLGU9bmV3IEFycmF5KHMpLGQoKX19ZnVuY3Rpb24gaCgpe2lmKHIpZm9yKHZhciBlPTAsaT10Lmxlbmd0aDtlPGk7KytlKW5bZV09K3UodFtlXSxlLHQpfWZ1bmN0aW9uIGQoKXtpZihyKWZvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOysrbillW25dPStmKHRbbl0sbix0KX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsbCgpfSxzLmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sbCgpLHMpOnR9LHMuaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxzKTphfSxzLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3Qscyk6Y30scy5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFvKCt0KSxoKCkscyk6dX0scy5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFvKCt0KSxkKCkscyk6Zn0sc30sdC5mb3JjZU1hbnlCb2R5PWZ1bmN0aW9uKCl7dmFyIHQsbixlLHIsaT1RbygtMzApLG89MSxhPTEvMCx1PS44MTtmdW5jdGlvbiBmKHIpe3ZhciBpLG89dC5sZW5ndGgsYT1yYSh0LGxhLGhhKS52aXNpdEFmdGVyKHMpO2ZvcihlPXIsaT0wO2k8bzsrK2kpbj10W2ldLGEudmlzaXQobCl9ZnVuY3Rpb24gYygpe2lmKHQpe3ZhciBuLGUsbz10Lmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj0wO248bzsrK24pZT10W25dLHJbZS5pbmRleF09K2koZSxuLHQpfX1mdW5jdGlvbiBzKHQpe3ZhciBuLGUsaSxvLGEsdT0wLGY9MDtpZih0Lmxlbmd0aCl7Zm9yKGk9bz1hPTA7YTw0OysrYSkobj10W2FdKSYmKGU9TWF0aC5hYnMobi52YWx1ZSkpJiYodSs9bi52YWx1ZSxmKz1lLGkrPWUqbi54LG8rPWUqbi55KTt0Lng9aS9mLHQueT1vL2Z9ZWxzZXsobj10KS54PW4uZGF0YS54LG4ueT1uLmRhdGEueTtkb3t1Kz1yW24uZGF0YS5pbmRleF19d2hpbGUobj1uLm5leHQpfXQudmFsdWU9dX1mdW5jdGlvbiBsKHQsaSxmLGMpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBzPXQueC1uLngsbD10Lnktbi55LGg9Yy1pLGQ9cypzK2wqbDtpZihoKmgvdTxkKXJldHVybiBkPGEmJigwPT09cyYmKGQrPShzPUpvKCkpKnMpLDA9PT1sJiYoZCs9KGw9Sm8oKSkqbCksZDxvJiYoZD1NYXRoLnNxcnQobypkKSksbi52eCs9cyp0LnZhbHVlKmUvZCxuLnZ5Kz1sKnQudmFsdWUqZS9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1hKSl7KHQuZGF0YSE9PW58fHQubmV4dCkmJigwPT09cyYmKGQrPShzPUpvKCkpKnMpLDA9PT1sJiYoZCs9KGw9Sm8oKSkqbCksZDxvJiYoZD1NYXRoLnNxcnQobypkKSkpO2Rve3QuZGF0YSE9PW4mJihoPXJbdC5kYXRhLmluZGV4XSplL2Qsbi52eCs9cypoLG4udnkrPWwqaCl9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gZi5pbml0aWFsaXplPWZ1bmN0aW9uKG4pe3Q9bixjKCl9LGYuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRbygrdCksYygpLGYpOml9LGYuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCp0LGYpOk1hdGguc3FydChvKX0sZi5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10KnQsZik6TWF0aC5zcXJ0KGEpfSxmLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQqdCxmKTpNYXRoLnNxcnQodSl9LGZ9LHQuZm9yY2VSYWRpYWw9ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbyxhPVFvKC4xKTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgYT0wLHU9ci5sZW5ndGg7YTx1OysrYSl7dmFyIGY9clthXSxjPWYueC1ufHwxZS02LHM9Zi55LWV8fDFlLTYsbD1NYXRoLnNxcnQoYypjK3MqcyksaD0ob1thXS1sKSppW2FdKnQvbDtmLnZ4Kz1jKmgsZi52eSs9cypofX1mdW5jdGlvbiBmKCl7aWYocil7dmFyIG4sZT1yLmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pb1tuXT0rdChyW25dLG4sciksaVtuXT1pc05hTihvW25dKT8wOithKHJbbl0sbixyKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVFvKCt0KSksbnVsbD09biYmKG49MCksbnVsbD09ZSYmKGU9MCksdS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxmKCl9LHUuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRbygrdCksZigpLHUpOmF9LHUucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UW8oK24pLGYoKSx1KTp0fSx1Lng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsdSk6bn0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHUpOmV9LHV9LHQuZm9yY2VTaW11bGF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuLGU9MSxyPS4wMDEsaT0xLU1hdGgucG93KHIsMS8zMDApLG89MCxhPS42LHU9S2koKSxmPXVyKHMpLGM9SSgidGljayIsImVuZCIpO2Z1bmN0aW9uIHMoKXtsKCksYy5jYWxsKCJ0aWNrIixuKSxlPHImJihmLnN0b3AoKSxjLmNhbGwoImVuZCIsbikpfWZ1bmN0aW9uIGwoKXt2YXIgbixyLGY9dC5sZW5ndGg7Zm9yKGUrPShvLWUpKmksdS5lYWNoKGZ1bmN0aW9uKHQpe3QoZSl9KSxuPTA7bjxmOysrbiludWxsPT0ocj10W25dKS5meD9yLngrPXIudngqPWE6KHIueD1yLmZ4LHIudng9MCksbnVsbD09ci5meT9yLnkrPXIudnkqPWE6KHIueT1yLmZ5LHIudnk9MCl9ZnVuY3Rpb24gaCgpe2Zvcih2YXIgbixlPTAscj10Lmxlbmd0aDtlPHI7KytlKXtpZigobj10W2VdKS5pbmRleD1lLGlzTmFOKG4ueCl8fGlzTmFOKG4ueSkpe3ZhciBpPWRhKk1hdGguc3FydChlKSxvPWUqcGE7bi54PWkqTWF0aC5jb3Mobyksbi55PWkqTWF0aC5zaW4obyl9KGlzTmFOKG4udngpfHxpc05hTihuLnZ5KSkmJihuLnZ4PW4udnk9MCl9fWZ1bmN0aW9uIGQobil7cmV0dXJuIG4uaW5pdGlhbGl6ZSYmbi5pbml0aWFsaXplKHQpLG59cmV0dXJuIG51bGw9PXQmJih0PVtdKSxoKCksbj17dGljazpsLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5yZXN0YXJ0KHMpLG59LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZi5zdG9wKCksbn0sbm9kZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxoKCksdS5lYWNoKGQpLG4pOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LG4pOmV9LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LG4pOnJ9LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbik6K2l9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LG4pOm99LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9MS10LG4pOjEtYX0sZm9yY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1lP3UucmVtb3ZlKHQpOnUuc2V0KHQsZChlKSksbik6dS5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24obixlLHIpe3ZhciBpLG8sYSx1LGYsYz0wLHM9dC5sZW5ndGg7Zm9yKG51bGw9PXI/cj0xLzA6cio9cixjPTA7YzxzOysrYykoYT0oaT1uLSh1PXRbY10pLngpKmkrKG89ZS11LnkpKm8pPHImJihmPXUscj1hKTtyZXR1cm4gZn0sb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhjLm9uKHQsZSksbik6Yy5vbih0KX19fSx0LmZvcmNlWD1mdW5jdGlvbih0KXt2YXIgbixlLHIsaT1RbyguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksbz0wLGE9bi5sZW5ndGg7bzxhOysrbykoaT1uW29dKS52eCs9KHJbb10taS54KSplW29dKnR9ZnVuY3Rpb24gYSgpe2lmKG4pe3ZhciBvLGE9bi5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KGEpLHI9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKWVbb109aXNOYU4ocltvXT0rdChuW29dLG8sbikpPzA6K2kobltvXSxvLG4pfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9UW8obnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRbygrdCksYSgpLG8pOml9LG8ueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlFvKCtuKSxhKCksbyk6dH0sb30sdC5mb3JjZVk9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGk9UW8oLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLG89MCxhPW4ubGVuZ3RoO288YTsrK28pKGk9bltvXSkudnkrPShyW29dLWkueSkqZVtvXSp0fWZ1bmN0aW9uIGEoKXtpZihuKXt2YXIgbyxhPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKSxyPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyllW29dPWlzTmFOKHJbb109K3QobltvXSxvLG4pKT8wOitpKG5bb10sbyxuKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVFvKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGEoKSxvKTppfSxvLnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRbygrbiksYSgpLG8pOnR9LG99LHQuZm9ybWF0RGVmYXVsdExvY2FsZT1TYSx0LmZvcm1hdExvY2FsZT1OYSx0LmZvcm1hdFNwZWNpZmllcj1iYSx0LnByZWNpc2lvbkZpeGVkPUVhLHQucHJlY2lzaW9uUHJlZml4PWthLHQucHJlY2lzaW9uUm91bmQ9Q2EsdC5nZW9BcmVhPWZ1bmN0aW9uKHQpe3JldHVybiB5dS5yZXNldCgpLHN1KHQsX3UpLDIqeXV9LHQuZ2VvQm91bmRzPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sYSx1O2lmKFJ1PXp1PS0oQ3U9UHU9MS8wKSxPdT1bXSxzdSh0LHJmKSxlPU91Lmxlbmd0aCl7Zm9yKE91LnNvcnQoZGYpLG49MSxvPVtyPU91WzBdXTtuPGU7KytuKXBmKHIsKGk9T3Vbbl0pWzBdKXx8cGYocixpWzFdKT8oaGYoclswXSxpWzFdKT5oZihyWzBdLHJbMV0pJiYoclsxXT1pWzFdKSxoZihpWzBdLHJbMV0pPmhmKHJbMF0sclsxXSkmJihyWzBdPWlbMF0pKTpvLnB1c2gocj1pKTtmb3IoYT0tMS8wLG49MCxyPW9bZT1vLmxlbmd0aC0xXTtuPD1lO3I9aSwrK24paT1vW25dLCh1PWhmKHJbMV0saVswXSkpPmEmJihhPXUsQ3U9aVswXSx6dT1yWzFdKX1yZXR1cm4gT3U9WXU9bnVsbCxDdT09PTEvMHx8UHU9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbQ3UsUHVdLFt6dSxSdV1dfSx0Lmdlb0NlbnRyb2lkPWZ1bmN0aW9uKHQpe0J1PUZ1PUl1PUh1PWp1PVh1PUd1PVZ1PSR1PVd1PVp1PTAsc3UodCx2Zik7dmFyIG49JHUsZT1XdSxyPVp1LGk9bipuK2UqZStyKnI7cmV0dXJuIGk8VWEmJihuPVh1LGU9R3Uscj1WdSxGdTxEYSYmKG49SXUsZT1IdSxyPWp1KSwoaT1uKm4rZSplK3Iqcik8VWEpP1tOYU4sTmFOXTpbWGEoZSxuKSpGYSxldShyL0thKGkpKSpGYV19LHQuZ2VvQ2lyY2xlPWZ1bmN0aW9uKCl7dmFyIHQsbixlPU5mKFswLDBdKSxyPU5mKDkwKSxpPU5mKDYpLG89e3BvaW50OmZ1bmN0aW9uKGUscil7dC5wdXNoKGU9bihlLHIpKSxlWzBdKj1GYSxlWzFdKj1GYX19O2Z1bmN0aW9uIGEoKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKklhLGY9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqSWE7cmV0dXJuIHQ9W10sbj1rZigtYVswXSpJYSwtYVsxXSpJYSwwKS5pbnZlcnQsTGYobyx1LGYsMSksYT17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PW49bnVsbCxhfXJldHVybiBhLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5mKFsrdFswXSwrdFsxXV0pLGEpOmV9LGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmYoK3QpLGEpOnJ9LGEucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmYoK3QpLGEpOml9LGF9LHQuZ2VvQ2xpcEFudGltZXJpZGlhbj1HZix0Lmdlb0NsaXBDaXJjbGU9VmYsdC5nZW9DbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQsbixlLHI9MCxpPTAsbz05NjAsYT01MDA7cmV0dXJuIGU9e3N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gdCYmbj09PWU/dDp0PVpmKHIsaSxvLGEpKG49ZSl9LGV4dGVudDpmdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdVswXVswXSxpPSt1WzBdWzFdLG89K3VbMV1bMF0sYT0rdVsxXVsxXSx0PW49bnVsbCxlKTpbW3IsaV0sW28sYV1dfX19LHQuZ2VvQ2xpcFJlY3RhbmdsZT1aZix0Lmdlb0NvbnRhaW5zPWZ1bmN0aW9uKHQsbil7cmV0dXJuKHQmJmNjLmhhc093blByb3BlcnR5KHQudHlwZSk/Y2NbdC50eXBlXTpsYykodCxuKX0sdC5nZW9EaXN0YW5jZT1mYyx0Lmdlb0dyYXRpY3VsZT1iYyx0Lmdlb0dyYXRpY3VsZTEwPWZ1bmN0aW9uKCl7cmV0dXJuIGJjKCkoKX0sdC5nZW9JbnRlcnBvbGF0ZT1mdW5jdGlvbih0LG4pe3ZhciBlPXRbMF0qSWEscj10WzFdKklhLGk9blswXSpJYSxvPW5bMV0qSWEsYT1HYShyKSx1PVFhKHIpLGY9R2EobyksYz1RYShvKSxzPWEqR2EoZSksbD1hKlFhKGUpLGg9ZipHYShpKSxkPWYqUWEoaSkscD0yKmV1KEthKHJ1KG8tcikrYSpmKnJ1KGktZSkpKSx2PVFhKHApLGc9cD9mdW5jdGlvbih0KXt2YXIgbj1RYSh0Kj1wKS92LGU9UWEocC10KS92LHI9ZSpzK24qaCxpPWUqbCtuKmQsbz1lKnUrbipjO3JldHVybltYYShpLHIpKkZhLFhhKG8sS2EocipyK2kqaSkpKkZhXX06ZnVuY3Rpb24oKXtyZXR1cm5bZSpGYSxyKkZhXX07cmV0dXJuIGcuZGlzdGFuY2U9cCxnfSx0Lmdlb0xlbmd0aD1vYyx0Lmdlb1BhdGg9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9NC41O2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmci5wb2ludFJhZGl1cygraS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHN1KHQsZShyKSkpLHIucmVzdWx0KCl9cmV0dXJuIG8uYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gc3UodCxlKFNjKSksU2MucmVzdWx0KCl9LG8ubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gc3UodCxlKGRzKSksZHMucmVzdWx0KCl9LG8uYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBzdSh0LGUoVWMpKSxVYy5yZXN1bHQoKX0sby5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4gc3UodCxlKFpjKSksWmMucmVzdWx0KCl9LG8ucHJvamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT1uPyh0PW51bGwsbWMpOih0PW4pLnN0cmVhbSxvKTp0fSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD8obj1udWxsLG5ldyBncyk6bmV3IGFzKG49dCksImZ1bmN0aW9uIiE9dHlwZW9mIGkmJnIucG9pbnRSYWRpdXMoaSksbyk6bn0sby5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihyLnBvaW50UmFkaXVzKCt0KSwrdCksbyk6aX0sby5wcm9qZWN0aW9uKHQpLmNvbnRleHQobil9LHQuZ2VvQWxiZXJzPURzLHQuZ2VvQWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIHQsbixlLHIsaSxvLGE9RHMoKSx1PUxzKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxmPUxzKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGM9e3BvaW50OmZ1bmN0aW9uKHQsbil7bz1bdCxuXX19O2Z1bmN0aW9uIHModCl7dmFyIG49dFswXSxhPXRbMV07cmV0dXJuIG89bnVsbCxlLnBvaW50KG4sYSksb3x8KHIucG9pbnQobixhKSxvKXx8KGkucG9pbnQobixhKSxvKX1mdW5jdGlvbiBsKCl7cmV0dXJuIHQ9bj1udWxsLHN9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBuPWEuc2NhbGUoKSxlPWEudHJhbnNsYXRlKCkscj0odFswXS1lWzBdKS9uLGk9KHRbMV0tZVsxXSkvbjtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJnI+PS0uNDI1JiZyPC0uMjE0P3U6aT49LjE2NiYmaTwuMjM0JiZyPj0tLjIxNCYmcjwtLjExNT9mOmEpLmludmVydCh0KX0scy5zdHJlYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6KHI9W2Euc3RyZWFtKG49ZSksdS5zdHJlYW0oZSksZi5zdHJlYW0oZSldLGk9ci5sZW5ndGgsdD17cG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9LTE7KytlPGk7KXJbZV0ucG9pbnQodCxuKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ucG9seWdvbkVuZCgpfX0pO3ZhciByLGl9LHMucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbih0KSx1LnByZWNpc2lvbih0KSxmLnByZWNpc2lvbih0KSxsKCkpOmEucHJlY2lzaW9uKCl9LHMuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUodCksdS5zY2FsZSguMzUqdCksZi5zY2FsZSh0KSxzLnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSxzLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgbj1hLnNjYWxlKCksbz0rdFswXSxzPSt0WzFdO3JldHVybiBlPWEudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tvLS40NTUqbixzLS4yMzgqbl0sW28rLjQ1NSpuLHMrLjIzOCpuXV0pLnN0cmVhbShjKSxyPXUudHJhbnNsYXRlKFtvLS4zMDcqbixzKy4yMDEqbl0pLmNsaXBFeHRlbnQoW1tvLS40MjUqbitEYSxzKy4xMipuK0RhXSxbby0uMjE0Km4tRGEscysuMjM0Km4tRGFdXSkuc3RyZWFtKGMpLGk9Zi50cmFuc2xhdGUoW28tLjIwNSpuLHMrLjIxMipuXSkuY2xpcEV4dGVudChbW28tLjIxNCpuK0RhLHMrLjE2NipuK0RhXSxbby0uMTE1Km4tRGEscysuMjM0Km4tRGFdXSkuc3RyZWFtKGMpLGwoKX0scy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4geHMocyx0LG4pfSxzLmZpdFNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gd3Mocyx0LG4pfSxzLmZpdFdpZHRoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1zKHMsdCxuKX0scy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQXMocyx0LG4pfSxzLnNjYWxlKDEwNzApfSx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBDcyhPcykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3PU9zLHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoWXMpLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdz1Zcyx0Lmdlb0NvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHpzKEhzKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfSx0Lmdlb0NvbmljQ29uZm9ybWFsUmF3PUhzLHQuZ2VvQ29uaWNFcXVhbEFyZWE9THMsdC5nZW9Db25pY0VxdWFsQXJlYVJhdz1Scyx0Lmdlb0NvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4genMoWHMpLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9LHQuZ2VvQ29uaWNFcXVpZGlzdGFudFJhdz1Ycyx0Lmdlb0VxdWFsRWFydGg9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoUXMpLnNjYWxlKDE3Ny4xNTgpfSx0Lmdlb0VxdWFsRWFydGhSYXc9UXMsdC5nZW9FcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoanMpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3PWpzLHQuZ2VvR25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoSnMpLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9LHQuZ2VvR25vbW9uaWNSYXc9SnMsdC5nZW9JZGVudGl0eT1mdW5jdGlvbigpe3ZhciB0LG4sZSxyLGksbyxhPTEsdT0wLGY9MCxjPTEscz0xLGw9bWMsaD1udWxsLGQ9bWM7ZnVuY3Rpb24gcCgpe3JldHVybiByPWk9bnVsbCxvfXJldHVybiBvPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIHImJmk9PT10P3I6cj1sKGQoaT10KSl9LHBvc3RjbGlwOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXIsaD10PW49ZT1udWxsLHAoKSk6ZH0sY2xpcEV4dGVudDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1udWxsPT1yPyhoPXQ9bj1lPW51bGwsbWMpOlpmKGg9K3JbMF1bMF0sdD0rclswXVsxXSxuPStyWzFdWzBdLGU9K3JbMV1bMV0pLHAoKSk6bnVsbD09aD9udWxsOltbaCx0XSxbbixlXV19LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUtzKChhPSt0KSpjLGEqcyx1LGYpLHAoKSk6YX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUtzKGEqYyxhKnMsdT0rdFswXSxmPSt0WzFdKSxwKCkpOlt1LGZdfSxyZWZsZWN0WDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcyhhKihjPXQ/LTE6MSksYSpzLHUsZikscCgpKTpjPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUtzKGEqYyxhKihzPXQ/LTE6MSksdSxmKSxwKCkpOnM8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHhzKG8sdCxuKX0sZml0U2l6ZTpmdW5jdGlvbih0LG4pe3JldHVybiB3cyhvLHQsbil9LGZpdFdpZHRoOmZ1bmN0aW9uKHQsbil7cmV0dXJuIE1zKG8sdCxuKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIEFzKG8sdCxuKX19fSx0Lmdlb1Byb2plY3Rpb249Q3MsdC5nZW9Qcm9qZWN0aW9uTXV0YXRvcj1Qcyx0Lmdlb01lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIEZzKEJzKS5zY2FsZSg5NjEvQmEpfSx0Lmdlb01lcmNhdG9yUmF3PUJzLHQuZ2VvTmF0dXJhbEVhcnRoMT1mdW5jdGlvbigpe3JldHVybiBDcyh0bCkuc2NhbGUoMTc1LjI5NSl9LHQuZ2VvTmF0dXJhbEVhcnRoMVJhdz10bCx0Lmdlb09ydGhvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBDcyhubCkuc2NhbGUoMjQ5LjUpLmNsaXBBbmdsZSg5MCtEYSl9LHQuZ2VvT3J0aG9ncmFwaGljUmF3PW5sLHQuZ2VvU3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBDcyhlbCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX0sdC5nZW9TdGVyZW9ncmFwaGljUmF3PWVsLHQuZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9RnMocmwpLG49dC5jZW50ZXIsZT10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbLXRbMV0sdFswXV0pOlsodD1uKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1lKCkpWzBdLHRbMV0sdFsyXS05MF19LGUoWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfSx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdz1ybCx0Lmdlb1JvdGF0aW9uPVJmLHQuZ2VvU3RyZWFtPXN1LHQuZ2VvVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06X3ModCl9fSx0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1pbCxuPTEsZT0xLHI9ITE7ZnVuY3Rpb24gaShpKXt2YXIgbyxhPTA7aS5lYWNoQWZ0ZXIoZnVuY3Rpb24obil7dmFyIGU9bi5jaGlsZHJlbjtlPyhuLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKG9sLDApL3QubGVuZ3RofShlKSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UoYWwsMCl9KGUpKToobi54PW8/YSs9dChuLG8pOjAsbi55PTAsbz1uKX0pO3ZhciB1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbjtuPXQuY2hpbGRyZW47KXQ9blswXTtyZXR1cm4gdH0oaSksZj1mdW5jdGlvbih0KXtmb3IodmFyIG47bj10LmNoaWxkcmVuOyl0PW5bbi5sZW5ndGgtMV07cmV0dXJuIHR9KGkpLGM9dS54LXQodSxmKS8yLHM9Zi54K3QoZix1KS8yO3JldHVybiBpLmVhY2hBZnRlcihyP2Z1bmN0aW9uKHQpe3QueD0odC54LWkueCkqbix0Lnk9KGkueS10LnkpKmV9OmZ1bmN0aW9uKHQpe3QueD0odC54LWMpLyhzLWMpKm4sdC55PSgxLShpLnk/dC55L2kueToxKSkqZX0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsbj0rdFswXSxlPSt0WzFdLGkpOnI/bnVsbDpbbixlXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxuPSt0WzBdLGU9K3RbMV0saSk6cj9bbixlXTpudWxsfSxpfSx0LmhpZXJhcmNoeT1mbCx0LnBhY2s9ZnVuY3Rpb24oKXt2YXIgdD1udWxsLG49MSxlPTEscj1FbDtmdW5jdGlvbiBpKGkpe3JldHVybiBpLng9bi8yLGkueT1lLzIsdD9pLmVhY2hCZWZvcmUoUGwodCkpLmVhY2hBZnRlcih6bChyLC41KSkuZWFjaEJlZm9yZShSbCgxKSk6aS5lYWNoQmVmb3JlKFBsKENsKSkuZWFjaEFmdGVyKHpsKEVsLDEpKS5lYWNoQWZ0ZXIoemwocixpLnIvTWF0aC5taW4obixlKSkpLmVhY2hCZWZvcmUoUmwoTWF0aC5taW4obixlKS8oMippLnIpKSksaX1yZXR1cm4gaS5yYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bnVsbD09KGU9bik/bnVsbDpTbChlKSxpKTp0O3ZhciBlfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0sZT0rdFsxXSxpKTpbbixlXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6a2woK3QpLGkpOnJ9LGl9LHQucGFja1NpYmxpbmdzPWZ1bmN0aW9uKHQpe3JldHVybiBObCh0KSx0fSx0LnBhY2tFbmNsb3NlPXBsLHQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9MSxuPTEsZT0wLHI9ITE7ZnVuY3Rpb24gaShpKXt2YXIgbz1pLmhlaWdodCsxO3JldHVybiBpLngwPWkueTA9ZSxpLngxPXQsaS55MT1uL28saS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3IuY2hpbGRyZW4mJkRsKHIsci54MCx0KihyLmRlcHRoKzEpL24sci54MSx0KihyLmRlcHRoKzIpL24pO3ZhciBpPXIueDAsbz1yLnkwLGE9ci54MS1lLHU9ci55MS1lO2E8aSYmKGk9YT0oaSthKS8yKSx1PG8mJihvPXU9KG8rdSkvMiksci54MD1pLHIueTA9byxyLngxPWEsci55MT11fX0obixvKSksciYmaS5lYWNoQmVmb3JlKExsKSxpfXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEhdCxpKTpyfSxpLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2VbMF0sbj0rZVsxXSxpKTpbdCxuXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGkpOmV9LGl9LHQuc3RyYXRpZnk9ZnVuY3Rpb24oKXt2YXIgdD1ZbCxuPUJsO2Z1bmN0aW9uIGUoZSl7dmFyIHIsaSxvLGEsdSxmLGMscz1lLmxlbmd0aCxsPW5ldyBBcnJheShzKSxoPXt9O2ZvcihpPTA7aTxzOysraSlyPWVbaV0sdT1sW2ldPW5ldyBobChyKSxudWxsIT0oZj10KHIsaSxlKSkmJihmKz0iIikmJihoW2M9VWwrKHUuaWQ9ZildPWMgaW4gaD9PbDp1KTtmb3IoaT0wO2k8czsrK2kpaWYodT1sW2ldLG51bGwhPShmPW4oZVtpXSxpLGUpKSYmKGYrPSIiKSl7aWYoIShhPWhbVWwrZl0pKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitmKTtpZihhPT09T2wpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIrZik7YS5jaGlsZHJlbj9hLmNoaWxkcmVuLnB1c2godSk6YS5jaGlsZHJlbj1bdV0sdS5wYXJlbnQ9YX1lbHNle2lmKG8pdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO289dX1pZighbyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihvLnBhcmVudD1xbCxvLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tc30pLmVhY2hCZWZvcmUobGwpLG8ucGFyZW50PW51bGwscz4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gb31yZXR1cm4gZS5pZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1TbChuKSxlKTp0fSxlLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVNsKHQpLGUpOm59LGV9LHQudHJlZT1mdW5jdGlvbigpe3ZhciB0PUZsLG49MSxlPTEscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGY9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscixpLG8sYT1uZXcgR2wodCwwKSx1PVthXTtuPXUucG9wKCk7KWlmKHI9bi5fLmNoaWxkcmVuKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvPXIubGVuZ3RoKSxpPW8tMTtpPj0wOy0taSl1LnB1c2goZT1uLmNoaWxkcmVuW2ldPW5ldyBHbChyW2ldLGkpKSxlLnBhcmVudD1uO3JldHVybihhLnBhcmVudD1uZXcgR2wobnVsbCwwKSkuY2hpbGRyZW49W2FdLGF9KGkpO2lmKGYuZWFjaEFmdGVyKG8pLGYucGFyZW50Lm09LWYueixmLmVhY2hCZWZvcmUoYSkscilpLmVhY2hCZWZvcmUodSk7ZWxzZXt2YXIgYz1pLHM9aSxsPWk7aS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueDxjLngmJihjPXQpLHQueD5zLngmJihzPXQpLHQuZGVwdGg+bC5kZXB0aCYmKGw9dCl9KTt2YXIgaD1jPT09cz8xOnQoYyxzKS8yLGQ9aC1jLngscD1uLyhzLngraCtkKSx2PWUvKGwuZGVwdGh8fDEpO2kuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng9KHQueCtkKSpwLHQueT10LmRlcHRoKnZ9KX1yZXR1cm4gaX1mdW5jdGlvbiBvKG4pe3ZhciBlPW4uY2hpbGRyZW4scj1uLnBhcmVudC5jaGlsZHJlbixpPW4uaT9yW24uaS0xXTpudWxsO2lmKGUpeyFmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0wLHI9MCxpPXQuY2hpbGRyZW4sbz1pLmxlbmd0aDstLW8+PTA7KShuPWlbb10pLnorPWUsbi5tKz1lLGUrPW4ucysocis9bi5jKX0obik7dmFyIG89KGVbMF0ueitlW2UubGVuZ3RoLTFdLnopLzI7aT8obi56PWkueit0KG4uXyxpLl8pLG4ubT1uLnotbyk6bi56PW99ZWxzZSBpJiYobi56PWkueit0KG4uXyxpLl8pKTtuLnBhcmVudC5BPWZ1bmN0aW9uKG4sZSxyKXtpZihlKXtmb3IodmFyIGksbz1uLGE9bix1PWUsZj1vLnBhcmVudC5jaGlsZHJlblswXSxjPW8ubSxzPWEubSxsPXUubSxoPWYubTt1PUhsKHUpLG89SWwobyksdSYmbzspZj1JbChmKSwoYT1IbChhKSkuYT1uLChpPXUueitsLW8uei1jK3QodS5fLG8uXykpPjAmJihqbChYbCh1LG4sciksbixpKSxjKz1pLHMrPWkpLGwrPXUubSxjKz1vLm0saCs9Zi5tLHMrPWEubTt1JiYhSGwoYSkmJihhLnQ9dSxhLm0rPWwtcyksbyYmIUlsKGYpJiYoZi50PW8sZi5tKz1jLWgscj1uKX1yZXR1cm4gcn0obixpLG4ucGFyZW50LkF8fHJbMF0pfWZ1bmN0aW9uIGEodCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHUodCl7dC54Kj1uLHQueT10LmRlcHRoKmV9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMSxuPSt0WzBdLGU9K3RbMV0saSk6cj9udWxsOltuLGVdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEwLG49K3RbMF0sZT0rdFsxXSxpKTpyP1tuLGVdOm51bGx9LGl9LHQudHJlZW1hcD1mdW5jdGlvbigpe3ZhciB0PVpsLG49ITEsZT0xLHI9MSxpPVswXSxvPUVsLGE9RWwsdT1FbCxmPUVsLGM9RWw7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1lLHQueTE9cix0LmVhY2hCZWZvcmUobCksaT1bMF0sbiYmdC5lYWNoQmVmb3JlKExsKSx0fWZ1bmN0aW9uIGwobil7dmFyIGU9aVtuLmRlcHRoXSxyPW4ueDArZSxzPW4ueTArZSxsPW4ueDEtZSxoPW4ueTEtZTtsPHImJihyPWw9KHIrbCkvMiksaDxzJiYocz1oPShzK2gpLzIpLG4ueDA9cixuLnkwPXMsbi54MT1sLG4ueTE9aCxuLmNoaWxkcmVuJiYoZT1pW24uZGVwdGgrMV09byhuKS8yLHIrPWMobiktZSxzKz1hKG4pLWUsKGwtPXUobiktZSk8ciYmKHI9bD0ocitsKS8yKSwoaC09ZihuKS1lKTxzJiYocz1oPShzK2gpLzIpLHQobixyLHMsbCxoKSl9cmV0dXJuIHMucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ISF0LHMpOm59LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0WzFdLHMpOltlLHJdfSxzLnRpbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9U2wobikscyk6dH0scy5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3MucGFkZGluZ0lubmVyKHQpLnBhZGRpbmdPdXRlcih0KTpzLnBhZGRpbmdJbm5lcigpfSxzLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmtsKCt0KSxzKTpvfSxzLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9zLnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6cy5wYWRkaW5nVG9wKCl9LHMucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmtsKCt0KSxzKTphfSxzLnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmtsKCt0KSxzKTp1fSxzLnBhZGRpbmdCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6Zn0scy5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmtsKCt0KSxzKTpjfSxzfSx0LnRyZWVtYXBCaW5hcnk9ZnVuY3Rpb24odCxuLGUscixpKXt2YXIgbyxhLHU9dC5jaGlsZHJlbixmPXUubGVuZ3RoLGM9bmV3IEFycmF5KGYrMSk7Zm9yKGNbMF09YT1vPTA7bzxmOysrbyljW28rMV09YSs9dVtvXS52YWx1ZTshZnVuY3Rpb24gdChuLGUscixpLG8sYSxmKXtpZihuPj1lLTEpe3ZhciBzPXVbbl07cmV0dXJuIHMueDA9aSxzLnkwPW8scy54MT1hLHZvaWQocy55MT1mKX1mb3IodmFyIGw9Y1tuXSxoPXIvMitsLGQ9bisxLHA9ZS0xO2Q8cDspe3ZhciB2PWQrcD4+PjE7Y1t2XTxoP2Q9disxOnA9dn1oLWNbZC0xXTxjW2RdLWgmJm4rMTxkJiYtLWQ7dmFyIGc9Y1tkXS1sLHk9ci1nO2lmKGEtaT5mLW8pe3ZhciBfPShpKnkrYSpnKS9yO3QobixkLGcsaSxvLF8sZiksdChkLGUseSxfLG8sYSxmKX1lbHNle3ZhciBiPShvKnkrZipnKS9yO3QobixkLGcsaSxvLGEsYiksdChkLGUseSxpLGIsYSxmKX19KDAsZix0LnZhbHVlLG4sZSxyLGkpfSx0LnRyZWVtYXBEaWNlPURsLHQudHJlZW1hcFNsaWNlPVZsLHQudHJlZW1hcFNsaWNlRGljZT1mdW5jdGlvbih0LG4sZSxyLGkpeygxJnQuZGVwdGg/Vmw6RGwpKHQsbixlLHIsaSl9LHQudHJlZW1hcFNxdWFyaWZ5PVpsLHQudHJlZW1hcFJlc3F1YXJpZnk9UWwsdC5pbnRlcnBvbGF0ZT1tZSx0LmludGVycG9sYXRlQXJyYXk9ZGUsdC5pbnRlcnBvbGF0ZUJhc2lzPWVlLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1yZSx0LmludGVycG9sYXRlRGF0ZT1wZSx0LmludGVycG9sYXRlRGlzY3JldGU9ZnVuY3Rpb24odCl7dmFyIG49dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IoZSpuKSkpXX19LHQuaW50ZXJwb2xhdGVIdWU9ZnVuY3Rpb24odCxuKXt2YXIgZT1hZSgrdCwrbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuIG4tMzYwKk1hdGguZmxvb3Iobi8zNjApfX0sdC5pbnRlcnBvbGF0ZU51bWJlcj12ZSx0LmludGVycG9sYXRlT2JqZWN0PWdlLHQuaW50ZXJwb2xhdGVSb3VuZD14ZSx0LmludGVycG9sYXRlU3RyaW5nPWJlLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9Q2UsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz1QZSx0LmludGVycG9sYXRlWm9vbT1xZSx0LmludGVycG9sYXRlUmdiPWNlLHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz1sZSx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9aGUsdC5pbnRlcnBvbGF0ZUhzbD1ZZSx0LmludGVycG9sYXRlSHNsTG9uZz1CZSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKHQsbil7dmFyIGU9ZmUoKHQ9VW4odCkpLmwsKG49VW4obikpLmwpLHI9ZmUodC5hLG4uYSksaT1mZSh0LmIsbi5iKSxvPWZlKHQub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5sPWUobiksdC5hPXIobiksdC5iPWkobiksdC5vcGFjaXR5PW8obiksdCsiIn19LHQuaW50ZXJwb2xhdGVIY2w9SWUsdC5pbnRlcnBvbGF0ZUhjbExvbmc9SGUsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1YZSx0LmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZz1HZSx0LnBpZWNld2lzZT1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGgtMSxpPW5bMF0sbz1uZXcgQXJyYXkocjwwPzA6cik7ZTxyOylvW2VdPXQoaSxpPW5bKytlXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPU1hdGgubWF4KDAsTWF0aC5taW4oci0xLE1hdGguZmxvb3IodCo9cikpKTtyZXR1cm4gb1tuXSh0LW4pfX0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZVtyXT10KHIvKG4tMSkpO3JldHVybiBlfSx0LnBhdGg9R2ksdC5wb2x5Z29uQXJlYT1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT0tMSxyPXQubGVuZ3RoLGk9dFtyLTFdLG89MDsrK2U8cjspbj1pLGk9dFtlXSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9LHQucG9seWdvbkNlbnRyb2lkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9LTEsaT10Lmxlbmd0aCxvPTAsYT0wLHU9dFtpLTFdLGY9MDsrK3I8aTspbj11LHU9dFtyXSxmKz1lPW5bMF0qdVsxXS11WzBdKm5bMV0sbys9KG5bMF0rdVswXSkqZSxhKz0oblsxXSt1WzFdKSplO3JldHVybltvLyhmKj0zKSxhL2ZdfSx0LnBvbHlnb25IdWxsPWZ1bmN0aW9uKHQpe2lmKChlPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBuLGUscj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSk7Zm9yKG49MDtuPGU7KytuKXJbbl09Wyt0W25dWzBdLCt0W25dWzFdLG5dO2ZvcihyLnNvcnQoSmwpLG49MDtuPGU7KytuKWlbbl09W3Jbbl1bMF0sLXJbbl1bMV1dO3ZhciBvPUtsKHIpLGE9S2woaSksdT1hWzBdPT09b1swXSxmPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKG49by5sZW5ndGgtMTtuPj0wOy0tbiljLnB1c2godFtyW29bbl1dWzJdXSk7Zm9yKG49K3U7bjxhLmxlbmd0aC1mOysrbiljLnB1c2godFtyW2Fbbl1dWzJdXSk7cmV0dXJuIGN9LHQucG9seWdvbkNvbnRhaW5zPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLHIsaT10Lmxlbmd0aCxvPXRbaS0xXSxhPW5bMF0sdT1uWzFdLGY9b1swXSxjPW9bMV0scz0hMSxsPTA7bDxpOysrbCllPShvPXRbbF0pWzBdLChyPW9bMV0pPnUhPWM+dSYmYTwoZi1lKSoodS1yKS8oYy1yKStlJiYocz0hcyksZj1lLGM9cjtyZXR1cm4gc30sdC5wb2x5Z29uTGVuZ3RoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9LTEsaT10Lmxlbmd0aCxvPXRbaS0xXSxhPW9bMF0sdT1vWzFdLGY9MDsrK3I8aTspbj1hLGU9dSxuLT1hPShvPXRbcl0pWzBdLGUtPXU9b1sxXSxmKz1NYXRoLnNxcnQobipuK2UqZSk7cmV0dXJuIGZ9LHQucXVhZHRyZWU9cmEsdC5yYW5kb21Vbmlmb3JtPW5oLHQucmFuZG9tTm9ybWFsPWVoLHQucmFuZG9tTG9nTm9ybWFsPXJoLHQucmFuZG9tQmF0ZXM9b2gsdC5yYW5kb21JcndpbkhhbGw9aWgsdC5yYW5kb21FeHBvbmVudGlhbD1haCx0LnNjYWxlQmFuZD1oaCx0LnNjYWxlUG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChuKXt2YXIgZT1uLmNvcHk7cmV0dXJuIG4ucGFkZGluZz1uLnBhZGRpbmdPdXRlcixkZWxldGUgbi5wYWRkaW5nSW5uZXIsZGVsZXRlIG4ucGFkZGluZ091dGVyLG4uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUoKSl9LG59KGhoKCkucGFkZGluZ0lubmVyKDEpKX0sdC5zY2FsZUlkZW50aXR5PWZ1bmN0aW9uIHQoKXt2YXIgbj1bMCwxXTtmdW5jdGlvbiBlKHQpe3JldHVybit0fXJldHVybiBlLmludmVydD1lLGUuZG9tYWluPWUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZmguY2FsbCh0LHBoKSxlKTpuLnNsaWNlKCl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKG4pfSx4aChlKX0sdC5zY2FsZUxpbmVhcj1mdW5jdGlvbiB0KCl7dmFyIG49bWgoZ2gsdmUpO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYmgobix0KCkpfSx4aChuKX0sdC5zY2FsZUxvZz1mdW5jdGlvbiBuKCl7dmFyIGU9bWgoTWgsQWgpLmRvbWFpbihbMSwxMF0pLHI9ZS5kb21haW4saT0xMCxvPVNoKDEwKSxhPU5oKDEwKTtmdW5jdGlvbiB1KCl7cmV0dXJuIG89U2goaSksYT1OaChpKSxyKClbMF08MCYmKG89RWgobyksYT1FaChhKSksZX1yZXR1cm4gZS5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LHUoKSk6aX0sZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksdSgpKTpyKCl9LGUudGlja3M9ZnVuY3Rpb24odCl7dmFyIG4sZT1yKCksdT1lWzBdLGY9ZVtlLmxlbmd0aC0xXTsobj1mPHUpJiYoaD11LHU9ZixmPWgpO3ZhciBjLHMsbCxoPW8odSksZD1vKGYpLHA9bnVsbD09dD8xMDordCx2PVtdO2lmKCEoaSUxKSYmZC1oPHApe2lmKGg9TWF0aC5yb3VuZChoKS0xLGQ9TWF0aC5yb3VuZChkKSsxLHU+MCl7Zm9yKDtoPGQ7KytoKWZvcihzPTEsYz1hKGgpO3M8aTsrK3MpaWYoISgobD1jKnMpPHUpKXtpZihsPmYpYnJlYWs7di5wdXNoKGwpfX1lbHNlIGZvcig7aDxkOysraClmb3Iocz1pLTEsYz1hKGgpO3M+PTE7LS1zKWlmKCEoKGw9YypzKTx1KSl7aWYobD5mKWJyZWFrO3YucHVzaChsKX19ZWxzZSB2PW0oaCxkLE1hdGgubWluKGQtaCxwKSkubWFwKGEpO3JldHVybiBuP3YucmV2ZXJzZSgpOnZ9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihuLHIpe2lmKG51bGw9PXImJihyPTEwPT09aT8iLjBlIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj10LmZvcm1hdChyKSksbj09PTEvMClyZXR1cm4gcjtudWxsPT1uJiYobj0xMCk7dmFyIHU9TWF0aC5tYXgoMSxpKm4vZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQvYShNYXRoLnJvdW5kKG8odCkpKTtyZXR1cm4gbippPGktLjUmJihuKj1pKSxuPD11P3IodCk6IiJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcih3aChyKCkse2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBhKE1hdGguZmxvb3Iobyh0KSkpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBhKE1hdGguY2VpbChvKHQpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYmgoZSxuKCkuYmFzZShpKSl9LGV9LHQuc2NhbGVPcmRpbmFsPWxoLHQuc2NhbGVJbXBsaWNpdD1zaCx0LnNjYWxlUG93PUNoLHQuc2NhbGVTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIENoKCkuZXhwb25lbnQoLjUpfSx0LnNjYWxlUXVhbnRpbGU9ZnVuY3Rpb24gdCgpe3ZhciBlPVtdLHI9W10sbz1bXTtmdW5jdGlvbiBhKCl7dmFyIHQ9MCxuPU1hdGgubWF4KDEsci5sZW5ndGgpO2ZvcihvPW5ldyBBcnJheShuLTEpOysrdDxuOylvW3QtMV09QShlLHQvbik7cmV0dXJuIHV9ZnVuY3Rpb24gdSh0KXtpZighaXNOYU4odD0rdCkpcmV0dXJuIHJbaShvLHQpXX1yZXR1cm4gdS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG49ci5pbmRleE9mKHQpO3JldHVybiBuPDA/W05hTixOYU5dOltuPjA/b1tuLTFdOmVbMF0sbjxvLmxlbmd0aD9vW25dOmVbZS5sZW5ndGgtMV1dfSx1LmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciByLGk9MCxvPXQubGVuZ3RoO2k8bzsrK2kpbnVsbD09KHI9dFtpXSl8fGlzTmFOKHI9K3IpfHxlLnB1c2gocik7cmV0dXJuIGUuc29ydChuKSxhKCl9LHUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Y2guY2FsbCh0KSxhKCkpOnIuc2xpY2UoKX0sdS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gby5zbGljZSgpfSx1LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihlKS5yYW5nZShyKX0sdX0sdC5zY2FsZVF1YW50aXplPWZ1bmN0aW9uIHQoKXt2YXIgbj0wLGU9MSxyPTEsbz1bLjVdLGE9WzAsMV07ZnVuY3Rpb24gdSh0KXtpZih0PD10KXJldHVybiBhW2kobyx0LDAscildfWZ1bmN0aW9uIGYoKXt2YXIgdD0tMTtmb3Iobz1uZXcgQXJyYXkocik7Kyt0PHI7KW9bdF09KCh0KzEpKmUtKHQtcikqbikvKHIrMSk7cmV0dXJuIHV9cmV0dXJuIHUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLGU9K3RbMV0sZigpKTpbbixlXX0sdS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0oYT1jaC5jYWxsKHQpKS5sZW5ndGgtMSxmKCkpOmEuc2xpY2UoKX0sdS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGk9YS5pbmRleE9mKHQpO3JldHVybiBpPDA/W05hTixOYU5dOmk8MT9bbixvWzBdXTppPj1yP1tvW3ItMV0sZV06W29baS0xXSxvW2ldXX0sdS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oW24sZV0pLnJhbmdlKGEpfSx4aCh1KX0sdC5zY2FsZVRocmVzaG9sZD1mdW5jdGlvbiB0KCl7dmFyIG49Wy41XSxlPVswLDFdLHI9MTtmdW5jdGlvbiBvKHQpe2lmKHQ8PXQpcmV0dXJuIGVbaShuLHQsMCxyKV19cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWNoLmNhbGwodCkscj1NYXRoLm1pbihuLmxlbmd0aCxlLmxlbmd0aC0xKSxvKTpuLnNsaWNlKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y2guY2FsbCh0KSxyPU1hdGgubWluKG4ubGVuZ3RoLGUubGVuZ3RoLTEpLG8pOmUuc2xpY2UoKX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIHI9ZS5pbmRleE9mKHQpO3JldHVybltuW3ItMV0sbltyXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKG4pLnJhbmdlKGUpfSxvfSx0LnNjYWxlVGltZT1mdW5jdGlvbigpe3JldHVybiBjdihjZCx1ZCxWaCxqaCxJaCxCaCxPaCxMaCx0LnRpbWVGb3JtYXQpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKX0sdC5zY2FsZVV0Yz1mdW5jdGlvbigpe3JldHVybiBjdihMZCx6ZCxfZCx2ZCxkZCxsZCxPaCxMaCx0LnV0Y0Zvcm1hdCkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfSx0LnNjYWxlU2VxdWVudGlhbD1mdW5jdGlvbiB0KG4pe3ZhciBlPTAscj0xLGk9MSxvPSExO2Z1bmN0aW9uIGEodCl7dmFyIHI9KHQtZSkqaTtyZXR1cm4gbihvP01hdGgubWF4KDAsTWF0aC5taW4oMSxyKSk6cil9cmV0dXJuIGEuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saT1lPT09cj8wOjEvKHItZSksYSk6W2Uscl19LGEuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISF0LGEpOm99LGEuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSk6bn0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQobikuZG9tYWluKFtlLHJdKS5jbGFtcChvKX0seGgoYSl9LHQuc2NhbGVEaXZlcmdpbmc9ZnVuY3Rpb24gdChuKXt2YXIgZT0wLHI9LjUsaT0xLG89MSxhPTEsdT0hMTtmdW5jdGlvbiBmKHQpe3ZhciBlPS41KygodD0rdCktcikqKHQ8cj9vOmEpO3JldHVybiBuKHU/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKTplKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxpPSt0WzJdLG89ZT09PXI/MDouNS8oci1lKSxhPXI9PT1pPzA6LjUvKGktciksZik6W2UscixpXX0sZi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXQsZik6dX0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxmKTpufSxmLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChuKS5kb21haW4oW2UscixpXSkuY2xhbXAodSl9LHhoKGYpfSx0LnNjaGVtZUNhdGVnb3J5MTA9bHYsdC5zY2hlbWVBY2NlbnQ9aHYsdC5zY2hlbWVEYXJrMj1kdix0LnNjaGVtZVBhaXJlZD1wdix0LnNjaGVtZVBhc3RlbDE9dnYsdC5zY2hlbWVQYXN0ZWwyPWd2LHQuc2NoZW1lU2V0MT15dix0LnNjaGVtZVNldDI9X3YsdC5zY2hlbWVTZXQzPWJ2LHQuaW50ZXJwb2xhdGVCckJHPXd2LHQuc2NoZW1lQnJCRz14dix0LmludGVycG9sYXRlUFJHbj1Bdix0LnNjaGVtZVBSR249TXYsdC5pbnRlcnBvbGF0ZVBpWUc9TnYsdC5zY2hlbWVQaVlHPVR2LHQuaW50ZXJwb2xhdGVQdU9yPUV2LHQuc2NoZW1lUHVPcj1Tdix0LmludGVycG9sYXRlUmRCdT1Ddix0LnNjaGVtZVJkQnU9a3YsdC5pbnRlcnBvbGF0ZVJkR3k9enYsdC5zY2hlbWVSZEd5PVB2LHQuaW50ZXJwb2xhdGVSZFlsQnU9THYsdC5zY2hlbWVSZFlsQnU9UnYsdC5pbnRlcnBvbGF0ZVJkWWxHbj1Vdix0LnNjaGVtZVJkWWxHbj1Edix0LmludGVycG9sYXRlU3BlY3RyYWw9T3YsdC5zY2hlbWVTcGVjdHJhbD1xdix0LmludGVycG9sYXRlQnVHbj1Cdix0LnNjaGVtZUJ1R249WXYsdC5pbnRlcnBvbGF0ZUJ1UHU9SXYsdC5zY2hlbWVCdVB1PUZ2LHQuaW50ZXJwb2xhdGVHbkJ1PWp2LHQuc2NoZW1lR25CdT1Idix0LmludGVycG9sYXRlT3JSZD1Hdix0LnNjaGVtZU9yUmQ9WHYsdC5pbnRlcnBvbGF0ZVB1QnVHbj0kdix0LnNjaGVtZVB1QnVHbj1Wdix0LmludGVycG9sYXRlUHVCdT1adix0LnNjaGVtZVB1QnU9V3YsdC5pbnRlcnBvbGF0ZVB1UmQ9SnYsdC5zY2hlbWVQdVJkPVF2LHQuaW50ZXJwb2xhdGVSZFB1PXRnLHQuc2NoZW1lUmRQdT1Ldix0LmludGVycG9sYXRlWWxHbkJ1PWVnLHQuc2NoZW1lWWxHbkJ1PW5nLHQuaW50ZXJwb2xhdGVZbEduPWlnLHQuc2NoZW1lWWxHbj1yZyx0LmludGVycG9sYXRlWWxPckJyPWFnLHQuc2NoZW1lWWxPckJyPW9nLHQuaW50ZXJwb2xhdGVZbE9yUmQ9ZmcsdC5zY2hlbWVZbE9yUmQ9dWcsdC5pbnRlcnBvbGF0ZUJsdWVzPXNnLHQuc2NoZW1lQmx1ZXM9Y2csdC5pbnRlcnBvbGF0ZUdyZWVucz1oZyx0LnNjaGVtZUdyZWVucz1sZyx0LmludGVycG9sYXRlR3JleXM9cGcsdC5zY2hlbWVHcmV5cz1kZyx0LmludGVycG9sYXRlUHVycGxlcz1nZyx0LnNjaGVtZVB1cnBsZXM9dmcsdC5pbnRlcnBvbGF0ZVJlZHM9X2csdC5zY2hlbWVSZWRzPXlnLHQuaW50ZXJwb2xhdGVPcmFuZ2VzPW1nLHQuc2NoZW1lT3Jhbmdlcz1iZyx0LmludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdD14Zyx0LmludGVycG9sYXRlUmFpbmJvdz1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIG49TWF0aC5hYnModC0uNSk7cmV0dXJuIEFnLmg9MzYwKnQtMTAwLEFnLnM9MS41LTEuNSpuLEFnLmw9LjgtLjkqbixBZysiIn0sdC5pbnRlcnBvbGF0ZVdhcm09d2csdC5pbnRlcnBvbGF0ZUNvb2w9TWcsdC5pbnRlcnBvbGF0ZVNpbmVib3c9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9KC41LXQpKk1hdGguUEksVGcucj0yNTUqKG49TWF0aC5zaW4odCkpKm4sVGcuZz0yNTUqKG49TWF0aC5zaW4odCtOZykpKm4sVGcuYj0yNTUqKG49TWF0aC5zaW4odCtTZykpKm4sVGcrIiJ9LHQuaW50ZXJwb2xhdGVWaXJpZGlzPWtnLHQuaW50ZXJwb2xhdGVNYWdtYT1DZyx0LmludGVycG9sYXRlSW5mZXJubz1QZyx0LmludGVycG9sYXRlUGxhc21hPXpnLHQuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBEdChXKHQpLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSl9LHQuY3JlYXRvcj1XLHQubG9jYWw9cXQsdC5tYXRjaGVyPXJ0LHQubW91c2U9RnQsdC5uYW1lc3BhY2U9JCx0Lm5hbWVzcGFjZXM9Vix0LmNsaWVudFBvaW50PUJ0LHQuc2VsZWN0PUR0LHQuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgUnQoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgUnQoW251bGw9PXQ/W106dF0senQpfSx0LnNlbGVjdGlvbj1MdCx0LnNlbGVjdG9yPVEsdC5zZWxlY3RvckFsbD1LLHQuc3R5bGU9bHQsdC50b3VjaD1JdCx0LnRvdWNoZXM9ZnVuY3Rpb24odCxuKXtudWxsPT1uJiYobj1ZdCgpLnRvdWNoZXMpO2Zvcih2YXIgZT0wLHI9bj9uLmxlbmd0aDowLGk9bmV3IEFycmF5KHIpO2U8cjsrK2UpaVtlXT1CdCh0LG5bZV0pO3JldHVybiBpfSx0LndpbmRvdz1zdCx0LmN1c3RvbUV2ZW50PUN0LHQuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9R2csbj1WZyxlPVJnKDApLHI9bnVsbCxpPSRnLG89V2csYT1aZyx1PW51bGw7ZnVuY3Rpb24gZigpe3ZhciBmLGMscyxsPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLUhnLHA9by5hcHBseSh0aGlzLGFyZ3VtZW50cyktSGcsdj1MZyhwLWQpLGc9cD5kO2lmKHV8fCh1PWY9R2koKSksaDxsJiYoYz1oLGg9bCxsPWMpLGg+RmcpaWYodj5qZy1GZyl1Lm1vdmVUbyhoKlVnKGQpLGgqWWcoZCkpLHUuYXJjKDAsMCxoLGQscCwhZyksbD5GZyYmKHUubW92ZVRvKGwqVWcocCksbCpZZyhwKSksdS5hcmMoMCwwLGwscCxkLGcpKTtlbHNle3ZhciB5LF8sYj1kLG09cCx4PWQsdz1wLE09dixBPXYsVD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLE49VD5GZyYmKHI/K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOkJnKGwqbCtoKmgpKSxTPU9nKExnKGgtbCkvMiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEU9UyxrPVM7aWYoTj5GZyl7dmFyIEM9WGcoTi9sKllnKFQpKSxQPVhnKE4vaCpZZyhUKSk7KE0tPTIqQyk+Rmc/KHgrPUMqPWc/MTotMSx3LT1DKTooTT0wLHg9dz0oZCtwKS8yKSwoQS09MipQKT5GZz8oYis9UCo9Zz8xOi0xLG0tPVApOihBPTAsYj1tPShkK3ApLzIpfXZhciB6PWgqVWcoYiksUj1oKllnKGIpLEw9bCpVZyh3KSxEPWwqWWcodyk7aWYoUz5GZyl7dmFyIFU9aCpVZyhtKSxxPWgqWWcobSksTz1sKlVnKHgpLFk9bCpZZyh4KTtpZih2PElnKXt2YXIgQj1NPkZnP2Z1bmN0aW9uKHQsbixlLHIsaSxvLGEsdSl7dmFyIGY9ZS10LGM9ci1uLHM9YS1pLGw9dS1vLGg9KHMqKG4tbyktbCoodC1pKSkvKGwqZi1zKmMpO3JldHVyblt0K2gqZixuK2gqY119KHosUixPLFksVSxxLEwsRCk6W0wsRF0sRj16LUJbMF0sST1SLUJbMV0sSD1VLUJbMF0saj1xLUJbMV0sWD0xL1lnKCgocz0oRipIK0kqaikvKEJnKEYqRitJKkkpKkJnKEgqSCtqKmopKSk+MT8wOnM8LTE/SWc6TWF0aC5hY29zKHMpKS8yKSxHPUJnKEJbMF0qQlswXStCWzFdKkJbMV0pO0U9T2coUywobC1HKS8oWC0xKSksaz1PZyhTLChoLUcpLyhYKzEpKX19QT5GZz9rPkZnPyh5PVFnKE8sWSx6LFIsaCxrLGcpLF89UWcoVSxxLEwsRCxoLGssZyksdS5tb3ZlVG8oeS5jeCt5LngwMSx5LmN5K3kueTAxKSxrPFM/dS5hcmMoeS5jeCx5LmN5LGssRGcoeS55MDEseS54MDEpLERnKF8ueTAxLF8ueDAxKSwhZyk6KHUuYXJjKHkuY3gseS5jeSxrLERnKHkueTAxLHkueDAxKSxEZyh5LnkxMSx5LngxMSksIWcpLHUuYXJjKDAsMCxoLERnKHkuY3kreS55MTEseS5jeCt5LngxMSksRGcoXy5jeStfLnkxMSxfLmN4K18ueDExKSwhZyksdS5hcmMoXy5jeCxfLmN5LGssRGcoXy55MTEsXy54MTEpLERnKF8ueTAxLF8ueDAxKSwhZykpKToodS5tb3ZlVG8oeixSKSx1LmFyYygwLDAsaCxiLG0sIWcpKTp1Lm1vdmVUbyh6LFIpLGw+RmcmJk0+Rmc/RT5GZz8oeT1RZyhMLEQsVSxxLGwsLUUsZyksXz1RZyh6LFIsTyxZLGwsLUUsZyksdS5saW5lVG8oeS5jeCt5LngwMSx5LmN5K3kueTAxKSxFPFM/dS5hcmMoeS5jeCx5LmN5LEUsRGcoeS55MDEseS54MDEpLERnKF8ueTAxLF8ueDAxKSwhZyk6KHUuYXJjKHkuY3gseS5jeSxFLERnKHkueTAxLHkueDAxKSxEZyh5LnkxMSx5LngxMSksIWcpLHUuYXJjKDAsMCxsLERnKHkuY3kreS55MTEseS5jeCt5LngxMSksRGcoXy5jeStfLnkxMSxfLmN4K18ueDExKSxnKSx1LmFyYyhfLmN4LF8uY3ksRSxEZyhfLnkxMSxfLngxMSksRGcoXy55MDEsXy54MDEpLCFnKSkpOnUuYXJjKDAsMCxsLHcseCxnKTp1LmxpbmVUbyhMLEQpfWVsc2UgdS5tb3ZlVG8oMCwwKTtpZih1LmNsb3NlUGF0aCgpLGYpcmV0dXJuIHU9bnVsbCxmKyIifHxudWxsfXJldHVybiBmLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGU9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLUlnLzI7cmV0dXJuW1VnKHIpKmUsWWcocikqZV19LGYuaW5uZXJSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpSZygrbiksZik6dH0sZi5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTpufSxmLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTplfSxmLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6cn0sZi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOml9LGYuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6b30sZi5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTphfSxmLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09dD9udWxsOnQsZik6dX0sZn0sdC5hcmVhPXJ5LHQubGluZT1leSx0LnBpZT1mdW5jdGlvbigpe3ZhciB0PW95LG49aXksZT1udWxsLHI9UmcoMCksaT1SZyhqZyksbz1SZygwKTtmdW5jdGlvbiBhKGEpe3ZhciB1LGYsYyxzLGwsaD1hLmxlbmd0aCxkPTAscD1uZXcgQXJyYXkoaCksdj1uZXcgQXJyYXkoaCksZz0rci5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihqZyxNYXRoLm1heCgtamcsaS5hcHBseSh0aGlzLGFyZ3VtZW50cyktZykpLF89TWF0aC5taW4oTWF0aC5hYnMoeSkvaCxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj1fKih5PDA/LTE6MSk7Zm9yKHU9MDt1PGg7Kyt1KShsPXZbcFt1XT11XT0rdChhW3VdLHUsYSkpPjAmJihkKz1sKTtmb3IobnVsbCE9bj9wLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbih2W3RdLHZbZV0pfSk6bnVsbCE9ZSYmcC5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoYVt0XSxhW25dKX0pLHU9MCxjPWQ/KHktaCpiKS9kOjA7dTxoOysrdSxnPXMpZj1wW3VdLHM9ZysoKGw9dltmXSk+MD9sKmM6MCkrYix2W2ZdPXtkYXRhOmFbZl0saW5kZXg6dSx2YWx1ZTpsLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpzLHBhZEFuZ2xlOl99O3JldHVybiB2fXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UmcoK24pLGEpOnR9LGEuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxhKTpufSxhLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuPW51bGwsYSk6ZX0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGEpOnJ9LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxhKTpvfSxhfSx0LmFyZWFSYWRpYWw9bHksdC5yYWRpYWxBcmVhPWx5LHQubGluZVJhZGlhbD1zeSx0LnJhZGlhbExpbmU9c3ksdC5wb2ludFJhZGlhbD1oeSx0LmxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIGd5KHl5KX0sdC5saW5rVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gZ3koX3kpfSx0LmxpbmtSYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1neShieSk7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH0sdC5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1SZyhteSksbj1SZyg2NCksZT1udWxsO2Z1bmN0aW9uIHIoKXt2YXIgcjtpZihlfHwoZT1yPUdpKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcoZSwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIpcmV0dXJuIGU9bnVsbCxyKyIifHxudWxsfXJldHVybiByLnR5cGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpSZyhuKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCkscik6bn0sci5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDp0LHIpOmV9LHJ9LHQuc3ltYm9scz1VeSx0LnN5bWJvbENpcmNsZT1teSx0LnN5bWJvbENyb3NzPXh5LHQuc3ltYm9sRGlhbW9uZD1BeSx0LnN5bWJvbFNxdWFyZT1reSx0LnN5bWJvbFN0YXI9RXksdC5zeW1ib2xUcmlhbmdsZT1QeSx0LnN5bWJvbFd5ZT1EeSx0LmN1cnZlQmFzaXNDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCeSh0KX0sdC5jdXJ2ZUJhc2lzT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEZ5KHQpfSx0LmN1cnZlQmFzaXM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBZeSh0KX0sdC5jdXJ2ZUJ1bmRsZT1IeSx0LmN1cnZlQ2FyZGluYWxDbG9zZWQ9JHksdC5jdXJ2ZUNhcmRpbmFsT3Blbj1aeSx0LmN1cnZlQ2FyZGluYWw9R3ksdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9bl8sdC5jdXJ2ZUNhdG11bGxSb21PcGVuPXJfLHQuY3VydmVDYXRtdWxsUm9tPUt5LHQuY3VydmVMaW5lYXJDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpXyh0KX0sdC5jdXJ2ZUxpbmVhcj1LZyx0LmN1cnZlTW9ub3RvbmVYPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgY18odCl9LHQuY3VydmVNb25vdG9uZVk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzXyh0KX0sdC5jdXJ2ZU5hdHVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBoXyh0KX0sdC5jdXJ2ZVN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwXyh0LC41KX0sdC5jdXJ2ZVN0ZXBBZnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHBfKHQsMSl9LHQuY3VydmVTdGVwQmVmb3JlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcF8odCwwKX0sdC5zdGFjaz1mdW5jdGlvbigpe3ZhciB0PVJnKFtdKSxuPWdfLGU9dl8scj15XztmdW5jdGlvbiBpKGkpe3ZhciBvLGEsdT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmPWkubGVuZ3RoLGM9dS5sZW5ndGgscz1uZXcgQXJyYXkoYyk7Zm9yKG89MDtvPGM7KytvKXtmb3IodmFyIGwsaD11W29dLGQ9c1tvXT1uZXcgQXJyYXkoZikscD0wO3A8ZjsrK3ApZFtwXT1sPVswLCtyKGlbcF0saCxwLGkpXSxsLmRhdGE9aVtwXTtkLmtleT1ofWZvcihvPTAsYT1uKHMpO288YzsrK28pc1thW29dXS5pbmRleD1vO3JldHVybiBlKHMsYSksc31yZXR1cm4gaS5rZXlzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UmcoZHkuY2FsbChuKSksaSk6dH0saS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxpKTpyfSxpLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/Z186ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZyhkeS5jYWxsKHQpKSxpKTpufSxpLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P3ZfOnQsaSk6ZX0saX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LG4pe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIGUscixpLG89MCxhPXRbMF0ubGVuZ3RoO288YTsrK28pe2ZvcihpPWU9MDtlPHI7KytlKWkrPXRbZV1bb11bMV18fDA7aWYoaSlmb3IoZT0wO2U8cjsrK2UpdFtlXVtvXVsxXS89aX12Xyh0LG4pfX0sdC5zdGFja09mZnNldERpdmVyZ2luZz1mdW5jdGlvbih0LG4pe2lmKCh1PXQubGVuZ3RoKT4xKWZvcih2YXIgZSxyLGksbyxhLHUsZj0wLGM9dFtuWzBdXS5sZW5ndGg7ZjxjOysrZilmb3Iobz1hPTAsZT0wO2U8dTsrK2UpKGk9KHI9dFtuW2VdXVtmXSlbMV0tclswXSk+PTA/KHJbMF09byxyWzFdPW8rPWkpOmk8MD8oclsxXT1hLHJbMF09YSs9aSk6clswXT1vfSx0LnN0YWNrT2Zmc2V0Tm9uZT12Xyx0LnN0YWNrT2Zmc2V0U2lsaG91ZXR0ZT1mdW5jdGlvbih0LG4pe2lmKChlPXQubGVuZ3RoKT4wKXtmb3IodmFyIGUscj0wLGk9dFtuWzBdXSxvPWkubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHU9MDthPGU7KythKXUrPXRbYV1bcl1bMV18fDA7aVtyXVsxXSs9aVtyXVswXT0tdS8yfXZfKHQsbil9fSx0LnN0YWNrT2Zmc2V0V2lnZ2xlPWZ1bmN0aW9uKHQsbil7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShlPXRbblswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBlLHIsaSxvPTAsYT0xO2E8cjsrK2Epe2Zvcih2YXIgdT0wLGY9MCxjPTA7dTxpOysrdSl7Zm9yKHZhciBzPXRbblt1XV0sbD1zW2FdWzFdfHwwLGg9KGwtKHNbYS0xXVsxXXx8MCkpLzIsZD0wO2Q8dTsrK2Qpe3ZhciBwPXRbbltkXV07aCs9KHBbYV1bMV18fDApLShwW2EtMV1bMV18fDApfWYrPWwsYys9aCpsfWVbYS0xXVsxXSs9ZVthLTFdWzBdPW8sZiYmKG8tPWMvZil9ZVthLTFdWzFdKz1lW2EtMV1bMF09byx2Xyh0LG4pfX0sdC5zdGFja09yZGVyQXNjZW5kaW5nPV9fLHQuc3RhY2tPcmRlckRlc2NlbmRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIF9fKHQpLnJldmVyc2UoKX0sdC5zdGFja09yZGVySW5zaWRlT3V0PWZ1bmN0aW9uKHQpe3ZhciBuLGUscj10Lmxlbmd0aCxpPXQubWFwKGJfKSxvPWdfKHQpLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gaVtuXS1pW3RdfSksYT0wLHU9MCxmPVtdLGM9W107Zm9yKG49MDtuPHI7KytuKWU9b1tuXSxhPHU/KGErPWlbZV0sZi5wdXNoKGUpKToodSs9aVtlXSxjLnB1c2goZSkpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQoZil9LHQuc3RhY2tPcmRlck5vbmU9Z18sdC5zdGFja09yZGVyUmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gZ18odCkucmV2ZXJzZSgpfSx0LnRpbWVJbnRlcnZhbD1SaCx0LnRpbWVNaWxsaXNlY29uZD1MaCx0LnRpbWVNaWxsaXNlY29uZHM9RGgsdC51dGNNaWxsaXNlY29uZD1MaCx0LnV0Y01pbGxpc2Vjb25kcz1EaCx0LnRpbWVTZWNvbmQ9T2gsdC50aW1lU2Vjb25kcz1ZaCx0LnV0Y1NlY29uZD1PaCx0LnV0Y1NlY29uZHM9WWgsdC50aW1lTWludXRlPUJoLHQudGltZU1pbnV0ZXM9RmgsdC50aW1lSG91cj1JaCx0LnRpbWVIb3Vycz1IaCx0LnRpbWVEYXk9amgsdC50aW1lRGF5cz1YaCx0LnRpbWVXZWVrPVZoLHQudGltZVdlZWtzPXRkLHQudGltZVN1bmRheT1WaCx0LnRpbWVTdW5kYXlzPXRkLHQudGltZU1vbmRheT0kaCx0LnRpbWVNb25kYXlzPW5kLHQudGltZVR1ZXNkYXk9V2gsdC50aW1lVHVlc2RheXM9ZWQsdC50aW1lV2VkbmVzZGF5PVpoLHQudGltZVdlZG5lc2RheXM9cmQsdC50aW1lVGh1cnNkYXk9UWgsdC50aW1lVGh1cnNkYXlzPWlkLHQudGltZUZyaWRheT1KaCx0LnRpbWVGcmlkYXlzPW9kLHQudGltZVNhdHVyZGF5PUtoLHQudGltZVNhdHVyZGF5cz1hZCx0LnRpbWVNb250aD11ZCx0LnRpbWVNb250aHM9ZmQsdC50aW1lWWVhcj1jZCx0LnRpbWVZZWFycz1zZCx0LnV0Y01pbnV0ZT1sZCx0LnV0Y01pbnV0ZXM9aGQsdC51dGNIb3VyPWRkLHQudXRjSG91cnM9cGQsdC51dGNEYXk9dmQsdC51dGNEYXlzPWdkLHQudXRjV2Vlaz1fZCx0LnV0Y1dlZWtzPVRkLHQudXRjU3VuZGF5PV9kLHQudXRjU3VuZGF5cz1UZCx0LnV0Y01vbmRheT1iZCx0LnV0Y01vbmRheXM9TmQsdC51dGNUdWVzZGF5PW1kLHQudXRjVHVlc2RheXM9U2QsdC51dGNXZWRuZXNkYXk9eGQsdC51dGNXZWRuZXNkYXlzPUVkLHQudXRjVGh1cnNkYXk9d2QsdC51dGNUaHVyc2RheXM9a2QsdC51dGNGcmlkYXk9TWQsdC51dGNGcmlkYXlzPUNkLHQudXRjU2F0dXJkYXk9QWQsdC51dGNTYXR1cmRheXM9UGQsdC51dGNNb250aD16ZCx0LnV0Y01vbnRocz1SZCx0LnV0Y1llYXI9TGQsdC51dGNZZWFycz1EZCx0LnRpbWVGb3JtYXREZWZhdWx0TG9jYWxlPVFwLHQudGltZUZvcm1hdExvY2FsZT1ZZCx0Lmlzb0Zvcm1hdD1KcCx0Lmlzb1BhcnNlPUtwLHQubm93PWlyLHQudGltZXI9dXIsdC50aW1lckZsdXNoPWZyLHQudGltZW91dD1ocix0LmludGVydmFsPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj1uZXcgYXIsaT1uO3JldHVybiBudWxsPT1uPyhyLnJlc3RhcnQodCxuLGUpLHIpOihuPStuLGU9bnVsbD09ZT9pcigpOitlLHIucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksci5yZXN0YXJ0KG8saSs9bixlKSx0KGEpfSxuLGUpLHIpfSx0LnRyYW5zaXRpb249enIsdC5hY3RpdmU9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9dC5fX3RyYW5zaXRpb247aWYoaSlmb3IociBpbiBuPW51bGw9PW4/bnVsbDpuKyIiLGkpaWYoKGU9aVtyXSkuc3RhdGU+Z3ImJmUubmFtZT09PW4pcmV0dXJuIG5ldyBQcihbW3RdXSxsaSxuLCtyKTtyZXR1cm4gbnVsbH0sdC5pbnRlcnJ1cHQ9TnIsdC52b3Jvbm9pPWZ1bmN0aW9uKCl7dmFyIHQ9eF8sbj13XyxlPW51bGw7ZnVuY3Rpb24gcihyKXtyZXR1cm4gbmV3IGViKHIubWFwKGZ1bmN0aW9uKGUsaSl7dmFyIG89W01hdGgucm91bmQodChlLGkscikvS18pKktfLE1hdGgucm91bmQobihlLGkscikvS18pKktfXTtyZXR1cm4gby5pbmRleD1pLG8uZGF0YT1lLG99KSxlKX1yZXR1cm4gci5wb2x5Z29ucz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS5wb2x5Z29ucygpfSxyLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpLmxpbmtzKCl9LHIudHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpLnRyaWFuZ2xlcygpfSxyLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjptXygrbikscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bV8oK3QpLHIpOm59LHIuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDpbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSxyKTplJiZbW2VbMF1bMF0sZVswXVsxXV0sW2VbMV1bMF0sZVsxXVsxXV1dfSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOltbMCwwXSxbK3RbMF0sK3RbMV1dXSxyKTplJiZbZVsxXVswXS1lWzBdWzBdLGVbMV1bMV0tZVswXVsxXV19LHJ9LHQuem9vbT1mdW5jdGlvbigpe3ZhciBuLGUscj1zYixpPWxiLG89dmIsYT1kYix1PXBiLGY9WzAsMS8wXSxjPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9cWUsaD1bXSxkPUkoInN0YXJ0Iiwiem9vbSIsImVuZCIpLHA9NTAwLHY9MTUwLGc9MDtmdW5jdGlvbiB5KHQpe3QucHJvcGVydHkoIl9fem9vbSIsaGIpLm9uKCJ3aGVlbC56b29tIixBKS5vbigibW91c2Vkb3duLnpvb20iLFQpLm9uKCJkYmxjbGljay56b29tIixOKS5maWx0ZXIodSkub24oInRvdWNoc3RhcnQuem9vbSIsUykub24oInRvdWNobW92ZS56b29tIixFKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixrKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gXyh0LG4pe3JldHVybihuPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSxuKSkpPT09dC5rP3Q6bmV3IG9iKG4sdC54LHQueSl9ZnVuY3Rpb24gYih0LG4sZSl7dmFyIHI9blswXS1lWzBdKnQuayxpPW5bMV0tZVsxXSp0Lms7cmV0dXJuIHI9PT10LngmJmk9PT10Lnk/dDpuZXcgb2IodC5rLHIsaSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiB4KHQsbixlKXt0Lm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7dyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMscj13KHRoaXMsdCksbz1pLmFwcGx5KHRoaXMsdCksYT1lfHxtKG8pLHU9TWF0aC5tYXgob1sxXVswXS1vWzBdWzBdLG9bMV1bMV0tb1swXVsxXSksZj10aGlzLl9fem9vbSxjPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyx0KTpuLHM9bChmLmludmVydChhKS5jb25jYXQodS9mLmspLGMuaW52ZXJ0KGEpLmNvbmNhdCh1L2MuaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWM7ZWxzZXt2YXIgbj1zKHQpLGU9dS9uWzJdO3Q9bmV3IG9iKGUsYVswXS1uWzBdKmUsYVsxXS1uWzFdKmUpfXIuem9vbShudWxsLHQpfX0pfWZ1bmN0aW9uIHcodCxuKXtmb3IodmFyIGUscj0wLGk9aC5sZW5ndGg7cjxpOysrcilpZigoZT1oW3JdKS50aGF0PT09dClyZXR1cm4gZTtyZXR1cm4gbmV3IE0odCxuKX1mdW5jdGlvbiBNKHQsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPW4sdGhpcy5pbmRleD0tMSx0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PWkuYXBwbHkodCxuKX1mdW5jdGlvbiBBKCl7aWYoci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXcodGhpcyxhcmd1bWVudHMpLG49dGhpcy5fX3pvb20sZT1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sbi5rKk1hdGgucG93KDIsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksaT1GdCh0aGlzKTtpZih0LndoZWVsKXQubW91c2VbMF1bMF09PT1pWzBdJiZ0Lm1vdXNlWzBdWzFdPT09aVsxXXx8KHQubW91c2VbMV09bi5pbnZlcnQodC5tb3VzZVswXT1pKSksY2xlYXJUaW1lb3V0KHQud2hlZWwpO2Vsc2V7aWYobi5rPT09ZSlyZXR1cm47dC5tb3VzZT1baSxuLmludmVydChpKV0sTnIodGhpcyksdC5zdGFydCgpfWNiKCksdC53aGVlbD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC53aGVlbD1udWxsLHQuZW5kKCl9LHYpLHQuem9vbSgibW91c2UiLG8oYihfKG4sZSksdC5tb3VzZVswXSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxjKSl9fWZ1bmN0aW9uIFQoKXtpZighZSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuPXcodGhpcyxhcmd1bWVudHMpLGk9RHQodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uKCl7aWYoY2IoKSwhbi5tb3ZlZCl7dmFyIGU9dC5ldmVudC5jbGllbnRYLXUscj10LmV2ZW50LmNsaWVudFktZjtuLm1vdmVkPWUqZStyKnI+Z31uLnpvb20oIm1vdXNlIixvKGIobi50aGF0Ll9fem9vbSxuLm1vdXNlWzBdPUZ0KG4udGhhdCksbi5tb3VzZVsxXSksbi5leHRlbnQsYykpfSwhMCkub24oIm1vdXNldXAuem9vbSIsZnVuY3Rpb24oKXtpLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLEd0KHQuZXZlbnQudmlldyxuLm1vdmVkKSxjYigpLG4uZW5kKCl9LCEwKSxhPUZ0KHRoaXMpLHU9dC5ldmVudC5jbGllbnRYLGY9dC5ldmVudC5jbGllbnRZO1h0KHQuZXZlbnQudmlldyksZmIoKSxuLm1vdXNlPVthLHRoaXMuX196b29tLmludmVydChhKV0sTnIodGhpcyksbi5zdGFydCgpfX1mdW5jdGlvbiBOKCl7aWYoci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuPXRoaXMuX196b29tLGU9RnQodGhpcyksYT1uLmludmVydChlKSx1PW4uayoodC5ldmVudC5zaGlmdEtleT8uNToyKSxmPW8oYihfKG4sdSksZSxhKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKTtjYigpLHM+MD9EdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ocykuY2FsbCh4LGYsZSk6RHQodGhpcykuY2FsbCh5LnRyYW5zZm9ybSxmKX19ZnVuY3Rpb24gUygpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZSxpLG8sYSx1PXcodGhpcyxhcmd1bWVudHMpLGY9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxjPWYubGVuZ3RoO2ZvcihmYigpLGk9MDtpPGM7KytpKWE9W2E9SXQodGhpcyxmLChvPWZbaV0pLmlkZW50aWZpZXIpLHRoaXMuX196b29tLmludmVydChhKSxvLmlkZW50aWZpZXJdLHUudG91Y2gwP3UudG91Y2gxfHwodS50b3VjaDE9YSk6KHUudG91Y2gwPWEsZT0hMCk7aWYobiYmKG49Y2xlYXJUaW1lb3V0KG4pLCF1LnRvdWNoMSkpcmV0dXJuIHUuZW5kKCksdm9pZCgoYT1EdCh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpKSYmYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO2UmJihuPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuPW51bGx9LHApLE5yKHRoaXMpLHUuc3RhcnQoKSl9fWZ1bmN0aW9uIEUoKXt2YXIgZSxyLGksYSx1PXcodGhpcyxhcmd1bWVudHMpLGY9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxzPWYubGVuZ3RoO2ZvcihjYigpLG4mJihuPWNsZWFyVGltZW91dChuKSksZT0wO2U8czsrK2UpaT1JdCh0aGlzLGYsKHI9ZltlXSkuaWRlbnRpZmllciksdS50b3VjaDAmJnUudG91Y2gwWzJdPT09ci5pZGVudGlmaWVyP3UudG91Y2gwWzBdPWk6dS50b3VjaDEmJnUudG91Y2gxWzJdPT09ci5pZGVudGlmaWVyJiYodS50b3VjaDFbMF09aSk7aWYocj11LnRoYXQuX196b29tLHUudG91Y2gxKXt2YXIgbD11LnRvdWNoMFswXSxoPXUudG91Y2gwWzFdLGQ9dS50b3VjaDFbMF0scD11LnRvdWNoMVsxXSx2PSh2PWRbMF0tbFswXSkqdisodj1kWzFdLWxbMV0pKnYsZz0oZz1wWzBdLWhbMF0pKmcrKGc9cFsxXS1oWzFdKSpnO3I9XyhyLE1hdGguc3FydCh2L2cpKSxpPVsobFswXStkWzBdKS8yLChsWzFdK2RbMV0pLzJdLGE9WyhoWzBdK3BbMF0pLzIsKGhbMV0rcFsxXSkvMl19ZWxzZXtpZighdS50b3VjaDApcmV0dXJuO2k9dS50b3VjaDBbMF0sYT11LnRvdWNoMFsxXX11Lnpvb20oInRvdWNoIixvKGIocixpLGEpLHUuZXh0ZW50LGMpKX1mdW5jdGlvbiBrKCl7dmFyIG4scixpPXcodGhpcyxhcmd1bWVudHMpLG89dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxhPW8ubGVuZ3RoO2ZvcihmYigpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPW51bGx9LHApLG49MDtuPGE7KytuKXI9b1tuXSxpLnRvdWNoMCYmaS50b3VjaDBbMl09PT1yLmlkZW50aWZpZXI/ZGVsZXRlIGkudG91Y2gwOmkudG91Y2gxJiZpLnRvdWNoMVsyXT09PXIuaWRlbnRpZmllciYmZGVsZXRlIGkudG91Y2gxO2kudG91Y2gxJiYhaS50b3VjaDAmJihpLnRvdWNoMD1pLnRvdWNoMSxkZWxldGUgaS50b3VjaDEpLGkudG91Y2gwP2kudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChpLnRvdWNoMFswXSk6aS5lbmQoKX1yZXR1cm4geS50cmFuc2Zvcm09ZnVuY3Rpb24odCxuKXt2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQ7ZS5wcm9wZXJ0eSgiX196b29tIixoYiksdCE9PWU/eCh0LG4pOmUuaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLmVuZCgpfSl9LHkuc2NhbGVCeT1mdW5jdGlvbih0LG4pe3kuc2NhbGVUbyh0LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pfSl9LHkuc2NhbGVUbz1mdW5jdGlvbih0LG4pe3kudHJhbnNmb3JtKHQsZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlPXRoaXMuX196b29tLHI9bSh0KSxhPWUuaW52ZXJ0KHIpLHU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bjtyZXR1cm4gbyhiKF8oZSx1KSxyLGEpLHQsYyl9KX0seS50cmFuc2xhdGVCeT1mdW5jdGlvbih0LG4sZSl7eS50cmFuc2Zvcm0odCxmdW5jdGlvbigpe3JldHVybiBvKHRoaXMuX196b29tLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGMpfSl9LHkudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxuLGUpe3kudHJhbnNmb3JtKHQsZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPXRoaXMuX196b29tLGE9bSh0KTtyZXR1cm4gbyhhYi50cmFuc2xhdGUoYVswXSxhWzFdKS5zY2FsZShyLmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2Ygbj8tbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LW4sImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lKSx0LGMpfSl9LE0ucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5pbmRleD1oLnB1c2godGhpcyktMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPW4uaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1uLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPW4uaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1uLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoaC5zcGxpY2UodGhpcy5pbmRleCwxKSx0aGlzLmluZGV4PS0xLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7Q3QobmV3IGliKHksdCx0aGlzLnRoYXQuX196b29tKSxkLmFwcGx5LGQsW3QsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0seS53aGVlbERlbHRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cmIoK3QpLHkpOmF9LHkuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cmIoISF0KSx5KTpyfSx5LnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJiKCEhdCkseSk6dX0seS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyYihbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSkseSk6aX0seS5zY2FsZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZlswXT0rdFswXSxmWzFdPSt0WzFdLHkpOltmWzBdLGZbMV1dfSx5LnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oY1swXVswXT0rdFswXVswXSxjWzFdWzBdPSt0WzFdWzBdLGNbMF1bMV09K3RbMF1bMV0sY1sxXVsxXT0rdFsxXVsxXSx5KTpbW2NbMF1bMF0sY1swXVsxXV0sW2NbMV1bMF0sY1sxXVsxXV1dfSx5LmNvbnN0cmFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHkpOm99LHkuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QseSk6c30seS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LHkpOmx9LHkub249ZnVuY3Rpb24oKXt2YXIgdD1kLm9uLmFwcGx5KGQsYXJndW1lbnRzKTtyZXR1cm4gdD09PWQ/eTp0fSx5LmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9KHQ9K3QpKnQseSk6TWF0aC5zcXJ0KGcpfSx5fSx0Lnpvb21UcmFuc2Zvcm09dWIsdC56b29tSWRlbnRpdHk9YWIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSk7Cg=="></script>
<script src="data:application/javascript;base64,IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9uKGV4cG9ydHMscmVxdWlyZSgiZDMtc2VsZWN0aW9uIikscmVxdWlyZSgiZDMtZHJhZyIpKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiLCJkMy1zZWxlY3Rpb24iLCJkMy1kcmFnIl0sbik6bih0LmQzPXQuZDN8fHt9LHQuZDMsdC5kMyl9KHRoaXMsZnVuY3Rpb24odCxuLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsbil7cmV0dXJuIG49e2V4cG9ydHM6e319LHQobixuLmV4cG9ydHMpLG4uZXhwb3J0c31mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiB1KCl7cD1bXSxoPSIiLF8uYXR0cigiZCIsbnVsbCksbS5hdHRyKCJkIixudWxsKSxyLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0Ll9fbGFzc28ucG9zc2libGU9ITEsdC5fX2xhc3NvLnNlbGVjdGVkPSExLHQuX19sYXNzby5ob3ZlclNlbGVjdD0hMSx0Ll9fbGFzc28ubG9vcFNlbGVjdD0hMTt2YXIgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuX19sYXNzby5sYXNzb1BvaW50PVtNYXRoLnJvdW5kKG4ubGVmdCtuLndpZHRoLzIpLE1hdGgucm91bmQobi50b3Arbi5oZWlnaHQvMildfSkscyYmci5vbigibW91c2VvdmVyLmxhc3NvIixmdW5jdGlvbigpe3RoaXMuX19sYXNzby5ob3ZlclNlbGVjdD0hMH0pLGkuc3RhcnQoKX1mdW5jdGlvbiBsKCl7dmFyIHQsbjsidG91Y2htb3ZlIj09PWQzLmV2ZW50LnNvdXJjZUV2ZW50LnR5cGU/KHQ9ZDMuZXZlbnQuc291cmNlRXZlbnQudG91Y2hlc1swXS5jbGllbnRYLG49ZDMuZXZlbnQuc291cmNlRXZlbnQudG91Y2hlc1swXS5jbGllbnRZKToodD1kMy5ldmVudC5zb3VyY2VFdmVudC5jbGllbnRYLG49ZDMuZXZlbnQuc291cmNlRXZlbnQuY2xpZW50WSk7dmFyIHM9ZDMubW91c2UodGhpcylbMF0sdT1kMy5tb3VzZSh0aGlzKVsxXTsiIj09PWg/KGg9aCsiTSAiK3MrIiAiK3Usdj1bdCxuXSxkPVtzLHVdLGIuYXR0cigiY3giLHMpLmF0dHIoImN5Iix1KS5hdHRyKCJyIiw3KS5hdHRyKCJkaXNwbGF5IixudWxsKSk6aD1oKyIgTCAiK3MrIiAiK3UscC5wdXNoKFt0LG5dKTt2YXIgbD1NYXRoLnNxcnQoTWF0aC5wb3codC12WzBdLDIpK01hdGgucG93KG4tdlsxXSwyKSksZj0iTSAiK3MrIiAiK3UrIiBMICIrZFswXSsiICIrZFsxXTtfLmF0dHIoImQiLGgpLG0uYXR0cigiZCIsZiksYT1sPD1lLGEmJm8/bS5hdHRyKCJkaXNwbGF5IixudWxsKTptLmF0dHIoImRpc3BsYXkiLCJub25lIiksci5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24odCl7dC5fX2xhc3NvLmxvb3BTZWxlY3Q9ISghYXx8IW8pJiZjKHAsdC5fX2xhc3NvLmxhc3NvUG9pbnQpPDEsdC5fX2xhc3NvLnBvc3NpYmxlPXQuX19sYXNzby5ob3ZlclNlbGVjdHx8dC5fX2xhc3NvLmxvb3BTZWxlY3R9KSxpLmRyYXcoKX1mdW5jdGlvbiBmKCl7ci5vbigibW91c2VvdmVyLmxhc3NvIixudWxsKSxyLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0Ll9fbGFzc28uc2VsZWN0ZWQ9dC5fX2xhc3NvLnBvc3NpYmxlLHQuX19sYXNzby5wb3NzaWJsZT0hMX0pLF8uYXR0cigiZCIsbnVsbCksbS5hdHRyKCJkIixudWxsKSxiLmF0dHIoImRpc3BsYXkiLCJub25lIiksaS5lbmQoKX12YXIgaCx2LGQscCxnPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYXNzbyIpLF89Zy5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImRyYXduIiksbT1nLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibG9vcF9jbG9zZSIpLGI9Zy5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwib3JpZ2luIiksTT1kMy5kcmFnKCkub24oInN0YXJ0Iix1KS5vbigiZHJhZyIsbCkub24oImVuZCIsZik7bi5jYWxsKE0pfXZhciBuLHI9W10sZT03NSxvPSEwLGE9ITEscz0hMCxpPXtzdGFydDpmdW5jdGlvbigpe30sZHJhdzpmdW5jdGlvbigpe30sZW5kOmZ1bmN0aW9uKCl7fX07cmV0dXJuIHQuaXRlbXM9ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7cj1uO3ZhciBlPXIubm9kZXMoKTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX19sYXNzbz17cG9zc2libGU6ITEsc2VsZWN0ZWQ6ITF9fSksdH0sdC5wb3NzaWJsZUl0ZW1zPWZ1bmN0aW9uKCl7cmV0dXJuIHIuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19sYXNzby5wb3NzaWJsZX0pfSx0LnNlbGVjdGVkSXRlbXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2xhc3NvLnNlbGVjdGVkfSl9LHQubm90UG9zc2libGVJdGVtcz1mdW5jdGlvbigpe3JldHVybiByLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiF0aGlzLl9fbGFzc28ucG9zc2libGV9KX0sdC5ub3RTZWxlY3RlZEl0ZW1zPWZ1bmN0aW9uKCl7cmV0dXJuIHIuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX19sYXNzby5zZWxlY3RlZH0pfSx0LmNsb3NlUGF0aERpc3RhbmNlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC5jbG9zZVBhdGhTZWxlY3Q9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bj09PSEwLHQpOm99LHQuaXNQYXRoQ2xvc2VkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW49PT0hMCx0KTphfSx0LmhvdmVyU2VsZWN0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW49PT0hMCx0KTpzfSx0Lm9uPWZ1bmN0aW9uKG4scil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGk7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGlbbl07dmFyIGU9WyJzdGFydCIsImRyYXciLCJlbmQiXTtyZXR1cm4gZS5pbmRleE9mKG4pPi0xJiYoaVtuXT1yKSx0fSx0LnRhcmdldEFyZWE9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cix0KTpufSx0fXZhciBhPWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0LG4sZSl7dmFyIG89dCpuLGE9cip0LHM9YS10LGk9YS1zLHU9dC1pLGw9cipuLGY9bC1uLGM9bC1mLGg9bi1jLHY9by1pKmMsZD12LXUqYyxwPWQtaSpoLGc9dSpoLXA7cmV0dXJuIGU/KGVbMF09ZyxlWzFdPW8sZSk6W2csb119dC5leHBvcnRzPW47dmFyIHI9KyhNYXRoLnBvdygyLDI3KSsxKX0pLHM9ZShmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQsbil7dmFyIHI9dCtuLGU9ci10LG89ci1lLGE9bi1lLHM9dC1vLGk9cythO3JldHVybiBpP1tpLHJdOltyXX1mdW5jdGlvbiByKHQscil7dmFyIGU9MHx0Lmxlbmd0aCxvPTB8ci5sZW5ndGg7aWYoMT09PWUmJjE9PT1vKXJldHVybiBuKHRbMF0sclswXSk7dmFyIGEscyxpPWUrbyx1PW5ldyBBcnJheShpKSxsPTAsZj0wLGM9MCxoPU1hdGguYWJzLHY9dFtmXSxkPWgodikscD1yW2NdLGc9aChwKTtkPGc/KHM9dixmKz0xLGY8ZSYmKHY9dFtmXSxkPWgodikpKToocz1wLGMrPTEsYzxvJiYocD1yW2NdLGc9aChwKSkpLGY8ZSYmZDxnfHxjPj1vPyhhPXYsZis9MSxmPGUmJih2PXRbZl0sZD1oKHYpKSk6KGE9cCxjKz0xLGM8byYmKHA9cltjXSxnPWgocCkpKTtmb3IodmFyIF8sbSxiLE0seSx3PWErcyx4PXctYSxqPXMteCxFPWosQT13O2Y8ZSYmYzxvOylkPGc/KGE9dixmKz0xLGY8ZSYmKHY9dFtmXSxkPWgodikpKTooYT1wLGMrPTEsYzxvJiYocD1yW2NdLGc9aChwKSkpLHM9RSx3PWErcyx4PXctYSxqPXMteCxqJiYodVtsKytdPWopLF89QSt3LG09Xy1BLGI9Xy1tLE09dy1tLHk9QS1iLEU9eStNLEE9Xztmb3IoO2Y8ZTspYT12LHM9RSx3PWErcyx4PXctYSxqPXMteCxqJiYodVtsKytdPWopLF89QSt3LG09Xy1BLGI9Xy1tLE09dy1tLHk9QS1iLEU9eStNLEE9XyxmKz0xLGY8ZSYmKHY9dFtmXSk7Zm9yKDtjPG87KWE9cCxzPUUsdz1hK3MseD13LWEsaj1zLXgsaiYmKHVbbCsrXT1qKSxfPUErdyxtPV8tQSxiPV8tbSxNPXctbSx5PUEtYixFPXkrTSxBPV8sYys9MSxjPG8mJihwPXJbY10pO3JldHVybiBFJiYodVtsKytdPUUpLEEmJih1W2wrK109QSksbHx8KHVbbCsrXT0wKSx1Lmxlbmd0aD1sLHV9dC5leHBvcnRzPXJ9KSxpPWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0LG4scil7dmFyIGU9dCtuLG89ZS10LGE9ZS1vLHM9bi1vLGk9dC1hO3JldHVybiByPyhyWzBdPWkrcyxyWzFdPWUscik6W2krcyxlXX10LmV4cG9ydHM9bn0pLHU9ZShmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQsbil7dmFyIG89dC5sZW5ndGg7aWYoMT09PW8pe3ZhciBhPXIodFswXSxuKTtyZXR1cm4gYVswXT9hOlthWzFdXX12YXIgcz1uZXcgQXJyYXkoMipvKSxpPVsuMSwuMV0sdT1bLjEsLjFdLGw9MDtyKHRbMF0sbixpKSxpWzBdJiYoc1tsKytdPWlbMF0pO2Zvcih2YXIgZj0xO2Y8bzsrK2Ype3IodFtmXSxuLHUpO3ZhciBjPWlbMV07ZShjLHVbMF0saSksaVswXSYmKHNbbCsrXT1pWzBdKTt2YXIgaD11WzFdLHY9aVsxXSxkPWgrdixwPWQtaCxnPXYtcDtpWzFdPWQsZyYmKHNbbCsrXT1nKX1yZXR1cm4gaVsxXSYmKHNbbCsrXT1pWzFdKSwwPT09bCYmKHNbbCsrXT0wKSxzLmxlbmd0aD1sLHN9dmFyIHI9YSxlPWk7dC5leHBvcnRzPW59KSxsPWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0LG4pe3ZhciByPXQrbixlPXItdCxvPXItZSxhPW4tZSxzPXQtbyxpPXMrYTtyZXR1cm4gaT9baSxyXTpbcl19ZnVuY3Rpb24gcih0LHIpe3ZhciBlPTB8dC5sZW5ndGgsbz0wfHIubGVuZ3RoO2lmKDE9PT1lJiYxPT09bylyZXR1cm4gbih0WzBdLC1yWzBdKTt2YXIgYSxzLGk9ZStvLHU9bmV3IEFycmF5KGkpLGw9MCxmPTAsYz0wLGg9TWF0aC5hYnMsdj10W2ZdLGQ9aCh2KSxwPS1yW2NdLGc9aChwKTtkPGc/KHM9dixmKz0xLGY8ZSYmKHY9dFtmXSxkPWgodikpKToocz1wLGMrPTEsYzxvJiYocD0tcltjXSxnPWgocCkpKSxmPGUmJmQ8Z3x8Yz49bz8oYT12LGYrPTEsZjxlJiYodj10W2ZdLGQ9aCh2KSkpOihhPXAsYys9MSxjPG8mJihwPS1yW2NdLGc9aChwKSkpO2Zvcih2YXIgXyxtLGIsTSx5LHc9YStzLHg9dy1hLGo9cy14LEU9aixBPXc7ZjxlJiZjPG87KWQ8Zz8oYT12LGYrPTEsZjxlJiYodj10W2ZdLGQ9aCh2KSkpOihhPXAsYys9MSxjPG8mJihwPS1yW2NdLGc9aChwKSkpLHM9RSx3PWErcyx4PXctYSxqPXMteCxqJiYodVtsKytdPWopLF89QSt3LG09Xy1BLGI9Xy1tLE09dy1tLHk9QS1iLEU9eStNLEE9Xztmb3IoO2Y8ZTspYT12LHM9RSx3PWErcyx4PXctYSxqPXMteCxqJiYodVtsKytdPWopLF89QSt3LG09Xy1BLGI9Xy1tLE09dy1tLHk9QS1iLEU9eStNLEE9XyxmKz0xLGY8ZSYmKHY9dFtmXSk7Zm9yKDtjPG87KWE9cCxzPUUsdz1hK3MseD13LWEsaj1zLXgsaiYmKHVbbCsrXT1qKSxfPUErdyxtPV8tQSxiPV8tbSxNPXctbSx5PUEtYixFPXkrTSxBPV8sYys9MSxjPG8mJihwPS1yW2NdKTtyZXR1cm4gRSYmKHVbbCsrXT1FKSxBJiYodVtsKytdPUEpLGx8fCh1W2wrK109MCksdS5sZW5ndGg9bCx1fXQuZXhwb3J0cz1yfSksZj1lKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCxuKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLGU9MTtlPHQubGVuZ3RoOysrZSlmb3IodmFyIG89cltlLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAscz0wO2E8dC5sZW5ndGg7KythKWEhPT1uJiYob1tzKytdPXRbZV1bYV0pO3JldHVybiByfWZ1bmN0aW9uIHIodCl7Zm9yKHZhciBuPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7bltyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSluW3JdW2VdPVsibSIsZSwiWyIsdC1yLTEsIl0iXS5qb2luKCIiKX1yZXR1cm4gbn1mdW5jdGlvbiBlKHQpe3JldHVybiAxJnQ/Ii0iOiIifWZ1bmN0aW9uIG8odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bSgiLHRbMF0sIiwiLHRbMV0sIikiXS5qb2luKCIiKTt2YXIgbj10Lmxlbmd0aD4+MTtyZXR1cm5bInN1bSgiLG8odC5zbGljZSgwLG4pKSwiLCIsbyh0LnNsaWNlKG4pKSwiKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGkodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIildO2Zvcih2YXIgcj1bXSxhPTA7YTx0Lmxlbmd0aDsrK2Epci5wdXNoKFsic2NhbGUoIixvKGkobih0LGEpKSksIiwiLGUoYSksdFswXVthXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQpe2Zvcih2YXIgZT1bXSxhPVtdLHM9cih0KSx1PVtdLGw9MDtsPHQ7KytsKTA9PT0oMSZsKT9lLnB1c2guYXBwbHkoZSxpKG4ocyxsKSkpOmEucHVzaC5hcHBseShhLGkobihzLGwpKSksdS5wdXNoKCJtIitsKTt2YXIgZj1vKGUpLGM9byhhKSxoPSJvcmllbnRhdGlvbiIrdCsiRXhhY3QiLF89WyJmdW5jdGlvbiAiLGgsIigiLHUuam9pbigpLCIpe3ZhciBwPSIsZiwiLG49IixjLCIsZD1zdWIocCxuKTtyZXR1cm4gZFtkLmxlbmd0aC0xXTt9O3JldHVybiAiLGhdLmpvaW4oIiIpLG09bmV3IEZ1bmN0aW9uKCJzdW0iLCJwcm9kIiwic2NhbGUiLCJzdWIiLF8pO3JldHVybiBtKGQsdixwLGcpfWZ1bmN0aW9uIGModCl7dmFyIG49eFt0Lmxlbmd0aF07cmV0dXJuIG58fChuPXhbdC5sZW5ndGhdPWYodC5sZW5ndGgpKSxuLmFwcGx5KHZvaWQgMCx0KX1mdW5jdGlvbiBoKCl7Zm9yKDt4Lmxlbmd0aDw9XzspeC5wdXNoKGYoeC5sZW5ndGgpKTtmb3IodmFyIG49W10scj1bInNsb3ciXSxlPTA7ZTw9XzsrK2Upbi5wdXNoKCJhIitlKSxyLnB1c2goIm8iK2UpO2Zvcih2YXIgbz1bImZ1bmN0aW9uIGdldE9yaWVudGF0aW9uKCIsbi5qb2luKCksIil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Il0sZT0yO2U8PV87KytlKW8ucHVzaCgiY2FzZSAiLGUsIjpyZXR1cm4gbyIsZSwiKCIsbi5zbGljZSgwLGUpLmpvaW4oKSwiKTsiKTtvLnB1c2goIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gZ2V0T3JpZW50YXRpb24iKSxyLnB1c2goby5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO3QuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbY10uY29uY2F0KHgpKTtmb3IodmFyIGU9MDtlPD1fOysrZSl0LmV4cG9ydHNbZV09eFtlXX12YXIgdj1hLGQ9cyxwPXUsZz1sLF89NSxtPTEuMTEwMjIzMDI0NjI1MTU2NWUtMTYsYj0oMysxNiptKSptLE09KDcrNTYqbSkqbSx5PWYoMyksdz1mKDQpLHg9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG5bMF0tdFswXX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlLG89KHRbMV0tclsxXSkqKG5bMF0tclswXSksYT0odFswXS1yWzBdKSooblsxXS1yWzFdKSxzPW8tYTtpZihvPjApe2lmKGE8PTApcmV0dXJuIHM7ZT1vK2F9ZWxzZXtpZighKG88MCkpcmV0dXJuIHM7aWYoYT49MClyZXR1cm4gcztlPS0obythKX12YXIgaT1iKmU7cmV0dXJuIHM+PWl8fHM8PS1pP3M6eSh0LG4scil9LGZ1bmN0aW9uKHQsbixyLGUpe3ZhciBvPXRbMF0tZVswXSxhPW5bMF0tZVswXSxzPXJbMF0tZVswXSxpPXRbMV0tZVsxXSx1PW5bMV0tZVsxXSxsPXJbMV0tZVsxXSxmPXRbMl0tZVsyXSxjPW5bMl0tZVsyXSxoPXJbMl0tZVsyXSx2PWEqbCxkPXMqdSxwPXMqaSxnPW8qbCxfPW8qdSxtPWEqaSxiPWYqKHYtZCkrYyoocC1nKStoKihfLW0pLHk9KE1hdGguYWJzKHYpK01hdGguYWJzKGQpKSpNYXRoLmFicyhmKSsoTWF0aC5hYnMocCkrTWF0aC5hYnMoZykpKk1hdGguYWJzKGMpKyhNYXRoLmFicyhfKStNYXRoLmFicyhtKSkqTWF0aC5hYnMoaCkseD1NKnk7cmV0dXJuIGI+eHx8LWI+eD9iOncodCxuLHIsZSl9XTtoKCl9KSxjPWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0LG4pe2Zvcih2YXIgZT1uWzBdLG89blsxXSxhPXQubGVuZ3RoLHM9MSxpPWEsdT0wLGw9YS0xO3U8aTtsPXUrKyl7dmFyIGY9dFt1XSxjPXRbbF0saD1mWzFdLHY9Y1sxXTtpZih2PGgpe2lmKHY8byYmbzxoKXt2YXIgZD1yKGYsYyxuKTtpZigwPT09ZClyZXR1cm4gMDtzXj0wPGR8MH1lbHNlIGlmKG89PT1oKXt2YXIgcD10Wyh1KzEpJWFdLGc9cFsxXTtpZihoPGcpe3ZhciBkPXIoZixjLG4pO2lmKDA9PT1kKXJldHVybiAwO3NePTA8ZHwwfX19ZWxzZSBpZihoPHYpe2lmKGg8byYmbzx2KXt2YXIgZD1yKGYsYyxuKTtpZigwPT09ZClyZXR1cm4gMDtzXj1kPDB8MH1lbHNlIGlmKG89PT1oKXt2YXIgcD10Wyh1KzEpJWFdLGc9cFsxXTtpZihnPGgpe3ZhciBkPXIoZixjLG4pO2lmKDA9PT1kKXJldHVybiAwO3NePWQ8MHwwfX19ZWxzZSBpZihvPT09aCl7dmFyIF89TWF0aC5taW4oZlswXSxjWzBdKSxtPU1hdGgubWF4KGZbMF0sY1swXSk7aWYoMD09PXUpe2Zvcig7bD4wOyl7dmFyIGI9KGwrYS0xKSVhLE09dFtiXTtpZihNWzFdIT09bylicmVhazt2YXIgeT1NWzBdO189TWF0aC5taW4oXyx5KSxtPU1hdGgubWF4KG0seSksbD1ifWlmKDA9PT1sKXJldHVybiBfPD1lJiZlPD1tPzA6MTtpPWwrMX1mb3IodmFyIHc9dFsobCthLTEpJWFdWzFdO3UrMTxpOyl7dmFyIE09dFt1KzFdO2lmKE1bMV0hPT1vKWJyZWFrO3ZhciB5PU1bMF07Xz1NYXRoLm1pbihfLHkpLG09TWF0aC5tYXgobSx5KSx1Kz0xfWlmKF88PWUmJmU8PW0pcmV0dXJuIDA7dmFyIHg9dFsodSsxKSVhXVsxXTtlPF8mJnc8byE9eDxvJiYoc149MSl9fXJldHVybiAyKnMtMX10LmV4cG9ydHM9bjt2YXIgcj1mfSk7dC5sYXNzbz1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<link href="data:text/css,%2Egirafe%2C%2Egirafe%5Fcontainer%5Fstd%7Bmargin%2Dleft%3Aauto%3Bmargin%2Dright%3Aauto%7D%2Egirafe%5Fcontainer%5Fstd%7Bposition%3Arelative%3Btext%2Dalign%3Acenter%7D%2Egirafe%5Fcontainer%5Fie%7Bheight%3A0%7D%2Egirafe%5Fsvg%5Fie%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%7D%2Eggiraph%2Dtoolbar%7Bposition%3Aabsolute%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dcolor%3Ahsla%280%2C0%25%2C100%25%2C%2E3%29%3Bborder%2Dradius%3A5px%3Bpadding%2Dtop%3A2px%3Bopacity%3A0%3Btransition%3Aopacity%20%2E3s%20ease%200s%7D%2Eggiraph%2Dtoolbar%2Dtop%7Btext%2Dalign%3Acenter%3Btop%3A3px%3Bright%3A0%3Bleft%3A0%7D%2Eggiraph%2Dtoolbar%2Dtopleft%7Btext%2Dalign%3Aleft%3Btop%3A3px%3Bleft%3A3px%7D%2Eggiraph%2Dtoolbar%2Dtopright%7Btext%2Dalign%3Aright%3Btop%3A3px%3Bright%3A3px%7D%2Eggiraph%2Dtoolbar%2Dbottom%7Btext%2Dalign%3Acenter%3Bbottom%3A3px%3Bright%3A0%3Bleft%3A0%7D%2Eggiraph%2Dtoolbar%2Dbottomleft%7Btext%2Dalign%3Aleft%3Bleft%3A3px%3Bbottom%3A3px%7D%2Eggiraph%2Dtoolbar%2Dbottomright%7Btext%2Dalign%3Aright%3Bright%3A3px%3Bbottom%3A3px%7D%2Eggiraph%2Dtoolbar%2Dblock%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dright%3A10px%7D%2Eggiraph%2Dtoolbar%2Dicon%7Bposition%3Arelative%3Bcursor%3Apointer%3Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%2Dright%3A3px%7D%2Edrop%7Bstroke%3A%23e30c37%3Bfill%3A%23e30c37%7D%2Edrop%3Ahover%7Bstroke%3A%23333%3Bfill%3A%23333%7D%2Eneutral%7Bstroke%3A%23069%3Bfill%3A%23069%7D%2Eneutral%3Ahover%7Bstroke%3A%23333%3Bfill%3A%23333%7D%2Elasso%20path%7Bstroke%3A%23505050%3Bstroke%2Dwidth%3A2px%7D%2Elasso%20%2Edrawn%7Bfill%2Dopacity%3A%2E05%7D%2Elasso%20%2Eloop%5Fclose%7Bfill%3Anone%3Bstroke%2Ddasharray%3A4%2C4%7D%2Elasso%20%2Eorigin%7Bfill%3A%23333%3Bfill%2Dopacity%3A%2E5%7D" rel="stylesheet" />
<script src="data:application/javascript;base64,dmFyIGdnaXJhcGhqcz1mdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiBuKGkpe2lmKHRbaV0pcmV0dXJuIHRbaV0uZXhwb3J0czt2YXIgcz10W2ldPXtpOmksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtpXS5jYWxsKHMuZXhwb3J0cyxzLHMuZXhwb3J0cyxuKSxzLmw9ITAscy5leHBvcnRzfXJldHVybiBuLm09ZSxuLmM9dCxuLmQ9ZnVuY3Rpb24oZSx0LGkpe24ubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDppfSl9LG4ucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPW4oZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJiJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7aWYobi5yKGkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiYic3RyaW5nIiE9dHlwZW9mIGUpZm9yKHZhciBzIGluIGUpbi5kKGkscyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLHMpKTtyZXR1cm4gaX0sbi5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBuLmQodCwiYSIsdCksdH0sbi5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxuLnA9IiIsbihuLnM9Mil9KFtmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1kM30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaTshZnVuY3Rpb24oKXt2YXIgbj12b2lkIDAhPT10JiZ0fHx7fXx8dGhpc3x8d2luZG93O3ZvaWQgMD09PShpPWZ1bmN0aW9uKCl7cmV0dXJuIG59LmFwcGx5KHQsW10pKXx8KGUuZXhwb3J0cz1pKTt2YXIgcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHI9L3VybFwoWyInXT8oLis/KVsiJ10/XCkvLG89e3dvZmYyOiJmb250L3dvZmYyIix3b2ZmOiJmb250L3dvZmYiLG90ZjoiYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIix0dGY6ImFwcGxpY2F0aW9uL3gtZm9udC10dGYiLGVvdDoiYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QiLHNmbnQ6ImFwcGxpY2F0aW9uL2ZvbnQtc2ZudCIsc3ZnOiJpbWFnZS9zdmcreG1sIn0sYT1mdW5jdGlvbihlKXtpZighZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8ZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnR9KGUpKXRocm93IG5ldyBFcnJvcigiYW4gSFRNTEVsZW1lbnQgb3IgU1ZHRWxlbWVudCBpcyByZXF1aXJlZDsgZ290ICIrZSl9LGw9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUudmlld0JveCYmZS52aWV3Qm94LmJhc2VWYWwmJmUudmlld0JveC5iYXNlVmFsW25dfHxudWxsIT09dC5nZXRBdHRyaWJ1dGUobikmJiF0LmdldEF0dHJpYnV0ZShuKS5tYXRjaCgvJSQvKSYmcGFyc2VJbnQodC5nZXRBdHRyaWJ1dGUobikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW25dfHxwYXJzZUludCh0LnN0eWxlW25dKXx8cGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZSkuZ2V0UHJvcGVydHlWYWx1ZShuKSk7cmV0dXJuIHZvaWQgMD09PWl8fG51bGw9PT1pfHxpc05hTihwYXJzZUZsb2F0KGkpKT8wOml9LGM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXdpbmRvdy5hdG9iKGUuc3BsaXQoIiwiKVsxXSksbj1lLnNwbGl0KCIsIilbMF0uc3BsaXQoIjoiKVsxXS5zcGxpdCgiOyIpWzBdLGk9bmV3IEFycmF5QnVmZmVyKHQubGVuZ3RoKSxzPW5ldyBVaW50OEFycmF5KGkpLHI9MDtyPHQubGVuZ3RoO3IrKylzW3JdPXQuY2hhckNvZGVBdChyKTtyZXR1cm4gbmV3IEJsb2IoW2ldLHt0eXBlOm59KX0saD1mdW5jdGlvbihlLHQpe3ZhciBuPWUuY3NzVGV4dC5tYXRjaChyKSxpPW4mJm5bMV18fCIiO2lmKGkmJiFpLm1hdGNoKC9eZGF0YTovKSYmImFib3V0OmJsYW5rIiE9PWkpe3ZhciBzPWkuc3RhcnRzV2l0aCgiLi4vIik/dCsiLy4uLyIraTppLnN0YXJ0c1dpdGgoIi4vIik/dCsiLy4iK2k6aTtyZXR1cm57dGV4dDplLmNzc1RleHQsZm9ybWF0OmZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5rZXlzKG8pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmRleE9mKCIuIit0KT4wfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBvW2VdfSk7cmV0dXJuIHQ/dFswXTooY29uc29sZS5lcnJvcigiVW5rbm93biBmb250IGZvcm1hdCBmb3IgIitlKyIuIEZvbnRzIG1heSBub3QgYmUgd29ya2luZyBjb3JyZWN0bHkuIiksImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpfShzKSx1cmw6c319fSx1PWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbCgiaW1hZ2UiKSkubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJocmVmIil8fGUuZ2V0QXR0cmlidXRlKCJocmVmIik7cmV0dXJuIHQ/KGZ1bmN0aW9uKGUpe3JldHVybiBlJiYwPT09ZS5sYXN0SW5kZXhPZigiaHR0cCIsMCkmJi0xPT09ZS5sYXN0SW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdCl9KHQpJiYodCs9KC0xPT09dC5pbmRleE9mKCI/Iik/Ij8iOiImIikrInQ9IisobmV3IERhdGUpLnZhbHVlT2YoKSksbmV3IFByb21pc2UoZnVuY3Rpb24obixpKXt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxyPW5ldyBJbWFnZTtyLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLHIuc3JjPXQsci5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGkobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCAiK3QpKX0sci5vbmxvYWQ9ZnVuY3Rpb24oKXtzLndpZHRoPXIud2lkdGgscy5oZWlnaHQ9ci5oZWlnaHQscy5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShyLDAsMCksZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsImhyZWYiLHMudG9EYXRhVVJMKCJpbWFnZS9wbmciKSksbighMCl9fSkpOlByb21pc2UucmVzb2x2ZShudWxsKX0pKX0sZD17fSxmPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxuKXtpZihkW2UudXJsXSlyZXR1cm4gdChkW2UudXJsXSk7dmFyIGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2kuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXt2YXIgbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9IiIsbj1uZXcgVWludDhBcnJheShlKSxpPTA7aTxuLmJ5dGVMZW5ndGg7aSsrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUobltpXSk7cmV0dXJuIHdpbmRvdy5idG9hKHQpfShpLnJlc3BvbnNlKSxzPWUudGV4dC5yZXBsYWNlKHIsJ3VybCgiZGF0YTonK2UuZm9ybWF0KyI7YmFzZTY0LCIrbisnIiknKSsiXG4iO2RbZS51cmxdPXMsdChzKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgZm9udCBmcm9tOiAiK2UudXJsLG4pLGRbZS51cmxdPW51bGwsdChudWxsKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiQWJvcnRlZCBsb2FkaW5nIGZvbnQgZnJvbTogIitlLnVybCxuKSx0KG51bGwpfSksaS5vcGVuKCJHRVQiLGUudXJsKSxpLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLGkuc2VuZCgpfSl9KSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5qb2luKCIiKX0pfSx2PW51bGwscD1mdW5jdGlvbihlLHQpe3ZhciBuPXR8fHt9LGk9bi5zZWxlY3RvclJlbWFwLHM9bi5tb2RpZnlTdHlsZSxyPW4ubW9kaWZ5Q3NzLG89bi5mb250cyxhPXJ8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGk/aShlKTplKSsieyIrKHM/cyh0KTp0KSsifVxuIn0sbD1bXSxjPXZvaWQgMD09PW8sdT1vfHxbXTtyZXR1cm4odnx8KHY9QXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0cykubWFwKGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm57cnVsZXM6ZS5jc3NSdWxlcyxocmVmOmUuaHJlZn19Y2F0Y2godCl7cmV0dXJuIGNvbnNvbGUud2FybigiU3R5bGVzaGVldCBjb3VsZCBub3QgYmUgbG9hZGVkOiAiK2UuaHJlZix0KSx7fX19KSkpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5ydWxlcyxpPXQuaHJlZjtuJiZBcnJheS5mcm9tKG4pLmZvckVhY2goZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dC5zdHlsZSlpZihmdW5jdGlvbihlLHQpe2lmKHQpdHJ5e3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IodCl8fGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IodCl9Y2F0Y2goZSl7Y29uc29sZS53YXJuKCdJbnZhbGlkIENTUyBzZWxlY3RvciAiJyt0KyciJyxlKX19KGUsdC5zZWxlY3RvclRleHQpKWwucHVzaChhKHQuc2VsZWN0b3JUZXh0LHQuc3R5bGUuY3NzVGV4dCkpO2Vsc2UgaWYoYyYmdC5jc3NUZXh0Lm1hdGNoKC9eQGZvbnQtZmFjZS8pKXt2YXIgbj1oKHQsaSk7biYmdS5wdXNoKG4pfWVsc2UgbC5wdXNoKHQuY3NzVGV4dCl9KX0pLGYodSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gbC5qb2luKCJcbiIpK2V9KX07bi5wcmVwYXJlU3ZnPWZ1bmN0aW9uKGUsdCxuKXthKGUpO3ZhciBpPXR8fHt9LHI9aS5sZWZ0LG89dm9pZCAwPT09cj8wOnIsYz1pLnRvcCxoPXZvaWQgMD09PWM/MDpjLGQ9aS53aWR0aCxmPWkuaGVpZ2h0LHY9aS5zY2FsZSxnPXZvaWQgMD09PXY/MTp2LG09aS5yZXNwb25zaXZlLHk9dm9pZCAwIT09bSYmbTtyZXR1cm4gdShlKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGk9ZS5jbG9uZU5vZGUoITApLHI9KHR8fHt9KS5iYWNrZ3JvdW5kQ29sb3IsYT12b2lkIDA9PT1yPyJ0cmFuc3BhcmVudCI6cjtpLnN0eWxlLmJhY2tncm91bmRDb2xvcj1hO3ZhciBjPWZ1bmN0aW9uKGUsdCxuLGkpe2lmKCJzdmciPT09ZS50YWdOYW1lKXJldHVybnt3aWR0aDpufHxsKGUsdCwid2lkdGgiKSxoZWlnaHQ6aXx8bChlLHQsImhlaWdodCIpfTtpZihlLmdldEJCb3gpe3ZhciBzPWUuZ2V0QkJveCgpLHI9cy54LG89cy55O3JldHVybnt3aWR0aDpyK3Mud2lkdGgsaGVpZ2h0Om8rcy5oZWlnaHR9fX0oZSxpLGQsZiksdT1jLndpZHRoLHY9Yy5oZWlnaHQ7aWYoInN2ZyIhPT1lLnRhZ05hbWUpe2lmKCFlLmdldEJCb3gpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiQXR0ZW1wdGVkIHRvIHJlbmRlciBub24tU1ZHIGVsZW1lbnQiLGUpO2kuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGkuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKS5yZXBsYWNlKC90cmFuc2xhdGVcKC4qP1wpLywiIikpO3ZhciBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTttLmFwcGVuZENoaWxkKGkpLGk9bX1yZXR1cm4gaS5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxpLnNldEF0dHJpYnV0ZSgidmlld0JveCIsW28saCx1LHZdLmpvaW4oIiAiKSksaS5nZXRBdHRyaWJ1dGUoInhtbG5zIil8fGkuc2V0QXR0cmlidXRlTlMocywieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLGkuZ2V0QXR0cmlidXRlKCJ4bWxuczp4bGluayIpfHxpLnNldEF0dHJpYnV0ZU5TKHMsInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLHk/KGkucmVtb3ZlQXR0cmlidXRlKCJ3aWR0aCIpLGkucmVtb3ZlQXR0cmlidXRlKCJoZWlnaHQiKSxpLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSk6KGkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdSpnKSxpLnNldEF0dHJpYnV0ZSgiaGVpZ2h0Iix2KmcpKSxBcnJheS5mcm9tKGkucXVlcnlTZWxlY3RvckFsbCgiZm9yZWlnbk9iamVjdCA+ICoiKSkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmdldEF0dHJpYnV0ZSgieG1sbnMiKXx8ZS5zZXRBdHRyaWJ1dGVOUyhzLCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKX0pLHAoZSx0KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLHQuaW5uZXJIVE1MPSI8IVtDREFUQVtcbiIrZSsiXG5dXT4iO3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZnMiKTtzLmFwcGVuZENoaWxkKHQpLGkuaW5zZXJ0QmVmb3JlKHMsaS5maXJzdENoaWxkKTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmFwcGVuZENoaWxkKGkpO3ZhciBvPXIuaW5uZXJIVE1MLnJlcGxhY2UoL05TXGQrOmhyZWYvZ2ksJ3htbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmJyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pcmV0dXJue3NyYzpvLHdpZHRoOnUsaGVpZ2h0OnZ9O24obyx1LHYpfSl9KX0sbi5zdmdBc0RhdGFVcmk9ZnVuY3Rpb24oZSx0LGkpe2EoZSk7dmFyIHM9bi5wcmVwYXJlU3ZnKGUsdCkudGhlbihmdW5jdGlvbihlKXt2YXIgdD1lLnNyYztyZXR1cm4iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiK3dpbmRvdy5idG9hKGZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2csZnVuY3Rpb24oZSx0KXt2YXIgbj1TdHJpbmcuZnJvbUNoYXJDb2RlKCIweCIrdCk7cmV0dXJuIiUiPT09bj8iJTI1IjpufSkpfSgnPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWzwhRU5USVRZIG5ic3AgIiYjMTYwOyI+XT4nK3QpKX0pO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP3MudGhlbihpKTpzfSxuLnN2Z0FzUG5nVXJpPWZ1bmN0aW9uKGUsdCxpKXthKGUpO3ZhciBzPXR8fHt9LHI9cy5lbmNvZGVyVHlwZSxvPXZvaWQgMD09PXI/ImltYWdlL3BuZyI6cixsPXMuZW5jb2Rlck9wdGlvbnMsYz12b2lkIDA9PT1sPy44OmwsaD1zLmNhbnZnLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zcmMsbj1lLndpZHRoLHM9ZS5oZWlnaHQscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxhPXIuZ2V0Q29udGV4dCgiMmQiKSxsPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO3Iud2lkdGg9bipsLHIuaGVpZ2h0PXMqbCxyLnN0eWxlLndpZHRoPXIud2lkdGgrInB4IixyLnN0eWxlLmhlaWdodD1yLmhlaWdodCsicHgiLGEuc2V0VHJhbnNmb3JtKGwsMCwwLGwsMCwwKSxoP2gocix0KTphLmRyYXdJbWFnZSh0LDAsMCk7dmFyIHU9dm9pZCAwO3RyeXt1PXIudG9EYXRhVVJMKG8sYyl9Y2F0Y2goZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTZWN1cml0eUVycm9yJiZlIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcnx8IlNlY3VyaXR5RXJyb3IiPT09ZS5uYW1lKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlJlbmRlcmVkIFNWRyBpbWFnZXMgY2Fubm90IGJlIGRvd25sb2FkZWQgaW4gdGhpcyBicm93c2VyLiIpO3Rocm93IGV9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkodSksUHJvbWlzZS5yZXNvbHZlKHUpfTtyZXR1cm4gaD9uLnByZXBhcmVTdmcoZSx0KS50aGVuKHUpOm4uc3ZnQXNEYXRhVXJpKGUsdCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxuKXt2YXIgaT1uZXcgSW1hZ2U7aS5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdCh1KHtzcmM6aSx3aWR0aDppLndpZHRoLGhlaWdodDppLmhlaWdodH0pKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7bigiVGhlcmUgd2FzIGFuIGVycm9yIGxvYWRpbmcgdGhlIGRhdGEgVVJJIGFzIGFuIGltYWdlIG9uIHRoZSBmb2xsb3dpbmcgU1ZHXG4iK3dpbmRvdy5hdG9iKGUuc2xpY2UoMjYpKSsiT3BlbiB0aGUgZm9sbG93aW5nIGxpbmsgdG8gc2VlIGJyb3dzZXIncyBkaWFnbm9zaXNcbiIrZSl9LGkuc3JjPWV9KX0pfSxuLmRvd25sb2FkPWZ1bmN0aW9uKGUsdCl7aWYobmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYyh0KSxlKTtlbHNle3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZigiZG93bmxvYWQiaW4gbil7bi5kb3dubG9hZD1lLG4uc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChuKTt0cnl7dmFyIGk9Yyh0KSxzPVVSTC5jcmVhdGVPYmplY3RVUkwoaSk7bi5ocmVmPXMsbi5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3JldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMKHMpfSl9fWNhdGNoKGUpe2NvbnNvbGUud2FybigiVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgb2JqZWN0IFVSTHMuIEZhbGxpbmcgYmFjayB0byBzdHJpbmcgVVJMLiIpLG4uaHJlZj10fW4uY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG4pfWVsc2Ugd2luZG93Lm9wZW4odCwiX3RlbXAiLCJtZW51YmFyPW5vLHRvb2xiYXI9bm8sc3RhdHVzPW5vIil9fSxuLnNhdmVTdmc9ZnVuY3Rpb24oZSx0LGkpe2EoZSksbi5zdmdBc0RhdGFVcmkoZSxpfHx7fSxmdW5jdGlvbihlKXtyZXR1cm4gbi5kb3dubG9hZCh0LGUpfSl9LG4uc2F2ZVN2Z0FzUG5nPWZ1bmN0aW9uKGUsdCxpKXthKGUpLG4uc3ZnQXNQbmdVcmkoZSxpfHx7fSxmdW5jdGlvbihlKXtyZXR1cm4gbi5kb3dubG9hZCh0LGUpfSl9fSgpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oNCl9LGZ1bmN0aW9uKGUsdCxuKXt9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpO3ZhciBpPW4oMCk7ZnVuY3Rpb24gcygpe3ZhciBlLHQ9bmF2aWdhdG9yLnVzZXJBZ2VudCxuPXQubWF0Y2goLyhvcGVyYXxjaHJvbWV8c2FmYXJpfGZpcmVmb3h8bXNpZXx0cmlkZW50KD89XC8pKVwvP1xzKihcZCspL2kpfHxbXTtyZXR1cm4vdHJpZGVudC9pLnRlc3QoblsxXSk/IklFICIrKChlPS9cYnJ2WyA6XSsoXGQrKS9nLmV4ZWModCl8fFtdKVsxXXx8IiIpOiJDaHJvbWUiPT09blsxXSYmbnVsbCE9PShlPXQubWF0Y2goL1xiKE9QUnxFZGdlKVwvKFxkKykvKSk/ZS5zbGljZSgxKS5qb2luKCIgIikucmVwbGFjZSgiT1BSIiwiT3BlcmEiKToobj1uWzJdP1tuWzFdLG5bMl1dOltuYXZpZ2F0b3IuYXBwTmFtZSxuYXZpZ2F0b3IuYXBwVmVyc2lvbiwiLT8iXSxudWxsIT09KGU9dC5tYXRjaCgvdmVyc2lvblwvKFxkKykvaSkpJiZuLnNwbGljZSgxLDEsZVsxXSksbi5qb2luKCIgIikpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGUuY29uc3RydWN0b3IudG9TdHJpbmcoKS5pbmRleE9mKCJBcnJheSIpPi0xfXZhciBvPW4oMSk7ZnVuY3Rpb24gYShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaS5rZXksaSl9fXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4saSxzLHIsbyxhLGwpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuY29udGFpbmVyaWQ9dCx0aGlzLnN2Z2lkPW4sdGhpcy5jbHNOYW1lPWksdGhpcy5wb3NpdGlvbj1zLHRoaXMuem9vbUhhbmRsZXI9cix0aGlzLnNlbGVjdGlvbkhhbmRsZXI9byx0aGlzLnNhdmVhc3BuZz1hLHRoaXMucG5nbmFtZT1sfXJldHVybiBmdW5jdGlvbihlLHQsbil7dCYmYShlLnByb3RvdHlwZSx0KSxuJiZhKGUsbil9KGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoISh0aGlzLnpvb21IYW5kbGVyfHx0aGlzLnNlbGVjdGlvbkhhbmRsZXJ8fHRoaXMuc2F2ZWFzcG5nKSlyZXR1cm4hMTt2YXIgZT1pLnNlbGVjdCgiIyIrdGhpcy5jb250YWluZXJpZCsiIC5naXJhZmVfY29udGFpbmVyX3N0ZCIpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCh0aGlzLmNsc05hbWUsITApLmNsYXNzZWQodGhpcy5jbHNOYW1lKyItIit0aGlzLnBvc2l0aW9uLCEwKSx0PXRoaXM7aWYodGhpcy5zZWxlY3Rpb25IYW5kbGVyKXt2YXIgbj1lLmFwcGVuZCgiZGl2IikuY2xhc3NlZCh0aGlzLmNsc05hbWUrIi1ibG9jayIsITApLmNsYXNzZWQoInNoaW55b25seSIsITApO24uYXBwZW5kKCJhIikuY2xhc3NlZCh0aGlzLmNsc05hbWUrIi1pY29uIiwhMCkuY2xhc3NlZCgibmV1dHJhbCIsITApLmF0dHIoInRpdGxlIiwibGFzc28gc2VsZWN0aW9uIikub24oImNsaWNrIixmdW5jdGlvbigpe3Quc2VsZWN0aW9uSGFuZGxlci5sYXNzbyghMCl9KS5odG1sKGMubGFzc29fb24pLG4uYXBwZW5kKCJhIikuY2xhc3NlZCh0aGlzLmNsc05hbWUrIi1pY29uIiwhMCkuY2xhc3NlZCgiZHJvcCIsITApLmF0dHIoInRpdGxlIiwibGFzc28gZGVzZWxlY3Rpb24iKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dC5zZWxlY3Rpb25IYW5kbGVyLmxhc3NvKCExKX0pLmh0bWwoYy5sYXNzb19vZmYpfWlmKHRoaXMuem9vbUhhbmRsZXIpe3ZhciBzPWUuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKHRoaXMuY2xzTmFtZSsiLWJsb2NrIiwhMCk7cy5hcHBlbmQoImEiKS5jbGFzc2VkKHRoaXMuY2xzTmFtZSsiLWljb24iLCEwKS5jbGFzc2VkKCJuZXV0cmFsIiwhMCkuYXR0cigidGl0bGUiLCJwYW4tem9vbSByZXNldCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXt0Lnpvb21IYW5kbGVyLnpvb21JZGVudGl0eSgpfSkuaHRtbChjLnBhbl96b29tX3Jlc2V0KSxzLmFwcGVuZCgiYSIpLmNsYXNzZWQodGhpcy5jbHNOYW1lKyItaWNvbiIsITApLmNsYXNzZWQoIm5ldXRyYWwiLCEwKS5hdHRyKCJ0aXRsZSIsImFjdGl2YXRlIHBhbi16b29tIikub24oImNsaWNrIixmdW5jdGlvbigpe3Quem9vbUhhbmRsZXIuem9vbU9uKCl9KS5odG1sKGMuem9vbV9vbikscy5hcHBlbmQoImEiKS5jbGFzc2VkKHRoaXMuY2xzTmFtZSsiLWljb24iLCEwKS5jbGFzc2VkKCJkcm9wIiwhMCkuYXR0cigidGl0bGUiLCJkZWFjdGl2YXRlIHBhbi16b29tIikub24oImNsaWNrIixmdW5jdGlvbigpe3Quem9vbUhhbmRsZXIuem9vbU9mZigpfSkuaHRtbChjLnpvb21fb2ZmKX10aGlzLnNhdmVhc3BuZyYmZS5hcHBlbmQoImRpdiIpLmNsYXNzZWQodGhpcy5jbHNOYW1lKyItYmxvY2siLCEwKS5hcHBlbmQoImEiKS5jbGFzc2VkKHRoaXMuY2xzTmFtZSsiLWljb24iLCEwKS5jbGFzc2VkKCJuZXV0cmFsIiwhMCkuYXR0cigidGl0bGUiLCJkb3dubG9hZCBwbmciKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7InVuZGVmaW5lZCIhPXR5cGVvZiBQcm9taXNlJiYtMSE9PVByb21pc2UudG9TdHJpbmcoKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIik/by5zYXZlU3ZnQXNQbmcoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodC5zdmdpZCksdC5wbmduYW1lKyIucG5nIix7ZW5jb2Rlck9wdGlvbnM6MX0pOmNvbnNvbGUuZXJyb3IoIlRoaXMgbmF2aWdhdG9yIGRvZXMgbm90IHN1cHBvcnQgUHJvbWlzZXMiKX0pLmh0bWwoYy5zYXZlX2FzX3BuZyk7dmFyIHI9aS5zZWxlY3QoIiMiK3RoaXMuY29udGFpbmVyaWQpLm5vZGUoKTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHRoaXMpLHIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHRoaXMpLCEwfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1pLnNlbGVjdCgiIyIrdGhpcy5jb250YWluZXJpZCksdD1lLnNlbGVjdCgiLiIrdGhpcy5jbHNOYW1lKTt0cnl7ZS5ub2RlKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix0aGlzKSxlLm5vZGUoKS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcyl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX10cnl7dC5zZWxlY3RBbGwoIi4iK3RoaXMuY2xzTmFtZSsiLWljb24iKS5vbigiY2xpY2siLG51bGwpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9dC5yZW1vdmUoKX19LHtrZXk6ImhhbmRsZUV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlKXt0cnl7dmFyIHQ9aS5zZWxlY3QoIiMiK3RoaXMuY29udGFpbmVyaWQpLnNlbGVjdCgiLiIrdGhpcy5jbHNOYW1lKTsibW91c2VvdmVyIj09ZS50eXBlP3QudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLC44KToibW91c2VvdXQiPT1lLnR5cGUmJnQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fX1dKSxlfSgpLGM9e2xhc3NvX29uOiI8c3ZnIHdpZHRoPScxNXB0JyBoZWlnaHQ9JzE1cHQnIHZpZXdCb3g9JzAgMCAyMzAgMjMwJz48Zz48ZWxsaXBzZSByeT0nNjUuNScgcng9Jzg2LjUnIGN5PSc5NCcgY3g9JzExNS41JyBzdHJva2Utd2lkdGg9JzIwJyBmaWxsPSd0cmFuc3BhcmVudCcvPjxlbGxpcHNlIHJ5PScxMS41MDAwMDEnIHJ4PScxMC41JyBjeT0nMTUzJyBjeD0nOTEuNScgc3Ryb2tlLXdpZHRoPScyMCcgZmlsbD0ndHJhbnNwYXJlbnQnLz48bGluZSB5Mj0nMjEwLjUnIHgyPScxMDUnIHkxPScxNjQuNScgeDE9Jzk2JyBzdHJva2Utd2lkdGg9JzIwJy8+PC9nPjwvc3ZnPiIsbGFzc29fb2ZmOiI8c3ZnIHdpZHRoPScxNXB0JyBoZWlnaHQ9JzE1cHQnIHZpZXdCb3g9JzAgMCAyMzAgMjMwJz48Zz48ZWxsaXBzZSByeT0nNjUuNScgcng9Jzg2LjUnIGN5PSc5NCcgY3g9JzExNS41JyBzdHJva2Utd2lkdGg9JzIwJyBmaWxsPSd0cmFuc3BhcmVudCcvPjxlbGxpcHNlIHJ5PScxMS41MDAwMDEnIHJ4PScxMC41JyBjeT0nMTUzJyBjeD0nOTEuNScgc3Ryb2tlLXdpZHRoPScyMCcgZmlsbD0ndHJhbnNwYXJlbnQnLz48bGluZSB5Mj0nMjEwLjUnIHgyPScxMDUnIHkxPScxNjQuNScgeDE9Jzk2JyBzdHJva2Utd2lkdGg9JzIwJy8+PC9nPjwvc3ZnPiIscGFuX3pvb21fcmVzZXQ6Ijxzdmcgd2lkdGg9JzE1cHQnIGhlaWdodD0nMTVwdCcgdmlld0JveD0nMCAwIDUxMiA1MTInPjxnPjxwb2x5Z29uIHBvaW50cz0nMjc0LDIwOS43IDMzNy45LDE0NS45IDI4OCw5NiA0MTYsOTYgNDE2LDIyNCAzNjYuMSwxNzQuMSAzMDIuMywyMzggJy8+PHBvbHlnb24gcG9pbnRzPScyNzQsMzAyLjMgMzM3LjksMzY2LjEgMjg4LDQxNiA0MTYsNDE2IDQxNiwyODggMzY2LjEsMzM3LjkgMzAyLjMsMjc0Jy8+PHBvbHlnb24gcG9pbnRzPScyMzgsMzAyLjMgMTc0LjEsMzY2LjEgMjI0LDQxNiA5Niw0MTYgOTYsMjg4IDE0NS45LDMzNy45IDIwOS43LDI3NCcvPjxwb2x5Z29uIHBvaW50cz0nMjM4LDIwOS43IDE3NC4xLDE0NS45IDIyNCw5NiA5Niw5NiA5NiwyMjQgMTQ1LjksMTc0LjEgMjA5LjcsMjM4Jy8+PC9nPjxzdmc+Iix6b29tX29uOiI8c3ZnIHdpZHRoPScxNXB0JyBoZWlnaHQ9JzE1cHQnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJz48Zz48ZWxsaXBzZSByeT0nMTUwJyByeD0nMTUwJyBjeT0nMjEzJyBjeD0nMjAzLjUnIHN0cm9rZS13aWR0aD0nNTAnIGZpbGw9J3RyYW5zcGFyZW50Jy8+PGxpbmUgeTI9JzQ1NS41JyB4Mj0nNDE2JyB5MT0nMzMxLjUnIHgxPSczMDEnIHN0cm9rZS13aWR0aD0nNTAnLz48L2c+PC9zdmc+Iix6b29tX29mZjoiPHN2ZyB3aWR0aD0nMTVwdCcgaGVpZ2h0PScxNXB0JyB2aWV3Qm94PScwIDAgNTEyIDUxMic+PGc+PGVsbGlwc2Ugcnk9JzE1MCcgcng9JzE1MCcgY3k9JzIxMycgY3g9JzIwMy41JyBzdHJva2Utd2lkdGg9JzUwJyBmaWxsPSd0cmFuc3BhcmVudCcvPjxsaW5lIHkyPSc0NTUuNScgeDI9JzQxNicgeTE9JzMzMS41JyB4MT0nMzAxJyBzdHJva2Utd2lkdGg9JzUwJy8+PGxpbmUgeTI9JzQ1NScgeDI9JzAnIHkxPScwJyB4MT0nNDE2JyBzdHJva2Utd2lkdGg9JzMwJy8+PC9nPjwvc3ZnPiIsc2F2ZV9hc19wbmc6Ijxzdmcgd2lkdGg9JzE1cHQnIGhlaWdodD0nMTVwdCcgdmlld0JveD0nMCAwIDUxMiA1MTInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PGc+PHBvbHlnb24gcG9pbnRzPSc5NSAyNzUgOTUgNDE1IDQxNSA0MTUgNDE1IDI3NSAzNzUgMjc1IDM3NSAzODAgMTM1IDM4MCAxMzUgMjc1Jy8+PHBvbHlnb24gcG9pbnRzPScyMjAgMzAgMjIwIDI1MCAxNTAgMTc1IDE1MCAyNDUgMjUwIDM0NSAzNTAgMjQ1IDM1MCAxNzUgMjgwIDI1MCAyODAgMzAnLz48L2c+PC9zdmc+In07ZnVuY3Rpb24gaChlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaS5rZXksaSl9fXZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4saSxzKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmNvbnRhaW5lcmlkPXQsdGhpcy5zdmdpZD1uLHRoaXMubWluPWksdGhpcy5tYXg9cyx0aGlzLnpvb21lcj1udWxsfXJldHVybiBmdW5jdGlvbihlLHQsbil7dCYmaChlLnByb3RvdHlwZSx0KSxuJiZoKGUsbil9KGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISgxPT09dGhpcy5taW4mJnRoaXMubWF4PD0xKSYmKHRoaXMuem9vbWVyPWkuem9vbSgpLnNjYWxlRXh0ZW50KFt0aGlzLm1pbix0aGlzLm1heF0pLCEwKX19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy56b29tT2ZmKCksdGhpcy56b29tZXI9bnVsbH19LHtrZXk6Inpvb21PbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN2Z2lkO2kuc2VsZWN0KCIjIit0aGlzLmNvbnRhaW5lcmlkKS5jYWxsKHRoaXMuem9vbWVyLm9uKCJ6b29tIixmdW5jdGlvbigpe2kuc2VsZWN0KCIjIitlKyIgZyIpLmF0dHIoInRyYW5zZm9ybSIsaS5ldmVudC50cmFuc2Zvcm0pfSkpfX0se2tleToiem9vbUlkZW50aXR5Iix2YWx1ZTpmdW5jdGlvbigpe2kuc2VsZWN0KCIjIit0aGlzLmNvbnRhaW5lcmlkKS5jYWxsKHRoaXMuem9vbWVyLnRyYW5zZm9ybSxpLnpvb21JZGVudGl0eSl9fSx7a2V5OiJ6b29tT2ZmIix2YWx1ZTpmdW5jdGlvbigpe2kuc2VsZWN0KCIjIit0aGlzLmNvbnRhaW5lcmlkKS5jYWxsKHRoaXMuem9vbWVyLm9uKCJ6b29tIixudWxsKSl9fV0pLGV9KCk7ZnVuY3Rpb24gZChlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaS5rZXksaSl9fXZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4saSxzLHIsbyxhLGwsYyxoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnN2Z2lkPXQsdGhpcy5jbHNOYW1lPW4rIl8iK3RoaXMuc3ZnaWQsdGhpcy5vcGFjaXR5PWksdGhpcy5vZmZ4PXMsdGhpcy5vZmZ5PXIsdGhpcy51c2VjdXJzb3I9byx0aGlzLnVzZWZpbGw9YSx0aGlzLnVzZXN0cm9rZT1sLHRoaXMuZGVsYXlvdmVyPWMsdGhpcy5kZWxheW91dD1ofXJldHVybiBmdW5jdGlvbihlLHQsbil7dCYmZChlLnByb3RvdHlwZSx0KSxuJiZkKGUsbil9KGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9aS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpLnNlbGVjdEFsbCgiKlt0aXRsZV0iKTtpZihlLmVtcHR5KCkpcmV0dXJuITE7aS5zZWxlY3QoIi4iK3RoaXMuY2xzTmFtZSkuZW1wdHkoKSYmaS5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIix0aGlzLmNsc05hbWUpLGkuc2VsZWN0KCIuIit0aGlzLmNsc05hbWUpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoIm9wYWNpdHkiLDApO3ZhciB0PXRoaXM7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix0KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdCl9KSwhMH19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0cnl7aS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpLnNlbGVjdEFsbCgiKlt0aXRsZV0iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLGUpLHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixlKSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixlKX0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9aS5zZWxlY3QoIi4iK3RoaXMuY2xzTmFtZSkucmVtb3ZlKCl9fSx7a2V5OiJoYW5kbGVFdmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0LG4scyxyLG8sYSxsPWkuc2VsZWN0KCIuIit0aGlzLmNsc05hbWUpOyJtb3VzZW92ZXIiPT1lLnR5cGU/KHRoaXMudXNlZmlsbCYmbC5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJmaWxsIikpLHRoaXMudXNlc3Ryb2tlJiZsLnN0eWxlKCJib3JkZXItY29sb3IiLGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgic3Ryb2tlIikpLGwuaHRtbChlLnRhcmdldC5nZXRBdHRyaWJ1dGUoInRpdGxlIikpLGwuaHRtbChsLnRleHQoKSksbz1sLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuc2VsZWN0KCIjIit0aGlzLnN2Z2lkKS5ub2RlKCkucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLnVzZWN1cnNvcj8oKHM9KHQ9ZS5wYWdlWCt0aGlzLm9mZngpK28ud2lkdGgtKGEueCthLndpZHRoKSk+MCYmKHQtPXMpLChyPShuPWUucGFnZVkrdGhpcy5vZmZ5KStvLmhlaWdodC0oYS55K2EuaGVpZ2h0K3dpbmRvdy5wYWdlWU9mZnNldCkpPjAmJihuLT1yKSk6KHQ9dGhpcy5vZmZ4K2EubGVmdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ArYS55K3RoaXMub2ZmeSksbC5zdHlsZSgibGVmdCIsdCsicHgiKS5zdHlsZSgidG9wIixuKyJweCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmRlbGF5b3Zlcikuc3R5bGUoIm9wYWNpdHkiLHRoaXMub3BhY2l0eSkpOiJtb3VzZW1vdmUiPT1lLnR5cGU/KG89bC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1pLnNlbGVjdCgiIyIrdGhpcy5zdmdpZCkubm9kZSgpLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy51c2VjdXJzb3I/KChzPSh0PWUucGFnZVgrdGhpcy5vZmZ4KStvLndpZHRoLShhLngrYS53aWR0aCkpPjAmJih0LT1zKSwocj0obj1lLnBhZ2VZK3RoaXMub2ZmeSkrby5oZWlnaHQtKGEueSthLmhlaWdodCt3aW5kb3cucGFnZVlPZmZzZXQpKT4wJiYobi09cikpOih0PXRoaXMub2ZmeCthLmxlZnQsbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wK2EueSt0aGlzLm9mZnkpLGwuc3R5bGUoImxlZnQiLHQrInB4Iikuc3R5bGUoInRvcCIsbisicHgiKSk6Im1vdXNlb3V0Ij09ZS50eXBlJiZsLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmRlbGF5b3V0KS5zdHlsZSgib3BhY2l0eSIsMCl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19fV0pLGV9KCk7ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaS5rZXksaSl9fXZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4saSxzLHIsbyl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5zdmdpZD10LHRoaXMuY2xzTmFtZT1uKyJfIit0LHRoaXMuaW52Q2xzTmFtZT1pKyJfIit0LHRoaXMuYXR0ck5hbWU9cyx0aGlzLnNoaW55SW5wdXRJZD1yLHRoaXMuc2hpbnlNZXNzYWdlSWQ9byx0aGlzLmRhdGFIb3ZlcmVkPVtdfXJldHVybiBmdW5jdGlvbihlLHQsbil7dCYmdihlLnByb3RvdHlwZSx0KSxuJiZ2KGUsbil9KGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9aS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpLnNlbGVjdEFsbCgiKlsiK3RoaXMuYXR0ck5hbWUrIl0iKTtpZihlLmVtcHR5KCkpcmV0dXJuITE7dmFyIHQ9dGhpcztyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHQpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHQpfSksdGhpcy5zaGlueU1lc3NhZ2VJZCYmU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIodGhpcy5zaGlueU1lc3NhZ2VJZCxmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGU/dC5zZXRIb3ZlcmVkKFtlXSk6cihlKSYmdC5zZXRIb3ZlcmVkKGUpfSksITB9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dHJ5e2kuc2VsZWN0KCIjIit0aGlzLnN2Z2lkKS5zZWxlY3RBbGwoIipbIit0aGlzLmF0dHJOYW1lKyJdIikuZWFjaChmdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixlKSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixlKX0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9aWYodGhpcy5zaGlueU1lc3NhZ2VJZCl0cnl7U2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIodGhpcy5zaGlueU1lc3NhZ2VJZCxmdW5jdGlvbihlKXt9KX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfXRoaXMuZGF0YUhvdmVyZWQ9W119fSx7a2V5OiJoYW5kbGVFdmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dHJ5eyJtb3VzZW92ZXIiPT1lLnR5cGU/dGhpcy5zZXRIb3ZlcmVkKFtlLnRhcmdldC5nZXRBdHRyaWJ1dGUodGhpcy5hdHRyTmFtZSldKToibW91c2VvdXQiPT1lLnR5cGUmJnRoaXMuc2V0SG92ZXJlZChbXSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19fSx7a2V5OiJzZXRIb3ZlcmVkIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRhdGFIb3ZlcmVkPWUsdGhpcy5yZWZyZXNoSG92ZXJlZCgpLHRoaXMuc2hpbnlJbnB1dElkJiZTaGlueS5vbklucHV0Q2hhbmdlKHRoaXMuc2hpbnlJbnB1dElkLHRoaXMuZGF0YUhvdmVyZWQpfX0se2tleToicmVmcmVzaEhvdmVyZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9aS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpO2Uuc2VsZWN0QWxsKCIqWyIrdGhpcy5hdHRyTmFtZSsiXS4iK3RoaXMuY2xzTmFtZSkuY2xhc3NlZCh0aGlzLmNsc05hbWUsITEpLHRoaXMuaW52Q2xzTmFtZSYmZS5zZWxlY3RBbGwoIipbIit0aGlzLmF0dHJOYW1lKyJdLiIrdGhpcy5pbnZDbHNOYW1lKS5jbGFzc2VkKHRoaXMuaW52Q2xzTmFtZSwhMSk7Zm9yKHZhciB0PTA7dDx0aGlzLmRhdGFIb3ZlcmVkLmxlbmd0aDt0KyspZS5zZWxlY3RBbGwoIipbIit0aGlzLmF0dHJOYW1lKyc9IicrdGhpcy5kYXRhSG92ZXJlZFt0XSsnIl0nKS5jbGFzc2VkKHRoaXMuY2xzTmFtZSwhMCk7dGhpcy5pbnZDbHNOYW1lJiZ0aGlzLmRhdGFIb3ZlcmVkLmxlbmd0aD4wJiZlLnNlbGVjdEFsbCgiKlsiK3RoaXMuYXR0ck5hbWUrIl06bm90KC4iK3RoaXMuY2xzTmFtZSsiKSIpLmNsYXNzZWQodGhpcy5pbnZDbHNOYW1lLCEwKX19XSksZX0oKTtmdW5jdGlvbiBnKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLmtleSxpKX19dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixpLHMscixvLGEpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuc3ZnaWQ9dCx0aGlzLmNsc05hbWU9bisiXyIrdCx0aGlzLmF0dHJOYW1lPWksdGhpcy5zaGlueUlucHV0SWQ9cyx0aGlzLnNoaW55TWVzc2FnZUlkPXIsdGhpcy50eXBlPW8sdGhpcy5pbml0aWFsU2VsZWN0aW9uPWEsdGhpcy5kYXRhU2VsZWN0ZWQ9W119cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXt0JiZnKGUucHJvdG90eXBlLHQpLG4mJmcoZSxuKX0oZSxbe2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1pLnNlbGVjdCgiIyIrdGhpcy5zdmdpZCkuc2VsZWN0QWxsKCIqWyIrdGhpcy5hdHRyTmFtZSsiXSIpO2lmKGUuZW1wdHkoKXx8InNpbmdsZSIhPXRoaXMudHlwZSYmIm11bHRpcGxlIiE9dGhpcy50eXBlKXJldHVybiExO3ZhciB0PXRoaXM7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHQpfSksdGhpcy5zaGlueU1lc3NhZ2VJZCYmU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIodGhpcy5zaGlueU1lc3NhZ2VJZCxmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGU/dC5zZXRTZWxlY3RlZChbZV0pOnIoZSkmJnQuc2V0U2VsZWN0ZWQoZSl9KSwic3RyaW5nIj09dHlwZW9mIHRoaXMuaW5pdGlhbFNlbGVjdGlvbj90aGlzLnNldFNlbGVjdGVkKFt0aGlzLmluaXRpYWxTZWxlY3Rpb25dKTpyKHRoaXMuaW5pdGlhbFNlbGVjdGlvbikmJiJtdWx0aXBsZSI9PXRoaXMudHlwZSYmdGhpcy5zZXRTZWxlY3RlZCh0aGlzLmluaXRpYWxTZWxlY3Rpb24pLHRoaXMuaW5pdGlhbFNlbGVjdGlvbj1udWxsLCEwfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RyeXtpLnNlbGVjdCgiIyIrdGhpcy5zdmdpZCkuc2VsZWN0QWxsKCIqWyIrdGhpcy5hdHRyTmFtZSsiXSIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixlKX0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9aWYodGhpcy5zaGlueU1lc3NhZ2VJZCl0cnl7U2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIodGhpcy5zaGlueU1lc3NhZ2VJZCxmdW5jdGlvbihlKXt9KX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfXRoaXMuZGF0YVNlbGVjdGVkPVtdfX0se2tleToiaGFuZGxlRXZlbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLmRhdGFTZWxlY3RlZCxuPWUudGFyZ2V0LmdldEF0dHJpYnV0ZSh0aGlzLmF0dHJOYW1lKSxpPXQuaW5kZXhPZihuKTsibXVsdGlwbGUiPT10aGlzLnR5cGU/aTwwP3QucHVzaChuKTp0LnNwbGljZShpLDEpOnQ9aTwwP1tuXTpbXSx0aGlzLnNldFNlbGVjdGVkKHQpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fX0se2tleToic2V0U2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGF0YVNlbGVjdGVkPWUsdGhpcy5yZWZyZXNoU2VsZWN0ZWQoKSx0aGlzLnNoaW55SW5wdXRJZCYmU2hpbnkub25JbnB1dENoYW5nZSh0aGlzLnNoaW55SW5wdXRJZCx0aGlzLmRhdGFTZWxlY3RlZCl9fSx7a2V5OiJyZWZyZXNoU2VsZWN0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9aS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpO2Uuc2VsZWN0QWxsKCIqWyIrdGhpcy5hdHRyTmFtZSsiXS4iK3RoaXMuY2xzTmFtZSkuY2xhc3NlZCh0aGlzLmNsc05hbWUsITEpO2Zvcih2YXIgdD0wO3Q8dGhpcy5kYXRhU2VsZWN0ZWQubGVuZ3RoO3QrKyllLnNlbGVjdEFsbCgiKlsiK3RoaXMuYXR0ck5hbWUrJz0iJyt0aGlzLmRhdGFTZWxlY3RlZFt0XSsnIl0nKS5jbGFzc2VkKHRoaXMuY2xzTmFtZSwhMCl9fSx7a2V5OiJsYXNzbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpLG49dGhpcyxzPWkubGFzc28oKTt0cnl7cz1zLmNsb3NlUGF0aFNlbGVjdCghMCkuY2xvc2VQYXRoRGlzdGFuY2UoMTAwKS5pdGVtcyh0LnNlbGVjdEFsbCgiKlsiK3RoaXMuYXR0ck5hbWUrIl0iKSkudGFyZ2V0QXJlYSh0KS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7fSkub24oImRyYXciLGZ1bmN0aW9uKCl7fSkub24oImVuZCIsZnVuY3Rpb24oKXt0cnl7dmFyIGk9bi5kYXRhU2VsZWN0ZWQ7cy5zZWxlY3RlZEl0ZW1zKCkuZWFjaChmdW5jdGlvbih0LHMpe3ZhciByPXRoaXMuZ2V0QXR0cmlidXRlKG4uYXR0ck5hbWUpLG89aS5pbmRleE9mKHIpO288MCYmZT9pLnB1c2gocik6bz49MCYmIWUmJmkuc3BsaWNlKG8sMSl9KSx0Lm9uKCIuZHJhZ3N0YXJ0IixudWxsKS5vbigiLmRyYWciLG51bGwpLm9uKCIuZHJhZ2VuZCIsbnVsbCksbi5zZXRTZWxlY3RlZChpKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX0pLHQuY2FsbChzKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX19XSksZX0oKTtmdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLmtleSxpKX19dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuY29udGFpbmVyaWQ9dCx0aGlzLnN2Z2lkPW51bGwsdGhpcy5oYW5kbGVycz1bXX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3QmJnkoZS5wcm90b3R5cGUsdCksbiYmeShlLG4pfShlLFt7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaGFuZGxlcnMubGVuZ3RoO2UrKyl0aGlzLmhhbmRsZXJzW2VdLmRlc3Ryb3koKTt0aGlzLmhhbmRsZXJzPVtdLGkuc2VsZWN0KCIjIit0aGlzLmNvbnRhaW5lcmlkKyIgc3R5bGUiKS5yZW1vdmUoKSxpLnNlbGVjdCgiIyIrdGhpcy5jb250YWluZXJpZCsiIGRpdi5naXJhZmVfY29udGFpbmVyX3N0ZCIpLnJlbW92ZSgpfX0se2tleToic2V0U3ZnSWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc3ZnaWQ9ZX19LHtrZXk6ImFkZFN0eWxlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmpvaW4oIlxuIikucmVwbGFjZSgvU1ZHSURfL2csdGhpcy5zdmdpZCk7aS5zZWxlY3QoIiMiK3RoaXMuY29udGFpbmVyaWQpLmFwcGVuZCgic3R5bGUiKS50ZXh0KHQpfX0se2tleToiYWRkU3ZnIix2YWx1ZTpmdW5jdGlvbihlLHQpeyhpLnNlbGVjdCgiIyIrdGhpcy5jb250YWluZXJpZCkuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImdpcmFmZV9jb250YWluZXJfc3RkIikuaHRtbChlKSx0KSYmZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pbmRleE9mKCJ7Iiksbj1lLnN1YnN0cmluZyh0KzEsZS5sYXN0SW5kZXhPZigifSIpKSxpPWUuc3Vic3RyaW5nKDAsdCkscz1pLnN1YnN0cmluZyhpLmluZGV4T2YoIigiKSsxLGkubGFzdEluZGV4T2YoIikiKSkuc3BsaXQoIiwiKTtmdW5jdGlvbiByKCl7cmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMscyl9cmV0dXJuIHMucHVzaChuKSxyLnByb3RvdHlwZT1GdW5jdGlvbi5wcm90b3R5cGUsbmV3IHJ9KHQpKCl9fSx7a2V5OiJJRUZpeFJlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsiSUUgMTEiIT1zKCkmJiJNU0lFIiE9PXMoKS5zdWJzdHJpbmcoMCw0KXx8KGkuc2VsZWN0KCIjIit0aGlzLnN2Z2lkKS5jbGFzc2VkKCJnaXJhZmVfc3ZnX2llIiwhMCksaS5zZWxlY3QoIiMiK3RoaXMuY29udGFpbmVyaWQrIiBkaXYiKS5jbGFzc2VkKCJnaXJhZmVfY29udGFpbmVyX2llIiwhMCkuc3R5bGUoIndpZHRoIixNYXRoLnJvdW5kKDEwMCplKSsiJSIpLnN0eWxlKCJwYWRkaW5nLWJvdHRvbSIsTWF0aC5yb3VuZChlKnQqMTAwKSsiJSIpKX19LHtrZXk6ImF1dG9TY2FsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpLnN0eWxlKCJ3aWR0aCIsZSkuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgibWFyZ2luLWxlZnQiLCJhdXRvIikuc3R5bGUoIm1hcmdpbi1yaWdodCIsImF1dG8iKX19LHtrZXk6ImZpeFNpemUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pbiBtZWV0IiksaS5zZWxlY3QoIiMiK3RoaXMuY29udGFpbmVyaWQrIiAuZ2lyYWZlX2NvbnRhaW5lcl9zdGQiKS5zdHlsZSgid2lkdGgiLCIxMDAlIiksaS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpLmF0dHIoIndpZHRoIixlKS5hdHRyKCJoZWlnaHQiLHQpLGkuc2VsZWN0KCIjIit0aGlzLnN2Z2lkKS5zdHlsZSgid2lkdGgiLGUpLnN0eWxlKCJoZWlnaHQiLHQpfX0se2tleToic2V0U2l6ZUxpbWl0cyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scyl7aS5zZWxlY3QoIiMiK3RoaXMuc3ZnaWQpLnN0eWxlKCJtYXgtd2lkdGgiLGUpLnN0eWxlKCJtYXgtaGVpZ2h0IixuKS5zdHlsZSgibWluLXdpZHRoIix0KS5zdHlsZSgibWluLWhlaWdodCIscyl9fSx7a2V5OiJyZW1vdmVDb250YWluZXJMaW1pdHMiLHZhbHVlOmZ1bmN0aW9uKCl7IklFIDExIj09cygpfHwiTVNJRSI9PT1zKCkuc3Vic3RyaW5nKDAsNCl8fGkuc2VsZWN0KCIjIit0aGlzLmNvbnRhaW5lcmlkKS5zdHlsZSgid2lkdGgiLG51bGwpLnN0eWxlKCJoZWlnaHQiLG51bGwpfX0se2tleToic2V0dXBUb29sdGlwIix2YWx1ZTpmdW5jdGlvbihlLHQsbixpLHMscixvLGEsbCl7dHJ5e3ZhciBjPW5ldyBmKHRoaXMuc3ZnaWQsZSx0LG4saSxzLHIsbyxhLGwpO2MuaW5pdCgpJiZ0aGlzLmhhbmRsZXJzLnB1c2goYyl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19fSx7a2V5OiJzZXR1cEhvdmVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO3RyeXt2YXIgcz10JiZpLnJlYWN0aXZlP3RoaXMuY29udGFpbmVyaWQraS5pbnB1dFN1ZmZpeDpudWxsLHI9dCYmaS5yZWFjdGl2ZT90aGlzLmNvbnRhaW5lcmlkK2kubWVzc2FnZVN1ZmZpeDpudWxsLG89bmV3IHAodGhpcy5zdmdpZCxpLmNsYXNzUHJlZml4LGkuaW52Q2xhc3NQcmVmaXgsaS5hdHRyTmFtZSxzLHIpO28uaW5pdCgpJiZ0aGlzLmhhbmRsZXJzLnB1c2gobyl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19fX0se2tleToic2V0dXBTZWxlY3Rpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07dHJ5e2lmKCh0fHwhaS5vbmx5X3NoaW55KSYmKCJzaW5nbGUiPT1pLnR5cGV8fCJtdWx0aXBsZSI9PWkudHlwZSkpe3ZhciBzPXQ/dGhpcy5jb250YWluZXJpZCtpLmlucHV0U3VmZml4Om51bGwscj10P3RoaXMuY29udGFpbmVyaWQraS5tZXNzYWdlU3VmZml4Om51bGwsbz1uZXcgbSh0aGlzLnN2Z2lkLGkuY2xhc3NQcmVmaXgsaS5hdHRyTmFtZSxzLHIsaS50eXBlLGkuc2VsZWN0ZWQpO28uaW5pdCgpJiZ0aGlzLmhhbmRsZXJzLnB1c2gobyl9fWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fX19LHtrZXk6InNldHVwWm9vbSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0cnl7dmFyIG49bmV3IHUodGhpcy5jb250YWluZXJpZCx0aGlzLnN2Z2lkLGUsdCk7bi5pbml0KCkmJnRoaXMuaGFuZGxlcnMucHVzaChuKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX19LHtrZXk6InNldHVwVG9vbGJhciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSl7dHJ5e2Zvcih2YXIgcz1udWxsLHI9bnVsbCxvPTA7bzx0aGlzLmhhbmRsZXJzLmxlbmd0aDtvKyspe3ZhciBhPXRoaXMuaGFuZGxlcnNbb107YSBpbnN0YW5jZW9mIHU/cz1hOmEgaW5zdGFuY2VvZiBtJiYiZGF0YS1pZCI9PWEuYXR0ck5hbWUmJiJtdWx0aXBsZSI9PWEudHlwZSYmKHI9YSl9dmFyIGM9bmV3IGwodGhpcy5jb250YWluZXJpZCx0aGlzLnN2Z2lkLGUsdCxzLHIsbixpKTtjLmluaXQoKSYmdGhpcy5oYW5kbGVycy5wdXNoKGMpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fX1dKSxlfSgpO24oMyk7ZnVuY3Rpb24geChlKXtyZXR1cm4gbmV3IHcoZSl9bi5kKHQsIm5ld2dpIixmdW5jdGlvbigpe3JldHVybiB4fSl9XSk7"></script>
<script src="data:application/javascript;base64,SFRNTFdpZGdldHMud2lkZ2V0KHsKCiAgbmFtZTogImdpcmFmZSIsCgogIHR5cGU6ICJvdXRwdXQiLAoKICBmYWN0b3J5OiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewogICAgdmFyIGdnb2JqID0gZ2dpcmFwaGpzLm5ld2dpKGVsLmlkKTsKCiAgICByZXR1cm4gewogICAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oeCkgewogICAgICAgIGdnb2JqLmNsZWFyKCk7CgogICAgICAgIGdnb2JqLnNldFN2Z0lkKHgudWlkKTsKICAgICAgICBnZ29iai5hZGRTdHlsZShbCiAgICAgICAgICB4LnNldHRpbmdzLnRvb2x0aXAuY3NzLAogICAgICAgICAgeC5zZXR0aW5ncy5ob3Zlcmludi5jc3MsCiAgICAgICAgICB4LnNldHRpbmdzLmhvdmVyLmNzcywgeC5zZXR0aW5ncy5ob3ZlcmtleS5jc3MsIHguc2V0dGluZ3MuaG92ZXJ0aGVtZS5jc3MsCiAgICAgICAgICB4LnNldHRpbmdzLmNhcHR1cmUuY3NzLCB4LnNldHRpbmdzLmNhcHR1cmVrZXkuY3NzLCB4LnNldHRpbmdzLmNhcHR1cmV0aGVtZS5jc3MKICAgICAgICBdKTsKICAgICAgICBnZ29iai5hZGRTdmcoeC5odG1sLCB4LmpzKTsKCiAgICAgICAgY29uc3QgYm94ID0gZDMuc2VsZWN0KCIjIiArIGdnb2JqLnN2Z2lkKS5wcm9wZXJ0eSgidmlld0JveCIpLmJhc2VWYWw7CiAgICAgICAgaWYgKCF4LnNldHRpbmdzLnNpemluZy5yZXNjYWxlKSB7CiAgICAgICAgICBnZ29iai5maXhTaXplKGJveC53aWR0aCwgYm94LmhlaWdodCk7CiAgICAgICAgICBkMy5zZWxlY3QoZWwpLnN0eWxlKCJ3aWR0aCIsIG51bGwpLnN0eWxlKCJoZWlnaHQiLCBudWxsKTsKICAgICAgICB9IGVsc2UgaWYoIEhUTUxXaWRnZXRzLnNoaW55TW9kZSApewogICAgICAgICAgZ2dvYmouYXV0b1NjYWxlKCIxMDAlIik7CiAgICAgICAgICBnZ29iai5JRUZpeFJlc2l6ZSgxLCAxL3gucmF0aW8pOwogICAgICAgICAgZ2dvYmouc2V0U2l6ZUxpbWl0cyhkMy5zZWxlY3QoZWwpLnN0eWxlKCJ3aWR0aCIpLCAwLCBkMy5zZWxlY3QoZWwpLnN0eWxlKCJoZWlnaHQiKSwgMCk7CiAgICAgICAgICAvL2dnb2JqLnJlbW92ZUNvbnRhaW5lckxpbWl0cygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBnZ29iai5hdXRvU2NhbGUoTWF0aC5yb3VuZCh4LnNldHRpbmdzLnNpemluZy53aWR0aCAqIDEwMCkgKyAiJSIpOwogICAgICAgICAgZ2dvYmouSUVGaXhSZXNpemUoeC5zZXR0aW5ncy5zaXppbmcud2lkdGgsIDEveC5yYXRpbyk7CiAgICAgICAgICBnZ29iai5zZXRTaXplTGltaXRzKCJ1bnNldCIsICJ1bnNldCIsICJ1bnNldCIsICJ1bnNldCIpOwogICAgICAgICAgZ2dvYmoucmVtb3ZlQ29udGFpbmVyTGltaXRzKCk7CiAgICAgICAgfQoKICAgICAgICBnZ29iai5zZXR1cFRvb2x0aXAoInRvb2x0aXAiLAogICAgICAgICAgeC5zZXR0aW5ncy50b29sdGlwLm9wYWNpdHksIHguc2V0dGluZ3MudG9vbHRpcC5vZmZ4LCB4LnNldHRpbmdzLnRvb2x0aXAub2ZmeSwKICAgICAgICAgIHguc2V0dGluZ3MudG9vbHRpcC51c2VfY3Vyc29yX3BvcywgeC5zZXR0aW5ncy50b29sdGlwLnVzZWZpbGwsIHguc2V0dGluZ3MudG9vbHRpcC51c2VzdHJva2UsCiAgICAgICAgICB4LnNldHRpbmdzLnRvb2x0aXAuZGVsYXkub3ZlciwgeC5zZXR0aW5ncy50b29sdGlwLmRlbGF5Lm91dAogICAgICAgICk7CgogICAgICAgIGdnb2JqLnNldHVwSG92ZXIoWwogICAgICAgICAgewogICAgICAgICAgICBjbGFzc1ByZWZpeDogJ2hvdmVyJywKICAgICAgICAgICAgYXR0ck5hbWU6ICdkYXRhLWlkJywKICAgICAgICAgICAgaW5wdXRTdWZmaXg6ICdfaG92ZXJlZCcsCiAgICAgICAgICAgIG1lc3NhZ2VTdWZmaXg6ICdfaG92ZXJlZF9zZXQnLAogICAgICAgICAgICByZWFjdGl2ZTogeC5zZXR0aW5ncy5ob3Zlci5yZWFjdGl2ZSwKICAgICAgICAgICAgaW52Q2xhc3NQcmVmaXg6ICh4LnNldHRpbmdzLmhvdmVyaW52LmNzcy5sZW5ndGggPiAwID8gJ2hvdmVyX2ludicgOiBudWxsKQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgY2xhc3NQcmVmaXg6ICdob3Zlcl9rZXknLAogICAgICAgICAgICBhdHRyTmFtZTogJ2tleS1pZCcsCiAgICAgICAgICAgIGlucHV0U3VmZml4OiAnX2tleV9ob3ZlcmVkJywKICAgICAgICAgICAgbWVzc2FnZVN1ZmZpeDogJ19rZXlfaG92ZXJlZF9zZXQnLAogICAgICAgICAgICByZWFjdGl2ZTogeC5zZXR0aW5ncy5ob3ZlcmtleS5yZWFjdGl2ZSwKICAgICAgICAgICAgaW52Q2xhc3NQcmVmaXg6IG51bGwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGNsYXNzUHJlZml4OiAnaG92ZXJfdGhlbWUnLAogICAgICAgICAgICBhdHRyTmFtZTogJ3RoZW1lLWlkJywKICAgICAgICAgICAgaW5wdXRTdWZmaXg6ICdfdGhlbWVfaG92ZXJlZCcsCiAgICAgICAgICAgIG1lc3NhZ2VTdWZmaXg6ICdfdGhlbWVfaG92ZXJlZF9zZXQnLAogICAgICAgICAgICByZWFjdGl2ZTogeC5zZXR0aW5ncy5ob3ZlcnRoZW1lLnJlYWN0aXZlLAogICAgICAgICAgICBpbnZDbGFzc1ByZWZpeDogbnVsbAogICAgICAgICAgfQogICAgICAgIF0sIEhUTUxXaWRnZXRzLnNoaW55TW9kZSk7CgogICAgICAgIGdnb2JqLnNldHVwU2VsZWN0aW9uKFsKICAgICAgICAgIHsKICAgICAgICAgICAgY2xhc3NQcmVmaXg6ICdzZWxlY3RlZCcsCiAgICAgICAgICAgIGF0dHJOYW1lOiAnZGF0YS1pZCcsCiAgICAgICAgICAgIGlucHV0U3VmZml4OiAnX3NlbGVjdGVkJywKICAgICAgICAgICAgbWVzc2FnZVN1ZmZpeDogJ19zZXQnLAogICAgICAgICAgICB0eXBlOiB4LnNldHRpbmdzLmNhcHR1cmUudHlwZSwKICAgICAgICAgICAgb25seV9zaGlueTogeC5zZXR0aW5ncy5jYXB0dXJlLm9ubHlfc2hpbnksCiAgICAgICAgICAgIHNlbGVjdGVkOiB4LnNldHRpbmdzLmNhcHR1cmUuc2VsZWN0ZWQKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGNsYXNzUHJlZml4OiAnc2VsZWN0ZWRfa2V5JywKICAgICAgICAgICAgYXR0ck5hbWU6ICdrZXktaWQnLAogICAgICAgICAgICBpbnB1dFN1ZmZpeDogJ19rZXlfc2VsZWN0ZWQnLAogICAgICAgICAgICBtZXNzYWdlU3VmZml4OiAnX2tleV9zZXQnLAogICAgICAgICAgICB0eXBlOiB4LnNldHRpbmdzLmNhcHR1cmVrZXkudHlwZSwKICAgICAgICAgICAgb25seV9zaGlueTogeC5zZXR0aW5ncy5jYXB0dXJla2V5Lm9ubHlfc2hpbnksCiAgICAgICAgICAgIHNlbGVjdGVkOiB4LnNldHRpbmdzLmNhcHR1cmVrZXkuc2VsZWN0ZWQKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGNsYXNzUHJlZml4OiAnc2VsZWN0ZWRfdGhlbWUnLAogICAgICAgICAgICBhdHRyTmFtZTogJ3RoZW1lLWlkJywKICAgICAgICAgICAgaW5wdXRTdWZmaXg6ICdfdGhlbWVfc2VsZWN0ZWQnLAogICAgICAgICAgICBtZXNzYWdlU3VmZml4OiAnX3RoZW1lX3NldCcsCiAgICAgICAgICAgIHR5cGU6IHguc2V0dGluZ3MuY2FwdHVyZXRoZW1lLnR5cGUsCiAgICAgICAgICAgIG9ubHlfc2hpbnk6IHguc2V0dGluZ3MuY2FwdHVyZXRoZW1lLm9ubHlfc2hpbnksCiAgICAgICAgICAgIHNlbGVjdGVkOiB4LnNldHRpbmdzLmNhcHR1cmV0aGVtZS5zZWxlY3RlZAogICAgICAgICAgfQogICAgICAgIF0sIEhUTUxXaWRnZXRzLnNoaW55TW9kZSk7CgogICAgICAgIGdnb2JqLnNldHVwWm9vbSh4LnNldHRpbmdzLnpvb20ubWluLCB4LnNldHRpbmdzLnpvb20ubWF4KTsKICAgICAgICBnZ29iai5zZXR1cFRvb2xiYXIoJ2dnaXJhcGgtdG9vbGJhcicsCiAgICAgICAgICB4LnNldHRpbmdzLnRvb2xiYXIucG9zaXRpb24sIHguc2V0dGluZ3MudG9vbGJhci5zYXZlYXNwbmcsIHguc2V0dGluZ3MudG9vbGJhci5wbmduYW1lKTsKICAgICAgfSwKCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdodCkgewogICAgICB9CgogICAgfTsKICB9Cn0pOwo="></script>
</head>
<body>
<div id="htmlwidget_container">
<div id="htmlwidget-1bff331b375d479a3259" style="width:960px;height:500px;" class="girafe html-widget"></div>
</div>
<script type="application/json" data-for="htmlwidget-1bff331b375d479a3259">{"x":{"html":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='svg_a5428816-188c-45e3-8845-cae59cd510a5' viewBox='0 0 432.00 360.00'>\n <g>\n <defs>\n <clipPath id='svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_1'>\n <rect x='0.00' y='0.00' width='432.00' height='360.00'/>\n <\/clipPath>\n <\/defs>\n <rect x='0.00' y='0.00' width='432.00' height='360.00' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_1' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_1)' fill='#FFFFFF' fill-opacity='1' stroke='#FFFFFF' stroke-opacity='1' stroke-width='0.75' stroke-linejoin='round' stroke-linecap='round'/>\n <defs>\n <clipPath id='svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_2'>\n <rect x='0.00' y='0.00' width='432.00' height='360.00'/>\n <\/clipPath>\n <\/defs>\n <defs>\n <clipPath id='svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3'>\n <rect x='54.44' y='56.52' width='253.13' height='252.43'/>\n <\/clipPath>\n <\/defs>\n <polyline points='54.44,270.48 307.58,270.48' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_2' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='none' stroke='#CCCCCC' stroke-opacity='1' stroke-width='0.32' stroke-linejoin='round' stroke-linecap='butt'/>\n <polyline points='54.44,202.98 307.58,202.98' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_3' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='none' stroke='#CCCCCC' stroke-opacity='1' stroke-width='0.32' stroke-linejoin='round' stroke-linecap='butt'/>\n <polyline points='54.44,135.49 307.58,135.49' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_4' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='none' stroke='#CCCCCC' stroke-opacity='1' stroke-width='0.32' stroke-linejoin='round' stroke-linecap='butt'/>\n <polyline points='54.44,68.00 307.58,68.00' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_5' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='none' stroke='#CCCCCC' stroke-opacity='1' stroke-width='0.32' stroke-linejoin='round' stroke-linecap='butt'/>\n <polyline points='54.44,304.22 307.58,304.22' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_6' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='none' stroke='#CCCCCC' stroke-opacity='1' stroke-width='0.43' stroke-linejoin='round' stroke-linecap='butt'/>\n <polyline points='54.44,236.73 307.58,236.73' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_7' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='none' stroke='#CCCCCC' stroke-opacity='1' stroke-width='0.43' stroke-linejoin='round' stroke-linecap='butt'/>\n <polyline points='54.44,169.24 307.58,169.24' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_8' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='none' stroke='#CCCCCC' stroke-opacity='1' stroke-width='0.43' stroke-linejoin='round' stroke-linecap='butt'/>\n <polyline points='54.44,101.74 307.58,101.74' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_9' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='none' stroke='#CCCCCC' stroke-opacity='1' stroke-width='0.43' stroke-linejoin='round' stroke-linecap='butt'/>\n <circle cx='55.43' cy='68.00' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_10' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en production, traitement et analyse de données'/>\n <circle cx='57.07' cy='108.49' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_11' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e d’études en production, traitement, analyse de données et enquêtes'/>\n <circle cx='58.71' cy='135.49' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_12' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en production, traitement de données et enquêtes'/>\n <circle cx='60.35' cy='142.24' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_13' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en production, traitement de données et enquêtes'/>\n <circle cx='61.99' cy='148.99' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_14' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e biologiste en traitement de données'/>\n <circle cx='63.64' cy='162.49' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_15' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e statisticien-ne'/>\n <circle cx='65.28' cy='169.24' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_16' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Administrateur-trice de bases de données / Intégrateur d&#39;applications'/>\n <circle cx='66.92' cy='189.49' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_17' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e statisticien-ne'/>\n <circle cx='68.56' cy='202.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_18' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e d’études en sciences de l’information géographique'/>\n <circle cx='70.20' cy='209.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_19' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en sciences de l’information géographique'/>\n <circle cx='73.48' cy='216.48' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_20' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en sciences de l’information géographique'/>\n <circle cx='71.84' cy='216.48' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_21' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e biologiste en traitement de données'/>\n <circle cx='75.13' cy='223.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_22' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e biologiste en analyse de données'/>\n <circle cx='78.41' cy='229.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_23' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Gestionnaire de données et indicateurs patrimoniaux'/>\n <circle cx='76.77' cy='229.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_24' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de l&#39;édition de corpus numériques'/>\n <circle cx='81.69' cy='236.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_25' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e des systèmes d&#39;information documentaire'/>\n <circle cx='80.05' cy='236.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_26' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Expert-e en information statistique'/>\n <circle cx='83.33' cy='243.48' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_27' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e d’études en archéologie'/>\n <circle cx='88.26' cy='243.48' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_28' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e d&#39;archives'/>\n <circle cx='84.98' cy='243.48' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_29' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Gestionnaire d&#39;application / assistance support'/>\n <circle cx='86.62' cy='243.48' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_30' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e du traitement des données scientifiques'/>\n <circle cx='89.90' cy='250.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_31' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Gestionnaire d&#39;infrastructures'/>\n <circle cx='91.54' cy='250.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_32' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable des ressources et de l&#39;ingénierie documentaire'/>\n <circle cx='94.83' cy='256.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_33' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Administrateur-trice des systèmes d&#39;information'/>\n <circle cx='96.47' cy='256.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_34' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e du contrôle de gestion, d&#39;études et d&#39;évaluation'/>\n <circle cx='93.18' cy='256.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_35' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en environnements géo-naturels et anthropisés'/>\n <circle cx='99.75' cy='263.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_36' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e d’études en analyses des sources historiques et culturelles'/>\n <circle cx='101.39' cy='263.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_37' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable d’archives'/>\n <circle cx='104.67' cy='263.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_38' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Gestionnaire financier-e et comptable'/>\n <circle cx='98.11' cy='263.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_39' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en analyses des sources historiques et culturelles'/>\n <circle cx='103.03' cy='263.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_40' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable éditorial-e'/>\n <circle cx='107.96' cy='270.48' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_41' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Traducteur-trice terminologue'/>\n <circle cx='106.32' cy='270.48' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_42' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en sciences de l’information géographique'/>\n <circle cx='119.45' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_43' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de collections muséales'/>\n <circle cx='124.37' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_44' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#F8766D' fill-opacity='1' stroke='#F8766D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Aide d&#39;information documentaire et de collections patrimoniales'/>\n <circle cx='114.52' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_45' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e en ingénierie logicielle'/>\n <circle cx='122.73' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_46' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne photographe'/>\n <circle cx='127.66' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_47' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de la gestion des ressources humaines'/>\n <circle cx='112.88' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_48' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en calcul scientifique'/>\n <circle cx='126.02' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_49' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Dessinateur-trice gestionnaire et indicateurs patrimoniaux'/>\n <circle cx='117.81' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_50' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable de la communication'/>\n <circle cx='129.30' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_51' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e en gestion financière et comptable'/>\n <circle cx='109.60' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_52' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en science des matériaux / caractérisation'/>\n <circle cx='111.24' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_53' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en archéologie'/>\n <circle cx='121.09' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_54' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e de collections muséales'/>\n <circle cx='116.17' cy='277.23' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_55' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne d&#39;exploitation, d&#39;assistance et de traitement de l&#39;information'/>\n <circle cx='155.56' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_56' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Gestionnaire des ressources humaines'/>\n <circle cx='132.58' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_57' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en environnements géo-naturels et anthropisés'/>\n <circle cx='139.15' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_58' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chef-fe de projet ou expert-e en infrastructures'/>\n <circle cx='147.36' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_59' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne d&#39;information documentaire et de collections patrimoniales'/>\n <circle cx='130.94' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_60' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en études d&#39;environnements géo-naturels et anthropisés'/>\n <circle cx='152.28' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_61' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e du développement des ressources humaines'/>\n <circle cx='153.92' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_62' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en formation et en orientation-insertion professionnelle'/>\n <circle cx='137.51' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_63' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#F8766D' fill-opacity='1' stroke='#F8766D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Préparateur-trice en chimie et sciences physiques'/>\n <circle cx='134.22' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_64' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en science des matériaux / caractérisation'/>\n <circle cx='135.86' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_65' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en science des matériaux / caractérisation'/>\n <circle cx='144.07' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_66' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de fabrication et graphisme'/>\n <circle cx='145.71' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_67' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e de fabrication'/>\n <circle cx='150.64' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_68' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e des achats et des marchés'/>\n <circle cx='149.00' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_69' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e d&#39;appui au projet de recherche'/>\n <circle cx='142.43' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_70' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Traducteur-trice'/>\n <circle cx='140.79' cy='283.98' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_71' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e des ressources documentaires'/>\n <circle cx='203.17' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_72' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e des technologies de l&#39;information et de la communication'/>\n <circle cx='167.06' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_73' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en science des matériaux / élaboration'/>\n <circle cx='198.25' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_74' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e pour l&#39;enseignement numérique'/>\n <circle cx='180.19' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_75' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e électrotechnicien-ne'/>\n <circle cx='181.83' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_76' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e électrotechnicien-ne'/>\n <circle cx='183.47' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_77' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en contrôle-commande'/>\n <circle cx='201.53' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_78' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e d&#39;édition'/>\n <circle cx='204.81' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_79' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne des métiers de l&#39;image et du son'/>\n <circle cx='176.90' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_80' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en élaboration de matériaux massifs'/>\n <circle cx='188.40' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_81' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en archéologie'/>\n <circle cx='162.13' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_82' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne biologiste'/>\n <circle cx='209.74' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_83' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Infirmier-ère prévention (EPST)'/>\n <circle cx='196.60' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_84' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable des productions audiovisuelles, productions pédagogiques et web'/>\n <circle cx='158.85' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_85' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en études d&#39;environnements géo-naturels et anthropisés'/>\n <circle cx='175.26' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_86' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieu-e en élaboration de matériaux en couches minces'/>\n <circle cx='178.55' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_87' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Expert-e électronicien-ne'/>\n <circle cx='157.21' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_88' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e biologiste en laboratoire'/>\n <circle cx='173.62' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_89' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en analyse chimique'/>\n <circle cx='190.04' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_90' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chef-fe de projet ou expert-e en ingénierie des systèmes d’information'/>\n <circle cx='194.96' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_91' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable de collections muséales'/>\n <circle cx='214.66' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_92' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e d&#39;orientation et d&#39;insertion professionnelle'/>\n <circle cx='168.70' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_93' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en analyse chimique'/>\n <circle cx='211.38' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_94' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e d&#39;orientation et d&#39;insertion professionnelle'/>\n <circle cx='206.45' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_95' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de prévention des risques'/>\n <circle cx='171.98' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_96' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en élaboration de matériaux massifs'/>\n <circle cx='163.77' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_97' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#F8766D' fill-opacity='1' stroke='#F8766D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Préparateur-trice en échantillons d&#39;environnements géo-naturels et anthropisés'/>\n <circle cx='165.41' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_98' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en analyse chimique'/>\n <circle cx='208.09' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_99' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e radio protection (EPST)'/>\n <circle cx='185.11' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_100' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne électrotechnicien-ne'/>\n <circle cx='160.49' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_101' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en biologie, sciences de la vie et de la terre'/>\n <circle cx='193.32' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_102' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en ingénierie logicielle'/>\n <circle cx='191.68' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_103' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Expert-e en calcul scientifique'/>\n <circle cx='213.02' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_104' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e des affaires juridiques'/>\n <circle cx='186.75' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_105' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#F8766D' fill-opacity='1' stroke='#F8766D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Adjoint-e technique en instrumentation, expérimentation et mesure'/>\n <circle cx='170.34' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_106' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en élaboration de matériaux en couches minces'/>\n <circle cx='199.89' cy='290.73' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_107' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e de communication'/>\n <circle cx='275.40' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_108' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de la logistique'/>\n <circle cx='283.61' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_109' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#F8766D' fill-opacity='1' stroke='#F8766D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Opérateur-trice logistique'/>\n <circle cx='263.91' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_110' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en technologies de l’information et de la communication'/>\n <circle cx='239.28' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_111' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Expert-e électrotechnicien-ne'/>\n <circle cx='265.55' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_112' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e de ressources documentaires et scientifiques'/>\n <circle cx='219.59' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_113' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en centre d&#39;expérimentation animale'/>\n <circle cx='250.78' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_114' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chef-fe de projet ou expert-e en Ingéniérie logicielle'/>\n <circle cx='252.42' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_115' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable assistance support'/>\n <circle cx='249.13' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_116' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en archéologie / archéométrie'/>\n <circle cx='291.82' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_117' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable de la gestion et du développement des ressources humaines'/>\n <circle cx='216.30' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_118' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e biologiste en plateforme scientifique'/>\n <circle cx='236.00' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_119' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en expérimentation et production végétales'/>\n <circle cx='255.70' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_120' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable de médiation scientifique et culturelle'/>\n <circle cx='277.04' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_121' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Conducteur-trice de travaux immobiliers'/>\n <circle cx='234.36' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_122' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Zootechnicien-ne'/>\n <circle cx='260.63' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_123' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Animateur-trice de communautés'/>\n <circle cx='262.27' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_124' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de communication'/>\n <circle cx='295.10' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_125' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de la gestion financière et comptable'/>\n <circle cx='280.32' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_126' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en travaux immobiliers'/>\n <circle cx='245.85' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_127' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en études mécaniques'/>\n <circle cx='232.72' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_128' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en expérimentation et production végétales'/>\n <circle cx='273.76' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_129' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de la maintenance et de l&#39;exploitation du patrimoine immobilier'/>\n <circle cx='306.59' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_130' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#F8766D' fill-opacity='1' stroke='#F8766D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Adjoint-e en gestion administrative'/>\n <circle cx='224.51' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_131' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en biologie animale'/>\n <circle cx='270.48' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_132' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e responsable de prévention'/>\n <circle cx='237.64' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_133' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en synthèse chimique'/>\n <circle cx='222.87' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_134' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en techniques biologiques'/>\n <circle cx='240.93' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_135' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en techniques expérimentales'/>\n <circle cx='286.89' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_136' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable du partenariat et de la valorisation de la recherche'/>\n <circle cx='285.25' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_137' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable de l&#39;orientation et de l&#39;insertion professionnelle'/>\n <circle cx='229.44' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_138' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en expérimentation et instrumentation biologiques'/>\n <circle cx='300.02' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_139' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e des ressources humaines'/>\n <circle cx='221.23' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_140' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en expérimentation et production végétales'/>\n <circle cx='272.12' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_141' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e d&#39;opérations immobilières'/>\n <circle cx='290.17' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_142' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable de l’administration et du pilotage'/>\n <circle cx='268.83' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_143' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e de projets culturels'/>\n <circle cx='296.74' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_144' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e en ingénierie de formation continue'/>\n <circle cx='226.15' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_145' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en centre d&#39;expérimentation animale'/>\n <circle cx='281.97' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_146' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne de prévention des risques'/>\n <circle cx='257.34' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_147' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de médiation scientifique'/>\n <circle cx='301.67' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_148' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e de service social (EPST)'/>\n <circle cx='217.94' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_149' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en biologie animale'/>\n <circle cx='278.68' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_150' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chef-fe d&#39;exploitation de maintenance des bâtiments'/>\n <circle cx='293.46' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_151' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable de la gestion financière et comptable'/>\n <circle cx='267.19' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_152' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e archiviste'/>\n <circle cx='258.98' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_153' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Chargé-e de projets culturels'/>\n <circle cx='298.38' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_154' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e en partenariat, valorisation de la recherche et coopération internationale'/>\n <circle cx='254.06' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_155' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Administrateur-trice systèmes et réseaux'/>\n <circle cx='227.79' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_156' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e en expérimentation et production végétales'/>\n <circle cx='247.49' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_157' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Ingénieur-e de recherche en archéométrie'/>\n <circle cx='244.21' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_158' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en instrumentation, expérimentation et mesure'/>\n <circle cx='231.08' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_159' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en centre d’expérimentation animale'/>\n <circle cx='242.57' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_160' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e ingénieur-e en instrumentation et techniques expérimentales'/>\n <circle cx='288.53' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_161' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Responsable de la coopération internationale'/>\n <circle cx='304.95' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_162' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Technicien-ne en gestion administrative'/>\n <circle cx='303.31' cy='297.47' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_163' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_3)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round' title='Assistant-e des affaires juridiques'/>\n <defs>\n <clipPath id='svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4'>\n <rect x='0.00' y='0.00' width='432.00' height='360.00'/>\n <\/clipPath>\n <\/defs>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='46.33' y='308.34' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_164' font-size='8.62pt' fill='#4D4D4D' fill-opacity='1' font-family='Arial Narrow'>0<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='41.09' y='240.85' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_165' font-size='8.62pt' fill='#4D4D4D' fill-opacity='1' font-family='Arial Narrow'>10<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='41.09' y='173.35' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_166' font-size='8.62pt' fill='#4D4D4D' fill-opacity='1' font-family='Arial Narrow'>20<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='41.09' y='105.86' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_167' font-size='8.62pt' fill='#4D4D4D' fill-opacity='1' font-family='Arial Narrow'>30<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text transform='translate(36.33,197.33) rotate(-90.00)' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_168' font-size='6.75pt' font-family='Arial Narrow'>Nombre d'occurrences du terme \"données\"<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='324.76' y='140.79' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_169' font-size='8.62pt' font-family='Arial Narrow'>Corps<\/text>\n <\/g>\n <circle cx='333.40' cy='156.37' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_170' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)' fill='#F8766D' fill-opacity='1' stroke='#F8766D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round'/>\n <circle cx='333.40' cy='173.65' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_171' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)' fill='#A3A500' fill-opacity='1' stroke='#A3A500' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round'/>\n <circle cx='333.40' cy='190.93' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_172' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)' fill='#00BF7D' fill-opacity='1' stroke='#00BF7D' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round'/>\n <circle cx='333.40' cy='208.21' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_173' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)' fill='#00B0F6' fill-opacity='1' stroke='#00B0F6' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round'/>\n <circle cx='333.40' cy='225.49' r='1.87pt' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_174' clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)' fill='#E76BF3' fill-opacity='1' stroke='#E76BF3' stroke-opacity='1' stroke-width='0.71' stroke-linejoin='round' stroke-linecap='round'/>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='347.77' y='159.66' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_175' font-size='6.90pt' font-family='Arial Narrow'>ATRF (Cat. C)<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='347.77' y='176.94' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_176' font-size='6.90pt' font-family='Arial Narrow'>TECH (Cat. B)<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='347.77' y='194.22' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_177' font-size='6.90pt' font-family='Arial Narrow'>AI (Cat. A)<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='347.77' y='211.50' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_178' font-size='6.90pt' font-family='Arial Narrow'>IE (Cat. A)<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='347.77' y='228.78' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_179' font-size='6.90pt' font-family='Arial Narrow'>IR (Cat. A)<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='54.44' y='42.77' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_180' font-size='13.50pt' font-weight='bold' font-family='Arial Narrow'>Distribution des fiches métiers<\/text>\n <\/g>\n <g clip-path='url(#svg_a5428816-188c-45e3-8845-cae59cd510a5_cl_4)'>\n <text x='90.57' y='328.22' id='svg_a5428816-188c-45e3-8845-cae59cd510a5_el_181' font-size='6.75pt' font-style='italic' font-family='Arial Narrow'>Données MESRI – Analyse CC-BY Antoine Blanchard / Datactivist<\/text>\n <\/g>\n <\/g>\n<\/svg>","js":null,"uid":"svg_a5428816-188c-45e3-8845-cae59cd510a5","ratio":1.2,"settings":{"tooltip":{"css":".tooltip_SVGID_ { padding:5px;background:black;color:white;border-radius:2px 2px 2px 2px ; position:absolute;pointer-events:none;z-index:999;}\n","offx":10,"offy":0,"use_cursor_pos":true,"opacity":0.9,"usefill":false,"usestroke":false,"delay":{"over":200,"out":500}},"hover":{"css":".hover_SVGID_ { fill:orange;stroke:gray; }\n","reactive":false},"hoverkey":{"css":".hover_key_SVGID_ { stroke:red; }\n","reactive":false},"hovertheme":{"css":".hover_theme_SVGID_ { fill:green; }\n","reactive":false},"hoverinv":{"css":""},"zoom":{"min":1,"max":1},"capture":{"css":".selected_SVGID_ { fill:red;stroke:gray; }\n","type":"multiple","only_shiny":true,"selected":[]},"capturekey":{"css":".selected_key_SVGID_ { stroke:gray; }\n","type":"single","only_shiny":true,"selected":[]},"capturetheme":{"css":".selected_theme_SVGID_ { stroke:gray; }\n","type":"single","only_shiny":true,"selected":[]},"toolbar":{"position":"topright","saveaspng":true,"pngname":"diagram"},"sizing":{"rescale":true,"width":1}}},"evals":[],"jsHooks":[]}</script>
<script type="application/htmlwidget-sizing" data-for="htmlwidget-1bff331b375d479a3259">{"viewer":{"width":450,"height":350,"padding":15,"fill":true},"browser":{"width":960,"height":500,"padding":40,"fill":false}}</script>
</body>
</html>