@codingame/monaco-editor-wrapper 1.14.5 → 1.14.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/JavaScript.tmLanguage.js +64 -10
- package/dist/JavaScriptReact.tmLanguage.js +64 -10
- package/dist/Scala.tmLanguage.js +8 -4
- package/dist/TypeScript.tmLanguage.js +64 -10
- package/dist/TypeScriptReact.tmLanguage.js +64 -10
- package/dist/angular.js +7 -1
- package/dist/c.tmLanguage.js +650 -432
- package/dist/cpp.tmLanguage.js +72 -84
- package/dist/cpptools.js +81 -5
- package/dist/css.tmLanguage.js +5 -5
- package/dist/css.worker.js +1 -1
- package/dist/dart3.js +40 -21
- package/dist/fsharp.tmLanguage.js +2 -2
- package/dist/html.worker.js +1 -1
- package/dist/index.js +4 -3
- package/dist/java.js +1 -1
- package/dist/java2.js +35 -11
- package/dist/javascript-javascript.code-snippets.js +9 -0
- package/dist/javascript.js +1 -1
- package/dist/javascriptreact.js +1 -1
- package/dist/json.js +1 -3
- package/dist/json.worker.js +1 -1
- package/dist/jsonc.js +1 -3
- package/dist/lua2.js +184 -63
- package/dist/main.js +10625 -10607
- package/dist/markdown.tmLanguage.js +56 -17
- package/dist/objective-c.tmLanguage.js +276 -131
- package/dist/omnisharp-csharp.js +11 -11
- package/dist/omnisharp.js +24 -49
- package/dist/php.tmLanguage.js +280 -128
- package/dist/scalameta.js +19 -2
- package/dist/scss.js +12 -2
- package/dist/solidity2.js +1 -1
- package/dist/theme-defaults~dark_vs.js +1 -1
- package/dist/theme-defaults~hc_light.js +36 -36
- package/dist/ts.worker.js +1 -1
- package/dist/typescript-language-features.js +17 -2
- package/dist/typescript.js +1 -1
- package/dist/typescriptreact.js +1 -1
- package/dist/vscode-R-rmarkdown.js +3 -3
- package/dist/vscode-R.js +9 -9
- package/dist/vscode-python.js +16 -6
- package/dist/worker.js +1 -1
- package/dist/xml.js +1 -2
- package/dist/xsl.js +1 -2
- package/package.json +22 -24
- package/stats.html +1 -1
package/dist/json.worker.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as createBase64WorkerFactory } from './worker.js';
|
|
2
2
|
|
|
3
|
-
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y2xhc3Mgc3tjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdGVuZXJzPVtdLHRoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcj1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KCgpPT57aWYoZS5zdGFjayl0aHJvdyBuZXcgRXJyb3IoZS5tZXNzYWdlKyJcblxuIitlLnN0YWNrKTt0aHJvdyBlfSwwKX19YWRkTGlzdGVuZXIoZSl7cmV0dXJuIHRoaXMubGlzdGVuZXJzLnB1c2goZSksKCk9Pnt0aGlzLl9yZW1vdmVMaXN0ZW5lcihlKX19ZW1pdCh0KXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGU9PntlKHQpfSl9X3JlbW92ZUxpc3RlbmVyKGUpe3RoaXMubGlzdGVuZXJzLnNwbGljZSh0aGlzLmxpc3RlbmVycy5pbmRleE9mKGUpLDEpfXNldFVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyPWV9Z2V0VW5leHBlY3RlZEVycm9ySGFuZGxlcigpe3JldHVybiB0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXJ9b25VbmV4cGVjdGVkRXJyb3IoZSl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpLHRoaXMuZW1pdChlKX1vblVuZXhwZWN0ZWRFeHRlcm5hbEVycm9yKGUpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcihlKX19Y29uc3QgbD1uZXcgcztmdW5jdGlvbiBjKGUpeyFmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgZClyZXR1cm4hMDtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yJiZlLm5hbWU9PT1oJiZlLm1lc3NhZ2U9PT1ofShlKSYmbC5vblVuZXhwZWN0ZWRFcnJvcihlKX1mdW5jdGlvbiB1KGUpe3ZhciB0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj8oe25hbWU6dCxtZXNzYWdlOnJ9PWUseyRpc0Vycm9yOiEwLG5hbWU6dCxtZXNzYWdlOnIsc3RhY2s6ZS5zdGFja3RyYWNlfHxlLnN0YWNrfSk6ZX1jb25zdCBoPSJDYW5jZWxlZCI7Y2xhc3MgZCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoaCksdGhpcy5uYW1lPXRoaXMubWVzc2FnZX19dmFyIG07e3ZhciBnPW09bXx8e307Zy5pcz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZVtTeW1ib2wuaXRlcmF0b3JdfTtjb25zdCBMbz1PYmplY3QuZnJlZXplKFtdKTtnLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIExvfSxnLnNpbmdsZT1mdW5jdGlvbiooZSl7eWllbGQgZX0sZy5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybiBlfHxMb30sZy5pc0VtcHR5PWZ1bmN0aW9uKGUpe3JldHVybiFlfHwhMD09PWVbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lfSxnLmZpcnN0PWZ1bmN0aW9uKGUpe3JldHVybiBlW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9LGcuc29tZT1mdW5jdGlvbihlLHQpe2Zvcihjb25zdCByIG9mIGUpaWYodChyKSlyZXR1cm4hMDtyZXR1cm4hMX0sZy5maW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKGNvbnN0IHIgb2YgZSlpZih0KHIpKXJldHVybiByfSxnLmZpbHRlcj1mdW5jdGlvbiooZSx0KXtmb3IoY29uc3QgciBvZiBlKXQocikmJih5aWVsZCByKX0sZy5tYXA9ZnVuY3Rpb24qKGUsdCl7bGV0IHI9MDtmb3IoY29uc3QgbiBvZiBlKXlpZWxkIHQobixyKyspfSxnLmNvbmNhdD1mdW5jdGlvbiooLi4uZSl7Zm9yKGNvbnN0IHQgb2YgZSlmb3IoY29uc3QgciBvZiB0KXlpZWxkIHJ9LGcuY29uY2F0TmVzdGVkPWZ1bmN0aW9uKihlKXtmb3IoY29uc3QgdCBvZiBlKWZvcihjb25zdCByIG9mIHQpeWllbGQgcn0sZy5yZWR1Y2U9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXI7Zm9yKGNvbnN0IGkgb2YgZSluPXQobixpKTtyZXR1cm4gbn0sZy5zbGljZT1mdW5jdGlvbiooZSx0LHI9ZS5sZW5ndGgpe2Zvcih0PDAmJih0Kz1lLmxlbmd0aCkscjwwP3IrPWUubGVuZ3RoOnI+ZS5sZW5ndGgmJihyPWUubGVuZ3RoKTt0PHI7dCsrKXlpZWxkIGVbdF19LGcuY29uc3VtZT1mdW5jdGlvbihlLHQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXtjb25zdCByPVtdO2lmKDA9PT10KXJldHVybltyLGVdO2NvbnN0IG49ZVtTeW1ib2wuaXRlcmF0b3JdKCk7Zm9yKGxldCBlPTA7ZTx0O2UrKyl7dmFyIGk9bi5uZXh0KCk7aWYoaS5kb25lKXJldHVybltyLGcuZW1wdHkoKV07ci5wdXNoKGkudmFsdWUpfXJldHVybltyLHtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBufX1dfSxnLmVxdWFscz1mdW5jdGlvbihlLHQscj0oZSx0KT0+ZT09PXQpe2NvbnN0IG49ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe3ZhciBvPW4ubmV4dCgpLGE9aS5uZXh0KCk7aWYoby5kb25lIT09YS5kb25lKXJldHVybiExO2lmKG8uZG9uZSlyZXR1cm4hMDtpZighcihvLnZhbHVlLGEudmFsdWUpKXJldHVybiExfX19Y2xhc3MgcCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBFbmNvdW50ZXJlZCBlcnJvcnMgd2hpbGUgZGlzcG9zaW5nIG9mIHN0b3JlLiBFcnJvcnM6IFske2Uuam9pbigiLCAiKX1dYCksdGhpcy5lcnJvcnM9ZX19ZnVuY3Rpb24gYihlKXtpZihtLmlzKGUpKXtsZXQgdD1bXTtmb3IoY29uc3QgciBvZiBlKWlmKHIpdHJ5e3IuZGlzcG9zZSgpfWNhdGNoKGUpe3QucHVzaChlKX1pZigxPT09dC5sZW5ndGgpdGhyb3cgdFswXTtpZigxPHQubGVuZ3RoKXRocm93IG5ldyBwKHQpO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1tdOmV9aWYoZSlyZXR1cm4gZS5kaXNwb3NlKCksZX1mdW5jdGlvbiB2KGUpe3JldHVybntkaXNwb3NlOmZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcztsZXQgcj0hMSxuO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByP246KHI9ITAsbj1lLmFwcGx5KHQsYXJndW1lbnRzKSl9fSgoKT0+e2UoKX0pfX1jbGFzcyB5e2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7dHJ5e2IodGhpcy5fdG9EaXNwb3NlLnZhbHVlcygpKX1maW5hbGx5e3RoaXMuX3RvRGlzcG9zZS5jbGVhcigpfX1hZGQoZSl7aWYoIWUpcmV0dXJuIGU7aWYoZT09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZD95LkRJU0FCTEVfRElTUE9TRURfV0FSTklOR3x8Y29uc29sZS53YXJuKG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBhIGRpc3Bvc2FibGUgdG8gYSBEaXNwb3NhYmxlU3RvcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9mLiBUaGUgYWRkZWQgb2JqZWN0IHdpbGwgYmUgbGVha2VkISIpLnN0YWNrKTp0aGlzLl90b0Rpc3Bvc2UuYWRkKGUpLGV9fXkuRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HPSExO2NsYXNzIEN7Y29uc3RydWN0b3IoKXt0aGlzLl9zdG9yZT1uZXcgeSx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3RlcihlKXtpZihlPT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQoZSl9fUMuTm9uZT1PYmplY3QuZnJlZXplKHtkaXNwb3NlKCl7fX0pO2NsYXNzIHd7Y29uc3RydWN0b3IoKXt0aGlzLmRpc3Bvc2U9KCk9Pnt9LHRoaXMudW5zZXQ9KCk9Pnt9LHRoaXMuaXNzZXQ9KCk9PiExfXNldChlKXtsZXQgdD1lO3JldHVybiB0aGlzLnVuc2V0PSgpPT50PXZvaWQgMCx0aGlzLmlzc2V0PSgpPT52b2lkIDAhPT10LHRoaXMuZGlzcG9zZT0oKT0+e3QmJih0KCksdD12b2lkIDApfSx0aGlzfX1jbGFzcyBfe2NvbnN0cnVjdG9yKGUpe3RoaXMuZWxlbWVudD1lLHRoaXMubmV4dD1fLlVuZGVmaW5lZCx0aGlzLnByZXY9Xy5VbmRlZmluZWR9fV8uVW5kZWZpbmVkPW5ldyBfKHZvaWQgMCk7Y2xhc3MgU3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZpcnN0PV8uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9Xy5VbmRlZmluZWQsdGhpcy5fc2l6ZT0wfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9aXNFbXB0eSgpe3JldHVybiB0aGlzLl9maXJzdD09PV8uVW5kZWZpbmVkfWNsZWFyKCl7bGV0IGU9dGhpcy5fZmlyc3Q7Zm9yKDtlIT09Xy5VbmRlZmluZWQ7KXt2YXIgdD1lLm5leHQ7ZS5wcmV2PV8uVW5kZWZpbmVkLGUubmV4dD1fLlVuZGVmaW5lZCxlPXR9dGhpcy5fZmlyc3Q9Xy5VbmRlZmluZWQsdGhpcy5fbGFzdD1fLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5faW5zZXJ0KGUsITEpfXB1c2goZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCEwKX1faW5zZXJ0KGUsdCl7Y29uc3Qgcj1uZXcgXyhlKTtpZih0aGlzLl9maXJzdD09PV8uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PXIsdGhpcy5fbGFzdD1yO2Vsc2UgaWYodCl7Y29uc3QgaT10aGlzLl9sYXN0OygodGhpcy5fbGFzdD1yKS5wcmV2PWkpLm5leHQ9cn1lbHNle2NvbnN0IG89dGhpcy5fZmlyc3Q7KCh0aGlzLl9maXJzdD1yKS5uZXh0PW8pLnByZXY9cn10aGlzLl9zaXplKz0xO2xldCBuPSExO3JldHVybigpPT57bnx8KG49ITAsdGhpcy5fcmVtb3ZlKHIpKX19c2hpZnQoKXt2YXIgZTtpZih0aGlzLl9maXJzdCE9PV8uVW5kZWZpbmVkKXJldHVybiBlPXRoaXMuX2ZpcnN0LmVsZW1lbnQsdGhpcy5fcmVtb3ZlKHRoaXMuX2ZpcnN0KSxlfXBvcCgpe3ZhciBlO2lmKHRoaXMuX2xhc3QhPT1fLlVuZGVmaW5lZClyZXR1cm4gZT10aGlzLl9sYXN0LmVsZW1lbnQsdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLGV9X3JlbW92ZShlKXtpZihlLnByZXYhPT1fLlVuZGVmaW5lZCYmZS5uZXh0IT09Xy5VbmRlZmluZWQpe2NvbnN0IHQ9ZS5wcmV2O3QubmV4dD1lLm5leHQsZS5uZXh0LnByZXY9dH1lbHNlIGUucHJldj09PV8uVW5kZWZpbmVkJiZlLm5leHQ9PT1fLlVuZGVmaW5lZD8odGhpcy5fZmlyc3Q9Xy5VbmRlZmluZWQsdGhpcy5fbGFzdD1fLlVuZGVmaW5lZCk6ZS5uZXh0PT09Xy5VbmRlZmluZWQ/KHRoaXMuX2xhc3Q9dGhpcy5fbGFzdC5wcmV2LHRoaXMuX2xhc3QubmV4dD1fLlVuZGVmaW5lZCk6ZS5wcmV2PT09Xy5VbmRlZmluZWQmJih0aGlzLl9maXJzdD10aGlzLl9maXJzdC5uZXh0LHRoaXMuX2ZpcnN0LnByZXY9Xy5VbmRlZmluZWQpOy0tdGhpcy5fc2l6ZX0qW1N5bWJvbC5pdGVyYXRvcl0oKXtsZXQgZT10aGlzLl9maXJzdDtmb3IoO2UhPT1fLlVuZGVmaW5lZDspeWllbGQgZS5lbGVtZW50LGU9ZS5uZXh0fX12YXIgZT0iZW4iO2xldCBBPSExLHg9ITEsRT0hMSxOPSExLGs9dm9pZCAwLEw9ZTtsZXQgTT12b2lkIDA7Y29uc3QgTz0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZjoib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6e307bGV0IFQ9dm9pZCAwO3ZvaWQgMCE9PU8udnNjb2RlJiZ2b2lkIDAhPT1PLnZzY29kZS5wcm9jZXNzP1Q9Ty52c2NvZGUucHJvY2VzczoidW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJihUPXByb2Nlc3MpO3ZhciB0PSJzdHJpbmciPT10eXBlb2YobnVsbD09PSh0PW51bGw9PT1UfHx2b2lkIDA9PT1UP3ZvaWQgMDpULnZlcnNpb25zKXx8dm9pZCAwPT09dD92b2lkIDA6dC5lbGVjdHJvbikmJiJyZW5kZXJlciI9PT0obnVsbD09PVR8fHZvaWQgMD09PVQ/dm9pZCAwOlQudHlwZSk7aWYoIm9iamVjdCIhPXR5cGVvZiBuYXZpZ2F0b3J8fHQpaWYoIm9iamVjdCI9PXR5cGVvZiBUKXtBPSJ3aW4zMiI9PT1ULnBsYXRmb3JtLHg9ImRhcndpbiI9PT1ULnBsYXRmb3JtLChFPSJsaW51eCI9PT1ULnBsYXRmb3JtKSYmVC5lbnYuU05BUCYmVC5lbnYuU05BUF9SRVZJU0lPTixULmVudi5DSXx8VC5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLGs9ZSxMPWU7dD1ULmVudi5WU0NPREVfTkxTX0NPTkZJRztpZih0KXRyeXt2YXIgST1KU09OLnBhcnNlKHQpLHI9SS5hdmFpbGFibGVMYW5ndWFnZXNbIioiXTtrPUkubG9jYWxlLEw9cnx8ZSxJLl90cmFuc2xhdGlvbnNDb25maWdGaWxlfWNhdGNoKGUpe319ZWxzZSBjb25zb2xlLmVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBwbGF0Zm9ybS4iKTtlbHNlIE09bmF2aWdhdG9yLnVzZXJBZ2VudCxBPTA8PU0uaW5kZXhPZigiV2luZG93cyIpLHg9MDw9TS5pbmRleE9mKCJNYWNpbnRvc2giKSwoMDw9TS5pbmRleE9mKCJNYWNpbnRvc2giKXx8MDw9TS5pbmRleE9mKCJpUGFkIil8fDA8PU0uaW5kZXhPZigiaVBob25lIikpJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyxFPTA8PU0uaW5kZXhPZigiTGludXgiKSxOPSEwLGs9bmF2aWdhdG9yLmxhbmd1YWdlLEw9aztjb25zdCBQPUEsVj14LFI9KE4mJk8uaW1wb3J0U2NyaXB0cyxNKTsoKCk9PntpZigiZnVuY3Rpb24iIT10eXBlb2YgTy5wb3N0TWVzc2FnZXx8Ty5pbXBvcnRTY3JpcHRzKXJldHVybjt7bGV0IGk9W10sZT0oTy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyPT57aWYoci5kYXRhJiZyLmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCBuPWlbZV07aWYobi5pZD09PXIuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gaS5zcGxpY2UoZSwxKSx2b2lkIG4uY2FsbGJhY2soKX19KSwwKX19KSgpO3ZhciBELHQ9ISEoUiYmMDw9Ui5pbmRleE9mKCJDaHJvbWUiKSk7UiYmUi5pbmRleE9mKCJGaXJlZm94IiksIXQmJlImJlIuaW5kZXhPZigiU2FmYXJpIiksUiYmUi5pbmRleE9mKCJFZGcvIiksUiYmUi5pbmRleE9mKCJBbmRyb2lkIik7Y29uc3QgRj1PLnBlcmZvcm1hbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5wZXJmb3JtYW5jZS5ub3c7Y2xhc3MgS3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9oaWdoUmVzb2x1dGlvbj1GJiZlLHRoaXMuX3N0YXJ0VGltZT10aGlzLl9ub3coKSx0aGlzLl9zdG9wVGltZT0tMX1zdGF0aWMgY3JlYXRlKGU9ITApe3JldHVybiBuZXcgSyhlKX1zdG9wKCl7dGhpcy5fc3RvcFRpbWU9dGhpcy5fbm93KCl9ZWxhcHNlZCgpe3JldHVybi0xIT09dGhpcy5fc3RvcFRpbWU/dGhpcy5fc3RvcFRpbWUtdGhpcy5fc3RhcnRUaW1lOnRoaXMuX25vdygpLXRoaXMuX3N0YXJ0VGltZX1fbm93KCl7cmV0dXJuKHRoaXMuX2hpZ2hSZXNvbHV0aW9uP08ucGVyZm9ybWFuY2U6RGF0ZSkubm93KCl9fXt2YXIgaj0kbj0kbnx8e307ZnVuY3Rpb24gVShvKXtyZXR1cm4odCxyPW51bGwsZSk9PntsZXQgbj0hMSxpO3JldHVybiBpPW8oZT0+e2lmKCFuKXJldHVybiBpP2kuZGlzcG9zZSgpOm49ITAsdC5jYWxsKHIsZSl9LG51bGwsZSksbiYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gcShuLGksZSl7cmV0dXJuIEgoKHQscj1udWxsLGUpPT5uKGU9PnQuY2FsbChyLGkoZSkpLG51bGwsZSksZSl9ZnVuY3Rpb24gQihuLGksZSl7cmV0dXJuIEgoKHQscj1udWxsLGUpPT5uKGU9PntpKGUpLHQuY2FsbChyLGUpfSxudWxsLGUpLGUpfWZ1bmN0aW9uICQobixpLGUpe3JldHVybiBIKCh0LHI9bnVsbCxlKT0+bihlPT5pKGUpJiZ0LmNhbGwocixlKSxudWxsLGUpLGUpfWZ1bmN0aW9uIFcoZSx0LHIsbil7bGV0IGk9cjtyZXR1cm4gcShlLGU9Pmk9dChpLGUpLG4pfWZ1bmN0aW9uIEgoZSx0KXtsZXQgcjt2YXIgbj17b25GaXJzdExpc3RlbmVyQWRkKCl7cj1lKGkuZmlyZSxpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtyLmRpc3Bvc2UoKX19O2NvbnN0IGk9bmV3IFEobik7cmV0dXJuIHQmJnQuYWRkKGkpLGkuZXZlbnR9ZnVuY3Rpb24geihlLHQsdT0xMDAscj0hMSxuLGkpe2xldCBvLGE9dm9pZCAwLHM9dm9pZCAwLGw9MDtuPXtsZWFrV2FybmluZ1RocmVzaG9sZDpuLG9uRmlyc3RMaXN0ZW5lckFkZCgpe289ZShlPT57bCsrLGE9dChhLGUpLHImJiFzJiYoYy5maXJlKGEpLGE9dm9pZCAwKSxjbGVhclRpbWVvdXQocykscz1zZXRUaW1lb3V0KCgpPT57dmFyIGU9YTthPXZvaWQgMCxzPXZvaWQgMCwoIXJ8fDE8bCkmJmMuZmlyZShlKSxsPTB9LHUpfSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlKCl7by5kaXNwb3NlKCl9fTtjb25zdCBjPW5ldyBRKG4pO3JldHVybiBpJiZpLmFkZChjKSxjLmV2ZW50fWZ1bmN0aW9uIEooZSxyPShlLHQpPT5lPT09dCx0KXtsZXQgbj0hMCxpO3JldHVybiAkKGUsZT0+e3ZhciB0PW58fCFyKGUsaSk7cmV0dXJuIG49ITEsaT1lLHR9LHQpfWouTm9uZT0oKT0+Qy5Ob25lLGoub25jZT1VLGoubWFwPXEsai5mb3JFYWNoPUIsai5maWx0ZXI9JCxqLnNpZ25hbD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sai5hbnk9ZnVuY3Rpb24oLi4uaSl7cmV0dXJuKHQscj1udWxsLG4pPT57dmFyWy4uLmVdPVsuLi5pLm1hcChlPT5lKGU9PnQuY2FsbChyLGUpLG51bGwsbikpXTtyZXR1cm4gdigoKT0+YihlKSl9fSxqLnJlZHVjZT1XLGouZGVib3VuY2U9eixqLmxhdGNoPUosai5zcGxpdD1mdW5jdGlvbihlLHQscil7cmV0dXJuW2ouZmlsdGVyKGUsdCxyKSxqLmZpbHRlcihlLGU9PiF0KGUpLHIpXX0sai5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLHI9W10pe2xldCBuPXIuc2xpY2UoKSxpPWUoZT0+e24/bi5wdXNoKGUpOmEuZmlyZShlKX0pO2NvbnN0IG89KCk9PntuJiZuLmZvckVhY2goZT0+YS5maXJlKGUpKSxuPW51bGx9LGE9bmV3IFEoe29uRmlyc3RMaXN0ZW5lckFkZCgpe2k9aXx8ZShlPT5hLmZpcmUoZSkpfSxvbkZpcnN0TGlzdGVuZXJEaWRBZGQoKXtuJiYodD9zZXRUaW1lb3V0KG8pOm8oKSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlKCl7aSYmaS5kaXNwb3NlKCksaT1udWxsfX0pO3JldHVybiBhLmV2ZW50fTtjbGFzcyBNb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmV2ZW50PWV9bWFwKGUpe3JldHVybiBuZXcgTW8ocSh0aGlzLmV2ZW50LGUpKX1mb3JFYWNoKGUpe3JldHVybiBuZXcgTW8oQih0aGlzLmV2ZW50LGUpKX1maWx0ZXIoZSl7cmV0dXJuIG5ldyBNbygkKHRoaXMuZXZlbnQsZSkpfXJlZHVjZShlLHQpe3JldHVybiBuZXcgTW8oVyh0aGlzLmV2ZW50LGUsdCkpfWxhdGNoKCl7cmV0dXJuIG5ldyBNbyhKKHRoaXMuZXZlbnQpKX1kZWJvdW5jZShlLHQ9MTAwLHI9ITEsbil7cmV0dXJuIG5ldyBNbyh6KHRoaXMuZXZlbnQsZSx0LHIsbikpfW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5ldmVudChlLHQscil9b25jZShlLHQscil7cmV0dXJuIFUodGhpcy5ldmVudCkoZSx0LHIpfX1qLmNoYWluPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTW8oZSl9LGouZnJvbU5vZGVFdmVudEVtaXR0ZXI9ZnVuY3Rpb24oZSx0LHI9ZT0+ZSl7Y29uc3Qgbj0oLi4uZSk9PmkuZmlyZShyKC4uLmUpKSxpPW5ldyBRKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUub24odCxuKSxvbkxhc3RMaXN0ZW5lclJlbW92ZTooKT0+ZS5yZW1vdmVMaXN0ZW5lcih0LG4pfSk7cmV0dXJuIGkuZXZlbnR9LGouZnJvbURPTUV2ZW50RW1pdHRlcj1mdW5jdGlvbihlLHQscj1lPT5lKXtjb25zdCBuPSguLi5lKT0+aS5maXJlKHIoLi4uZSkpLGk9bmV3IFEoe29uRmlyc3RMaXN0ZW5lckFkZDooKT0+ZS5hZGRFdmVudExpc3RlbmVyKHQsbiksb25MYXN0TGlzdGVuZXJSZW1vdmU6KCk9PmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSk7cmV0dXJuIGkuZXZlbnR9LGoudG9Qcm9taXNlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT5VKHQpKGUpKX0sai5ydW5BbmRTdWJzY3JpYmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCh2b2lkIDApLGUoZT0+dChlKSl9LGoucnVuQW5kU3Vic2NyaWJlV2l0aFN0b3JlPWZ1bmN0aW9uKGUsdCl7bGV0IHI9bnVsbDtmdW5jdGlvbiBuKGUpe251bGwhPT1yJiZ2b2lkIDAhPT1yJiZyLmRpc3Bvc2UoKSxyPW5ldyB5LHQoZSxyKX1uKHZvaWQgMCk7Y29uc3QgaT1lKGU9Pm4oZSkpO3JldHVybiB2KCgpPT57aS5kaXNwb3NlKCksbnVsbCE9PXImJnZvaWQgMCE9PXImJnIuZGlzcG9zZSgpfSl9fWNsYXNzIEd7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGlzdGVuZXJDb3VudD0wLHRoaXMuX2ludm9jYXRpb25Db3VudD0wLHRoaXMuX2VsYXBzZWRPdmVyYWxsPTAsdGhpcy5fbmFtZT1lKyJfIitHLl9pZFBvb2wrK31zdGFydChlKXt0aGlzLl9zdG9wV2F0Y2g9bmV3IEsoITApLHRoaXMuX2xpc3RlbmVyQ291bnQ9ZX1zdG9wKCl7aWYodGhpcy5fc3RvcFdhdGNoKXtjb25zdCBlPXRoaXMuX3N0b3BXYXRjaC5lbGFwc2VkKCk7dGhpcy5fZWxhcHNlZE92ZXJhbGwrPWUsdGhpcy5faW52b2NhdGlvbkNvdW50Kz0xLGNvbnNvbGUuaW5mbyhgZGlkIEZJUkUgJHt0aGlzLl9uYW1lfTogZWxhcHNlZF9tczogJHtlLnRvRml4ZWQoNSl9LCBsaXN0ZW5lcjogJHt0aGlzLl9saXN0ZW5lckNvdW50fSAoZWxhcHNlZF9vdmVyYWxsOiAke3RoaXMuX2VsYXBzZWRPdmVyYWxsLnRvRml4ZWQoMil9LCBpbnZvY2F0aW9uczogJHt0aGlzLl9pbnZvY2F0aW9uQ291bnR9KWApLHRoaXMuX3N0b3BXYXRjaD12b2lkIDB9fX1HLl9pZFBvb2w9MDtjbGFzcyBae2NvbnN0cnVjdG9yKGUpe3RoaXMudmFsdWU9ZX1zdGF0aWMgY3JlYXRlKCl7dmFyIGU7cmV0dXJuIG5ldyBaKG51bGwhPT0oZT0obmV3IEVycm9yKS5zdGFjaykmJnZvaWQgMCE9PWU/ZToiIil9cHJpbnQoKXtjb25zb2xlLndhcm4odGhpcy52YWx1ZS5zcGxpdCgiXG4iKS5zbGljZSgyKS5qb2luKCJcbiIpKX19Y2xhc3MgWHtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5jYWxsYmFjaz1lLHRoaXMuY2FsbGJhY2tUaGlzPXQsdGhpcy5zdGFjaz1yLHRoaXMuc3Vic2NyaXB0aW9uPW5ldyB3fWludm9rZShlKXt0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy5jYWxsYmFja1RoaXMsZSl9fWNsYXNzIFF7Y29uc3RydWN0b3IoZSl7dGhpcy5fZGlzcG9zZWQ9ITEsdGhpcy5fb3B0aW9ucz1lLHRoaXMuX2xlYWthZ2VNb249dm9pZCAwLHRoaXMuX3BlcmZNb249bnVsbCE9PShlPXRoaXMuX29wdGlvbnMpJiZ2b2lkIDAhPT1lJiZlLl9wcm9mTmFtZT9uZXcgRyh0aGlzLl9vcHRpb25zLl9wcm9mTmFtZSk6dm9pZCAwfWRpc3Bvc2UoKXt2YXIgZSx0O3RoaXMuX2Rpc3Bvc2VkfHwodGhpcy5fZGlzcG9zZWQ9ITAsdGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnMuY2xlYXIoKSxudWxsIT09KGU9dGhpcy5fZGVsaXZlcnlRdWV1ZSkmJnZvaWQgMCE9PWUmJmUuY2xlYXIoKSxudWxsIT09KHQ9bnVsbD09PShlPXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm9uTGFzdExpc3RlbmVyUmVtb3ZlKSYmdm9pZCAwIT09dCYmdC5jYWxsKGUpLG51bGwhPT0odD10aGlzLl9sZWFrYWdlTW9uKSYmdm9pZCAwIT09dCYmdC5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHQscik9Pnt0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9bmV3IFMpO3ZhciBuLGksbz10aGlzLl9saXN0ZW5lcnMuaXNFbXB0eSgpO28mJm51bGwhPT0oaT10aGlzLl9vcHRpb25zKSYmdm9pZCAwIT09aSYmaS5vbkZpcnN0TGlzdGVuZXJBZGQmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpO2xldCBhLHM7dGhpcy5fbGVha2FnZU1vbiYmMzA8PXRoaXMuX2xpc3RlbmVycy5zaXplJiYocz1aLmNyZWF0ZSgpLGE9dGhpcy5fbGVha2FnZU1vbi5jaGVjayhzLHRoaXMuX2xpc3RlbmVycy5zaXplKzEpKTtjb25zdCBsPW5ldyBYKGUsdCxzKSxjPXRoaXMuX2xpc3RlbmVycy5wdXNoKGwpO28mJm51bGwhPT0obj10aGlzLl9vcHRpb25zKSYmdm9pZCAwIT09biYmbi5vbkZpcnN0TGlzdGVuZXJEaWRBZGQmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyRGlkQWRkKHRoaXMpLG51bGwhPT0oaT10aGlzLl9vcHRpb25zKSYmdm9pZCAwIT09aSYmaS5vbkxpc3RlbmVyRGlkQWRkJiZ0aGlzLl9vcHRpb25zLm9uTGlzdGVuZXJEaWRBZGQodGhpcyxlLHQpO289bC5zdWJzY3JpcHRpb24uc2V0KCgpPT57YSYmYSgpLHRoaXMuX2Rpc3Bvc2VkfHwoYygpLHRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUmJih0aGlzLl9saXN0ZW5lcnMmJiF0aGlzLl9saXN0ZW5lcnMuaXNFbXB0eSgpfHx0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKHRoaXMpKSl9KTtyZXR1cm4gciBpbnN0YW5jZW9mIHk/ci5hZGQobyk6QXJyYXkuaXNBcnJheShyKSYmci5wdXNoKG8pLG99KSx0aGlzLl9ldmVudH1maXJlKGUpe3ZhciB0O2lmKHRoaXMuX2xpc3RlbmVycyl7dGhpcy5fZGVsaXZlcnlRdWV1ZXx8KHRoaXMuX2RlbGl2ZXJ5UXVldWU9bmV3IFMpO2Zvcih2YXIgciBvZiB0aGlzLl9saXN0ZW5lcnMpdGhpcy5fZGVsaXZlcnlRdWV1ZS5wdXNoKFtyLGVdKTtmb3IobnVsbCE9PSh0PXRoaXMuX3BlcmZNb24pJiZ2b2lkIDAhPT10JiZ0LnN0YXJ0KHRoaXMuX2RlbGl2ZXJ5UXVldWUuc2l6ZSk7MDx0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemU7KXtjb25zdFtuLGVdPXRoaXMuX2RlbGl2ZXJ5UXVldWUuc2hpZnQoKTt0cnl7bi5pbnZva2UoZSl9Y2F0Y2goZSl7YyhlKX19bnVsbCE9PSh0PXRoaXMuX3BlcmZNb24pJiZ2b2lkIDAhPT10JiZ0LnN0b3AoKX19fWZ1bmN0aW9uIFkoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgciBvZiBmdW5jdGlvbihlKXtsZXQgdD1bXSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtmb3IoO09iamVjdC5wcm90b3R5cGUhPT1yOyl0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpKSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtyZXR1cm4gdH0oZSkpImZ1bmN0aW9uIj09dHlwZW9mIGVbcl0mJnQucHVzaChyKTtyZXR1cm4gdH1mdW5jdGlvbiBlZShlLHIpe2xldCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpdFtuXT0odD0+ZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHIodCxlKX0pKG4pO3JldHVybiB0fWNsYXNzIHRle2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9Z2V0VmFsdWUoKXtpZighdGhpcy5fZGlkUnVuKXRyeXt0aGlzLl92YWx1ZT10aGlzLmV4ZWN1dG9yKCl9Y2F0Y2goZSl7dGhpcy5fZXJyb3I9ZX1maW5hbGx5e3RoaXMuX2RpZFJ1bj0hMH1pZih0aGlzLl9lcnJvcil0aHJvdyB0aGlzLl9lcnJvcjtyZXR1cm4gdGhpcy5fdmFsdWV9Z2V0IHJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiByZShyLG4saT0wLG89ci5sZW5ndGgsYT0wLHM9bi5sZW5ndGgpe2Zvcig7aTxvJiZhPHM7aSsrLGErKyl7bGV0IGU9ci5jaGFyQ29kZUF0KGkpLHQ9bi5jaGFyQ29kZUF0KGEpO2lmKGUhPT10KXtpZigxMjg8PWV8fDEyODw9dClyZXR1cm4gZnVuY3Rpb24oZSx0LHI9MCxuPWUubGVuZ3RoLGk9MCxvPXQubGVuZ3RoKXtmb3IoO3I8biYmaTxvO3IrKyxpKyspe3ZhciBhPWUuY2hhckNvZGVBdChyKSxzPXQuY2hhckNvZGVBdChpKTtpZihhPHMpcmV0dXJuLTE7aWYoczxhKXJldHVybiAxfXZhciBsPW4tcixjPW8taTtyZXR1cm4gbDxjPy0xOmM8bD8xOjB9KHIudG9Mb3dlckNhc2UoKSxuLnRvTG93ZXJDYXNlKCksaSxvLGEscyk7bmUoZSkmJihlLT0zMiksbmUodCkmJih0LT0zMik7dmFyIGw9ZS10O2lmKDAhPWwpcmV0dXJuIGx9fXZhciBlPW8taSx0PXMtYTtyZXR1cm4gZTx0Py0xOnQ8ZT8xOjB9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIDk3PD1lJiZlPD0xMjJ9ZnVuY3Rpb24gaWUoZSl7cmV0dXJuIDY1PD1lJiZlPD05MH1mdW5jdGlvbiBvZShlKXtyZXR1cm4gNTUyOTY8PWUmJmU8PTU2MzE5fWNvbnN0IGFlPS9eW1x0XG5cclx4MjAtXHg3RV0qJC87Y2xhc3Mgc2V7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeT1lfXN0YXRpYyBnZXRJbnN0YW5jZShlKXtyZXR1cm4gc2UuY2FjaGUuZ2V0KEFycmF5LmZyb20oZSkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIHNlLl9sb2NhbGVzLmdldFZhbHVlKCl9aXNBbWJpZ3VvdXMoZSl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuaGFzKGUpfWdldFByaW1hcnlDb25mdXNhYmxlKGUpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmdldChlKX1nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpe3JldHVybiBuZXcgU2V0KHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkua2V5cygpKX19KEQ9c2UpLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3IHRlKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjVdLCJfZGVmYXVsdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJjcyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZGUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImVzIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImZyIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sIml0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJqYSI6WzgyMTEsNDUsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MjkyLDQ0LDY1MzA3LDU5XSwia28iOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInBsIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInB0LUJSIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInFwcy1wbG9jIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInJ1IjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywzMDUsMTA1LDkyMSw3MywxMDA5LDExMiwyMTUsMTIwLDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwidHIiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiemgtaGFucyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4OCw0MCw2NTI4OSw0MV0sInpoLWhhbnQiOls4MjExLDQ1LDY1Mzc0LDEyNiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUzMDcsNTldfScpKSxzZS5jYWNoZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wdXRlRm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7dmFyIHQ9SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIHRoaXMubGFzdEFyZ0tleSE9PXQmJih0aGlzLmxhc3RBcmdLZXk9dCx0aGlzLmxhc3RDYWNoZT10aGlzLmNvbXB1dGVGbihlKSksdGhpcy5sYXN0Q2FjaGV9fShlPT57ZnVuY3Rpb24gdCh0KXtjb25zdCByPW5ldyBNYXA7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXIuc2V0KHRbZV0sdFtlKzFdKTtyZXR1cm4gcn1jb25zdCByPUQuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS5nZXRWYWx1ZSgpO2xldCBuPWUuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSYmZSBpbiByKSxpPXZvaWQgMDtmb3IoY29uc3QgYSBvZiBuPTA9PT1uLmxlbmd0aD9bIl9kZWZhdWx0Il06bil7Y29uc3Qgbz10KHJbYV0pO2k9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gdDtjb25zdCByPW5ldyBNYXA7Zm9yKHZhcltuLGldb2YgZSl0LmhhcyhuKSYmci5zZXQobixpKTtyZXR1cm4gcn0oaSxvKX1jb25zdCBvPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1uZXcgTWFwKGUpO2Zvcih2YXJbbixpXW9mIHQpci5zZXQobixpKTtyZXR1cm4gcn0odChyLl9jb21tb24pLGkpO3JldHVybiBuZXcgc2Uobyl9KSxzZS5fbG9jYWxlcz1uZXcgdGUoKCk9Pk9iamVjdC5rZXlzKHNlLmFtYmlndW91c0NoYXJhY3RlckRhdGEuZ2V0VmFsdWUoKSkuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpO2NsYXNzIGxle3N0YXRpYyBnZXRSYXdEYXRhKCl7cmV0dXJuIEpTT04ucGFyc2UoIls5LDEwLDExLDEyLDEzLDMyLDEyNywxNjAsMTczLDg0NywxNTY0LDQ0NDcsNDQ0OCw2MDY4LDYwNjksNjE1NSw2MTU2LDYxNTcsNjE1OCw3MzU1LDczNTYsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4MjM0LDgyMzUsODIzNiw4MjM3LDgyMzgsODIzOSw4Mjg3LDgyODgsODI4OSw4MjkwLDgyOTEsODI5Miw4MjkzLDgyOTQsODI5NSw4Mjk2LDgyOTcsODI5OCw4Mjk5LDgzMDAsODMwMSw4MzAyLDgzMDMsMTAyNDAsMTIyODgsMTI2NDQsNjUwMjQsNjUwMjUsNjUwMjYsNjUwMjcsNjUwMjgsNjUwMjksNjUwMzAsNjUwMzEsNjUwMzIsNjUwMzMsNjUwMzQsNjUwMzUsNjUwMzYsNjUwMzcsNjUwMzgsNjUwMzksNjUyNzksNjU0NDAsNjU1MjAsNjU1MjEsNjU1MjIsNjU1MjMsNjU1MjQsNjU1MjUsNjU1MjYsNjU1MjcsNjU1MjgsNjU1MzIsNzg4NDQsMTE5MTU1LDExOTE1NiwxMTkxNTcsMTE5MTU4LDExOTE1OSwxMTkxNjAsMTE5MTYxLDExOTE2Miw5MTc1MDQsOTE3NTA1LDkxNzUwNiw5MTc1MDcsOTE3NTA4LDkxNzUwOSw5MTc1MTAsOTE3NTExLDkxNzUxMiw5MTc1MTMsOTE3NTE0LDkxNzUxNSw5MTc1MTYsOTE3NTE3LDkxNzUxOCw5MTc1MTksOTE3NTIwLDkxNzUyMSw5MTc1MjIsOTE3NTIzLDkxNzUyNCw5MTc1MjUsOTE3NTI2LDkxNzUyNyw5MTc1MjgsOTE3NTI5LDkxNzUzMCw5MTc1MzEsOTE3NTMyLDkxNzUzMyw5MTc1MzQsOTE3NTM1LDkxNzUzNiw5MTc1MzcsOTE3NTM4LDkxNzUzOSw5MTc1NDAsOTE3NTQxLDkxNzU0Miw5MTc1NDMsOTE3NTQ0LDkxNzU0NSw5MTc1NDYsOTE3NTQ3LDkxNzU0OCw5MTc1NDksOTE3NTUwLDkxNzU1MSw5MTc1NTIsOTE3NTUzLDkxNzU1NCw5MTc1NTUsOTE3NTU2LDkxNzU1Nyw5MTc1NTgsOTE3NTU5LDkxNzU2MCw5MTc1NjEsOTE3NTYyLDkxNzU2Myw5MTc1NjQsOTE3NTY1LDkxNzU2Niw5MTc1NjcsOTE3NTY4LDkxNzU2OSw5MTc1NzAsOTE3NTcxLDkxNzU3Miw5MTc1NzMsOTE3NTc0LDkxNzU3NSw5MTc1NzYsOTE3NTc3LDkxNzU3OCw5MTc1NzksOTE3NTgwLDkxNzU4MSw5MTc1ODIsOTE3NTgzLDkxNzU4NCw5MTc1ODUsOTE3NTg2LDkxNzU4Nyw5MTc1ODgsOTE3NTg5LDkxNzU5MCw5MTc1OTEsOTE3NTkyLDkxNzU5Myw5MTc1OTQsOTE3NTk1LDkxNzU5Niw5MTc1OTcsOTE3NTk4LDkxNzU5OSw5MTc2MDAsOTE3NjAxLDkxNzYwMiw5MTc2MDMsOTE3NjA0LDkxNzYwNSw5MTc2MDYsOTE3NjA3LDkxNzYwOCw5MTc2MDksOTE3NjEwLDkxNzYxMSw5MTc2MTIsOTE3NjEzLDkxNzYxNCw5MTc2MTUsOTE3NjE2LDkxNzYxNyw5MTc2MTgsOTE3NjE5LDkxNzYyMCw5MTc2MjEsOTE3NjIyLDkxNzYyMyw5MTc2MjQsOTE3NjI1LDkxNzYyNiw5MTc2MjcsOTE3NjI4LDkxNzYyOSw5MTc2MzAsOTE3NjMxLDkxNzc2MCw5MTc3NjEsOTE3NzYyLDkxNzc2Myw5MTc3NjQsOTE3NzY1LDkxNzc2Niw5MTc3NjcsOTE3NzY4LDkxNzc2OSw5MTc3NzAsOTE3NzcxLDkxNzc3Miw5MTc3NzMsOTE3Nzc0LDkxNzc3NSw5MTc3NzYsOTE3Nzc3LDkxNzc3OCw5MTc3NzksOTE3NzgwLDkxNzc4MSw5MTc3ODIsOTE3NzgzLDkxNzc4NCw5MTc3ODUsOTE3Nzg2LDkxNzc4Nyw5MTc3ODgsOTE3Nzg5LDkxNzc5MCw5MTc3OTEsOTE3NzkyLDkxNzc5Myw5MTc3OTQsOTE3Nzk1LDkxNzc5Niw5MTc3OTcsOTE3Nzk4LDkxNzc5OSw5MTc4MDAsOTE3ODAxLDkxNzgwMiw5MTc4MDMsOTE3ODA0LDkxNzgwNSw5MTc4MDYsOTE3ODA3LDkxNzgwOCw5MTc4MDksOTE3ODEwLDkxNzgxMSw5MTc4MTIsOTE3ODEzLDkxNzgxNCw5MTc4MTUsOTE3ODE2LDkxNzgxNyw5MTc4MTgsOTE3ODE5LDkxNzgyMCw5MTc4MjEsOTE3ODIyLDkxNzgyMyw5MTc4MjQsOTE3ODI1LDkxNzgyNiw5MTc4MjcsOTE3ODI4LDkxNzgyOSw5MTc4MzAsOTE3ODMxLDkxNzgzMiw5MTc4MzMsOTE3ODM0LDkxNzgzNSw5MTc4MzYsOTE3ODM3LDkxNzgzOCw5MTc4MzksOTE3ODQwLDkxNzg0MSw5MTc4NDIsOTE3ODQzLDkxNzg0NCw5MTc4NDUsOTE3ODQ2LDkxNzg0Nyw5MTc4NDgsOTE3ODQ5LDkxNzg1MCw5MTc4NTEsOTE3ODUyLDkxNzg1Myw5MTc4NTQsOTE3ODU1LDkxNzg1Niw5MTc4NTcsOTE3ODU4LDkxNzg1OSw5MTc4NjAsOTE3ODYxLDkxNzg2Miw5MTc4NjMsOTE3ODY0LDkxNzg2NSw5MTc4NjYsOTE3ODY3LDkxNzg2OCw5MTc4NjksOTE3ODcwLDkxNzg3MSw5MTc4NzIsOTE3ODczLDkxNzg3NCw5MTc4NzUsOTE3ODc2LDkxNzg3Nyw5MTc4NzgsOTE3ODc5LDkxNzg4MCw5MTc4ODEsOTE3ODgyLDkxNzg4Myw5MTc4ODQsOTE3ODg1LDkxNzg4Niw5MTc4ODcsOTE3ODg4LDkxNzg4OSw5MTc4OTAsOTE3ODkxLDkxNzg5Miw5MTc4OTMsOTE3ODk0LDkxNzg5NSw5MTc4OTYsOTE3ODk3LDkxNzg5OCw5MTc4OTksOTE3OTAwLDkxNzkwMSw5MTc5MDIsOTE3OTAzLDkxNzkwNCw5MTc5MDUsOTE3OTA2LDkxNzkwNyw5MTc5MDgsOTE3OTA5LDkxNzkxMCw5MTc5MTEsOTE3OTEyLDkxNzkxMyw5MTc5MTQsOTE3OTE1LDkxNzkxNiw5MTc5MTcsOTE3OTE4LDkxNzkxOSw5MTc5MjAsOTE3OTIxLDkxNzkyMiw5MTc5MjMsOTE3OTI0LDkxNzkyNSw5MTc5MjYsOTE3OTI3LDkxNzkyOCw5MTc5MjksOTE3OTMwLDkxNzkzMSw5MTc5MzIsOTE3OTMzLDkxNzkzNCw5MTc5MzUsOTE3OTM2LDkxNzkzNyw5MTc5MzgsOTE3OTM5LDkxNzk0MCw5MTc5NDEsOTE3OTQyLDkxNzk0Myw5MTc5NDQsOTE3OTQ1LDkxNzk0Niw5MTc5NDcsOTE3OTQ4LDkxNzk0OSw5MTc5NTAsOTE3OTUxLDkxNzk1Miw5MTc5NTMsOTE3OTU0LDkxNzk1NSw5MTc5NTYsOTE3OTU3LDkxNzk1OCw5MTc5NTksOTE3OTYwLDkxNzk2MSw5MTc5NjIsOTE3OTYzLDkxNzk2NCw5MTc5NjUsOTE3OTY2LDkxNzk2Nyw5MTc5NjgsOTE3OTY5LDkxNzk3MCw5MTc5NzEsOTE3OTcyLDkxNzk3Myw5MTc5NzQsOTE3OTc1LDkxNzk3Niw5MTc5NzcsOTE3OTc4LDkxNzk3OSw5MTc5ODAsOTE3OTgxLDkxNzk4Miw5MTc5ODMsOTE3OTg0LDkxNzk4NSw5MTc5ODYsOTE3OTg3LDkxNzk4OCw5MTc5ODksOTE3OTkwLDkxNzk5MSw5MTc5OTIsOTE3OTkzLDkxNzk5NCw5MTc5OTUsOTE3OTk2LDkxNzk5Nyw5MTc5OTgsOTE3OTk5XSIpfXN0YXRpYyBnZXREYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF8fCh0aGlzLl9kYXRhPW5ldyBTZXQobGUuZ2V0UmF3RGF0YSgpKSksdGhpcy5fZGF0YX1zdGF0aWMgaXNJbnZpc2libGVDaGFyYWN0ZXIoZSl7cmV0dXJuIGxlLmdldERhdGEoKS5oYXMoZSl9c3RhdGljIGdldCBjb2RlUG9pbnRzKCl7cmV0dXJuIGxlLmdldERhdGEoKX19bGUuX2RhdGE9dm9pZCAwO2NsYXNzIGNle2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMubWV0aG9kPXIsdGhpcy5hcmdzPW4sdGhpcy50eXBlPTB9fWNsYXNzIHVle2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnNlcT10LHRoaXMucmVzPXIsdGhpcy5lcnI9bix0aGlzLnR5cGU9MX19Y2xhc3MgaGV7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5ldmVudE5hbWU9cix0aGlzLmFyZz1uLHRoaXMudHlwZT0yfX1jbGFzcyBmZXtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5ldmVudD1yLHRoaXMudHlwZT0zfX1jbGFzcyBkZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMudnNXb3JrZXI9ZSx0aGlzLnJlcT10LHRoaXMudHlwZT00fX1jbGFzcyBtZXtjb25zdHJ1Y3RvcihlKXt0aGlzLl93b3JrZXJJZD0tMSx0aGlzLl9oYW5kbGVyPWUsdGhpcy5fbGFzdFNlbnRSZXE9MCx0aGlzLl9wZW5kaW5nUmVwbGllcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3BlbmRpbmdFbWl0dGVycz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdFdmVudHM9bmV3IE1hcH1zZXRXb3JrZXJJZChlKXt0aGlzLl93b3JrZXJJZD1lfXNlbmRNZXNzYWdlKHIsbil7Y29uc3QgaT1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSk7cmV0dXJuIG5ldyBQcm9taXNlKChlLHQpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbaV09e3Jlc29sdmU6ZSxyZWplY3Q6dH0sdGhpcy5fc2VuZChuZXcgY2UodGhpcy5fd29ya2VySWQsaSxyLG4pKX0pfWxpc3RlbihlLHQpe2xldCByPW51bGw7Y29uc3Qgbj1uZXcgUSh7b25GaXJzdExpc3RlbmVyQWRkOigpPT57cj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChyLG4pLHRoaXMuX3NlbmQobmV3IGhlKHRoaXMuX3dvcmtlcklkLHIsZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShyKSx0aGlzLl9zZW5kKG5ldyBkZSh0aGlzLl93b3JrZXJJZCxyKSkscj1udWxsfX0pO3JldHVybiBuLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKHIpe2lmKHRoaXMuX3BlbmRpbmdSZXBsaWVzW3Iuc2VxXSl7bGV0IHQ9dGhpcy5fcGVuZGluZ1JlcGxpZXNbci5zZXFdO2lmKGRlbGV0ZSB0aGlzLl9wZW5kaW5nUmVwbGllc1tyLnNlcV0sci5lcnIpe2xldCBlPXIuZXJyO3JldHVybiByLmVyci4kaXNFcnJvciYmKChlPW5ldyBFcnJvcikubmFtZT1yLmVyci5uYW1lLGUubWVzc2FnZT1yLmVyci5tZXNzYWdlLGUuc3RhY2s9ci5lcnIuc3RhY2spLHZvaWQgdC5yZWplY3QoZSl9dC5yZXNvbHZlKHIucmVzKX1lbHNlIGNvbnNvbGUud2FybigiR290IHJlcGx5IHRvIHVua25vd24gc2VxIil9X2hhbmRsZVJlcXVlc3RNZXNzYWdlKGUpe2xldCB0PWUucmVxLHI9dGhpcy5faGFuZGxlci5oYW5kbGVNZXNzYWdlKGUubWV0aG9kLGUuYXJncyk7ci50aGVuKGU9Pnt0aGlzLl9zZW5kKG5ldyB1ZSh0aGlzLl93b3JrZXJJZCx0LGUsdm9pZCAwKSl9LGU9PntlLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoZS5kZXRhaWw9dShlLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IHVlKHRoaXMuX3dvcmtlcklkLHQsdm9pZCAwLHUoZSkpKX0pfV9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UoZSl7Y29uc3QgdD1lLnJlcTtlPXRoaXMuX2hhbmRsZXIuaGFuZGxlRXZlbnQoZS5ldmVudE5hbWUsZS5hcmcpKGU9Pnt0aGlzLl9zZW5kKG5ldyBmZSh0aGlzLl93b3JrZXJJZCx0LGUpKX0pO3RoaXMuX3BlbmRpbmdFdmVudHMuc2V0KHQsZSl9X2hhbmRsZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRW1pdHRlcnMuaGFzKGUucmVxKT90aGlzLl9wZW5kaW5nRW1pdHRlcnMuZ2V0KGUucmVxKS5maXJlKGUuZXZlbnQpOmNvbnNvbGUud2FybigiR290IGV2ZW50IGZvciB1bmtub3duIHJlcSIpfV9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRXZlbnRzLmhhcyhlLnJlcSk/KHRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KGUucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUoZS5yZXEpKTpjb25zb2xlLndhcm4oIkdvdCB1bnN1YnNjcmliZSBmb3IgdW5rbm93biByZXEiKX1fc2VuZCh0KXtsZXQgcj1bXTtpZigwPT09dC50eXBlKWZvcihsZXQgZT0wO2U8dC5hcmdzLmxlbmd0aDtlKyspdC5hcmdzW2VdaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmci5wdXNoKHQuYXJnc1tlXSk7ZWxzZSAxPT09dC50eXBlJiZ0LnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZyLnB1c2godC5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UodCxyKX19ZnVuY3Rpb24gZ2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmaWUoZS5jaGFyQ29kZUF0KDIpKX1mdW5jdGlvbiBwZShlKXtyZXR1cm4vXm9uRHluYW1pYy8udGVzdChlKSYmaWUoZS5jaGFyQ29kZUF0KDkpKX1mdW5jdGlvbiBiZShlLHIsbil7bGV0IHQ9e307Zm9yKGNvbnN0IGkgb2YgZSlwZShpKT90W2ldPSh0PT5mdW5jdGlvbihlKXtyZXR1cm4gbih0LGUpfSkoaSk6Z2UoaSk/dFtpXT1uKGksdm9pZCAwKTp0W2ldPSh0PT5mdW5jdGlvbigpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gcih0LGUpfSkoaSk7cmV0dXJuIHR9Y2xhc3MgdmV7Y29uc3RydWN0b3IocixlKXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9ZSx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBtZSh7c2VuZE1lc3NhZ2U6KGUsdCk9PntyKGUsdCl9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKHBlKGUpKXt0PXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIHR9aWYoZ2UoZSkpe3Q9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGV2ZW50IG5hbWUgIitlKX1pbml0aWFsaXplKGUsdCxuLHIpe3RoaXMuX3Byb3RvY29sLnNldFdvcmtlcklkKGUpO2NvbnN0IGk9YmUociwoZSx0KT0+dGhpcy5fcHJvdG9jb2wuc2VuZE1lc3NhZ2UoZSx0KSwoZSx0KT0+dGhpcy5fcHJvdG9jb2wubGlzdGVuKGUsdCkpO3JldHVybiB0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk/KHRoaXMuX3JlcXVlc3RIYW5kbGVyPXRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeShpKSxQcm9taXNlLnJlc29sdmUoWSh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpKToodCYmKHZvaWQgMCE9PXQuYmFzZVVybCYmZGVsZXRlIHQuYmFzZVVybCx2b2lkIDAhPT10LnBhdGhzJiZ2b2lkIDAhPT10LnBhdGhzLnZzJiZkZWxldGUgdC5wYXRocy52cyx0LnRydXN0ZWRUeXBlc1BvbGljeSxkZWxldGUgdC50cnVzdGVkVHlwZXNQb2xpY3ksdC5jYXRjaEVycm9yPSEwLE8ucmVxdWlyZS5jb25maWcodCkpLG5ldyBQcm9taXNlKCh0LHIpPT57Y29uc3QgZT1PLnJlcXVpcmU7ZShbbl0sZT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyPWUuY3JlYXRlKGkpLHRoaXMuX3JlcXVlc3RIYW5kbGVyP3QoWSh0aGlzLl9yZXF1ZXN0SGFuZGxlcikpOnIobmV3IEVycm9yKCJObyBSZXF1ZXN0SGFuZGxlciEiKSl9LHIpfSkpfX1jbGFzcyB5ZXtjb25zdHJ1Y3RvcihlLHQscixuKXt0aGlzLm9yaWdpbmFsU3RhcnQ9ZSx0aGlzLm9yaWdpbmFsTGVuZ3RoPXQsdGhpcy5tb2RpZmllZFN0YXJ0PXIsdGhpcy5tb2RpZmllZExlbmd0aD1ufWdldE9yaWdpbmFsRW5kKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxTdGFydCt0aGlzLm9yaWdpbmFsTGVuZ3RofWdldE1vZGlmaWVkRW5kKCl7cmV0dXJuIHRoaXMubW9kaWZpZWRTdGFydCt0aGlzLm1vZGlmaWVkTGVuZ3RofX1mdW5jdGlvbiBDZShlLHQpe3JldHVybih0PDw1KS10K2V8MH1jbGFzcyB3ZXtjb25zdHJ1Y3RvcihlKXt0aGlzLnNvdXJjZT1lfWdldEVsZW1lbnRzKCl7Y29uc3Qgcj10aGlzLnNvdXJjZSxuPW5ldyBJbnQzMkFycmF5KHIubGVuZ3RoKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspbltlXT1yLmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59fWNsYXNzIF9le3N0YXRpYyBBc3NlcnQoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9fWNsYXNzIFNle3N0YXRpYyBDb3B5KHQscixuLGksbyl7Zm9yKGxldCBlPTA7ZTxvO2UrKyluW2krZV09dFtyK2VdfXN0YXRpYyBDb3B5Mih0LHIsbixpLG8pe2ZvcihsZXQgZT0wO2U8bztlKyspbltpK2VdPXRbcitlXX19Y2xhc3MgQWV7Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KDA8dGhpcy5tX29yaWdpbmFsQ291bnR8fDA8dGhpcy5tX21vZGlmaWVkQ291bnQpJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyB5ZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQoZSx0KXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCxlKSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4oMDx0aGlzLm1fb3JpZ2luYWxDb3VudHx8MDx0aGlzLm1fbW9kaWZpZWRDb3VudCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybigwPHRoaXMubV9vcmlnaW5hbENvdW50fHwwPHRoaXMubV9tb2RpZmllZENvdW50KSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgeGV7Y29uc3RydWN0b3IoZSx0LHI9bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9cix0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPWUsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT10O3ZhcltyLGUsbl09eGUuX2dldEVsZW1lbnRzKGUpLFt0LGksb109eGUuX2dldEVsZW1lbnRzKHQpO3RoaXMuX2hhc1N0cmluZ3M9biYmbyx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1lLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9dCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPWksdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkoZSl7cmV0dXJuIDA8ZS5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgZVswXX1zdGF0aWMgX2dldEVsZW1lbnRzKGUpe3ZhciByPWUuZ2V0RWxlbWVudHMoKTtpZih4ZS5faXNTdHJpbmdBcnJheShyKSl7Y29uc3Qgbj1uZXcgSW50MzJBcnJheShyLmxlbmd0aCk7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKW5bZV09ZnVuY3Rpb24ocixuKXtuPUNlKDE0OTQxNyxuKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspbj1DZShyLmNoYXJDb2RlQXQoZSksbik7cmV0dXJuIG59KHJbZV0sMCk7cmV0dXJuW3IsbiwhMF19cmV0dXJuIHIgaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSxyLCExXTpbW10sbmV3IEludDMyQXJyYXkociksITFdfUVsZW1lbnRzQXJlRXF1YWwoZSx0KXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtlXT09PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0mJighdGhpcy5faGFzU3RyaW5nc3x8dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tlXT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoZSx0KXtyZXR1cm4hIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlLHQpJiZ4ZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLGUpPT09eGUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSx0KX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRTdHJpY3RFbGVtZW50P2UuZ2V0U3RyaWN0RWxlbWVudCh0KTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1Db21wdXRlRGlmZihlKXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSxlKX1fQ29tcHV0ZURpZmYoZSx0LHIsbixpKXt2YXIgbz1bITFdO2xldCBhPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LHIsbixvKTtyZXR1cm4gaSYmKGE9dGhpcy5QcmV0dGlmeUNoYW5nZXMoYSkpLHtxdWl0RWFybHk6b1swXSxjaGFuZ2VzOmF9fUNvbXB1dGVEaWZmUmVjdXJzaXZlKHQscixuLGksbyl7Zm9yKG9bMF09ITE7dDw9ciYmbjw9aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsbik7KXQrKyxuKys7Zm9yKDt0PD1yJiZuPD1pJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocixpKTspci0tLGktLTtpZihyPHR8fGk8bil7bGV0IGU7cmV0dXJuIGU9bjw9aT8oX2UuQXNzZXJ0KHQ9PT1yKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLFtuZXcgeWUodCwwLG4saS1uKzEpXSk6dDw9cj8oX2UuQXNzZXJ0KG49PT1pKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLFtuZXcgeWUodCxyLXQrMSxuLDApXSk6KF9lLkFzc2VydCh0PT09cisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxfZS5Bc3NlcnQobj09PWkrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksW10pfXZhciBhPVswXSxzPVswXSxsPXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KHQscixuLGksYSxzLG8pLGE9YVswXSxzPXNbMF07aWYobnVsbCE9PWwpcmV0dXJuIGw7aWYob1swXSlyZXR1cm5bbmV3IHllKHQsci10KzEsbixpLW4rMSldO3tsPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCxhLG4scyxvKTtsZXQgZT1bXTtyZXR1cm4gZT1vWzBdP1tuZXcgeWUoYSsxLHItKGErMSkrMSxzKzEsaS0ocysxKSsxKV06dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShhKzEscixzKzEsaSxvKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhsLGUpfX1XQUxLVFJBQ0UodSxyLGgsZixkLG0sZyxwLGUsYix0LHYseSxuLEMsdyxfLFMpe2xldCBBPW51bGwsaT1uZXcgQWUseD1yLEU9aCxvPXlbMF0td1swXS1mLGE9LTEwNzM3NDE4MjQscz10aGlzLm1fZm9yd2FyZEhpc3RvcnkubGVuZ3RoLTE7ZG97dmFyIGw9byt1O289bD09PXh8fGw8RSYmZVtsLTFdPGVbbCsxXT8obj0odD1lW2wrMV0pLW8tZix0PGEmJmkuTWFya05leHRDaGFuZ2UoKSxhPXQsaS5BZGRNb2RpZmllZEVsZW1lbnQodCsxLG4pLGwrMS11KToobj0odD1lW2wtMV0rMSktby1mLHQ8YSYmaS5NYXJrTmV4dENoYW5nZSgpLGE9dC0xLGkuQWRkT3JpZ2luYWxFbGVtZW50KHQsbisxKSxsLTEtdSksMDw9cyYmKHU9KGU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W3NdKVswXSx4PTEsRT1lLmxlbmd0aC0xKX13aGlsZSgtMTw9LS1zKTtpZihyPWkuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxTWzBdKXtsZXQgZT15WzBdKzEsdD13WzBdKzE7aWYobnVsbCE9PXImJjA8ci5sZW5ndGgpe2NvbnN0IE49cltyLmxlbmd0aC0xXTtlPU1hdGgubWF4KGUsTi5nZXRPcmlnaW5hbEVuZCgpKSx0PU1hdGgubWF4KHQsTi5nZXRNb2RpZmllZEVuZCgpKX1BPVtuZXcgeWUoZSx2LWUrMSx0LEMtdCsxKV19ZWxzZXtpPW5ldyBBZSx4PW0sRT1nLG89eVswXS13WzBdLXAsYT0xMDczNzQxODI0LHM9Xz90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve3ZhciBjPW8rZDtvPWM9PT14fHxjPEUmJmJbYy0xXT49YltjKzFdPyhuPSh0PWJbYysxXS0xKS1vLXAsdD5hJiZpLk1hcmtOZXh0Q2hhbmdlKCksYT10KzEsaS5BZGRPcmlnaW5hbEVsZW1lbnQodCsxLG4rMSksYysxLWQpOihuPSh0PWJbYy0xXSktby1wLHQ+YSYmaS5NYXJrTmV4dENoYW5nZSgpLGE9dCxpLkFkZE1vZGlmaWVkRWxlbWVudCh0KzEsbisxKSxjLTEtZCksMDw9cyYmKGQ9KGI9dGhpcy5tX3JldmVyc2VIaXN0b3J5W3NdKVswXSx4PTEsRT1iLmxlbmd0aC0xKX13aGlsZSgtMTw9LS1zKTtBPWkuZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhyLEEpfUNvbXB1dGVSZWN1cnNpb25Qb2ludChpLG8sbSxnLHAsYix2KXtsZXQgYT0wLHM9MCxsPTAseT0wLGM9MCxDPTA7aS0tLG0tLSxiW3BbMF09MF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO3ZhciBlPW8taSsoZy1tKSx3PTErZTtjb25zdCB1PW5ldyBJbnQzMkFycmF5KHcpLGg9bmV3IEludDMyQXJyYXkodyk7dmFyIGY9Zy1tLGQ9by1pLF89aS1tLFM9by1nLEE9KGQtZiklMj09MDt1W2ZdPWksaFtkXT1vLHZbMF09ITE7Zm9yKGxldCBuPTE7bjw9ZS8yKzE7bisrKXtsZXQgdD0wLHI9MDtsPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoZi1uLG4sZix3KSx5PXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoZituLG4sZix3KTtmb3IobGV0IGU9bDtlPD15O2UrPTIpe2E9ZT09PWx8fGU8eSYmdVtlLTFdPHVbZSsxXT91W2UrMV06dVtlLTFdKzEscz1hLShlLWYpLV87Zm9yKHZhciB4PWE7YTxvJiZzPGcmJnRoaXMuRWxlbWVudHNBcmVFcXVhbChhKzEscysxKTspYSsrLHMrKztpZigodVtlXT1hKStzPnQrciYmKHQ9YSxyPXMpLCFBJiZNYXRoLmFicyhlLWQpPD1uLTEmJmE+PWhbZV0pcmV0dXJuIHBbMF09YSxiWzBdPXMseDw9aFtlXSYmbjw9MTQ0OD90aGlzLldBTEtUUkFDRShmLGwseSxfLGQsYyxDLFMsdSxoLGEsbyxwLHMsZyxiLEEsdik6bnVsbH12YXIgRT0odC1pKyhyLW0pLW4pLzI7aWYobnVsbCE9PXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUodCxFKSlyZXR1cm4gdlswXT0hMCxwWzBdPXQsYlswXT1yLDA8RSYmbjw9MTQ0OD90aGlzLldBTEtUUkFDRShmLGwseSxfLGQsYyxDLFMsdSxoLGEsbyxwLHMsZyxiLEEsdik6KGkrKyxtKyssW25ldyB5ZShpLG8taSsxLG0sZy1tKzEpXSk7Yz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGQtbixuLGQsdyksQz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGQrbixuLGQsdyk7Zm9yKGxldCBlPWM7ZTw9QztlKz0yKXthPWU9PT1jfHxlPEMmJmhbZS0xXT49aFtlKzFdP2hbZSsxXS0xOmhbZS0xXSxzPWEtKGUtZCktUztmb3IodmFyIE49YTthPmkmJnM+bSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKGEscyk7KWEtLSxzLS07aWYoaFtlXT1hLEEmJk1hdGguYWJzKGUtZik8PW4mJmE8PXVbZV0pcmV0dXJuIHBbMF09YSxiWzBdPXMsTj49dVtlXSYmbjw9MTQ0OD90aGlzLldBTEtUUkFDRShmLGwseSxfLGQsYyxDLFMsdSxoLGEsbyxwLHMsZyxiLEEsdik6bnVsbH1pZihuPD0xNDQ3KXtsZXQgZT1uZXcgSW50MzJBcnJheSh5LWwrMik7ZVswXT1mLWwrMSxTZS5Db3B5Mih1LGwsZSwxLHktbCsxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChlKSwoZT1uZXcgSW50MzJBcnJheShDLWMrMikpWzBdPWQtYysxLFNlLkNvcHkyKGgsYyxlLDEsQy1jKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKGUpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0UoZixsLHksXyxkLGMsQyxTLHUsaCxhLG8scCxzLGcsYixBLHYpfVByZXR0aWZ5Q2hhbmdlcyhvKXtmb3IobGV0IGU9MDtlPG8ubGVuZ3RoO2UrKyl7Y29uc3QgdD1vW2VdO2Zvcih2YXIgaD1lPG8ubGVuZ3RoLTE/b1tlKzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsZj1lPG8ubGVuZ3RoLTE/b1tlKzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsZD0wPHQub3JpZ2luYWxMZW5ndGgsbT0wPHQubW9kaWZpZWRMZW5ndGg7dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg8aCYmdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGg8ZiYmKCFkfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbCh0Lm9yaWdpbmFsU3RhcnQsdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgpKSYmKCFtfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbCh0Lm1vZGlmaWVkU3RhcnQsdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgpKTspe3ZhciBnPXRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbCh0Lm9yaWdpbmFsU3RhcnQsdC5tb2RpZmllZFN0YXJ0KTtpZih0aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgsdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgpJiYhZylicmVhazt0Lm9yaWdpbmFsU3RhcnQrKyx0Lm1vZGlmaWVkU3RhcnQrK312YXIgcD1bbnVsbF07ZTxvLmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKG9bZV0sb1tlKzFdLHApJiYob1tlXT1wWzBdLG8uc3BsaWNlKGUrMSwxKSxlLS0pfWZvcihsZXQgZT1vLmxlbmd0aC0xOzA8PWU7ZS0tKXtjb25zdCBjPW9bZV07bGV0IHQ9MCxyPTA7MDxlJiYobD1vW2UtMV0sdD1sLm9yaWdpbmFsU3RhcnQrbC5vcmlnaW5hbExlbmd0aCxyPWwubW9kaWZpZWRTdGFydCtsLm1vZGlmaWVkTGVuZ3RoKTt2YXIgYj0wPGMub3JpZ2luYWxMZW5ndGgsdj0wPGMubW9kaWZpZWRMZW5ndGg7bGV0IG49MCxpPXRoaXMuX2JvdW5kYXJ5U2NvcmUoYy5vcmlnaW5hbFN0YXJ0LGMub3JpZ2luYWxMZW5ndGgsYy5tb2RpZmllZFN0YXJ0LGMubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgZT0xOztlKyspe3ZhciBhPWMub3JpZ2luYWxTdGFydC1lLHM9Yy5tb2RpZmllZFN0YXJ0LWU7aWYoYTx0fHxzPHIpYnJlYWs7aWYoYiYmIXRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGEsYStjLm9yaWdpbmFsTGVuZ3RoKSlicmVhaztpZih2JiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwocyxzK2MubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2E9KGE9PT10JiZzPT09cj81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUoYSxjLm9yaWdpbmFsTGVuZ3RoLHMsYy5tb2RpZmllZExlbmd0aCk7YT5pJiYoaT1hLG49ZSl9Yy5vcmlnaW5hbFN0YXJ0LT1uLGMubW9kaWZpZWRTdGFydC09bjt2YXIgbD1bbnVsbF07MDxlJiZ0aGlzLkNoYW5nZXNPdmVybGFwKG9bZS0xXSxvW2VdLGwpJiYob1tlLTFdPWxbMF0sby5zcGxpY2UoZSwxKSxlKyspfWlmKHRoaXMuX2hhc1N0cmluZ3MpZm9yKGxldCBlPTEsdD1vLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCBpPW9bZS0xXSx1PW9bZV07dmFyIHk9dS5vcmlnaW5hbFN0YXJ0LWkub3JpZ2luYWxTdGFydC1pLm9yaWdpbmFsTGVuZ3RoLEM9aS5vcmlnaW5hbFN0YXJ0LHc9dS5vcmlnaW5hbFN0YXJ0K3Uub3JpZ2luYWxMZW5ndGgscj13LUMsbj1pLm1vZGlmaWVkU3RhcnQsXz11Lm1vZGlmaWVkU3RhcnQrdS5tb2RpZmllZExlbmd0aCxTPV8tbjt5PDUmJnI8MjAmJlM8MjAmJigoQz10aGlzLl9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKEMscixuLFMseSkpJiYoW3Isbl09QyxyPT09aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgmJm49PT1pLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aHx8KGkub3JpZ2luYWxMZW5ndGg9ci1pLm9yaWdpbmFsU3RhcnQsaS5tb2RpZmllZExlbmd0aD1uLWkubW9kaWZpZWRTdGFydCx1Lm9yaWdpbmFsU3RhcnQ9cit5LHUubW9kaWZpZWRTdGFydD1uK3ksdS5vcmlnaW5hbExlbmd0aD13LXUub3JpZ2luYWxTdGFydCx1Lm1vZGlmaWVkTGVuZ3RoPV8tdS5tb2RpZmllZFN0YXJ0KSkpfXJldHVybiBvfV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGUsdCxyLG4saSl7aWYodDxpfHxuPGkpcmV0dXJuIG51bGw7dmFyIG89ZSt0LWkrMSx1PXIrbi1pKzE7bGV0IGE9MCxzPTAsbD0wO2ZvcihsZXQgdD1lO3Q8bzt0KyspZm9yKGxldCBlPXI7ZTx1O2UrKyl7dmFyIGM9dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxlLGkpOzA8YyYmYz5hJiYoYT1jLHM9dCxsPWUpfXJldHVybiAwPGE/W3MsbF06bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxyLG4pe2xldCBpPTA7Zm9yKGxldCBlPTA7ZTxuO2UrKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0K2UscitlKSlyZXR1cm4gMDtpKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3QrZV0ubGVuZ3RofXJldHVybiBpfV9PcmlnaW5hbElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdKX1fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZigwPHQpe2U9ZSt0O2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShlLTEpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZSkpcmV0dXJuITB9cmV0dXJuITF9X01vZGlmaWVkSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV0pfV9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKDA8dCl7ZT1lK3Q7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGUtMSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlKSlyZXR1cm4hMH1yZXR1cm4hMX1fYm91bmRhcnlTY29yZShlLHQscixuKXtyZXR1cm4odGhpcy5fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCk/MTowKSsodGhpcy5fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KHIsbik/MTowKX1Db25jYXRlbmF0ZUNoYW5nZXMoZSx0KXt2YXIgcj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gMDx0Lmxlbmd0aD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0scikpe2NvbnN0IG49bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBTZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgtMSksbltlLmxlbmd0aC0xXT1yWzBdLFNlLkNvcHkodCwxLG4sZS5sZW5ndGgsdC5sZW5ndGgtMSksbn1yZXR1cm4gcj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpLFNlLkNvcHkoZSwwLHIsMCxlLmxlbmd0aCksU2UuQ29weSh0LDAscixlLmxlbmd0aCx0Lmxlbmd0aCkscn1DaGFuZ2VzT3ZlcmxhcChyLG4saSl7aWYoX2UuQXNzZXJ0KHIub3JpZ2luYWxTdGFydDw9bi5vcmlnaW5hbFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLF9lLkFzc2VydChyLm1vZGlmaWVkU3RhcnQ8PW4ubW9kaWZpZWRTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxyLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aD49bi5vcmlnaW5hbFN0YXJ0fHxyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0KXt2YXIgbz1yLm9yaWdpbmFsU3RhcnQ7bGV0IGU9ci5vcmlnaW5hbExlbmd0aDt2YXIgYT1yLm1vZGlmaWVkU3RhcnQ7bGV0IHQ9ci5tb2RpZmllZExlbmd0aDtyZXR1cm4gci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydCYmKGU9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtci5vcmlnaW5hbFN0YXJ0KSxyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0JiYodD1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC1yLm1vZGlmaWVkU3RhcnQpLGlbMF09bmV3IHllKG8sZSxhLHQpLCEwfXJldHVybiBpWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LHIsbil7aWYoMDw9ZSYmZTxuKXJldHVybiBlO3Q9dCUyPT0wO3JldHVybiBlPDA/dD09KHIlMj09MCk/MDoxOnQ9PSgobi1yLTEpJTI9PTApP24tMTpuLTJ9fWxldCBFZTtpZih2b2lkIDAhPT1PLnZzY29kZSYmdm9pZCAwIT09Ty52c2NvZGUucHJvY2Vzcyl7Y29uc3QgT289Ty52c2NvZGUucHJvY2VzcztFZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIE9vLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBPby5hcmNofSxnZXQgZW52KCl7cmV0dXJuIE9vLmVudn0sY3dkKCl7cmV0dXJuIE9vLmN3ZCgpfX19ZWxzZSBFZT0idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3M/e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gcHJvY2Vzcy5lbnZ9LGN3ZCgpe3JldHVybiBwcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06e2dldCBwbGF0Zm9ybSgpe3JldHVybiBQPyJ3aW4zMiI6Vj8iZGFyd2luIjoibGludXgifSxnZXQgYXJjaCgpe30sZ2V0IGVudigpe3JldHVybnt9fSxjd2QoKXtyZXR1cm4iLyJ9fTtjb25zdCBOZT1FZS5jd2Qsa2U9RWUuZW52O3ZhciBMZSxNZSxyPUVlLnBsYXRmb3JtO2NsYXNzIE9lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIpe2xldCBuOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhuPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOm49Im11c3QgYmUiO3ZhciBpPS0xIT09ZS5pbmRleE9mKCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiLGU9YFRoZSAiJHtlfSIgJHtpfSAke259IG9mIHR5cGUgYCt0O3N1cGVyKGUrPSIuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgciksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIFRlKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBPZSh0LCJzdHJpbmciLGUpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIDQ3PT09ZXx8OTI9PT1lfWZ1bmN0aW9uIEllKGUpe3JldHVybiA0Nz09PWV9ZnVuY3Rpb24gUGUoZSl7cmV0dXJuIDY1PD1lJiZlPD05MHx8OTc8PWUmJmU8PTEyMn1mdW5jdGlvbiBWZSh0LHIsbixpKXtsZXQgbz0iIixhPTAscz0tMSxsPTAsYz0wO2ZvcihsZXQgZT0wO2U8PXQubGVuZ3RoOysrZSl7aWYoZTx0Lmxlbmd0aCljPXQuY2hhckNvZGVBdChlKTtlbHNle2lmKGkoYykpYnJlYWs7Yz00N31pZihpKGMpKXtpZihzIT09ZS0xJiYxIT09bClpZigyPT09bCl7aWYoby5sZW5ndGg8Mnx8MiE9PWF8fDQ2IT09by5jaGFyQ29kZUF0KG8ubGVuZ3RoLTEpfHw0NiE9PW8uY2hhckNvZGVBdChvLmxlbmd0aC0yKSl7aWYoMjxvLmxlbmd0aCl7dmFyIHU9by5sYXN0SW5kZXhPZihuKTthPS0xPT09dT8obz0iIiwwKToobz1vLnNsaWNlKDAsdSkpLmxlbmd0aC0xLW8ubGFzdEluZGV4T2Yobikscz1lLGw9MDtjb250aW51ZX1pZigwIT09by5sZW5ndGgpe289IiIsYT0wLHM9ZSxsPTA7Y29udGludWV9fXImJihvKz0wPG8ubGVuZ3RoP24rIi4uIjoiLi4iLGE9Mil9ZWxzZSAwPG8ubGVuZ3RoP28rPSIiK24rdC5zbGljZShzKzEsZSk6bz10LnNsaWNlKHMrMSxlKSxhPWUtcy0xO3M9ZSxsPTB9ZWxzZSA0Nj09PWMmJi0xIT09bD8rK2w6bD0tMX1yZXR1cm4gb31mdW5jdGlvbiBSZShlLHQpe2lmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IE9lKCJwYXRoT2JqZWN0IiwiT2JqZWN0Iix0KTt2YXIgcj10LmRpcnx8dC5yb290LG49dC5iYXNlfHwiIisodC5uYW1lfHwiIikrKHQuZXh0fHwiIik7cmV0dXJuIHI/cj09PXQucm9vdD8iIityK246IiIrcitlK246bn1jb25zdCBEZT17cmVzb2x2ZSguLi5vKXtsZXQgYT0iIixzPSIiLGw9ITE7Zm9yKGxldCB0PW8ubGVuZ3RoLTE7LTE8PXQ7dC0tKXtsZXQgcjtpZigwPD10KXtpZihUZShyPW9bdF0sInBhdGgiKSwwPT09ci5sZW5ndGgpY29udGludWV9ZWxzZSAwPT09YS5sZW5ndGg/cj1OZSgpOih2b2lkIDA9PT0ocj1rZVsiPSIrYV18fE5lKCkpfHxyLnNsaWNlKDAsMikudG9Mb3dlckNhc2UoKSE9PWEudG9Mb3dlckNhc2UoKSYmOTI9PT1yLmNoYXJDb2RlQXQoMikpJiYocj1hKyJcXCIpO3ZhciBjPXIubGVuZ3RoO2xldCBuPTAsaT0iIixlPSExO3ZhciB1PXIuY2hhckNvZGVBdCgwKTtpZigxPT09YylmKHUpJiYobj0xLGU9ITApO2Vsc2UgaWYoZih1KSlpZihlPSEwLGYoci5jaGFyQ29kZUF0KDEpKSl7bGV0IGU9Mix0PWU7Zm9yKDtlPGMmJiFmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGMmJmUhPT10KXt2YXIgaD1yLnNsaWNlKHQsZSk7Zm9yKHQ9ZTtlPGMmJmYoci5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YyYmZSE9PXQpe2Zvcih0PWU7ZTxjJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7ZSE9PWMmJmU9PT10fHwoaT1gXFxcXCR7aH1cXGArci5zbGljZSh0LGUpLG49ZSl9fX1lbHNlIG49MTtlbHNlIFBlKHUpJiY1OD09PXIuY2hhckNvZGVBdCgxKSYmKGk9ci5zbGljZSgwLDIpLChuPTIpPGMmJmYoci5jaGFyQ29kZUF0KDIpKSYmKGU9ITAsbj0zKSk7aWYoMDxpLmxlbmd0aClpZigwPGEubGVuZ3RoKXtpZihpLnRvTG93ZXJDYXNlKCkhPT1hLnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSBhPWk7aWYobCl7aWYoMDxhLmxlbmd0aClicmVha31lbHNlIGlmKHM9ci5zbGljZShuKSsiXFwiK3MsKGw9ZSkmJjA8YS5sZW5ndGgpYnJlYWt9cmV0dXJuIHM9VmUocywhbCwiXFwiLGYpLGw/YSsiXFwiK3M6IiIrYStzfHwiLiJ9LG5vcm1hbGl6ZShyKXtUZShyLCJwYXRoIik7dmFyIG49ci5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIi4iO2xldCBpPTAsbyxlPSExO3ZhciB0PXIuY2hhckNvZGVBdCgwKTtpZigxPT09bilyZXR1cm4gSWUodCk/IlxcIjpyO2lmKGYodCkpaWYoZT0hMCxmKHIuY2hhckNvZGVBdCgxKSkpe2xldCBlPTIsdD1lO2Zvcig7ZTxuJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxuJiZlIT09dCl7dmFyIGE9ci5zbGljZSh0LGUpO2Zvcih0PWU7ZTxuJiZmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPG4mJmUhPT10KXtmb3IodD1lO2U8biYmIWYoci5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU9PT1uKXJldHVybmBcXFxcJHthfVxcJHtyLnNsaWNlKHQpfVxcYDtlIT09dCYmKG89YFxcXFwke2F9XFxgK3Iuc2xpY2UodCxlKSxpPWUpfX19ZWxzZSBpPTE7ZWxzZSBQZSh0KSYmNTg9PT1yLmNoYXJDb2RlQXQoMSkmJihvPXIuc2xpY2UoMCwyKSwoaT0yKTxuJiZmKHIuY2hhckNvZGVBdCgyKSkmJihlPSEwLGk9MykpO2xldCBzPWk8bj9WZShyLnNsaWNlKGkpLCFlLCJcXCIsZik6IiI7cmV0dXJuIDA8KHM9MCE9PXMubGVuZ3RofHxlP3M6Ii4iKS5sZW5ndGgmJmYoci5jaGFyQ29kZUF0KG4tMSkpJiYocys9IlxcIiksdm9pZCAwPT09bz9lPyJcXCIrczpzOmU/bysiXFwiK3M6IiIrbytzfSxpc0Fic29sdXRlKGUpe1RlKGUsInBhdGgiKTt2YXIgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4hMTt2YXIgcj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIGYocil8fDI8dCYmUGUocikmJjU4PT09ZS5jaGFyQ29kZUF0KDEpJiZmKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4udCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiIuIjtsZXQgcixuO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgaT10W2VdO1RlKGksInBhdGgiKSwwPGkubGVuZ3RoJiYodm9pZCAwPT09cj9yPW49aTpyKz0iXFwiK2kpfWlmKHZvaWQgMD09PXIpcmV0dXJuIi4iO2xldCBlPSEwLG89MDt2YXIgYTtpZigic3RyaW5nIj09dHlwZW9mIG4mJmYobi5jaGFyQ29kZUF0KDApKSYmKCsrbywxPChhPW4ubGVuZ3RoKSYmZihuLmNoYXJDb2RlQXQoMSkpJiYoKytvLDI8YSYmKGYobi5jaGFyQ29kZUF0KDIpKT8rK286ZT0hMSkpKSxlKXtmb3IoO288ci5sZW5ndGgmJmYoci5jaGFyQ29kZUF0KG8pKTspbysrOzI8PW8mJihyPSJcXCIrci5zbGljZShvKSl9cmV0dXJuIERlLm5vcm1hbGl6ZShyKX0scmVsYXRpdmUoZSx0KXtpZihUZShlLCJmcm9tIiksVGUodCwidG8iKSxlPT09dClyZXR1cm4iIjtjb25zdCB1PURlLnJlc29sdmUoZSkscj1EZS5yZXNvbHZlKHQpO2lmKHU9PT1yKXJldHVybiIiO2lmKChlPXUudG9Mb3dlckNhc2UoKSk9PT0odD1yLnRvTG93ZXJDYXNlKCkpKXJldHVybiIiO2xldCBuPTA7Zm9yKDtuPGUubGVuZ3RoJiY5Mj09PWUuY2hhckNvZGVBdChuKTspbisrO2xldCBpPWUubGVuZ3RoO2Zvcig7aS0xPm4mJjkyPT09ZS5jaGFyQ29kZUF0KGktMSk7KWktLTt2YXIgaD1pLW47bGV0IG89MDtmb3IoO288dC5sZW5ndGgmJjkyPT09dC5jaGFyQ29kZUF0KG8pOylvKys7bGV0IGE9dC5sZW5ndGg7Zm9yKDthLTE+byYmOTI9PT10LmNoYXJDb2RlQXQoYS0xKTspYS0tO3ZhciBmPWEtbyxzPWg8Zj9oOmY7bGV0IGw9LTEsYz0wO2Zvcig7YzxzO2MrKyl7dmFyIGQ9ZS5jaGFyQ29kZUF0KG4rYyk7aWYoZCE9PXQuY2hhckNvZGVBdChvK2MpKWJyZWFrOzkyPT09ZCYmKGw9Yyl9aWYoYyE9PXMpe2lmKC0xPT09bClyZXR1cm4gcn1lbHNle2lmKHM8Zil7aWYoOTI9PT10LmNoYXJDb2RlQXQobytjKSlyZXR1cm4gci5zbGljZShvK2MrMSk7aWYoMj09PWMpcmV0dXJuIHIuc2xpY2UobytjKX1zPGgmJig5Mj09PWUuY2hhckNvZGVBdChuK2MpP2w9YzoyPT09YyYmKGw9MykpLC0xPT09bCYmKGw9MCl9bGV0IG09IiI7Zm9yKGM9bitsKzE7Yzw9aTsrK2MpYyE9PWkmJjkyIT09ZS5jaGFyQ29kZUF0KGMpfHwobSs9MD09PW0ubGVuZ3RoPyIuLiI6IlxcLi4iKTtyZXR1cm4gbys9bCwwPG0ubGVuZ3RoPyIiK20rci5zbGljZShvLGEpOig5Mj09PXIuY2hhckNvZGVBdChvKSYmKytvLHIuc2xpY2UobyxhKSl9LHRvTmFtZXNwYWNlZFBhdGgoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBlO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iIjtjb25zdCB0PURlLnJlc29sdmUoZSk7aWYodC5sZW5ndGg8PTIpcmV0dXJuIGU7aWYoOTI9PT10LmNoYXJDb2RlQXQoMCkpe2lmKDkyPT09dC5jaGFyQ29kZUF0KDEpKXt2YXIgcj10LmNoYXJDb2RlQXQoMik7aWYoNjMhPT1yJiY0NiE9PXIpcmV0dXJuIlxcXFw/XFxVTkNcXCIrdC5zbGljZSgyKX19ZWxzZSBpZihQZSh0LmNoYXJDb2RlQXQoMCkpJiY1OD09PXQuY2hhckNvZGVBdCgxKSYmOTI9PT10LmNoYXJDb2RlQXQoMikpcmV0dXJuIlxcXFw/XFwiK3Q7cmV0dXJuIGV9LGRpcm5hbWUocil7VGUociwicGF0aCIpO3ZhciBuPXIubGVuZ3RoO2lmKDA9PT1uKXJldHVybiIuIjtsZXQgaT0tMSxvPTA7dmFyIGU9ci5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBmKGUpP3I6Ii4iO2lmKGYoZSkpe2lmKGk9bz0xLGYoci5jaGFyQ29kZUF0KDEpKSl7bGV0IGU9Mix0PWU7Zm9yKDtlPG4mJiFmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPG4mJmUhPT10KXtmb3IodD1lO2U8biYmZihyLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxuJiZlIT09dCl7Zm9yKHQ9ZTtlPG4mJiFmKHIuY2hhckNvZGVBdChlKSk7KWUrKztpZihlPT09bilyZXR1cm4gcjtlIT09dCYmKGk9bz1lKzEpfX19fWVsc2UgUGUoZSkmJjU4PT09ci5jaGFyQ29kZUF0KDEpJiYoaT0yPG4mJmYoci5jaGFyQ29kZUF0KDIpKT8zOjIsbz1pKTtsZXQgdD0tMSxhPSEwO2ZvcihsZXQgZT1uLTE7ZT49bzstLWUpaWYoZihyLmNoYXJDb2RlQXQoZSkpKXtpZighYSl7dD1lO2JyZWFrfX1lbHNlIGE9ITE7aWYoLTE9PT10KXtpZigtMT09PWkpcmV0dXJuIi4iO3Q9aX1yZXR1cm4gci5zbGljZSgwLHQpfSxiYXNlbmFtZShyLG4pe3ZvaWQgMCE9PW4mJlRlKG4sImV4dCIpLFRlKHIsInBhdGgiKTtsZXQgaT0wLG89LTEsYT0hMCxzO2lmKDI8PXIubGVuZ3RoJiZQZShyLmNoYXJDb2RlQXQoMCkpJiY1OD09PXIuY2hhckNvZGVBdCgxKSYmKGk9Miksdm9pZCAwIT09biYmMDxuLmxlbmd0aCYmbi5sZW5ndGg8PXIubGVuZ3RoKXtpZihuPT09cilyZXR1cm4iIjtsZXQgZT1uLmxlbmd0aC0xLHQ9LTE7Zm9yKHM9ci5sZW5ndGgtMTtzPj1pOy0tcyl7dmFyIGw9ci5jaGFyQ29kZUF0KHMpO2lmKGYobCkpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09dCYmKGE9ITEsdD1zKzEpLDA8PWUmJihsPT09bi5jaGFyQ29kZUF0KGUpPy0xPT0tLWUmJihvPXMpOihlPS0xLG89dCkpfXJldHVybiBpPT09bz9vPXQ6LTE9PT1vJiYobz1yLmxlbmd0aCksci5zbGljZShpLG8pfWZvcihzPXIubGVuZ3RoLTE7cz49aTstLXMpaWYoZihyLmNoYXJDb2RlQXQocykpKXtpZighYSl7aT1zKzE7YnJlYWt9fWVsc2UtMT09PW8mJihhPSExLG89cysxKTtyZXR1cm4tMT09PW8/IiI6ci5zbGljZShpLG8pfSxleHRuYW1lKHQpe1RlKHQsInBhdGgiKTtsZXQgcj0wLG49LTEsaT0wLG89LTEsYT0hMCxzPTA7Mjw9dC5sZW5ndGgmJjU4PT09dC5jaGFyQ29kZUF0KDEpJiZQZSh0LmNoYXJDb2RlQXQoMCkpJiYocj1pPTIpO2ZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PXI7LS1lKXt2YXIgbD10LmNoYXJDb2RlQXQoZSk7aWYoZihsKSl7aWYoYSljb250aW51ZTtpPWUrMTticmVha30tMT09PW8mJihhPSExLG89ZSsxKSw0Nj09PWw/LTE9PT1uP249ZToxIT09cyYmKHM9MSk6LTEhPT1uJiYocz0tMSl9cmV0dXJuLTE9PT1ufHwtMT09PW98fDA9PT1zfHwxPT09cyYmbj09PW8tMSYmbj09PWkrMT8iIjp0LnNsaWNlKG4sbyl9LGZvcm1hdDpSZS5iaW5kKG51bGwsIlxcIikscGFyc2Uocil7VGUociwicGF0aCIpO2NvbnN0IGU9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gZTt2YXIgbj1yLmxlbmd0aDtsZXQgaT0wLHQ9ci5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiBmKHQpP2Uucm9vdD1lLmRpcj1yOmUuYmFzZT1lLm5hbWU9cixlO2lmKGYodCkpe2lmKGk9MSxmKHIuY2hhckNvZGVBdCgxKSkpe2xldCBlPTIsdD1lO2Zvcig7ZTxuJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7aWYoZTxuJiZlIT09dCl7Zm9yKHQ9ZTtlPG4mJmYoci5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8biYmZSE9PXQpe2Zvcih0PWU7ZTxuJiYhZihyLmNoYXJDb2RlQXQoZSkpOyllKys7ZT09PW4/aT1lOmUhPT10JiYoaT1lKzEpfX19fWVsc2UgaWYoUGUodCkmJjU4PT09ci5jaGFyQ29kZUF0KDEpKXtpZihuPD0yKXJldHVybiBlLnJvb3Q9ZS5kaXI9cixlO2lmKGk9MixmKHIuY2hhckNvZGVBdCgyKSkpe2lmKDM9PT1uKXJldHVybiBlLnJvb3Q9ZS5kaXI9cixlO2k9M319MDxpJiYoZS5yb290PXIuc2xpY2UoMCxpKSk7bGV0IG89LTEsYT1pLHM9LTEsdT0hMCxsPXIubGVuZ3RoLTEsYz0wO2Zvcig7bD49aTstLWwpe2lmKGYodD1yLmNoYXJDb2RlQXQobCkpKXtpZih1KWNvbnRpbnVlO2E9bCsxO2JyZWFrfS0xPT09cyYmKHU9ITEscz1sKzEpLDQ2PT09dD8tMT09PW8/bz1sOjEhPT1jJiYoYz0xKTotMSE9PW8mJihjPS0xKX1yZXR1cm4tMSE9PXMmJigtMT09PW98fDA9PT1jfHwxPT09YyYmbz09PXMtMSYmbz09PWErMT9lLmJhc2U9ZS5uYW1lPXIuc2xpY2UoYSxzKTooZS5uYW1lPXIuc2xpY2UoYSxvKSxlLmJhc2U9ci5zbGljZShhLHMpLGUuZXh0PXIuc2xpY2UobyxzKSkpLDA8YSYmYSE9PWk/ZS5kaXI9ci5zbGljZSgwLGEtMSk6ZS5kaXI9ZS5yb290LGV9LHNlcDoiXFwiLGRlbGltaXRlcjoiOyIsd2luMzI6bnVsbCxwb3NpeDpudWxsfSxGZT17cmVzb2x2ZSguLi50KXtsZXQgcj0iIixuPSExO2ZvcihsZXQgZT10Lmxlbmd0aC0xOy0xPD1lJiYhbjtlLS0pe2NvbnN0IGk9MDw9ZT90W2VdOk5lKCk7VGUoaSwicGF0aCIpLDAhPT1pLmxlbmd0aCYmKHI9aSsiLyIrcixuPTQ3PT09aS5jaGFyQ29kZUF0KDApKX1yZXR1cm4gcj1WZShyLCFuLCIvIixJZSksbj8iLyIrcjowPHIubGVuZ3RoP3I6Ii4ifSxub3JtYWxpemUoZSl7aWYoVGUoZSwicGF0aCIpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7dmFyIHQ9NDc9PT1lLmNoYXJDb2RlQXQoMCkscj00Nz09PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtyZXR1cm4gMD09PShlPVZlKGUsIXQsIi8iLEllKSkubGVuZ3RoP3Q/Ii8iOnI/Ii4vIjoiLiI6KHImJihlKz0iLyIpLHQ/Ii8iK2U6ZSl9LGlzQWJzb2x1dGUoZSl7cmV0dXJuIFRlKGUsInBhdGgiKSwwPGUubGVuZ3RoJiY0Nz09PWUuY2hhckNvZGVBdCgwKX0sam9pbiguLi50KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIi4iO2xldCByO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgbj10W2VdO1RlKG4sInBhdGgiKSwwPG4ubGVuZ3RoJiYodm9pZCAwPT09cj9yPW46cis9Ii8iK24pfXJldHVybiB2b2lkIDA9PT1yPyIuIjpGZS5ub3JtYWxpemUocil9LHJlbGF0aXZlKGUsdCl7aWYoVGUoZSwiZnJvbSIpLFRlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9RmUucmVzb2x2ZShlKSk9PT0odD1GZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjt2YXIgcj1lLmxlbmd0aCxuPXItMSxpPXQubGVuZ3RoLTEsbz1uPGk/bjppO2xldCBhPS0xLHM9MDtmb3IoO3M8bztzKyspe3ZhciBsPWUuY2hhckNvZGVBdCgxK3MpO2lmKGwhPT10LmNoYXJDb2RlQXQoMStzKSlicmVhazs0Nz09PWwmJihhPXMpfWlmKHM9PT1vKWlmKG88aSl7aWYoNDc9PT10LmNoYXJDb2RlQXQoMStzKSlyZXR1cm4gdC5zbGljZSgxK3MrMSk7aWYoMD09PXMpcmV0dXJuIHQuc2xpY2UoMStzKX1lbHNlIG88biYmKDQ3PT09ZS5jaGFyQ29kZUF0KDErcyk/YT1zOjA9PT1zJiYoYT0wKSk7bGV0IGM9IiI7Zm9yKHM9MSthKzE7czw9cjsrK3MpcyE9PXImJjQ3IT09ZS5jaGFyQ29kZUF0KHMpfHwoYys9MD09PWMubGVuZ3RoPyIuLiI6Ii8uLiIpO3JldHVybiIiK2MrdC5zbGljZSgxK2EpfSx0b05hbWVzcGFjZWRQYXRoKGUpe3JldHVybiBlfSxkaXJuYW1lKHQpe2lmKFRlKHQsInBhdGgiKSwwPT09dC5sZW5ndGgpcmV0dXJuIi4iO3ZhciBlPTQ3PT09dC5jaGFyQ29kZUF0KDApO2xldCByPS0xLG49ITA7Zm9yKGxldCBlPXQubGVuZ3RoLTE7MTw9ZTstLWUpaWYoNDc9PT10LmNoYXJDb2RlQXQoZSkpe2lmKCFuKXtyPWU7YnJlYWt9fWVsc2Ugbj0hMTtyZXR1cm4tMT09PXI/ZT8iLyI6Ii4iOmUmJjE9PT1yPyIvLyI6dC5zbGljZSgwLHIpfSxiYXNlbmFtZShyLG4pe3ZvaWQgMCE9PW4mJlRlKG4sImV4dCIpLFRlKHIsInBhdGgiKTtsZXQgaT0wLG89LTEsYT0hMCxzO2lmKHZvaWQgMCE9PW4mJjA8bi5sZW5ndGgmJm4ubGVuZ3RoPD1yLmxlbmd0aCl7aWYobj09PXIpcmV0dXJuIiI7bGV0IGU9bi5sZW5ndGgtMSx0PS0xO2ZvcihzPXIubGVuZ3RoLTE7MDw9czstLXMpe3ZhciBsPXIuY2hhckNvZGVBdChzKTtpZig0Nz09PWwpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09dCYmKGE9ITEsdD1zKzEpLDA8PWUmJihsPT09bi5jaGFyQ29kZUF0KGUpPy0xPT0tLWUmJihvPXMpOihlPS0xLG89dCkpfXJldHVybiBpPT09bz9vPXQ6LTE9PT1vJiYobz1yLmxlbmd0aCksci5zbGljZShpLG8pfWZvcihzPXIubGVuZ3RoLTE7MDw9czstLXMpaWYoNDc9PT1yLmNoYXJDb2RlQXQocykpe2lmKCFhKXtpPXMrMTticmVha319ZWxzZS0xPT09byYmKGE9ITEsbz1zKzEpO3JldHVybi0xPT09bz8iIjpyLnNsaWNlKGksbyl9LGV4dG5hbWUodCl7VGUodCwicGF0aCIpO2xldCByPS0xLG49MCxpPS0xLG89ITAsYT0wO2ZvcihsZXQgZT10Lmxlbmd0aC0xOzA8PWU7LS1lKXt2YXIgcz10LmNoYXJDb2RlQXQoZSk7aWYoNDc9PT1zKXtpZihvKWNvbnRpbnVlO249ZSsxO2JyZWFrfS0xPT09aSYmKG89ITEsaT1lKzEpLDQ2PT09cz8tMT09PXI/cj1lOjEhPT1hJiYoYT0xKTotMSE9PXImJihhPS0xKX1yZXR1cm4tMT09PXJ8fC0xPT09aXx8MD09PWF8fDE9PT1hJiZyPT09aS0xJiZyPT09bisxPyIiOnQuc2xpY2UocixpKX0sZm9ybWF0OlJlLmJpbmQobnVsbCwiLyIpLHBhcnNlKGUpe1RlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIHI9NDc9PT1lLmNoYXJDb2RlQXQoMCk7bGV0IG4saT0obj1yPyh0LnJvb3Q9Ii8iLDEpOjAsLTEpLG89MCxhPS0xLHM9ITAsbD1lLmxlbmd0aC0xLGM9MDtmb3IoO2w+PW47LS1sKXt2YXIgdT1lLmNoYXJDb2RlQXQobCk7aWYoNDc9PT11KXtpZihzKWNvbnRpbnVlO289bCsxO2JyZWFrfS0xPT09YSYmKHM9ITEsYT1sKzEpLDQ2PT09dT8tMT09PWk/aT1sOjEhPT1jJiYoYz0xKTotMSE9PWkmJihjPS0xKX1pZigtMSE9PWEpe2NvbnN0IG49MD09PW8mJnI/MTpvOy0xPT09aXx8MD09PWN8fDE9PT1jJiZpPT09YS0xJiZpPT09bysxP3QuYmFzZT10Lm5hbWU9ZS5zbGljZShuLGEpOih0Lm5hbWU9ZS5zbGljZShuLGkpLHQuYmFzZT1lLnNsaWNlKG4sYSksdC5leHQ9ZS5zbGljZShpLGEpKX1yZXR1cm4gMDxvP3QuZGlyPWUuc2xpY2UoMCxvLTEpOnImJih0LmRpcj0iLyIpLHR9LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9LEtlPShGZS53aW4zMj1EZS53aW4zMj1EZSxGZS5wb3NpeD1EZS5wb3NpeD1GZSwoIndpbjMyIj09PXI/RGU6RmUpLm5vcm1hbGl6ZSwoIndpbjMyIj09PXI/RGU6RmUpLnJlc29sdmUsKCJ3aW4zMiI9PT1yP0RlOkZlKS5yZWxhdGl2ZSwoIndpbjMyIj09PXI/RGU6RmUpLmRpcm5hbWUsKCJ3aW4zMiI9PT1yP0RlOkZlKS5iYXNlbmFtZSwoIndpbjMyIj09PXI/RGU6RmUpLmV4dG5hbWUsKCJ3aW4zMiI9PT1yP0RlOkZlKS5zZXAsL15cd1tcd1xkKy4tXSokLykscWU9L15cLy8sQmU9L15cL1wvLztmdW5jdGlvbiAkZShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIUtlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFxZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihCZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9Y29uc3QgV2U9Ii8iLEhlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2NsYXNzIHple2NvbnN0cnVjdG9yKGUsdCxyLG4saSxvPSExKXt2YXIgYTsib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHwiIix0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8IiIsdGhpcy5wYXRoPWUucGF0aHx8IiIsdGhpcy5xdWVyeT1lLnF1ZXJ5fHwiIix0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fCIiKToodGhpcy5zY2hlbWU9KGE9bywoZT1lKXx8YT9lOiJmaWxlIiksdGhpcy5hdXRob3JpdHk9dHx8IiIsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1XZSYmKHQ9V2UrdCk6dD1XZX1yZXR1cm4gdH0odGhpcy5zY2hlbWUscnx8IiIpLHRoaXMucXVlcnk9bnx8IiIsdGhpcy5mcmFnbWVudD1pfHwiIiwkZSh0aGlzLG8pKX1zdGF0aWMgaXNVcmkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB6ZXx8ISFlJiYoInN0cmluZyI9PXR5cGVvZiBlLmF1dGhvcml0eSYmInN0cmluZyI9PXR5cGVvZiBlLmZyYWdtZW50JiYic3RyaW5nIj09dHlwZW9mIGUucGF0aCYmInN0cmluZyI9PXR5cGVvZiBlLnF1ZXJ5JiYic3RyaW5nIj09dHlwZW9mIGUuc2NoZW1lJiYic3RyaW5nIj09dHlwZW9mIGUuZnNQYXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS53aXRoJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0cmluZyl9Z2V0IGZzUGF0aCgpe3JldHVybiBZZSh0aGlzLCExKX13aXRoKGUpe2lmKCFlKXJldHVybiB0aGlzO2xldHtzY2hlbWU6dCxhdXRob3JpdHk6cixwYXRoOm4scXVlcnk6aSxmcmFnbWVudDpvfT1lO3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PSIiKSx2b2lkIDA9PT1yP3I9dGhpcy5hdXRob3JpdHk6bnVsbD09PXImJihyPSIiKSx2b2lkIDA9PT1uP249dGhpcy5wYXRoOm51bGw9PT1uJiYobj0iIiksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPSIiKSx2b2lkIDA9PT1vP289dGhpcy5mcmFnbWVudDpudWxsPT09byYmKG89IiIpLHQ9PT10aGlzLnNjaGVtZSYmcj09PXRoaXMuYXV0aG9yaXR5JiZuPT09dGhpcy5wYXRoJiZpPT09dGhpcy5xdWVyeSYmbz09PXRoaXMuZnJhZ21lbnQ/dGhpczpuZXcgR2UodCxyLG4saSxvKX1zdGF0aWMgcGFyc2UoZSx0PSExKXtlPUhlLmV4ZWMoZSk7cmV0dXJuIGU/bmV3IEdlKGVbMl18fCIiLHJ0KGVbNF18fCIiKSxydChlWzVdfHwiIikscnQoZVs3XXx8IiIpLHJ0KGVbOV18fCIiKSx0KTpuZXcgR2UoIiIsIiIsIiIsIiIsIiIpfXN0YXRpYyBmaWxlKGUpe2xldCB0PSIiO3ZhciByO3JldHVybihlPVA/ZS5yZXBsYWNlKC9cXC9nLFdlKTplKVswXT09PVdlJiZlWzFdPT09V2UmJihlPS0xPT09KHI9ZS5pbmRleE9mKFdlLDIpKT8odD1lLnN1YnN0cmluZygyKSxXZSk6KHQ9ZS5zdWJzdHJpbmcoMixyKSxlLnN1YnN0cmluZyhyKXx8V2UpKSxuZXcgR2UoImZpbGUiLHQsZSwiIiwiIil9c3RhdGljIGZyb20oZSl7ZT1uZXcgR2UoZS5zY2hlbWUsZS5hdXRob3JpdHksZS5wYXRoLGUucXVlcnksZS5mcmFnbWVudCk7cmV0dXJuICRlKGUsITApLGV9c3RhdGljIGpvaW5QYXRoKGUsLi4udCl7aWYoIWUucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gcj1QJiYiZmlsZSI9PT1lLnNjaGVtZT96ZS5maWxlKERlLmpvaW4oWWUoZSwhMCksLi4udCkpLnBhdGg6RmUuam9pbihlLnBhdGgsLi4udCksZS53aXRoKHtwYXRoOnJ9KX10b1N0cmluZyhlPSExKXtyZXR1cm4gZXQodGhpcyxlKX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKGUpe2lmKGUpe2lmKGUgaW5zdGFuY2VvZiB6ZSlyZXR1cm4gZTt7Y29uc3QgdD1uZXcgR2UoZSk7cmV0dXJuIHQuX2Zvcm1hdHRlZD1lLmV4dGVybmFsLHQuX2ZzUGF0aD1lLl9zZXA9PT1KZT9lLmZzUGF0aDpudWxsLHR9fXJldHVybiBlfX1jb25zdCBKZT1QPzE6dm9pZCAwO2NsYXNzIEdlIGV4dGVuZHMgemV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Zvcm1hdHRlZD1udWxsLHRoaXMuX2ZzUGF0aD1udWxsfWdldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPVllKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoZT0hMSl7cmV0dXJuIGU/ZXQodGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1ldCh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCBlPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihlLmZzUGF0aD10aGlzLl9mc1BhdGgsZS5fc2VwPUplKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX19Y29uc3QgWmU9e1s1OF06IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIFhlKHQscil7bGV0IG49dm9pZCAwLGk9LTE7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBvPXQuY2hhckNvZGVBdChlKTs5Nzw9byYmbzw9MTIyfHw2NTw9byYmbzw9OTB8fDQ4PD1vJiZvPD01N3x8NDU9PT1vfHw0Nj09PW98fDk1PT09b3x8MTI2PT09b3x8ciYmNDc9PT1vPygtMSE9PWkmJihuKz1lbmNvZGVVUklDb21wb25lbnQodC5zdWJzdHJpbmcoaSxlKSksaT0tMSksdm9pZCAwIT09biYmKG4rPXQuY2hhckF0KGUpKSk6KHZvaWQgMD09PW4mJihuPXQuc3Vic3RyKDAsZSkpLHZvaWQgMCE9PShvPVplW29dKT8oLTEhPT1pJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KHQuc3Vic3RyaW5nKGksZSkpLGk9LTEpLG4rPW8pOi0xPT09aSYmKGk9ZSkpfXJldHVybi0xIT09aSYmKG4rPWVuY29kZVVSSUNvbXBvbmVudCh0LnN1YnN0cmluZyhpKSkpLHZvaWQgMCE9PW4/bjp0fWZ1bmN0aW9uIFFlKHQpe2xldCByPXZvaWQgMDtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dC5jaGFyQ29kZUF0KGUpOzM1PT09bnx8NjM9PT1uPyh2b2lkIDA9PT1yJiYocj10LnN1YnN0cigwLGUpKSxyKz1aZVtuXSk6dm9pZCAwIT09ciYmKHIrPXRbZV0pfXJldHVybiB2b2lkIDAhPT1yP3I6dH1mdW5jdGlvbiBZZShlLHQpe2xldCByO3JldHVybiByPWUuYXV0aG9yaXR5JiYxPGUucGF0aC5sZW5ndGgmJiJmaWxlIj09PWUuc2NoZW1lPyIvLyIrZS5hdXRob3JpdHkrZS5wYXRoOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJig2NTw9ZS5wYXRoLmNoYXJDb2RlQXQoMSkmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8OTc8PWUucGF0aC5jaGFyQ29kZUF0KDEpJiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGgscj1QP3IucmVwbGFjZSgvXC8vZywiXFwiKTpyfWZ1bmN0aW9uIGV0KGUsdCl7Y29uc3Qgcj10P1FlOlhlO2xldCBuPSIiLHtzY2hlbWU6aSxhdXRob3JpdHk6byxwYXRoOmEscXVlcnk6cyxmcmFnbWVudDpsfT1lO2lmKGkmJihuPW4raSsiOiIpLCFvJiYiZmlsZSIhPT1pfHwobj0obis9V2UpK1dlKSxvKXtsZXQgZT1vLmluZGV4T2YoIkAiKTtpZigtMSE9PWUpe2NvbnN0IGM9by5zdWJzdHIoMCxlKTtvPW8uc3Vic3RyKGUrMSksLTE9PT0oZT1jLmluZGV4T2YoIjoiKSk/bis9cihjLCExKTpuPShuPW4rcihjLnN1YnN0cigwLGUpLCExKSsiOiIpK3IoYy5zdWJzdHIoZSsxKSwhMSksbis9IkAifW89by50b0xvd2VyQ2FzZSgpLC0xPT09KGU9by5pbmRleE9mKCI6IikpP24rPXIobywhMSk6bj0obis9cihvLnN1YnN0cigwLGUpLCExKSkrby5zdWJzdHIoZSl9cmV0dXJuIGEmJigzPD1hLmxlbmd0aCYmNDc9PT1hLmNoYXJDb2RlQXQoMCkmJjU4PT09YS5jaGFyQ29kZUF0KDIpPzY1PD0oZT1hLmNoYXJDb2RlQXQoMSkpJiZlPD05MCYmKGE9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OmArYS5zdWJzdHIoMykpOjI8PWEubGVuZ3RoJiY1OD09PWEuY2hhckNvZGVBdCgxKSYmKDY1PD0oZT1hLmNoYXJDb2RlQXQoMCkpJiZlPD05MCYmKGE9U3RyaW5nLmZyb21DaGFyQ29kZShlKzMyKSsiOiIrYS5zdWJzdHIoMikpKSxuKz1yKGEsITApKSxzJiYobj0obis9Ij8iKStyKHMsITEpKSxuPWw/KG4rPSIjIikrKHQ/bDpYZShsLCExKSk6bn1jb25zdCB0dD0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBydChlKXtyZXR1cm4gZS5tYXRjaCh0dCk/ZS5yZXBsYWNlKHR0LGU9PmZ1bmN0aW9uIHQocil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQocil9Y2F0Y2goZSl7cmV0dXJuIDM8ci5sZW5ndGg/ci5zdWJzdHIoMCwzKSt0KHIuc3Vic3RyKDMpKTpyfX0oZSkpOmV9Y2xhc3MgbnR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxpbmVOdW1iZXI9ZSx0aGlzLmNvbHVtbj10fXdpdGgoZT10aGlzLmxpbmVOdW1iZXIsdD10aGlzLmNvbHVtbil7cmV0dXJuIGU9PT10aGlzLmxpbmVOdW1iZXImJnQ9PT10aGlzLmNvbHVtbj90aGlzOm5ldyBudChlLHQpfWRlbHRhKGU9MCx0PTApe3JldHVybiB0aGlzLndpdGgodGhpcy5saW5lTnVtYmVyK2UsdGhpcy5jb2x1bW4rdCl9ZXF1YWxzKGUpe3JldHVybiBudC5lcXVhbHModGhpcyxlKX1zdGF0aWMgZXF1YWxzKGUsdCl7cmV0dXJuIWUmJiF0fHwhIWUmJiEhdCYmZS5saW5lTnVtYmVyPT09dC5saW5lTnVtYmVyJiZlLmNvbHVtbj09PXQuY29sdW1ufWlzQmVmb3JlKGUpe3JldHVybiBudC5pc0JlZm9yZSh0aGlzLGUpfXN0YXRpYyBpc0JlZm9yZShlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjx0LmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwoZSl7cmV0dXJuIG50LmlzQmVmb3JlT3JFcXVhbCh0aGlzLGUpfXN0YXRpYyBpc0JlZm9yZU9yRXF1YWwoZSx0KXtyZXR1cm4gZS5saW5lTnVtYmVyPHQubGluZU51bWJlcnx8ISh0LmxpbmVOdW1iZXI8ZS5saW5lTnVtYmVyKSYmZS5jb2x1bW48PXQuY29sdW1ufXN0YXRpYyBjb21wYXJlKGUsdCl7dmFyIHI9MHxlLmxpbmVOdW1iZXIsbj0wfHQubGluZU51bWJlcjtyZXR1cm4gciE9bj9yLW46KDB8ZS5jb2x1bW4pLSgwfHQuY29sdW1uKX1jbG9uZSgpe3JldHVybiBuZXcgbnQodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdChlKXtyZXR1cm4gbmV3IG50KGUubGluZU51bWJlcixlLmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmNvbHVtbn19Y2xhc3MgaXR7Y29uc3RydWN0b3IoZSx0LHIsbil7cjxlfHxlPT09ciYmbjx0Pyh0aGlzLnN0YXJ0TGluZU51bWJlcj1yLHRoaXMuc3RhcnRDb2x1bW49bix0aGlzLmVuZExpbmVOdW1iZXI9ZSx0aGlzLmVuZENvbHVtbj10KToodGhpcy5zdGFydExpbmVOdW1iZXI9ZSx0aGlzLnN0YXJ0Q29sdW1uPXQsdGhpcy5lbmRMaW5lTnVtYmVyPXIsdGhpcy5lbmRDb2x1bW49bil9aXNFbXB0eSgpe3JldHVybiBpdC5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KGUpe3JldHVybiBlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24oZSl7cmV0dXJuIGl0LmNvbnRhaW5zUG9zaXRpb24odGhpcyxlKX1zdGF0aWMgY29udGFpbnNQb3NpdGlvbihlLHQpe3JldHVybiEodC5saW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmxpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5saW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuY29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQubGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5jb2x1bW4+ZS5lbmRDb2x1bW4pKX1zdGF0aWMgc3RyaWN0Q29udGFpbnNQb3NpdGlvbihlLHQpe3JldHVybiEodC5saW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmxpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5saW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuY29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPj1lLmVuZENvbHVtbikpfWNvbnRhaW5zUmFuZ2UoZSl7cmV0dXJuIGl0LmNvbnRhaW5zUmFuZ2UodGhpcyxlKX1zdGF0aWMgY29udGFpbnNSYW5nZShlLHQpe3JldHVybiEodC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj5lLmVuZENvbHVtbikpKX1zdHJpY3RDb250YWluc1JhbmdlKGUpe3JldHVybiBpdC5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsZSl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPj1lLmVuZENvbHVtbikpKX1wbHVzUmFuZ2UoZSl7cmV0dXJuIGl0LnBsdXNSYW5nZSh0aGlzLGUpfXN0YXRpYyBwbHVzUmFuZ2UoZSx0KXtsZXQgcixuLGksbztyZXR1cm4gbj10LnN0YXJ0TGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcj8ocj10LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKTp0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyPyhyPXQuc3RhcnRMaW5lTnVtYmVyLE1hdGgubWluKHQuc3RhcnRDb2x1bW4sZS5zdGFydENvbHVtbikpOihyPWUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pLG89dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcj8oaT10LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOnQuZW5kTGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlcj8oaT10LmVuZExpbmVOdW1iZXIsTWF0aC5tYXgodC5lbmRDb2x1bW4sZS5lbmRDb2x1bW4pKTooaT1lLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pLG5ldyBpdChyLG4saSxvKX1pbnRlcnNlY3RSYW5nZXMoZSl7cmV0dXJuIGl0LmludGVyc2VjdFJhbmdlcyh0aGlzLGUpfXN0YXRpYyBpbnRlcnNlY3RSYW5nZXMoZSx0KXtsZXQgcj1lLnN0YXJ0TGluZU51bWJlcixuPWUuc3RhcnRDb2x1bW4saT1lLmVuZExpbmVOdW1iZXIsbz1lLmVuZENvbHVtbjt2YXIgZT10LnN0YXJ0TGluZU51bWJlcixhPXQuc3RhcnRDb2x1bW4scz10LmVuZExpbmVOdW1iZXIsdD10LmVuZENvbHVtbjtyZXR1cm4gcjxlPyhyPWUsbj1hKTpyPT09ZSYmKG49TWF0aC5tYXgobixhKSksaT5zPyhpPXMsbz10KTppPT09cyYmKG89TWF0aC5taW4obyx0KSkscj5pfHxyPT09aSYmbj5vP251bGw6bmV3IGl0KHIsbixpLG8pfWVxdWFsc1JhbmdlKGUpe3JldHVybiBpdC5lcXVhbHNSYW5nZSh0aGlzLGUpfXN0YXRpYyBlcXVhbHNSYW5nZShlLHQpe3JldHVybiEhZSYmISF0JiZlLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLnN0YXJ0Q29sdW1uPT09dC5zdGFydENvbHVtbiYmZS5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbj09PXQuZW5kQ29sdW1ufWdldEVuZFBvc2l0aW9uKCl7cmV0dXJuIGl0LmdldEVuZFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRFbmRQb3NpdGlvbihlKXtyZXR1cm4gbmV3IG50KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbil9Z2V0U3RhcnRQb3NpdGlvbigpe3JldHVybiBpdC5nZXRTdGFydFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRTdGFydFBvc2l0aW9uKGUpe3JldHVybiBuZXcgbnQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMuZW5kTGluZU51bWJlcisiLCIrdGhpcy5lbmRDb2x1bW4rIl0ifXNldEVuZFBvc2l0aW9uKGUsdCl7cmV0dXJuIG5ldyBpdCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLGUsdCl9c2V0U3RhcnRQb3NpdGlvbihlLHQpe3JldHVybiBuZXcgaXQoZSx0LHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbil9Y29sbGFwc2VUb1N0YXJ0KCl7cmV0dXJuIGl0LmNvbGxhcHNlVG9TdGFydCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb1N0YXJ0KGUpe3JldHVybiBuZXcgaXQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbixlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgZnJvbVBvc2l0aW9ucyhlLHQ9ZSl7cmV0dXJuIG5ldyBpdChlLmxpbmVOdW1iZXIsZS5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgbGlmdChlKXtyZXR1cm4gZT9uZXcgaXQoZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbixlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pOm51bGx9c3RhdGljIGlzSVJhbmdlKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5lbmRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuZW5kQ29sdW1ufXN0YXRpYyBhcmVJbnRlcnNlY3RpbmdPclRvdWNoaW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjx0LnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbjxlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nKGUsdCl7cmV0dXJuIShlLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fGUuZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZlLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48PWUuc3RhcnRDb2x1bW4pfXN0YXRpYyBjb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMoZSx0KXt2YXIgcixuLGksbyxhLHM7cmV0dXJuIGUmJnQ/KHI9MHxlLnN0YXJ0TGluZU51bWJlcik9PShuPTB8dC5zdGFydExpbmVOdW1iZXIpPyhpPTB8ZS5zdGFydENvbHVtbik9PShvPTB8dC5zdGFydENvbHVtbik/KGE9MHxlLmVuZExpbmVOdW1iZXIpIT0ocz0wfHQuZW5kTGluZU51bWJlcik/YS1zOigwfGUuZW5kQ29sdW1uKS0oMHx0LmVuZENvbHVtbik6aS1vOnItbjooZT8xOjApLSh0PzE6MCl9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ0VuZHMoZSx0KXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyP2UuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW4/ZS5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlcj9lLnN0YXJ0Q29sdW1uLXQuc3RhcnRDb2x1bW46ZS5zdGFydExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXI6ZS5lbmRDb2x1bW4tdC5lbmRDb2x1bW46ZS5lbmRMaW5lTnVtYmVyLXQuZW5kTGluZU51bWJlcn1zdGF0aWMgc3BhbnNNdWx0aXBsZUxpbmVzKGUpe3JldHVybiBlLmVuZExpbmVOdW1iZXI+ZS5zdGFydExpbmVOdW1iZXJ9dG9KU09OKCl7cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIG90KGUsdCxyLG4pe2NvbnN0IGk9bmV3IHhlKGUsdCxyKTtyZXR1cm4gaS5Db21wdXRlRGlmZihuKX1jbGFzcyBhdHtjb25zdHJ1Y3RvcihyKXtjb25zdCBuPVtdLGk9W107Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKW5bZV09aHQocltlXSwxKSxpW2VdPWZ0KHJbZV0sMSk7dGhpcy5saW5lcz1yLHRoaXMuX3N0YXJ0Q29sdW1ucz1uLHRoaXMuX2VuZENvbHVtbnM9aX1nZXRFbGVtZW50cygpe2NvbnN0IHI9W107Zm9yKGxldCBlPTAsdD10aGlzLmxpbmVzLmxlbmd0aDtlPHQ7ZSsrKXJbZV09dGhpcy5saW5lc1tlXS5zdWJzdHJpbmcodGhpcy5fc3RhcnRDb2x1bW5zW2VdLTEsdGhpcy5fZW5kQ29sdW1uc1tlXS0xKTtyZXR1cm4gcn1nZXRTdHJpY3RFbGVtZW50KGUpe3JldHVybiB0aGlzLmxpbmVzW2VdfWdldFN0YXJ0TGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWdldEVuZExpbmVOdW1iZXIoZSl7cmV0dXJuIGUrMX1jcmVhdGVDaGFyU2VxdWVuY2UoZSxyLG4pe2NvbnN0IGk9W10sbz1bXSxhPVtdO2xldCBzPTA7Zm9yKGxldCB0PXI7dDw9bjt0Kyspe2NvbnN0IHU9dGhpcy5saW5lc1t0XTt2YXIgbD1lP3RoaXMuX3N0YXJ0Q29sdW1uc1t0XToxLGM9ZT90aGlzLl9lbmRDb2x1bW5zW3RdOnUubGVuZ3RoKzE7Zm9yKGxldCBlPWw7ZTxjO2UrKylpW3NdPXUuY2hhckNvZGVBdChlLTEpLG9bc109dCsxLGFbc109ZSxzKyt9cmV0dXJuIG5ldyBzdChpLG8sYSl9fWNsYXNzIHN0e2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLl9jaGFyQ29kZXM9ZSx0aGlzLl9saW5lTnVtYmVycz10LHRoaXMuX2NvbHVtbnM9cn1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiB0aGlzLl9saW5lTnVtYmVyc1tlXX1nZXRTdGFydENvbHVtbihlKXtyZXR1cm4gdGhpcy5fY29sdW1uc1tlXX1nZXRFbmRMaW5lTnVtYmVyKGUpe3JldHVybiB0aGlzLl9saW5lTnVtYmVyc1tlXX1nZXRFbmRDb2x1bW4oZSl7cmV0dXJuIHRoaXMuX2NvbHVtbnNbZV0rMX19Y2xhc3MgbHR7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8sYSxzKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbFN0YXJ0Q29sdW1uPXQsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9cix0aGlzLm9yaWdpbmFsRW5kQ29sdW1uPW4sdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1pLHRoaXMubW9kaWZpZWRTdGFydENvbHVtbj1vLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWEsdGhpcy5tb2RpZmllZEVuZENvbHVtbj1zfXN0YXRpYyBjcmVhdGVGcm9tRGlmZkNoYW5nZShlLHQscil7bGV0IG4saSxvLGEscyxsLGMsdTtyZXR1cm4gYT0wPT09ZS5vcmlnaW5hbExlbmd0aD8obj0wLGk9MCxvPTApOihuPXQuZ2V0U3RhcnRMaW5lTnVtYmVyKGUub3JpZ2luYWxTdGFydCksaT10LmdldFN0YXJ0Q29sdW1uKGUub3JpZ2luYWxTdGFydCksbz10LmdldEVuZExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSksdC5nZXRFbmRDb2x1bW4oZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSkpLHU9MD09PWUubW9kaWZpZWRMZW5ndGg/KHM9MCxsPTAsYz0wKToocz1yLmdldFN0YXJ0TGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQpLGw9ci5nZXRTdGFydENvbHVtbihlLm1vZGlmaWVkU3RhcnQpLGM9ci5nZXRFbmRMaW5lTnVtYmVyKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpLHIuZ2V0RW5kQ29sdW1uKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpKSxuZXcgbHQobixpLG8sYSxzLGwsYyx1KX19Y2xhc3MgY3R7Y29uc3RydWN0b3IoZSx0LHIsbixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPXIsdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9bix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KGUsdCxuLGksbyx1LGgpe2xldCByLGEscyxsLGM9dm9pZCAwO2lmKGE9MD09PXQub3JpZ2luYWxMZW5ndGg/KHI9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KS0xLDApOihyPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCksbi5nZXRFbmRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpKSxsPTA9PT10Lm1vZGlmaWVkTGVuZ3RoPyhzPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCktMSwwKToocz1pLmdldFN0YXJ0TGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQpLGkuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSksdSYmMDx0Lm9yaWdpbmFsTGVuZ3RoJiZ0Lm9yaWdpbmFsTGVuZ3RoPDIwJiYwPHQubW9kaWZpZWRMZW5ndGgmJnQubW9kaWZpZWRMZW5ndGg8MjAmJm8oKSl7dmFyIGY9bi5jcmVhdGVDaGFyU2VxdWVuY2UoZSx0Lm9yaWdpbmFsU3RhcnQsdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSksZD1pLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQubW9kaWZpZWRTdGFydCx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKTtsZXQgcj1vdChmLGQsbywhMCkuY2hhbmdlcztoJiYocj1mdW5jdGlvbihyKXtpZihyLmxlbmd0aDw9MSlyZXR1cm4gcjtjb25zdCBuPVtyWzBdXTtsZXQgaT1uWzBdO2ZvcihsZXQgZT0xLHQ9ci5sZW5ndGg7ZTx0O2UrKyl7dmFyIG89cltlXSxhPW8ub3JpZ2luYWxTdGFydC0oaS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgpLHM9by5tb2RpZmllZFN0YXJ0LShpLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aCk7TWF0aC5taW4oYSxzKTwzPyhpLm9yaWdpbmFsTGVuZ3RoPW8ub3JpZ2luYWxTdGFydCtvLm9yaWdpbmFsTGVuZ3RoLWkub3JpZ2luYWxTdGFydCxpLm1vZGlmaWVkTGVuZ3RoPW8ubW9kaWZpZWRTdGFydCtvLm1vZGlmaWVkTGVuZ3RoLWkubW9kaWZpZWRTdGFydCk6KG4ucHVzaChvKSxpPW8pfXJldHVybiBufShyKSksYz1bXTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspYy5wdXNoKGx0LmNyZWF0ZUZyb21EaWZmQ2hhbmdlKHJbZV0sZixkKSl9cmV0dXJuIG5ldyBjdChyLGEscyxsLGMpfX1jbGFzcyB1dHtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9ci5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPXIuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPXIuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1yLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz1lLHRoaXMubW9kaWZpZWRMaW5lcz10LHRoaXMub3JpZ2luYWw9bmV3IGF0KGUpLHRoaXMubW9kaWZpZWQ9bmV3IGF0KHQpLHRoaXMuY29udGludWVMaW5lRGlmZj1kdChyLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPWR0KDA9PT1yLm1heENvbXB1dGF0aW9uVGltZT8wOk1hdGgubWluKHIubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYoMT09PXRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoJiYwPT09dGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGgpcmV0dXJuIDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczpbe21vZGlmaWVkRW5kQ29sdW1uOjAsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjAsbW9kaWZpZWRTdGFydENvbHVtbjowLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjAsb3JpZ2luYWxFbmRDb2x1bW46MCxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MCxvcmlnaW5hbFN0YXJ0Q29sdW1uOjAsb3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MH1dfV19O2lmKDE9PT10aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoKXJldHVybntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOnRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjEsY2hhckNoYW5nZXM6W3ttb2RpZmllZEVuZENvbHVtbjowLG1vZGlmaWVkRW5kTGluZU51bWJlcjowLG1vZGlmaWVkU3RhcnRDb2x1bW46MCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjowLG9yaWdpbmFsRW5kQ29sdW1uOjAsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjAsb3JpZ2luYWxTdGFydENvbHVtbjowLG9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjB9XX1dfTt2YXIgZT1vdCh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLHI9ZS5jaGFuZ2VzLGU9ZS5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgZD1bXTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspZC5wdXNoKGN0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UscltlXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6ZSxjaGFuZ2VzOmR9fWNvbnN0IG49W107bGV0IGk9MCxvPTA7Zm9yKGxldCBlPS0xLHQ9ci5sZW5ndGg7ZTx0O2UrKyl7Zm9yKHZhciBhPWUrMTx0P3JbZSsxXTpudWxsLGg9YT9hLm9yaWdpbmFsU3RhcnQ6dGhpcy5vcmlnaW5hbExpbmVzLmxlbmd0aCxmPWE/YS5tb2RpZmllZFN0YXJ0OnRoaXMubW9kaWZpZWRMaW5lcy5sZW5ndGg7aTxoJiZvPGY7KXtjb25zdCBjPXRoaXMub3JpZ2luYWxMaW5lc1tpXSx1PXRoaXMubW9kaWZpZWRMaW5lc1tvXTtpZihjIT09dSl7e2xldCBlPWh0KGMsMSksdD1odCh1LDEpO2Zvcig7MTxlJiYxPHQ7KXtpZihjLmNoYXJDb2RlQXQoZS0yKSE9PXUuY2hhckNvZGVBdCh0LTIpKWJyZWFrO2UtLSx0LS19KDE8ZXx8MTx0KSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShuLGkrMSwxLGUsbysxLDEsdCl9e2xldCBlPWZ0KGMsMSksdD1mdCh1LDEpO2Zvcih2YXIgcz1jLmxlbmd0aCsxLGw9dS5sZW5ndGgrMTtlPHMmJnQ8bDspe2lmKGMuY2hhckNvZGVBdChlLTEpIT09Yy5jaGFyQ29kZUF0KHQtMSkpYnJlYWs7ZSsrLHQrK30oZTxzfHx0PGwpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKG4saSsxLGUscyxvKzEsdCxsKX19aSsrLG8rK31hJiYobi5wdXNoKGN0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsYSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLGkrPWEub3JpZ2luYWxMZW5ndGgsbys9YS5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTplLGNoYW5nZXM6bn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxyLG4saSxvLGEscyl7aWYoIXRoaXMuX21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQscixuLGksbyxhLHMpKXtsZXQgZT12b2lkIDA7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJihlPVtuZXcgbHQocixuLHIsaSxvLGEsbyxzKV0pLHQucHVzaChuZXcgY3QocixyLG8sbyxlKSl9fV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQscixuLGksbyxhKXt2YXIgcz1lLmxlbmd0aDtpZigwPT09cylyZXR1cm4hMTtjb25zdCBsPWVbcy0xXTtyZXR1cm4gMCE9PWwub3JpZ2luYWxFbmRMaW5lTnVtYmVyJiYwIT09bC5tb2RpZmllZEVuZExpbmVOdW1iZXImJihsLm9yaWdpbmFsRW5kTGluZU51bWJlcisxPT09dCYmbC5tb2RpZmllZEVuZExpbmVOdW1iZXIrMT09PWkmJihsLm9yaWdpbmFsRW5kTGluZU51bWJlcj10LGwubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWksdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJmwuY2hhckNoYW5nZXMmJmwuY2hhckNoYW5nZXMucHVzaChuZXcgbHQodCxyLHQsbixpLG8saSxhKSksITApKX19ZnVuY3Rpb24gaHQoZSx0KXtlPWZ1bmN0aW9uKHIpe2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKyl7dmFyIG49ci5jaGFyQ29kZUF0KGUpO2lmKDMyIT09biYmOSE9PW4pcmV0dXJuIGV9cmV0dXJuLTF9KGUpO3JldHVybi0xPT09ZT90OmUrMX1mdW5jdGlvbiBmdChlLHQpe2U9ZnVuY3Rpb24odCxyPXQubGVuZ3RoLTEpe2ZvcihsZXQgZT1yOzA8PWU7ZS0tKXt2YXIgbj10LmNoYXJDb2RlQXQoZSk7aWYoMzIhPT1uJiY5IT09bilyZXR1cm4gZX1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1lP3Q6ZSsyfWZ1bmN0aW9uIGR0KGUpe2lmKDA9PT1lKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfWZ1bmN0aW9uIG10KGUpe3JldHVybiBlPDA/MDoyNTU8ZT8yNTU6MHxlfWZ1bmN0aW9uIGd0KGUpe3JldHVybiBlPDA/MDo0Mjk0OTY3Mjk1PGU/NDI5NDk2NzI5NTowfGV9Y2xhc3MgcHR7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZXM9ZSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkoZS5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKGUsdCl7ZT1ndChlKTtjb25zdCByPXRoaXMudmFsdWVzLG49dGhpcy5wcmVmaXhTdW07dmFyIGk9dC5sZW5ndGg7cmV0dXJuIDAhPT1pJiYodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoK2kpLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KDAsZSksMCksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkoZSksZStpKSx0aGlzLnZhbHVlcy5zZXQodCxlKSxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksMDw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiZ0aGlzLnByZWZpeFN1bS5zZXQobi5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfXNldFZhbHVlKGUsdCl7cmV0dXJuIGU9Z3QoZSksdD1ndCh0KSx0aGlzLnZhbHVlc1tlXSE9PXQmJih0aGlzLnZhbHVlc1tlXT10LGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSwhMCl9cmVtb3ZlVmFsdWVzKGUsdCl7ZT1ndChlKSx0PWd0KHQpO2NvbnN0IHI9dGhpcy52YWx1ZXMsbj10aGlzLnByZWZpeFN1bTtpZihlPj1yLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1yLmxlbmd0aC1lO3JldHVybiAwIT09KHQ9aTw9dD9pOnQpJiYodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoLXQpLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KDAsZSksMCksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkoZSt0KSxlKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSxlLTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPWUtMSksMDw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiZ0aGlzLnByZWZpeFN1bS5zZXQobi5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfWdldFRvdGFsU3VtKCl7cmV0dXJuIDA9PT10aGlzLnZhbHVlcy5sZW5ndGg/MDp0aGlzLl9nZXRQcmVmaXhTdW0odGhpcy52YWx1ZXMubGVuZ3RoLTEpfWdldFByZWZpeFN1bShlKXtyZXR1cm4gZTwwPzA6KGU9Z3QoZSksdGhpcy5fZ2V0UHJlZml4U3VtKGUpKX1fZ2V0UHJlZml4U3VtKHQpe2lmKHQ8PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSlyZXR1cm4gdGhpcy5wcmVmaXhTdW1bdF07bGV0IHI9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzE7MD09PXImJih0aGlzLnByZWZpeFN1bVswXT10aGlzLnZhbHVlc1swXSxyKyspLHQ+PXRoaXMudmFsdWVzLmxlbmd0aCYmKHQ9dGhpcy52YWx1ZXMubGVuZ3RoLTEpO2ZvcihsZXQgZT1yO2U8PXQ7ZSsrKXRoaXMucHJlZml4U3VtW2VdPXRoaXMucHJlZml4U3VtW2UtMV0rdGhpcy52YWx1ZXNbZV07cmV0dXJuIHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1NYXRoLm1heCh0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0sdCksdGhpcy5wcmVmaXhTdW1bdF19Z2V0SW5kZXhPZihlKXtlPU1hdGguZmxvb3IoZSksdGhpcy5nZXRUb3RhbFN1bSgpO2xldCB0PTAscj10aGlzLnZhbHVlcy5sZW5ndGgtMSxuPTA7dmFyIGk7bGV0IG89MDtmb3IoO3Q8PXI7KWlmKG49dCsoci10KS8yfDAsaT10aGlzLnByZWZpeFN1bVtuXSxlPChvPWktdGhpcy52YWx1ZXNbbl0pKXI9bi0xO2Vsc2V7aWYoIShpPD1lKSlicmVhazt0PW4rMX1yZXR1cm4gbmV3IGJ0KG4sZS1vKX19Y2xhc3MgYnR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmluZGV4PWUsdGhpcy5yZW1haW5kZXI9dCx0aGlzLl9wcmVmaXhTdW1JbmRleE9mUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10fX1jb25zdCB2dD1mdW5jdGlvbihlPSIiKXtsZXQgdD0iKC0/XFxkKlxcLlxcZFxcdyopfChbXiI7Zm9yKGNvbnN0IHIgb2YiYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLC48Pi8/IikwPD1lLmluZGV4T2Yocil8fCh0Kz0iXFwiK3IpO3JldHVybiB0Kz0iXFxzXSspIixuZXcgUmVnRXhwKHQsImciKX0oKTtjb25zdCB5dD17bWF4TGVuOjFlMyx3aW5kb3dTaXplOjE1LHRpbWVCdWRnZXQ6MTUwfTtmdW5jdGlvbiBDdCh0LHIsbixpLG89eXQpe2lmKG4ubGVuZ3RoPm8ubWF4TGVuKXtsZXQgZT10LW8ubWF4TGVuLzI7cmV0dXJuIGU8MD9lPTA6aSs9ZSxDdCh0LHIsbj1uLnN1YnN0cmluZyhlLHQrby5tYXhMZW4vMiksaSxvKX12YXIgaD1EYXRlLm5vdygpLGE9dC0xLWk7bGV0IHM9LTEsbD1udWxsO2ZvcihsZXQgZT0xOyEoRGF0ZS5ub3coKS1oPj1vLnRpbWVCdWRnZXQpO2UrKyl7dmFyIGM9YS1vLndpbmRvd1NpemUqZSx1PShyLmxhc3RJbmRleD1NYXRoLm1heCgwLGMpLGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpO2Zvcig7aT1lLmV4ZWModCk7KXt2YXIgbz1pLmluZGV4fHwwO2lmKG88PXImJmUubGFzdEluZGV4Pj1yKXJldHVybiBpO2lmKDA8biYmbjxvKXJldHVybiBudWxsfXJldHVybiBudWxsfShyLG4sYSxzKSk7aWYoIXUmJmwpYnJlYWs7aWYobD11LGM8PTApYnJlYWs7cz1jfXJldHVybiBsPyh0PXt3b3JkOmxbMF0sc3RhcnRDb2x1bW46aSsxK2wuaW5kZXgsZW5kQ29sdW1uOmkrMStsLmluZGV4K2xbMF0ubGVuZ3RofSxyLmxhc3RJbmRleD0wLHQpOm51bGx9Y2xhc3Mgd3R7Y29uc3RydWN0b3IoZSl7ZT1tdChlKTt0aGlzLl9kZWZhdWx0VmFsdWU9ZSx0aGlzLl9hc2NpaU1hcD13dC5fY3JlYXRlQXNjaWlNYXAoZSksdGhpcy5fbWFwPW5ldyBNYXB9c3RhdGljIF9jcmVhdGVBc2NpaU1hcCh0KXtjb25zdCByPW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXJbZV09dDtyZXR1cm4gcn1zZXQoZSx0KXt0PW10KHQpOzA8PWUmJmU8MjU2P3RoaXMuX2FzY2lpTWFwW2VdPXQ6dGhpcy5fbWFwLnNldChlLHQpfWdldChlKXtyZXR1cm4gMDw9ZSYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV06dGhpcy5fbWFwLmdldChlKXx8dGhpcy5fZGVmYXVsdFZhbHVlfX1jbGFzcyBfdHtjb25zdHJ1Y3RvcihyLG4saSl7Y29uc3Qgbz1uZXcgVWludDhBcnJheShyKm4pO2ZvcihsZXQgZT0wLHQ9cipuO2U8dDtlKyspb1tlXT1pO3RoaXMuX2RhdGE9byx0aGlzLnJvd3M9cix0aGlzLmNvbHM9bn1nZXQoZSx0KXtyZXR1cm4gdGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XX1zZXQoZSx0LHIpe3RoaXMuX2RhdGFbZSp0aGlzLmNvbHMrdF09cn19Y2xhc3MgU3R7Y29uc3RydWN0b3Iocil7bGV0IG49MCxpPTA7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXt2YXJbbyxhLHNdPXJbZV07YT5uJiYobj1hKSxzPihpPW8+aT9vOmkpJiYoaT1zKX1uKyssaSsrO2NvbnN0IGw9bmV3IF90KGksbiwwKTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe3ZhcltjLHUsaF09cltlXTtsLnNldChjLHUsaCl9dGhpcy5fc3RhdGVzPWwsdGhpcy5fbWF4Q2hhckNvZGU9bn1uZXh0U3RhdGUoZSx0KXtyZXR1cm4gdDwwfHx0Pj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQoZSx0KX19bGV0IEF0PW51bGw7bGV0IHh0PW51bGw7Y2xhc3MgRXR7c3RhdGljIF9jcmVhdGVMaW5rKGUsdCxyLG4saSl7bGV0IG89aS0xO2Rve3ZhciBhPXQuY2hhckNvZGVBdChvKTtpZigyIT09ZS5nZXQoYSkpYnJlYWt9d2hpbGUoLS1vPm4pO3ZhciBzO3JldHVybiAwPG4mJihpPXQuY2hhckNvZGVBdChuLTEpLHM9dC5jaGFyQ29kZUF0KG8pLCg0MD09PWkmJjQxPT09c3x8OTE9PT1pJiY5Mz09PXN8fDEyMz09PWkmJjEyNT09PXMpJiZvLS0pLHtyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnIsc3RhcnRDb2x1bW46bisxLGVuZExpbmVOdW1iZXI6cixlbmRDb2x1bW46bysyfSx1cmw6dC5zdWJzdHJpbmcobixvKzEpfX1zdGF0aWMgY29tcHV0ZUxpbmtzKHQsaD1BdD1udWxsPT09QXQ/bmV3IFN0KFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pOkF0KXtjb25zdCBmPWZ1bmN0aW9uKCl7aWYobnVsbD09PXh0KXt4dD1uZXcgd3QoMCk7dmFyIHQ9IiBcdDw+J1wi44CB44CC772h772k77yM77yO77ya77yb4oCY44CI44CM44CO44CU77yI77y7772b772i772j772d77y977yJ44CV44CP44CN44CJ4oCZ772A772e4oCmIjtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl4dC5zZXQodC5jaGFyQ29kZUF0KGUpLDEpO2ZvcihsZXQgZT0wO2U8Ii4sOyIubGVuZ3RoO2UrKyl4dC5zZXQoIi4sOyIuY2hhckNvZGVBdChlKSwyKX1yZXR1cm4geHR9KCksZD1bXTtmb3IobGV0IHU9MSxlPXQuZ2V0TGluZUNvdW50KCk7dTw9ZTt1Kyspe2NvbnN0IHA9dC5nZXRMaW5lQ29udGVudCh1KTt2YXIgbT1wLmxlbmd0aDtsZXQgcj0wLG49MCxpPTAsbz0xLGE9ITEscz0hMSxsPSExLGM9ITE7Zm9yKDtyPG07KXtsZXQgdD0hMTt2YXIgZz1wLmNoYXJDb2RlQXQocik7aWYoMTM9PT1vKXtsZXQgZTtzd2l0Y2goZyl7Y2FzZSA0MDphPSEwLGU9MDticmVhaztjYXNlIDQxOmU9YT8wOjE7YnJlYWs7Y2FzZSA5MTpsPSEwLHM9ITAsZT0wO2JyZWFrO2Nhc2UgOTM6bD0hMSxlPXM/MDoxO2JyZWFrO2Nhc2UgMTIzOmM9ITAsZT0wO2JyZWFrO2Nhc2UgMTI1OmU9Yz8wOjE7YnJlYWs7Y2FzZSAzOTplPTM0PT09aXx8OTY9PT1pPzA6MTticmVhaztjYXNlIDM0OmU9Mzk9PT1pfHw5Nj09PWk/MDoxO2JyZWFrO2Nhc2UgOTY6ZT0zOT09PWl8fDM0PT09aT8wOjE7YnJlYWs7Y2FzZSA0MjplPTQyPT09aT8xOjA7YnJlYWs7Y2FzZSAxMjQ6ZT0xMjQ9PT1pPzE6MDticmVhaztjYXNlIDMyOmU9bD8wOjE7YnJlYWs7ZGVmYXVsdDplPWYuZ2V0KGcpfTE9PT1lJiYoZC5wdXNoKEV0Ll9jcmVhdGVMaW5rKGYscCx1LG4scikpLHQ9ITApfWVsc2UgaWYoMTI9PT1vKXtsZXQgZTsxPT09KGU9OTE9PT1nPyhzPSEwLDApOmYuZ2V0KGcpKT90PSEwOm89MTN9ZWxzZSAwPT09KG89aC5uZXh0U3RhdGUobyxnKSkmJih0PSEwKTt0JiYobz0xLGE9ITEscz0hMSxjPSExLG49cisxLGk9ZykscisrfTEzPT09byYmZC5wdXNoKEV0Ll9jcmVhdGVMaW5rKGYscCx1LG4sbSkpfXJldHVybiBkfX1jbGFzcyBOdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWYWx1ZVNldD1bWyJ0cnVlIiwiZmFsc2UiXSxbIlRydWUiLCJGYWxzZSJdLFsiUHJpdmF0ZSIsIlB1YmxpYyIsIkZyaWVuZCIsIlJlYWRPbmx5IiwiUGFydGlhbCIsIlByb3RlY3RlZCIsIldyaXRlT25seSJdLFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdXX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxyLG4saSl7aWYoZSYmdCl7dD10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldCh0LGkpO2lmKHQpcmV0dXJue3JhbmdlOmUsdmFsdWU6dH19aWYociYmbil7ZT10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChuLGkpO2lmKGUpcmV0dXJue3JhbmdlOnIsdmFsdWU6ZX19cmV0dXJuIG51bGx9ZG9OYXZpZ2F0ZVZhbHVlU2V0KGUsdCl7dmFyIHI9dGhpcy5udW1iZXJSZXBsYWNlKGUsdCk7cmV0dXJuIG51bGwhPT1yP3I6dGhpcy50ZXh0UmVwbGFjZShlLHQpfW51bWJlclJlcGxhY2UoZSx0KXt2YXIgcj1NYXRoLnBvdygxMCxlLmxlbmd0aC0oZS5sYXN0SW5kZXhPZigiLiIpKzEpKTtsZXQgbj1OdW1iZXIoZSk7ZT1wYXJzZUZsb2F0KGUpO3JldHVybiFpc05hTihuKSYmIWlzTmFOKGUpJiZuPT09ZSYmKDAhPT1ufHx0KT8obj1NYXRoLmZsb29yKG4qciksbis9dD9yOi1yLFN0cmluZyhuL3IpKTpudWxsfXRleHRSZXBsYWNlKGUsdCl7cmV0dXJuIHRoaXMudmFsdWVTZXRzUmVwbGFjZSh0aGlzLl9kZWZhdWx0VmFsdWVTZXQsZSx0KX12YWx1ZVNldHNSZXBsYWNlKHIsbixpKXtsZXQgbz1udWxsO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7bnVsbD09PW8mJmU8dDtlKyspbz10aGlzLnZhbHVlU2V0UmVwbGFjZShyW2VdLG4saSk7cmV0dXJuIG99dmFsdWVTZXRSZXBsYWNlKGUsdCxyKXtsZXQgbj1lLmluZGV4T2YodCk7cmV0dXJuIDA8PW4/KChuKz1yPzE6LTEpPDA/bj1lLmxlbmd0aC0xOm4lPWUubGVuZ3RoLGVbbl0pOm51bGx9fU50LklOU1RBTkNFPW5ldyBOdDtjb25zdCBrdD1PYmplY3QuZnJlZXplKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1zZXRUaW1lb3V0KGUuYmluZCh0KSwwKTtyZXR1cm57ZGlzcG9zZSgpe2NsZWFyVGltZW91dChyKX19fSk7KE1lPUxlPUxlfHx7fSkuaXNDYW5jZWxsYXRpb25Ub2tlbj1mdW5jdGlvbihlKXtyZXR1cm4gZT09PU1lLk5vbmV8fGU9PT1NZS5DYW5jZWxsZWR8fChlIGluc3RhbmNlb2YgTHR8fCEoIWV8fCJvYmplY3QiIT10eXBlb2YgZSkmJigiYm9vbGVhbiI9PXR5cGVvZiBlLmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCkpfSxNZS5Ob25lPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiExLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiRuLk5vbmV9KSxNZS5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6a3R9KTtjbGFzcyBMdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/a3Q6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBRKSx0aGlzLl9lbWl0dGVyLmV2ZW50KX1kaXNwb3NlKCl7dGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZGlzcG9zZSgpLHRoaXMuX2VtaXR0ZXI9bnVsbCl9fWNsYXNzIE10e2NvbnN0cnVjdG9yKGUpe3RoaXMuX3Rva2VuPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9ZSYmZS5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCh0aGlzLmNhbmNlbCx0aGlzKX1nZXQgdG9rZW4oKXtyZXR1cm4gdGhpcy5fdG9rZW58fCh0aGlzLl90b2tlbj1uZXcgTHQpLHRoaXMuX3Rva2VufWNhbmNlbCgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgTHQmJnRoaXMuX3Rva2VuLmNhbmNlbCgpOnRoaXMuX3Rva2VuPUxlLkNhbmNlbGxlZH1kaXNwb3NlKGU9ITEpe2UmJnRoaXMuY2FuY2VsKCksdGhpcy5fcGFyZW50TGlzdGVuZXImJnRoaXMuX3BhcmVudExpc3RlbmVyLmRpc3Bvc2UoKSx0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIEx0JiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49TGUuTm9uZX19Y2xhc3MgT3R7Y29uc3RydWN0b3IoKXt0aGlzLl9rZXlDb2RlVG9TdHI9W10sdGhpcy5fc3RyVG9LZXlDb2RlPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVmaW5lKGUsdCl7dGhpcy5fa2V5Q29kZVRvU3RyW2VdPXQsdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV09ZX1rZXlDb2RlVG9TdHIoZSl7cmV0dXJuIHRoaXMuX2tleUNvZGVUb1N0cltlXX1zdHJUb0tleUNvZGUoZSl7cmV0dXJuIHRoaXMuX3N0clRvS2V5Q29kZVtlLnRvTG93ZXJDYXNlKCldfHwwfX1jb25zdCBUdD1uZXcgT3QsSXQ9bmV3IE90LFB0PW5ldyBPdCxWdD1uZXcgQXJyYXkoMjMwKSxSdD17fSxEdD1bXSxGdD1PYmplY3QuY3JlYXRlKG51bGwpLEt0PU9iamVjdC5jcmVhdGUobnVsbCksanQ9W10sVXQ9W107Zm9yKGxldCBlPTA7ZTw9MTkzO2UrKylqdFtlXT0tMTtmb3IobGV0IGU9MDtlPD0xMjc7ZSsrKVV0W2VdPS0xO3tsZXQgZT1bXSx0PVtdO2Zvcihjb25zdCBUbyBvZltbMCwxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLCIiLCIiXSxbMCwxLDEsIkh5cGVyIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMiwiU3VwZXIiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwzLCJGbiIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDQsIkZuTG9jayIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDUsIlN1c3BlbmQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSw2LCJSZXN1bWUiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSw3LCJUdXJibyIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDgsIlNsZWVwIiwwLCIiLDAsIlZLX1NMRUVQIiwiIiwiIl0sWzAsMSw5LCJXYWtlVXAiLDAsIiIsMCwiIiwiIiwiIl0sWzMxLDAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsIiIsIiJdLFszMiwwLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLCIiLCIiXSxbMzMsMCwxMiwiS2V5QyIsMzMsIkMiLDY3LCJWS19DIiwiIiwiIl0sWzM0LDAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsIiIsIiJdLFszNSwwLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLCIiLCIiXSxbMzYsMCwxNSwiS2V5RiIsMzYsIkYiLDcwLCJWS19GIiwiIiwiIl0sWzM3LDAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsIiIsIiJdLFszOCwwLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLCIiLCIiXSxbMzksMCwxOCwiS2V5SSIsMzksIkkiLDczLCJWS19JIiwiIiwiIl0sWzQwLDAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsIiIsIiJdLFs0MSwwLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLCIiLCIiXSxbNDIsMCwyMSwiS2V5TCIsNDIsIkwiLDc2LCJWS19MIiwiIiwiIl0sWzQzLDAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsIiIsIiJdLFs0NCwwLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLCIiLCIiXSxbNDUsMCwyNCwiS2V5TyIsNDUsIk8iLDc5LCJWS19PIiwiIiwiIl0sWzQ2LDAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsIiIsIiJdLFs0NywwLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLCIiLCIiXSxbNDgsMCwyNywiS2V5UiIsNDgsIlIiLDgyLCJWS19SIiwiIiwiIl0sWzQ5LDAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsIiIsIiJdLFs1MCwwLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLCIiLCIiXSxbNTEsMCwzMCwiS2V5VSIsNTEsIlUiLDg1LCJWS19VIiwiIiwiIl0sWzUyLDAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsIiIsIiJdLFs1MywwLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLCIiLCIiXSxbNTQsMCwzMywiS2V5WCIsNTQsIlgiLDg4LCJWS19YIiwiIiwiIl0sWzU1LDAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsIiIsIiJdLFs1NiwwLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLCIiLCIiXSxbMjIsMCwzNiwiRGlnaXQxIiwyMiwiMSIsNDksIlZLXzEiLCIiLCIiXSxbMjMsMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLCIiLCIiXSxbMjQsMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLCIiLCIiXSxbMjUsMCwzOSwiRGlnaXQ0IiwyNSwiNCIsNTIsIlZLXzQiLCIiLCIiXSxbMjYsMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLCIiLCIiXSxbMjcsMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLCIiLCIiXSxbMjgsMCw0MiwiRGlnaXQ3IiwyOCwiNyIsNTUsIlZLXzciLCIiLCIiXSxbMjksMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLCIiLCIiXSxbMzAsMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLCIiLCIiXSxbMjEsMCw0NSwiRGlnaXQwIiwyMSwiMCIsNDgsIlZLXzAiLCIiLCIiXSxbMywxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLCIiLCIiXSxbOSwxLDQ3LCJFc2NhcGUiLDksIkVzY2FwZSIsMjcsIlZLX0VTQ0FQRSIsIiIsIiJdLFsxLDEsNDgsIkJhY2tzcGFjZSIsMSwiQmFja3NwYWNlIiw4LCJWS19CQUNLIiwiIiwiIl0sWzIsMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsIiIsIiJdLFsxMCwxLDUwLCJTcGFjZSIsMTAsIlNwYWNlIiwzMiwiVktfU1BBQ0UiLCIiLCIiXSxbODMsMCw1MSwiTWludXMiLDgzLCItIiwxODksIlZLX09FTV9NSU5VUyIsIi0iLCJPRU1fTUlOVVMiXSxbODEsMCw1MiwiRXF1YWwiLDgxLCI9IiwxODcsIlZLX09FTV9QTFVTIiwiPSIsIk9FTV9QTFVTIl0sWzg3LDAsNTMsIkJyYWNrZXRMZWZ0Iiw4NywiWyIsMjE5LCJWS19PRU1fNCIsIlsiLCJPRU1fNCJdLFs4OSwwLDU0LCJCcmFja2V0UmlnaHQiLDg5LCJdIiwyMjEsIlZLX09FTV82IiwiXSIsIk9FTV82Il0sWzg4LDAsNTUsIkJhY2tzbGFzaCIsODgsIlxcIiwyMjAsIlZLX09FTV81IiwiXFwiLCJPRU1fNSJdLFswLDAsNTYsIkludGxIYXNoIiwwLCIiLDAsIiIsIiIsIiJdLFs4MCwwLDU3LCJTZW1pY29sb24iLDgwLCI7IiwxODYsIlZLX09FTV8xIiwiOyIsIk9FTV8xIl0sWzkwLDAsNTgsIlF1b3RlIiw5MCwiJyIsMjIyLCJWS19PRU1fNyIsIiciLCJPRU1fNyJdLFs4NiwwLDU5LCJCYWNrcXVvdGUiLDg2LCJgIiwxOTIsIlZLX09FTV8zIiwiYCIsIk9FTV8zIl0sWzgyLDAsNjAsIkNvbW1hIiw4MiwiLCIsMTg4LCJWS19PRU1fQ09NTUEiLCIsIiwiT0VNX0NPTU1BIl0sWzg0LDAsNjEsIlBlcmlvZCIsODQsIi4iLDE5MCwiVktfT0VNX1BFUklPRCIsIi4iLCJPRU1fUEVSSU9EIl0sWzg1LDAsNjIsIlNsYXNoIiw4NSwiLyIsMTkxLCJWS19PRU1fMiIsIi8iLCJPRU1fMiJdLFs4LDEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLCIiLCIiXSxbNTksMSw2NCwiRjEiLDU5LCJGMSIsMTEyLCJWS19GMSIsIiIsIiJdLFs2MCwxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIiwiIiwiIl0sWzYxLDEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLCIiLCIiXSxbNjIsMSw2NywiRjQiLDYyLCJGNCIsMTE1LCJWS19GNCIsIiIsIiJdLFs2MywxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IiwiIiwiIl0sWzY0LDEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLCIiLCIiXSxbNjUsMSw3MCwiRjciLDY1LCJGNyIsMTE4LCJWS19GNyIsIiIsIiJdLFs2NiwxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IiwiIiwiIl0sWzY3LDEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLCIiLCIiXSxbNjgsMSw3MywiRjEwIiw2OCwiRjEwIiwxMjEsIlZLX0YxMCIsIiIsIiJdLFs2OSwxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIiwiIiwiIl0sWzcwLDEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLCIiLCIiXSxbMCwxLDc2LCJQcmludFNjcmVlbiIsMCwiIiwwLCIiLCIiLCIiXSxbNzksMSw3NywiU2Nyb2xsTG9jayIsNzksIlNjcm9sbExvY2siLDE0NSwiVktfU0NST0xMIiwiIiwiIl0sWzcsMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsIiIsIiJdLFsxOSwxLDc5LCJJbnNlcnQiLDE5LCJJbnNlcnQiLDQ1LCJWS19JTlNFUlQiLCIiLCIiXSxbMTQsMSw4MCwiSG9tZSIsMTQsIkhvbWUiLDM2LCJWS19IT01FIiwiIiwiIl0sWzExLDEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIiwiIiwiIl0sWzIwLDEsODIsIkRlbGV0ZSIsMjAsIkRlbGV0ZSIsNDYsIlZLX0RFTEVURSIsIiIsIiJdLFsxMywxLDgzLCJFbmQiLDEzLCJFbmQiLDM1LCJWS19FTkQiLCIiLCIiXSxbMTIsMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLCIiLCIiXSxbMTcsMSw4NSwiQXJyb3dSaWdodCIsMTcsIlJpZ2h0QXJyb3ciLDM5LCJWS19SSUdIVCIsIlJpZ2h0IiwiIl0sWzE1LDEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IiwiIl0sWzE4LDEsODcsIkFycm93RG93biIsMTgsIkRvd25BcnJvdyIsNDAsIlZLX0RPV04iLCJEb3duIiwiIl0sWzE2LDEsODgsIkFycm93VXAiLDE2LCJVcEFycm93IiwzOCwiVktfVVAiLCJVcCIsIiJdLFs3OCwxLDg5LCJOdW1Mb2NrIiw3OCwiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIiwiIiwiIl0sWzEwOCwxLDkwLCJOdW1wYWREaXZpZGUiLDEwOCwiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLCIiLCIiXSxbMTAzLDEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDMsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsIiIsIiJdLFsxMDYsMSw5MiwiTnVtcGFkU3VidHJhY3QiLDEwNiwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIiwiIiwiIl0sWzEwNCwxLDkzLCJOdW1wYWRBZGQiLDEwNCwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLCIiLCIiXSxbMywxLDk0LCJOdW1wYWRFbnRlciIsMywiIiwwLCIiLCIiLCIiXSxbOTQsMSw5NSwiTnVtcGFkMSIsOTQsIk51bVBhZDEiLDk3LCJWS19OVU1QQUQxIiwiIiwiIl0sWzk1LDEsOTYsIk51bXBhZDIiLDk1LCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsIiIsIiJdLFs5NiwxLDk3LCJOdW1wYWQzIiw5NiwiTnVtUGFkMyIsOTksIlZLX05VTVBBRDMiLCIiLCIiXSxbOTcsMSw5OCwiTnVtcGFkNCIsOTcsIk51bVBhZDQiLDEwMCwiVktfTlVNUEFENCIsIiIsIiJdLFs5OCwxLDk5LCJOdW1wYWQ1Iiw5OCwiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IiwiIiwiIl0sWzk5LDEsMTAwLCJOdW1wYWQ2Iiw5OSwiTnVtUGFkNiIsMTAyLCJWS19OVU1QQUQ2IiwiIiwiIl0sWzEwMCwxLDEwMSwiTnVtcGFkNyIsMTAwLCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLCIiLCIiXSxbMTAxLDEsMTAyLCJOdW1wYWQ4IiwxMDEsIk51bVBhZDgiLDEwNCwiVktfTlVNUEFEOCIsIiIsIiJdLFsxMDIsMSwxMDMsIk51bXBhZDkiLDEwMiwiTnVtUGFkOSIsMTA1LCJWS19OVU1QQUQ5IiwiIiwiIl0sWzkzLDEsMTA0LCJOdW1wYWQwIiw5MywiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLCIiLCIiXSxbMTA3LDEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMDcsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLCIiLCIiXSxbOTIsMCwxMDYsIkludGxCYWNrc2xhc2giLDkyLCJPRU1fMTAyIiwyMjYsIlZLX09FTV8xMDIiLCIiLCIiXSxbNTgsMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLCIiLCIiLCIiXSxbMCwxLDEwOCwiUG93ZXIiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMDksIk51bXBhZEVxdWFsIiwwLCIiLDAsIiIsIiIsIiJdLFs3MSwxLDExMCwiRjEzIiw3MSwiRjEzIiwxMjQsIlZLX0YxMyIsIiIsIiJdLFs3MiwxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsIiIsIiJdLFs3MywxLDExMiwiRjE1Iiw3MywiRjE1IiwxMjYsIlZLX0YxNSIsIiIsIiJdLFs3NCwxLDExMywiRjE2Iiw3NCwiRjE2IiwxMjcsIlZLX0YxNiIsIiIsIiJdLFs3NSwxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsIiIsIiJdLFs3NiwxLDExNSwiRjE4Iiw3NiwiRjE4IiwxMjksIlZLX0YxOCIsIiIsIiJdLFs3NywxLDExNiwiRjE5Iiw3NywiRjE5IiwxMzAsIlZLX0YxOSIsIiIsIiJdLFswLDEsMTE3LCJGMjAiLDAsIiIsMCwiVktfRjIwIiwiIiwiIl0sWzAsMSwxMTgsIkYyMSIsMCwiIiwwLCJWS19GMjEiLCIiLCIiXSxbMCwxLDExOSwiRjIyIiwwLCIiLDAsIlZLX0YyMiIsIiIsIiJdLFswLDEsMTIwLCJGMjMiLDAsIiIsMCwiVktfRjIzIiwiIiwiIl0sWzAsMSwxMjEsIkYyNCIsMCwiIiwwLCJWS19GMjQiLCIiLCIiXSxbMCwxLDEyMiwiT3BlbiIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyMywiSGVscCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyNCwiU2VsZWN0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTI1LCJBZ2FpbiIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyNiwiVW5kbyIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEyNywiQ3V0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTI4LCJDb3B5IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTI5LCJQYXN0ZSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEzMCwiRmluZCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDEzMSwiQXVkaW9Wb2x1bWVNdXRlIiwxMTIsIkF1ZGlvVm9sdW1lTXV0ZSIsMTczLCJWS19WT0xVTUVfTVVURSIsIiIsIiJdLFswLDEsMTMyLCJBdWRpb1ZvbHVtZVVwIiwxMTMsIkF1ZGlvVm9sdW1lVXAiLDE3NSwiVktfVk9MVU1FX1VQIiwiIiwiIl0sWzAsMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE0LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLCIiLCIiXSxbMTA1LDEsMTM0LCJOdW1wYWRDb21tYSIsMTA1LCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsIiIsIiJdLFsxMTAsMCwxMzUsIkludGxSbyIsMTEwLCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLCIiLCIiXSxbMCwxLDEzNiwiS2FuYU1vZGUiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMCwxMzcsIkludGxZZW4iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMzgsIkNvbnZlcnQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxMzksIk5vbkNvbnZlcnQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDAsIkxhbmcxIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQxLCJMYW5nMiIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE0MiwiTGFuZzMiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDMsIkxhbmc0IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQ0LCJMYW5nNSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE0NSwiQWJvcnQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDYsIlByb3BzIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTQ3LCJOdW1wYWRQYXJlbkxlZnQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDgsIk51bXBhZFBhcmVuUmlnaHQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE1MCwiTnVtcGFkTWVtb3J5U3RvcmUiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNTEsIk51bXBhZE1lbW9yeVJlY2FsbCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNTMsIk51bXBhZE1lbW9yeUFkZCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE1NCwiTnVtcGFkTWVtb3J5U3VidHJhY3QiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNTUsIk51bXBhZENsZWFyIiwxMjYsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLCIiLCIiXSxbMCwxLDE1NiwiTnVtcGFkQ2xlYXJFbnRyeSIsMCwiIiwwLCIiLCIiLCIiXSxbNSwxLDAsIiIsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLCIiLCIiXSxbNCwxLDAsIiIsNCwiU2hpZnQiLDE2LCJWS19TSElGVCIsIiIsIiJdLFs2LDEsMCwiIiw2LCJBbHQiLDE4LCJWS19NRU5VIiwiIiwiIl0sWzU3LDEsMCwiIiw1NywiTWV0YSIsMCwiVktfQ09NTUFORCIsIiIsIiJdLFs1LDEsMTU3LCJDb250cm9sTGVmdCIsNSwiIiwwLCJWS19MQ09OVFJPTCIsIiIsIiJdLFs0LDEsMTU4LCJTaGlmdExlZnQiLDQsIiIsMCwiVktfTFNISUZUIiwiIiwiIl0sWzYsMSwxNTksIkFsdExlZnQiLDYsIiIsMCwiVktfTE1FTlUiLCIiLCIiXSxbNTcsMSwxNjAsIk1ldGFMZWZ0Iiw1NywiIiwwLCJWS19MV0lOIiwiIiwiIl0sWzUsMSwxNjEsIkNvbnRyb2xSaWdodCIsNSwiIiwwLCJWS19SQ09OVFJPTCIsIiIsIiJdLFs0LDEsMTYyLCJTaGlmdFJpZ2h0Iiw0LCIiLDAsIlZLX1JTSElGVCIsIiIsIiJdLFs2LDEsMTYzLCJBbHRSaWdodCIsNiwiIiwwLCJWS19STUVOVSIsIiIsIiJdLFs1NywxLDE2NCwiTWV0YVJpZ2h0Iiw1NywiIiwwLCJWS19SV0lOIiwiIiwiIl0sWzAsMSwxNjUsIkJyaWdodG5lc3NVcCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNjcsIk1lZGlhUGxheSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE2OCwiTWVkaWFSZWNvcmQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsIiIsMCwiIiwiIiwiIl0sWzAsMSwxNzAsIk1lZGlhUmV3aW5kIiwwLCIiLDAsIiIsIiIsIiJdLFsxMTQsMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMTksIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLCIiLCIiXSxbMTE1LDEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyMCwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLCIiLCIiXSxbMTE2LDEsMTczLCJNZWRpYVN0b3AiLDEyMSwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLCIiLCIiXSxbMCwxLDE3NCwiRWplY3QiLDAsIiIsMCwiIiwiIiwiIl0sWzExNywxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyMiwiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsIiIsIiJdLFswLDEsMTc2LCJNZWRpYVNlbGVjdCIsMTIzLCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIiwiIiwiIl0sWzAsMSwxNzcsIkxhdW5jaE1haWwiLDEyNCwiTGF1bmNoTWFpbCIsMTgwLCJWS19NRURJQV9MQVVOQ0hfTUFJTCIsIiIsIiJdLFswLDEsMTc4LCJMYXVuY2hBcHAyIiwxMjUsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLCIiLCIiXSxbMCwxLDE3OSwiTGF1bmNoQXBwMSIsMCwiIiwwLCJWS19NRURJQV9MQVVOQ0hfQVBQMSIsIiIsIiJdLFswLDEsMTgwLCJTZWxlY3RUYXNrIiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTE1LCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIiwiIiwiIl0sWzAsMSwxODMsIkJyb3dzZXJIb21lIiwxMTYsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsIiIsIiJdLFsxMTIsMSwxODQsIkJyb3dzZXJCYWNrIiwxMTcsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsIiIsIiJdLFsxMTMsMSwxODUsIkJyb3dzZXJGb3J3YXJkIiwxMTgsIkJyb3dzZXJGb3J3YXJkIiwxNjcsIlZLX0JST1dTRVJfRk9SV0FSRCIsIiIsIiJdLFswLDEsMTg2LCJCcm93c2VyU3RvcCIsMCwiIiwwLCJWS19CUk9XU0VSX1NUT1AiLCIiLCIiXSxbMCwxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsIiIsMCwiVktfQlJPV1NFUl9SRUZSRVNIIiwiIiwiIl0sWzAsMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsIiIsMCwiVktfQlJPV1NFUl9GQVZPUklURVMiLCIiLCIiXSxbMCwxLDE4OSwiWm9vbVRvZ2dsZSIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE5MCwiTWFpbFJlcGx5IiwwLCIiLDAsIiIsIiIsIiJdLFswLDEsMTkxLCJNYWlsRm9yd2FyZCIsMCwiIiwwLCIiLCIiLCIiXSxbMCwxLDE5MiwiTWFpbFNlbmQiLDAsIiIsMCwiIiwiIiwiIl0sWzEwOSwxLDAsIiIsMTA5LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksIiIsIiIsIiJdLFsxMTEsMSwwLCIiLDExMSwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIiwiIiwiIl0sWzkxLDEsMCwiIiw5MSwiT0VNXzgiLDIyMywiVktfT0VNXzgiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19LQU5BIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfSEFOR1VMIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfSlVOSkEiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19GSU5BTCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0hBTkpBIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfS0FOSkkiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19DT05WRVJUIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfTk9OQ09OVkVSVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0FDQ0VQVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX01PREVDSEFOR0UiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19TRUxFQ1QiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19QUklOVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0VYRUNVVEUiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19TTkFQU0hPVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0hFTFAiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19BUFBTIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfUFJPQ0VTU0tFWSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX1BBQ0tFVCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0RCRV9TQkNTQ0hBUiIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0RCRV9EQkNTQ0hBUiIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0FUVE4iLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19DUlNFTCIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX0VYU0VMIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfRVJFT0YiLCIiLCIiXSxbMCwxLDAsIiIsMCwiIiwwLCJWS19QTEFZIiwiIiwiIl0sWzAsMSwwLCIiLDAsIiIsMCwiVktfWk9PTSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX05PTkFNRSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX1BBMSIsIiIsIiJdLFswLDEsMCwiIiwwLCIiLDAsIlZLX09FTV9DTEVBUiIsIiIsIiJdXSl7Y29uc3RbLElvLFBvLFZvLFJvLERvLEZvLEtvLGpvLFVvXT1UbztpZih0W1BvXXx8KHRbUG9dPSEwLER0W1BvXT1WbyxGdFtWb109UG8sS3RbVm8udG9Mb3dlckNhc2UoKV09UG8sSW8mJjAhPT0oanRbUG9dPVJvKSYmMyE9PVJvJiY1IT09Um8mJjQhPT1SbyYmNiE9PVJvJiY1NyE9PVJvJiYoVXRbUm9dPVBvKSksIWVbUm9dKXtpZihlW1JvXT0hMCwhRG8pdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgcmVwcmVzZW50YXRpb24gbWlzc2luZyBmb3Iga2V5IGNvZGUgJHtSb30gYXJvdW5kIHNjYW4gY29kZSBgK1ZvKTtUdC5kZWZpbmUoUm8sRG8pLEl0LmRlZmluZShSbyxqb3x8RG8pLFB0LmRlZmluZShSbyxVb3x8am98fERvKX1GbyYmKFZ0W0ZvXT1SbyksS28mJihSdFtLb109Um8pfVV0WzNdPTQ2fWNsYXNzIHF0IGV4dGVuZHMgaXR7Y29uc3RydWN0b3IoZSx0LHIsbil7c3VwZXIoZSx0LHIsbiksdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9ZSx0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPXQsdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXI9cix0aGlzLnBvc2l0aW9uQ29sdW1uPW59dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMucG9zaXRpb25MaW5lTnVtYmVyKyIsIit0aGlzLnBvc2l0aW9uQ29sdW1uKyJdIn1lcXVhbHNTZWxlY3Rpb24oZSl7cmV0dXJuIHF0LnNlbGVjdGlvbnNFcXVhbCh0aGlzLGUpfXN0YXRpYyBzZWxlY3Rpb25zRXF1YWwoZSx0KXtyZXR1cm4gZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmZS5zZWxlY3Rpb25TdGFydENvbHVtbj09PXQuc2VsZWN0aW9uU3RhcnRDb2x1bW4mJmUucG9zaXRpb25MaW5lTnVtYmVyPT09dC5wb3NpdGlvbkxpbmVOdW1iZXImJmUucG9zaXRpb25Db2x1bW49PT10LnBvc2l0aW9uQ29sdW1ufWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXRoaXMuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dGhpcy5zdGFydENvbHVtbj8wOjF9c2V0RW5kUG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IHF0KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sZSx0KTpuZXcgcXQoZSx0LHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4pfWdldFBvc2l0aW9uKCl7cmV0dXJuIG5ldyBudCh0aGlzLnBvc2l0aW9uTGluZU51bWJlcix0aGlzLnBvc2l0aW9uQ29sdW1uKX1nZXRTZWxlY3Rpb25TdGFydCgpe3JldHVybiBuZXcgbnQodGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbil9c2V0U3RhcnRQb3NpdGlvbihlLHQpe3JldHVybiAwPT09dGhpcy5nZXREaXJlY3Rpb24oKT9uZXcgcXQoZSx0LHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbik6bmV3IHF0KHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbixlLHQpfXN0YXRpYyBmcm9tUG9zaXRpb25zKGUsdD1lKXtyZXR1cm4gbmV3IHF0KGUubGluZU51bWJlcixlLmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBmcm9tUmFuZ2UoZSx0KXtyZXR1cm4gMD09PXQ/bmV3IHF0KGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4sZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKTpuZXcgcXQoZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uLGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXN0YXRpYyBsaWZ0U2VsZWN0aW9uKGUpe3JldHVybiBuZXcgcXQoZS5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsZS5zZWxlY3Rpb25TdGFydENvbHVtbixlLnBvc2l0aW9uTGluZU51bWJlcixlLnBvc2l0aW9uQ29sdW1uKX1zdGF0aWMgc2VsZWN0aW9uc0FyckVxdWFsKHIsbil7aWYociYmIW58fCFyJiZuKXJldHVybiExO2lmKCFyJiYhbilyZXR1cm4hMDtpZihyLmxlbmd0aCE9PW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKylpZighdGhpcy5zZWxlY3Rpb25zRXF1YWwocltlXSxuW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgaXNJU2VsZWN0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4mJiJudW1iZXIiPT10eXBlb2YgZS5wb3NpdGlvbkxpbmVOdW1iZXImJiJudW1iZXIiPT10eXBlb2YgZS5wb3NpdGlvbkNvbHVtbn1zdGF0aWMgY3JlYXRlV2l0aERpcmVjdGlvbihlLHQscixuLGkpe3JldHVybiAwPT09aT9uZXcgcXQoZSx0LHIsbik6bmV3IHF0KHIsbixlLHQpfX12YXIgQnQsJHQ9ZnVuY3Rpb24oZSxhLHMsbCl7cmV0dXJuIG5ldyhzPXN8fFByb21pc2UpKGZ1bmN0aW9uKHIsdCl7ZnVuY3Rpb24gbihlKXt0cnl7byhsLm5leHQoZSkpfWNhdGNoKGUpe3QoZSl9fWZ1bmN0aW9uIGkoZSl7dHJ5e28obC50aHJvdyhlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gbyhlKXt2YXIgdDtlLmRvbmU/cihlLnZhbHVlKTooKHQ9ZS52YWx1ZSlpbnN0YW5jZW9mIHM/dDpuZXcgcyhmdW5jdGlvbihlKXtlKHQpfSkpLnRoZW4obixpKX1vKChsPWwuYXBwbHkoZSxhfHxbXSkpLm5leHQoKSl9KX07Y2xhc3MgV3QgZXh0ZW5kcyBDe2NvbnN0cnVjdG9yKGUsdCxyKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX2ZhY3Rvcnk9cix0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1nZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkPSEwLHN1cGVyLmRpc3Bvc2UoKX1yZXNvbHZlKCl7cmV0dXJuICR0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9KX1fY3JlYXRlKCl7cmV0dXJuICR0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgZT15aWVsZCBQcm9taXNlLnJlc29sdmUodGhpcy5fZmFjdG9yeS5jcmVhdGVUb2tlbml6YXRpb25TdXBwb3J0KCkpO3RoaXMuX2lzUmVzb2x2ZWQ9ITAsZSYmIXRoaXMuX2lzRGlzcG9zZWQmJnRoaXMuX3JlZ2lzdGVyKHRoaXMuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMuX2xhbmd1YWdlSWQsZSkpfSl9fWNsYXNzIGl7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmRlZmluaXRpb249dCx0aGlzLmRlc2NyaXB0aW9uPXIsaS5fYWxsQ29kaWNvbnMucHVzaCh0aGlzKX1nZXQgY2xhc3NOYW1lcygpe3JldHVybiJjb2RpY29uIGNvZGljb24tIit0aGlzLmlkfWdldCBjbGFzc05hbWVzQXJyYXkoKXtyZXR1cm5bImNvZGljb24iLCJjb2RpY29uLSIrdGhpcy5pZF19Z2V0IGNzc1NlbGVjdG9yKCl7cmV0dXJuIi5jb2RpY29uLmNvZGljb24tIit0aGlzLmlkfXN0YXRpYyBnZXRBbGwoKXtyZXR1cm4gaS5fYWxsQ29kaWNvbnN9fWkuX2FsbENvZGljb25zPVtdLGkuYWRkPW5ldyBpKCJhZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjAifSksaS5wbHVzPW5ldyBpKCJwbHVzIixpLmFkZC5kZWZpbml0aW9uKSxpLmdpc3ROZXc9bmV3IGkoImdpc3QtbmV3IixpLmFkZC5kZWZpbml0aW9uKSxpLnJlcG9DcmVhdGU9bmV3IGkoInJlcG8tY3JlYXRlIixpLmFkZC5kZWZpbml0aW9uKSxpLmxpZ2h0YnVsYj1uZXcgaSgibGlnaHRidWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLGkubGlnaHRCdWxiPW5ldyBpKCJsaWdodC1idWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLGkucmVwbz1uZXcgaSgicmVwbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxpLnJlcG9EZWxldGU9bmV3IGkoInJlcG8tZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLGkuZ2lzdEZvcms9bmV3IGkoImdpc3QtZm9yayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxpLnJlcG9Gb3JrZWQ9bmV3IGkoInJlcG8tZm9ya2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYTYzIn0pLGkuZ2l0UHVsbFJlcXVlc3Q9bmV3IGkoImdpdC1wdWxsLXJlcXVlc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksaS5naXRQdWxsUmVxdWVzdEFiYW5kb25lZD1uZXcgaSgiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksaS5yZWNvcmRLZXlzPW5ldyBpKCJyZWNvcmQta2V5cyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxpLmtleWJvYXJkPW5ldyBpKCJrZXlib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NSJ9KSxpLnRhZz1uZXcgaSgidGFnIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGkudGFnQWRkPW5ldyBpKCJ0YWctYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGkudGFnUmVtb3ZlPW5ldyBpKCJ0YWctcmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLGkucGVyc29uPW5ldyBpKCJwZXJzb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksaS5wZXJzb25Gb2xsb3c9bmV3IGkoInBlcnNvbi1mb2xsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksaS5wZXJzb25PdXRsaW5lPW5ldyBpKCJwZXJzb24tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxpLnBlcnNvbkZpbGxlZD1uZXcgaSgicGVyc29uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxpLmdpdEJyYW5jaD1uZXcgaSgiZ2l0LWJyYW5jaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxpLmdpdEJyYW5jaENyZWF0ZT1uZXcgaSgiZ2l0LWJyYW5jaC1jcmVhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksaS5naXRCcmFuY2hEZWxldGU9bmV3IGkoImdpdC1icmFuY2gtZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLGkuc291cmNlQ29udHJvbD1uZXcgaSgic291cmNlLWNvbnRyb2wiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjgifSksaS5taXJyb3I9bmV3IGkoIm1pcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxpLm1pcnJvclB1YmxpYz1uZXcgaSgibWlycm9yLXB1YmxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxpLnN0YXI9bmV3IGkoInN0YXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksaS5zdGFyQWRkPW5ldyBpKCJzdGFyLWFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxpLnN0YXJEZWxldGU9bmV3IGkoInN0YXItZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGkuc3RhckVtcHR5PW5ldyBpKCJzdGFyLWVtcHR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLGkuY29tbWVudD1uZXcgaSgiY29tbWVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YiJ9KSxpLmNvbW1lbnRBZGQ9bmV3IGkoImNvbW1lbnQtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLGkuYWxlcnQ9bmV3IGkoImFsZXJ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZjIn0pLGkud2FybmluZz1uZXcgaSgid2FybmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YyJ9KSxpLnNlYXJjaD1uZXcgaSgic2VhcmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLGkuc2VhcmNoU2F2ZT1uZXcgaSgic2VhcmNoLXNhdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmQifSksaS5sb2dPdXQ9bmV3IGkoImxvZy1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmUifSksaS5zaWduT3V0PW5ldyBpKCJzaWduLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxpLmxvZ0luPW5ldyBpKCJsb2ctaW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksaS5zaWduSW49bmV3IGkoInNpZ24taW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhNmYifSksaS5leWU9bmV3IGkoImV5ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxpLmV5ZVVud2F0Y2g9bmV3IGkoImV5ZS11bndhdGNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTcwIn0pLGkuZXllV2F0Y2g9bmV3IGkoImV5ZS13YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxpLmNpcmNsZUZpbGxlZD1uZXcgaSgiY2lyY2xlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxpLnByaW1pdGl2ZURvdD1uZXcgaSgicHJpbWl0aXZlLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxpLmNsb3NlRGlydHk9bmV3IGkoImNsb3NlLWRpcnR5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLGkuZGVidWdCcmVha3BvaW50PW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLGkuZGVidWdCcmVha3BvaW50RGlzYWJsZWQ9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksaS5kZWJ1Z0hpbnQ9bmV3IGkoImRlYnVnLWhpbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzEifSksaS5wcmltaXRpdmVTcXVhcmU9bmV3IGkoInByaW1pdGl2ZS1zcXVhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzIifSksaS5lZGl0PW5ldyBpKCJlZGl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLGkucGVuY2lsPW5ldyBpKCJwZW5jaWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksaS5pbmZvPW5ldyBpKCJpbmZvIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLGkuaXNzdWVPcGVuZWQ9bmV3IGkoImlzc3VlLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NCJ9KSxpLmdpc3RQcml2YXRlPW5ldyBpKCJnaXN0LXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksaS5naXRGb3JrUHJpdmF0ZT1uZXcgaSgiZ2l0LWZvcmstcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxpLmxvY2s9bmV3IGkoImxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksaS5taXJyb3JQcml2YXRlPW5ldyBpKCJtaXJyb3ItcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxpLmNsb3NlPW5ldyBpKCJjbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxpLnJlbW92ZUNsb3NlPW5ldyBpKCJyZW1vdmUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzYifSksaS54PW5ldyBpKCJ4Iix7Zm9udENoYXJhY3RlcjoiXFxlYTc2In0pLGkucmVwb1N5bmM9bmV3IGkoInJlcG8tc3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxpLnN5bmM9bmV3IGkoInN5bmMiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzcifSksaS5jbG9uZT1uZXcgaSgiY2xvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksaS5kZXNrdG9wRG93bmxvYWQ9bmV3IGkoImRlc2t0b3AtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksaS5iZWFrZXI9bmV3IGkoImJlYWtlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3OSJ9KSxpLm1pY3Jvc2NvcGU9bmV3IGkoIm1pY3Jvc2NvcGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzkifSksaS52bT1uZXcgaSgidm0iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksaS5kZXZpY2VEZXNrdG9wPW5ldyBpKCJkZXZpY2UtZGVza3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YSJ9KSxpLmZpbGU9bmV3IGkoImZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2IifSksaS5maWxlVGV4dD1uZXcgaSgiZmlsZS10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLGkubW9yZT1uZXcgaSgibW9yZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxpLmVsbGlwc2lzPW5ldyBpKCJlbGxpcHNpcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxpLmtlYmFiSG9yaXpvbnRhbD1uZXcgaSgia2ViYWItaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxpLm1haWxSZXBseT1uZXcgaSgibWFpbC1yZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxpLnJlcGx5PW5ldyBpKCJyZXBseSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZCJ9KSxpLm9yZ2FuaXphdGlvbj1uZXcgaSgib3JnYW5pemF0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLGkub3JnYW5pemF0aW9uRmlsbGVkPW5ldyBpKCJvcmdhbml6YXRpb24tZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLGkub3JnYW5pemF0aW9uT3V0bGluZT1uZXcgaSgib3JnYW5pemF0aW9uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksaS5uZXdGaWxlPW5ldyBpKCJuZXctZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxpLmZpbGVBZGQ9bmV3IGkoImZpbGUtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTdmIn0pLGkubmV3Rm9sZGVyPW5ldyBpKCJuZXctZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLGkuZmlsZURpcmVjdG9yeUNyZWF0ZT1uZXcgaSgiZmlsZS1kaXJlY3RvcnktY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLGkudHJhc2g9bmV3IGkoInRyYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLGkudHJhc2hjYW49bmV3IGkoInRyYXNoY2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYTgxIn0pLGkuaGlzdG9yeT1uZXcgaSgiaGlzdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxpLmNsb2NrPW5ldyBpKCJjbG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxpLmZvbGRlcj1uZXcgaSgiZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTgzIn0pLGkuZmlsZURpcmVjdG9yeT1uZXcgaSgiZmlsZS1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksaS5zeW1ib2xGb2xkZXI9bmV3IGkoInN5bWJvbC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksaS5sb2dvR2l0aHViPW5ldyBpKCJsb2dvLWdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxpLm1hcmtHaXRodWI9bmV3IGkoIm1hcmstZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLGkuZ2l0aHViPW5ldyBpKCJnaXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksaS50ZXJtaW5hbD1uZXcgaSgidGVybWluYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhODUifSksaS5jb25zb2xlPW5ldyBpKCJjb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLGkucmVwbD1uZXcgaSgicmVwbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NSJ9KSxpLnphcD1uZXcgaSgiemFwIix7Zm9udENoYXJhY3RlcjoiXFxlYTg2In0pLGkuc3ltYm9sRXZlbnQ9bmV3IGkoInN5bWJvbC1ldmVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxpLmVycm9yPW5ldyBpKCJlcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NyJ9KSxpLnN0b3A9bmV3IGkoInN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhODcifSksaS52YXJpYWJsZT1uZXcgaSgidmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksaS5zeW1ib2xWYXJpYWJsZT1uZXcgaSgic3ltYm9sLXZhcmlhYmxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg4In0pLGkuYXJyYXk9bmV3IGkoImFycmF5Iix7Zm9udENoYXJhY3RlcjoiXFxlYThhIn0pLGkuc3ltYm9sQXJyYXk9bmV3IGkoInN5bWJvbC1hcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxpLnN5bWJvbE1vZHVsZT1uZXcgaSgic3ltYm9sLW1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxpLnN5bWJvbFBhY2thZ2U9bmV3IGkoInN5bWJvbC1wYWNrYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGkuc3ltYm9sTmFtZXNwYWNlPW5ldyBpKCJzeW1ib2wtbmFtZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGkuc3ltYm9sT2JqZWN0PW5ldyBpKCJzeW1ib2wtb2JqZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLGkuc3ltYm9sTWV0aG9kPW5ldyBpKCJzeW1ib2wtbWV0aG9kIix7Zm9udENoYXJhY3RlcjoiXFxlYThjIn0pLGkuc3ltYm9sRnVuY3Rpb249bmV3IGkoInN5bWJvbC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxpLnN5bWJvbENvbnN0cnVjdG9yPW5ldyBpKCJzeW1ib2wtY29uc3RydWN0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGMifSksaS5zeW1ib2xCb29sZWFuPW5ldyBpKCJzeW1ib2wtYm9vbGVhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4ZiJ9KSxpLnN5bWJvbE51bGw9bmV3IGkoInN5bWJvbC1udWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLGkuc3ltYm9sTnVtZXJpYz1uZXcgaSgic3ltYm9sLW51bWVyaWMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksaS5zeW1ib2xOdW1iZXI9bmV3IGkoInN5bWJvbC1udW1iZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTAifSksaS5zeW1ib2xTdHJ1Y3R1cmU9bmV3IGkoInN5bWJvbC1zdHJ1Y3R1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksaS5zeW1ib2xTdHJ1Y3Q9bmV3IGkoInN5bWJvbC1zdHJ1Y3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksaS5zeW1ib2xQYXJhbWV0ZXI9bmV3IGkoInN5bWJvbC1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksaS5zeW1ib2xUeXBlUGFyYW1ldGVyPW5ldyBpKCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksaS5zeW1ib2xLZXk9bmV3IGkoInN5bWJvbC1rZXkiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksaS5zeW1ib2xUZXh0PW5ldyBpKCJzeW1ib2wtdGV4dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxpLnN5bWJvbFJlZmVyZW5jZT1uZXcgaSgic3ltYm9sLXJlZmVyZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxpLmdvVG9GaWxlPW5ldyBpKCJnby10by1maWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk0In0pLGkuc3ltYm9sRW51bT1uZXcgaSgic3ltYm9sLWVudW0iLHtmb250Q2hhcmFjdGVyOiJcXGVhOTUifSksaS5zeW1ib2xWYWx1ZT1uZXcgaSgic3ltYm9sLXZhbHVlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLGkuc3ltYm9sUnVsZXI9bmV3IGkoInN5bWJvbC1ydWxlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxpLnN5bWJvbFVuaXQ9bmV3IGkoInN5bWJvbC11bml0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLGkuYWN0aXZhdGVCcmVha3BvaW50cz1uZXcgaSgiYWN0aXZhdGUtYnJlYWtwb2ludHMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTcifSksaS5hcmNoaXZlPW5ldyBpKCJhcmNoaXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk4In0pLGkuYXJyb3dCb3RoPW5ldyBpKCJhcnJvdy1ib3RoIix7Zm9udENoYXJhY3RlcjoiXFxlYTk5In0pLGkuYXJyb3dEb3duPW5ldyBpKCJhcnJvdy1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlhIn0pLGkuYXJyb3dMZWZ0PW5ldyBpKCJhcnJvdy1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTliIn0pLGkuYXJyb3dSaWdodD1uZXcgaSgiYXJyb3ctcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWMifSksaS5hcnJvd1NtYWxsRG93bj1uZXcgaSgiYXJyb3ctc21hbGwtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZCJ9KSxpLmFycm93U21hbGxMZWZ0PW5ldyBpKCJhcnJvdy1zbWFsbC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTllIn0pLGkuYXJyb3dTbWFsbFJpZ2h0PW5ldyBpKCJhcnJvdy1zbWFsbC1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZiJ9KSxpLmFycm93U21hbGxVcD1uZXcgaSgiYXJyb3ctc21hbGwtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTAifSksaS5hcnJvd1VwPW5ldyBpKCJhcnJvdy11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhMSJ9KSxpLmJlbGw9bmV3IGkoImJlbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTIifSksaS5ib2xkPW5ldyBpKCJib2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWEzIn0pLGkuYm9vaz1uZXcgaSgiYm9vayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNCJ9KSxpLmJvb2ttYXJrPW5ldyBpKCJib29rbWFyayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNSJ9KSxpLmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsVW52ZXJpZmllZD1uZXcgaSgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE2In0pLGkuZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWw9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTcifSksaS5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE3In0pLGkuZGVidWdCcmVha3BvaW50RGF0YVVudmVyaWZpZWQ9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE4In0pLGkuZGVidWdCcmVha3BvaW50RGF0YT1uZXcgaSgiZGVidWctYnJlYWtwb2ludC1kYXRhIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLGkuZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksaS5kZWJ1Z0JyZWFrcG9pbnRMb2dVbnZlcmlmaWVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFhIn0pLGkuZGVidWdCcmVha3BvaW50TG9nPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWxvZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxpLmRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWxvZy1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhYiJ9KSxpLmJyaWVmY2FzZT1uZXcgaSgiYnJpZWZjYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWFjIn0pLGkuYnJvYWRjYXN0PW5ldyBpKCJicm9hZGNhc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWQifSksaS5icm93c2VyPW5ldyBpKCJicm93c2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYWFlIn0pLGkuYnVnPW5ldyBpKCJidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWYifSksaS5jYWxlbmRhcj1uZXcgaSgiY2FsZW5kYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjAifSksaS5jYXNlU2Vuc2l0aXZlPW5ldyBpKCJjYXNlLXNlbnNpdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMSJ9KSxpLmNoZWNrPW5ldyBpKCJjaGVjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMiJ9KSxpLmNoZWNrbGlzdD1uZXcgaSgiY2hlY2tsaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWIzIn0pLGkuY2hldnJvbkRvd249bmV3IGkoImNoZXZyb24tZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNCJ9KSxpLmRyb3BEb3duQnV0dG9uPW5ldyBpKCJkcm9wLWRvd24tYnV0dG9uIixpLmNoZXZyb25Eb3duLmRlZmluaXRpb24pLGkuY2hldnJvbkxlZnQ9bmV3IGkoImNoZXZyb24tbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNSJ9KSxpLmNoZXZyb25SaWdodD1uZXcgaSgiY2hldnJvbi1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNiJ9KSxpLmNoZXZyb25VcD1uZXcgaSgiY2hldnJvbi11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNyJ9KSxpLmNocm9tZUNsb3NlPW5ldyBpKCJjaHJvbWUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjgifSksaS5jaHJvbWVNYXhpbWl6ZT1uZXcgaSgiY2hyb21lLW1heGltaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYWI5In0pLGkuY2hyb21lTWluaW1pemU9bmV3IGkoImNocm9tZS1taW5pbWl6ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYSJ9KSxpLmNocm9tZVJlc3RvcmU9bmV3IGkoImNocm9tZS1yZXN0b3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYWJiIn0pLGkuY2lyY2xlT3V0bGluZT1uZXcgaSgiY2lyY2xlLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksaS5kZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmMifSksaS5jaXJjbGVTbGFzaD1uZXcgaSgiY2lyY2xlLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWJkIn0pLGkuY2lyY3VpdEJvYXJkPW5ldyBpKCJjaXJjdWl0LWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJlIn0pLGkuY2xlYXJBbGw9bmV3IGkoImNsZWFyLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiZiJ9KSxpLmNsaXBweT1uZXcgaSgiY2xpcHB5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWMwIn0pLGkuY2xvc2VBbGw9bmV3IGkoImNsb3NlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMSJ9KSxpLmNsb3VkRG93bmxvYWQ9bmV3IGkoImNsb3VkLWRvd25sb2FkIix7Zm9udENoYXJhY3RlcjoiXFxlYWMyIn0pLGkuY2xvdWRVcGxvYWQ9bmV3IGkoImNsb3VkLXVwbG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMyJ9KSxpLmNvZGU9bmV3IGkoImNvZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYzQifSksaS5jb2xsYXBzZUFsbD1uZXcgaSgiY29sbGFwc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWM1In0pLGkuY29sb3JNb2RlPW5ldyBpKCJjb2xvci1tb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM2In0pLGkuY29tbWVudERpc2N1c3Npb249bmV3IGkoImNvbW1lbnQtZGlzY3Vzc2lvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNyJ9KSxpLmNvbXBhcmVDaGFuZ2VzPW5ldyBpKCJjb21wYXJlLWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksaS5jcmVkaXRDYXJkPW5ldyBpKCJjcmVkaXQtY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjOSJ9KSxpLmRhc2g9bmV3IGkoImRhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhY2MifSksaS5kYXNoYm9hcmQ9bmV3IGkoImRhc2hib2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZCJ9KSxpLmRhdGFiYXNlPW5ldyBpKCJkYXRhYmFzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZSJ9KSxpLmRlYnVnQ29udGludWU9bmV3IGkoImRlYnVnLWNvbnRpbnVlIix7Zm9udENoYXJhY3RlcjoiXFxlYWNmIn0pLGkuZGVidWdEaXNjb25uZWN0PW5ldyBpKCJkZWJ1Zy1kaXNjb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWQwIn0pLGkuZGVidWdQYXVzZT1uZXcgaSgiZGVidWctcGF1c2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDEifSksaS5kZWJ1Z1Jlc3RhcnQ9bmV3IGkoImRlYnVnLXJlc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDIifSksaS5kZWJ1Z1N0YXJ0PW5ldyBpKCJkZWJ1Zy1zdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMyJ9KSxpLmRlYnVnU3RlcEludG89bmV3IGkoImRlYnVnLXN0ZXAtaW50byIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNCJ9KSxpLmRlYnVnU3RlcE91dD1uZXcgaSgiZGVidWctc3RlcC1vdXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDUifSksaS5kZWJ1Z1N0ZXBPdmVyPW5ldyBpKCJkZWJ1Zy1zdGVwLW92ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDYifSksaS5kZWJ1Z1N0b3A9bmV3IGkoImRlYnVnLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDcifSksaS5kZWJ1Zz1uZXcgaSgiZGVidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhZDgifSksaS5kZXZpY2VDYW1lcmFWaWRlbz1uZXcgaSgiZGV2aWNlLWNhbWVyYS12aWRlbyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOSJ9KSxpLmRldmljZUNhbWVyYT1uZXcgaSgiZGV2aWNlLWNhbWVyYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYSJ9KSxpLmRldmljZU1vYmlsZT1uZXcgaSgiZGV2aWNlLW1vYmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYiJ9KSxpLmRpZmZBZGRlZD1uZXcgaSgiZGlmZi1hZGRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYyJ9KSxpLmRpZmZJZ25vcmVkPW5ldyBpKCJkaWZmLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGQifSksaS5kaWZmTW9kaWZpZWQ9bmV3IGkoImRpZmYtbW9kaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGUifSksaS5kaWZmUmVtb3ZlZD1uZXcgaSgiZGlmZi1yZW1vdmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWRmIn0pLGkuZGlmZlJlbmFtZWQ9bmV3IGkoImRpZmYtcmVuYW1lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMCJ9KSxpLmRpZmY9bmV3IGkoImRpZmYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTEifSksaS5kaXNjYXJkPW5ldyBpKCJkaXNjYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYWUyIn0pLGkuZWRpdG9yTGF5b3V0PW5ldyBpKCJlZGl0b3ItbGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWUzIn0pLGkuZW1wdHlXaW5kb3c9bmV3IGkoImVtcHR5LXdpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlNCJ9KSxpLmV4Y2x1ZGU9bmV3IGkoImV4Y2x1ZGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTUifSksaS5leHRlbnNpb25zPW5ldyBpKCJleHRlbnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYWU2In0pLGkuZXllQ2xvc2VkPW5ldyBpKCJleWUtY2xvc2VkIix7Zm9udENoYXJhY3RlcjoiXFxlYWU3In0pLGkuZmlsZUJpbmFyeT1uZXcgaSgiZmlsZS1iaW5hcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTgifSksaS5maWxlQ29kZT1uZXcgaSgiZmlsZS1jb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU5In0pLGkuZmlsZU1lZGlhPW5ldyBpKCJmaWxlLW1lZGlhIix7Zm9udENoYXJhY3RlcjoiXFxlYWVhIn0pLGkuZmlsZVBkZj1uZXcgaSgiZmlsZS1wZGYiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWIifSksaS5maWxlU3VibW9kdWxlPW5ldyBpKCJmaWxlLXN1Ym1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYyJ9KSxpLmZpbGVTeW1saW5rRGlyZWN0b3J5PW5ldyBpKCJmaWxlLXN5bWxpbmstZGlyZWN0b3J5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWVkIn0pLGkuZmlsZVN5bWxpbmtGaWxlPW5ldyBpKCJmaWxlLXN5bWxpbmstZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlZSJ9KSxpLmZpbGVaaXA9bmV3IGkoImZpbGUtemlwIix7Zm9udENoYXJhY3RlcjoiXFxlYWVmIn0pLGkuZmlsZXM9bmV3IGkoImZpbGVzIix7Zm9udENoYXJhY3RlcjoiXFxlYWYwIn0pLGkuZmlsdGVyPW5ldyBpKCJmaWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjEifSksaS5mbGFtZT1uZXcgaSgiZmxhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjIifSksaS5mb2xkRG93bj1uZXcgaSgiZm9sZC1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYWYzIn0pLGkuZm9sZFVwPW5ldyBpKCJmb2xkLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWY0In0pLGkuZm9sZD1uZXcgaSgiZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNSJ9KSxpLmZvbGRlckFjdGl2ZT1uZXcgaSgiZm9sZGVyLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNiJ9KSxpLmZvbGRlck9wZW5lZD1uZXcgaSgiZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNyJ9KSxpLmdlYXI9bmV3IGkoImdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjgifSksaS5naWZ0PW5ldyBpKCJnaWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWY5In0pLGkuZ2lzdFNlY3JldD1uZXcgaSgiZ2lzdC1zZWNyZXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmEifSksaS5naXN0PW5ldyBpKCJnaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZiIn0pLGkuZ2l0Q29tbWl0PW5ldyBpKCJnaXQtY29tbWl0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZjIn0pLGkuZ2l0Q29tcGFyZT1uZXcgaSgiZ2l0LWNvbXBhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmQifSksaS5naXRNZXJnZT1uZXcgaSgiZ2l0LW1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZlIn0pLGkuZ2l0aHViQWN0aW9uPW5ldyBpKCJnaXRodWItYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWZmIn0pLGkuZ2l0aHViQWx0PW5ldyBpKCJnaXRodWItYWx0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjAwIn0pLGkuZ2xvYmU9bmV3IGkoImdsb2JlIix7Zm9udENoYXJhY3RlcjoiXFxlYjAxIn0pLGkuZ3JhYmJlcj1uZXcgaSgiZ3JhYmJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMiJ9KSxpLmdyYXBoPW5ldyBpKCJncmFwaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMyJ9KSxpLmdyaXBwZXI9bmV3IGkoImdyaXBwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDQifSksaS5oZWFydD1uZXcgaSgiaGVhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViMDUifSksaS5ob21lPW5ldyBpKCJob21lIix7Zm9udENoYXJhY3RlcjoiXFxlYjA2In0pLGkuaG9yaXpvbnRhbFJ1bGU9bmV3IGkoImhvcml6b250YWwtcnVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNyJ9KSxpLmh1Ym90PW5ldyBpKCJodWJvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOCJ9KSxpLmluYm94PW5ldyBpKCJpbmJveCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwOSJ9KSxpLmlzc3VlQ2xvc2VkPW5ldyBpKCJpc3N1ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksaS5pc3N1ZVJlb3BlbmVkPW5ldyBpKCJpc3N1ZS1yZW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYiJ9KSxpLmlzc3Vlcz1uZXcgaSgiaXNzdWVzIix7Zm9udENoYXJhY3RlcjoiXFxlYjBjIn0pLGkuaXRhbGljPW5ldyBpKCJpdGFsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGQifSksaS5qZXJzZXk9bmV3IGkoImplcnNleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwZSJ9KSxpLmpzb249bmV3IGkoImpzb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMGYifSksaS5rZWJhYlZlcnRpY2FsPW5ldyBpKCJrZWJhYi12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMCJ9KSxpLmtleT1uZXcgaSgia2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjExIn0pLGkubGF3PW5ldyBpKCJsYXciLHtmb250Q2hhcmFjdGVyOiJcXGViMTIifSksaS5saWdodGJ1bGJBdXRvZml4PW5ldyBpKCJsaWdodGJ1bGItYXV0b2ZpeCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMyJ9KSxpLmxpbmtFeHRlcm5hbD1uZXcgaSgibGluay1leHRlcm5hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNCJ9KSxpLmxpbms9bmV3IGkoImxpbmsiLHtmb250Q2hhcmFjdGVyOiJcXGViMTUifSksaS5saXN0T3JkZXJlZD1uZXcgaSgibGlzdC1vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE2In0pLGkubGlzdFVub3JkZXJlZD1uZXcgaSgibGlzdC11bm9yZGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMTcifSksaS5saXZlU2hhcmU9bmV3IGkoImxpdmUtc2hhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMTgifSksaS5sb2FkaW5nPW5ldyBpKCJsb2FkaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjE5In0pLGkubG9jYXRpb249bmV3IGkoImxvY2F0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjFhIn0pLGkubWFpbFJlYWQ9bmV3IGkoIm1haWwtcmVhZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxYiJ9KSxpLm1haWw9bmV3IGkoIm1haWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMWMifSksaS5tYXJrZG93bj1uZXcgaSgibWFya2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWQifSksaS5tZWdhcGhvbmU9bmV3IGkoIm1lZ2FwaG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZSJ9KSxpLm1lbnRpb249bmV3IGkoIm1lbnRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWYifSksaS5taWxlc3RvbmU9bmV3IGkoIm1pbGVzdG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyMCJ9KSxpLm1vcnRhckJvYXJkPW5ldyBpKCJtb3J0YXItYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViMjEifSksaS5tb3ZlPW5ldyBpKCJtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjIyIn0pLGkubXVsdGlwbGVXaW5kb3dzPW5ldyBpKCJtdWx0aXBsZS13aW5kb3dzIix7Zm9udENoYXJhY3RlcjoiXFxlYjIzIn0pLGkubXV0ZT1uZXcgaSgibXV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNCJ9KSxpLm5vTmV3bGluZT1uZXcgaSgibm8tbmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNSJ9KSxpLm5vdGU9bmV3IGkoIm5vdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjYifSksaS5vY3RvZmFjZT1uZXcgaSgib2N0b2ZhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjcifSksaS5vcGVuUHJldmlldz1uZXcgaSgib3Blbi1wcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjI4In0pLGkucGFja2FnZV89bmV3IGkoInBhY2thZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMjkifSksaS5wYWludGNhbj1uZXcgaSgicGFpbnRjYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmEifSksaS5waW49bmV3IGkoInBpbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYiJ9KSxpLnBsYXk9bmV3IGkoInBsYXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksaS5ydW49bmV3IGkoInJ1biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxpLnBsdWc9bmV3IGkoInBsdWciLHtmb250Q2hhcmFjdGVyOiJcXGViMmQifSksaS5wcmVzZXJ2ZUNhc2U9bmV3IGkoInByZXNlcnZlLWNhc2UiLHtmb250Q2hhcmFjdGVyOiJcXGViMmUifSksaS5wcmV2aWV3PW5ldyBpKCJwcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjJmIn0pLGkucHJvamVjdD1uZXcgaSgicHJvamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMCJ9KSxpLnB1bHNlPW5ldyBpKCJwdWxzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMSJ9KSxpLnF1ZXN0aW9uPW5ldyBpKCJxdWVzdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMiJ9KSxpLnF1b3RlPW5ldyBpKCJxdW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMyJ9KSxpLnJhZGlvVG93ZXI9bmV3IGkoInJhZGlvLXRvd2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYjM0In0pLGkucmVhY3Rpb25zPW5ldyBpKCJyZWFjdGlvbnMiLHtmb250Q2hhcmFjdGVyOiJcXGViMzUifSksaS5yZWZlcmVuY2VzPW5ldyBpKCJyZWZlcmVuY2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjM2In0pLGkucmVmcmVzaD1uZXcgaSgicmVmcmVzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzNyJ9KSxpLnJlZ2V4PW5ldyBpKCJyZWdleCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzOCJ9KSxpLnJlbW90ZUV4cGxvcmVyPW5ldyBpKCJyZW1vdGUtZXhwbG9yZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzkifSksaS5yZW1vdGU9bmV3IGkoInJlbW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYSJ9KSxpLnJlbW92ZT1uZXcgaSgicmVtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNiIn0pLGkucmVwbGFjZUFsbD1uZXcgaSgicmVwbGFjZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViM2MifSksaS5yZXBsYWNlPW5ldyBpKCJyZXBsYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNkIn0pLGkucmVwb0Nsb25lPW5ldyBpKCJyZXBvLWNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjNlIn0pLGkucmVwb0ZvcmNlUHVzaD1uZXcgaSgicmVwby1mb3JjZS1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjNmIn0pLGkucmVwb1B1bGw9bmV3IGkoInJlcG8tcHVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MCJ9KSxpLnJlcG9QdXNoPW5ldyBpKCJyZXBvLXB1c2giLHtmb250Q2hhcmFjdGVyOiJcXGViNDEifSksaS5yZXBvcnQ9bmV3IGkoInJlcG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MiJ9KSxpLnJlcXVlc3RDaGFuZ2VzPW5ldyBpKCJyZXF1ZXN0LWNoYW5nZXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNDMifSksaS5yb2NrZXQ9bmV3IGkoInJvY2tldCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NCJ9KSxpLnJvb3RGb2xkZXJPcGVuZWQ9bmV3IGkoInJvb3QtZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NSJ9KSxpLnJvb3RGb2xkZXI9bmV3IGkoInJvb3QtZm9sZGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ2In0pLGkucnNzPW5ldyBpKCJyc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViNDcifSksaS5ydWJ5PW5ldyBpKCJydWJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ4In0pLGkuc2F2ZUFsbD1uZXcgaSgic2F2ZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNDkifSksaS5zYXZlQXM9bmV3IGkoInNhdmUtYXMiLHtmb250Q2hhcmFjdGVyOiJcXGViNGEifSksaS5zYXZlPW5ldyBpKCJzYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjRiIn0pLGkuc2NyZWVuRnVsbD1uZXcgaSgic2NyZWVuLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGMifSksaS5zY3JlZW5Ob3JtYWw9bmV3IGkoInNjcmVlbi1ub3JtYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNGQifSksaS5zZWFyY2hTdG9wPW5ldyBpKCJzZWFyY2gtc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZSJ9KSxpLnNlcnZlcj1uZXcgaSgic2VydmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUwIn0pLGkuc2V0dGluZ3NHZWFyPW5ldyBpKCJzZXR0aW5ncy1nZWFyIix7Zm9udENoYXJhY3RlcjoiXFxlYjUxIn0pLGkuc2V0dGluZ3M9bmV3IGkoInNldHRpbmdzIix7Zm9udENoYXJhY3RlcjoiXFxlYjUyIn0pLGkuc2hpZWxkPW5ldyBpKCJzaGllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNTMifSksaS5zbWlsZXk9bmV3IGkoInNtaWxleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NCJ9KSxpLnNvcnRQcmVjZWRlbmNlPW5ldyBpKCJzb3J0LXByZWNlZGVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNTUifSksaS5zcGxpdEhvcml6b250YWw9bmV3IGkoInNwbGl0LWhvcml6b250YWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTYifSksaS5zcGxpdFZlcnRpY2FsPW5ldyBpKCJzcGxpdC12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NyJ9KSxpLnNxdWlycmVsPW5ldyBpKCJzcXVpcnJlbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OCJ9KSxpLnN0YXJGdWxsPW5ldyBpKCJzdGFyLWZ1bGwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTkifSksaS5zdGFySGFsZj1uZXcgaSgic3Rhci1oYWxmIix7Zm9udENoYXJhY3RlcjoiXFxlYjVhIn0pLGkuc3ltYm9sQ2xhc3M9bmV3IGkoInN5bWJvbC1jbGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YiJ9KSxpLnN5bWJvbENvbG9yPW5ldyBpKCJzeW1ib2wtY29sb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNWMifSksaS5zeW1ib2xDdXN0b21Db2xvcj1uZXcgaSgic3ltYm9sLWN1c3RvbWNvbG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjVjIn0pLGkuc3ltYm9sQ29uc3RhbnQ9bmV3IGkoInN5bWJvbC1jb25zdGFudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZCJ9KSxpLnN5bWJvbEVudW1NZW1iZXI9bmV3IGkoInN5bWJvbC1lbnVtLW1lbWJlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZSJ9KSxpLnN5bWJvbEZpZWxkPW5ldyBpKCJzeW1ib2wtZmllbGQiLHtmb250Q2hhcmFjdGVyOiJcXGViNWYifSksaS5zeW1ib2xGaWxlPW5ldyBpKCJzeW1ib2wtZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MCJ9KSxpLnN5bWJvbEludGVyZmFjZT1uZXcgaSgic3ltYm9sLWludGVyZmFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MSJ9KSxpLnN5bWJvbEtleXdvcmQ9bmV3IGkoInN5bWJvbC1rZXl3b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjYyIn0pLGkuc3ltYm9sTWlzYz1uZXcgaSgic3ltYm9sLW1pc2MiLHtmb250Q2hhcmFjdGVyOiJcXGViNjMifSksaS5zeW1ib2xPcGVyYXRvcj1uZXcgaSgic3ltYm9sLW9wZXJhdG9yIix7Zm9udENoYXJhY3RlcjoiXFxlYjY0In0pLGkuc3ltYm9sUHJvcGVydHk9bmV3IGkoInN5bWJvbC1wcm9wZXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2NSJ9KSxpLndyZW5jaD1uZXcgaSgid3JlbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGkud3JlbmNoU3ViYWN0aW9uPW5ldyBpKCJ3cmVuY2gtc3ViYWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLGkuc3ltYm9sU25pcHBldD1uZXcgaSgic3ltYm9sLXNuaXBwZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNjYifSksaS50YXNrbGlzdD1uZXcgaSgidGFza2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGViNjcifSksaS50ZWxlc2NvcGU9bmV3IGkoInRlbGVzY29wZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2OCJ9KSxpLnRleHRTaXplPW5ldyBpKCJ0ZXh0LXNpemUiLHtmb250Q2hhcmFjdGVyOiJcXGViNjkifSksaS50aHJlZUJhcnM9bmV3IGkoInRocmVlLWJhcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmEifSksaS50aHVtYnNkb3duPW5ldyBpKCJ0aHVtYnNkb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZiIn0pLGkudGh1bWJzdXA9bmV3IGkoInRodW1ic3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYjZjIn0pLGkudG9vbHM9bmV3IGkoInRvb2xzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZkIn0pLGkudHJpYW5nbGVEb3duPW5ldyBpKCJ0cmlhbmdsZS1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYjZlIn0pLGkudHJpYW5nbGVMZWZ0PW5ldyBpKCJ0cmlhbmdsZS1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjZmIn0pLGkudHJpYW5nbGVSaWdodD1uZXcgaSgidHJpYW5nbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzAifSksaS50cmlhbmdsZVVwPW5ldyBpKCJ0cmlhbmdsZS11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MSJ9KSxpLnR3aXR0ZXI9bmV3IGkoInR3aXR0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNzIifSksaS51bmZvbGQ9bmV3IGkoInVuZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MyJ9KSxpLnVubG9jaz1uZXcgaSgidW5sb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYjc0In0pLGkudW5tdXRlPW5ldyBpKCJ1bm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViNzUifSksaS51bnZlcmlmaWVkPW5ldyBpKCJ1bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc2In0pLGkudmVyaWZpZWQ9bmV3IGkoInZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc3In0pLGkudmVyc2lvbnM9bmV3IGkoInZlcnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjc4In0pLGkudm1BY3RpdmU9bmV3IGkoInZtLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OSJ9KSxpLnZtT3V0bGluZT1uZXcgaSgidm0tb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YSJ9KSxpLnZtUnVubmluZz1uZXcgaSgidm0tcnVubmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YiJ9KSxpLndhdGNoPW5ldyBpKCJ3YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YyJ9KSxpLndoaXRlc3BhY2U9bmV3IGkoIndoaXRlc3BhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViN2QifSksaS53aG9sZVdvcmQ9bmV3IGkoIndob2xlLXdvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViN2UifSksaS53aW5kb3c9bmV3IGkoIndpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZiJ9KSxpLndvcmRXcmFwPW5ldyBpKCJ3b3JkLXdyYXAiLHtmb250Q2hhcmFjdGVyOiJcXGViODAifSksaS56b29tSW49bmV3IGkoInpvb20taW4iLHtmb250Q2hhcmFjdGVyOiJcXGViODEifSksaS56b29tT3V0PW5ldyBpKCJ6b29tLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MiJ9KSxpLmxpc3RGaWx0ZXI9bmV3IGkoImxpc3QtZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjgzIn0pLGkubGlzdEZsYXQ9bmV3IGkoImxpc3QtZmxhdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NCJ9KSxpLmxpc3RTZWxlY3Rpb249bmV3IGkoImxpc3Qtc2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLGkuc2VsZWN0aW9uPW5ldyBpKCJzZWxlY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViODUifSksaS5saXN0VHJlZT1uZXcgaSgibGlzdC10cmVlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg2In0pLGkuZGVidWdCcmVha3BvaW50RnVuY3Rpb25VbnZlcmlmaWVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODcifSksaS5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbj1uZXcgaSgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4OCJ9KSxpLmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ9bmV3IGkoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODgifSksaS5kZWJ1Z1N0YWNrZnJhbWVBY3RpdmU9bmV3IGkoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg5In0pLGkuZGVidWdTdGFja2ZyYW1lRG90PW5ldyBpKCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YSJ9KSxpLmRlYnVnU3RhY2tmcmFtZT1uZXcgaSgiZGVidWctc3RhY2tmcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxpLmRlYnVnU3RhY2tmcmFtZUZvY3VzZWQ9bmV3IGkoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxpLmRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkPW5ldyBpKCJkZWJ1Zy1icmVha3BvaW50LXVuc3VwcG9ydGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjhjIn0pLGkuc3ltYm9sU3RyaW5nPW5ldyBpKCJzeW1ib2wtc3RyaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjhkIn0pLGkuZGVidWdSZXZlcnNlQ29udGludWU9bmV3IGkoImRlYnVnLXJldmVyc2UtY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGUifSksaS5kZWJ1Z1N0ZXBCYWNrPW5ldyBpKCJkZWJ1Zy1zdGVwLWJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOGYifSksaS5kZWJ1Z1Jlc3RhcnRGcmFtZT1uZXcgaSgiZGVidWctcmVzdGFydC1mcmFtZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MCJ9KSxpLmNhbGxJbmNvbWluZz1uZXcgaSgiY2FsbC1pbmNvbWluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MiJ9KSxpLmNhbGxPdXRnb2luZz1uZXcgaSgiY2FsbC1vdXRnb2luZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MyJ9KSxpLm1lbnU9bmV3IGkoIm1lbnUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTQifSksaS5leHBhbmRBbGw9bmV3IGkoImV4cGFuZC1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOTUifSksaS5mZWVkYmFjaz1uZXcgaSgiZmVlZGJhY2siLHtmb250Q2hhcmFjdGVyOiJcXGViOTYifSksaS5ncm91cEJ5UmVmVHlwZT1uZXcgaSgiZ3JvdXAtYnktcmVmLXR5cGUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTcifSksaS51bmdyb3VwQnlSZWZUeXBlPW5ldyBpKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk4In0pLGkuYWNjb3VudD1uZXcgaSgiYWNjb3VudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5OSJ9KSxpLmJlbGxEb3Q9bmV3IGkoImJlbGwtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlhIn0pLGkuZGVidWdDb25zb2xlPW5ldyBpKCJkZWJ1Zy1jb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYjliIn0pLGkubGlicmFyeT1uZXcgaSgibGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YyJ9KSxpLm91dHB1dD1uZXcgaSgib3V0cHV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjlkIn0pLGkucnVuQWxsPW5ldyBpKCJydW4tYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjllIn0pLGkuc3luY0lnbm9yZWQ9bmV3IGkoInN5bmMtaWdub3JlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZiJ9KSxpLnBpbm5lZD1uZXcgaSgicGlubmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmEwIn0pLGkuZ2l0aHViSW52ZXJ0ZWQ9bmV3IGkoImdpdGh1Yi1pbnZlcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMSJ9KSxpLmRlYnVnQWx0PW5ldyBpKCJkZWJ1Zy1hbHQiLHtmb250Q2hhcmFjdGVyOiJcXGViOTEifSksaS5zZXJ2ZXJQcm9jZXNzPW5ldyBpKCJzZXJ2ZXItcHJvY2VzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMiJ9KSxpLnNlcnZlckVudmlyb25tZW50PW5ldyBpKCJzZXJ2ZXItZW52aXJvbm1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTMifSksaS5wYXNzPW5ldyBpKCJwYXNzIix7Zm9udENoYXJhY3RlcjoiXFxlYmE0In0pLGkuc3RvcENpcmNsZT1uZXcgaSgic3RvcC1jaXJjbGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYTUifSksaS5wbGF5Q2lyY2xlPW5ldyBpKCJwbGF5LWNpcmNsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNiJ9KSxpLnJlY29yZD1uZXcgaSgicmVjb3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYmE3In0pLGkuZGVidWdBbHRTbWFsbD1uZXcgaSgiZGVidWctYWx0LXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmE4In0pLGkudm1Db25uZWN0PW5ldyBpKCJ2bS1jb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmE5In0pLGkuY2xvdWQ9bmV3IGkoImNsb3VkIix7Zm9udENoYXJhY3RlcjoiXFxlYmFhIn0pLGkubWVyZ2U9bmV3IGkoIm1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmFiIn0pLGkuZXhwb3J0SWNvbj1uZXcgaSgiZXhwb3J0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFjIn0pLGkuZ3JhcGhMZWZ0PW5ldyBpKCJncmFwaC1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFkIn0pLGkubWFnbmV0PW5ldyBpKCJtYWduZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWUifSksaS5ub3RlYm9vaz1uZXcgaSgibm90ZWJvb2siLHtmb250Q2hhcmFjdGVyOiJcXGViYWYifSksaS5yZWRvPW5ldyBpKCJyZWRvIix7Zm9udENoYXJhY3RlcjoiXFxlYmIwIn0pLGkuY2hlY2tBbGw9bmV3IGkoImNoZWNrLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMSJ9KSxpLnBpbm5lZERpcnR5PW5ldyBpKCJwaW5uZWQtZGlydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjIifSksaS5wYXNzRmlsbGVkPW5ldyBpKCJwYXNzLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiMyJ9KSxpLmNpcmNsZUxhcmdlRmlsbGVkPW5ldyBpKCJjaXJjbGUtbGFyZ2UtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmI0In0pLGkuY2lyY2xlTGFyZ2VPdXRsaW5lPW5ldyBpKCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNSJ9KSxpLmNvbWJpbmU9bmV3IGkoImNvbWJpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViYjYifSksaS5nYXRoZXI9bmV3IGkoImdhdGhlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxpLnRhYmxlPW5ldyBpKCJ0YWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNyJ9KSxpLnZhcmlhYmxlR3JvdXA9bmV3IGkoInZhcmlhYmxlLWdyb3VwIix7Zm9udENoYXJhY3RlcjoiXFxlYmI4In0pLGkudHlwZUhpZXJhcmNoeT1uZXcgaSgidHlwZS1oaWVyYXJjaHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjkifSksaS50eXBlSGllcmFyY2h5U3ViPW5ldyBpKCJ0eXBlLWhpZXJhcmNoeS1zdWIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmEifSksaS50eXBlSGllcmFyY2h5U3VwZXI9bmV3IGkoInR5cGUtaGllcmFyY2h5LXN1cGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYmJiIn0pLGkuZ2l0UHVsbFJlcXVlc3RDcmVhdGU9bmV3IGkoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYmJjIn0pLGkucnVuQWJvdmU9bmV3IGkoInJ1bi1hYm92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZCJ9KSxpLnJ1bkJlbG93PW5ldyBpKCJydW4tYmVsb3ciLHtmb250Q2hhcmFjdGVyOiJcXGViYmUifSksaS5ub3RlYm9va1RlbXBsYXRlPW5ldyBpKCJub3RlYm9vay10ZW1wbGF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZiJ9KSxpLmRlYnVnUmVydW49bmV3IGkoImRlYnVnLXJlcnVuIix7Zm9udENoYXJhY3RlcjoiXFxlYmMwIn0pLGkud29ya3NwYWNlVHJ1c3RlZD1uZXcgaSgid29ya3NwYWNlLXRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzEifSksaS53b3Jrc3BhY2VVbnRydXN0ZWQ9bmV3IGkoIndvcmtzcGFjZS11bnRydXN0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYzIifSksaS53b3Jrc3BhY2VVbnNwZWNpZmllZD1uZXcgaSgid29ya3NwYWNlLXVuc3BlY2lmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMzIn0pLGkudGVybWluYWxDbWQ9bmV3IGkoInRlcm1pbmFsLWNtZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNCJ9KSxpLnRlcm1pbmFsRGViaWFuPW5ldyBpKCJ0ZXJtaW5hbC1kZWJpYW4iLHtmb250Q2hhcmFjdGVyOiJcXGViYzUifSksaS50ZXJtaW5hbExpbnV4PW5ldyBpKCJ0ZXJtaW5hbC1saW51eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNiJ9KSxpLnRlcm1pbmFsUG93ZXJzaGVsbD1uZXcgaSgidGVybWluYWwtcG93ZXJzaGVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNyJ9KSxpLnRlcm1pbmFsVG11eD1uZXcgaSgidGVybWluYWwtdG11eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjOCJ9KSxpLnRlcm1pbmFsVWJ1bnR1PW5ldyBpKCJ0ZXJtaW5hbC11YnVudHUiLHtmb250Q2hhcmFjdGVyOiJcXGViYzkifSksaS50ZXJtaW5hbEJhc2g9bmV3IGkoInRlcm1pbmFsLWJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGViY2EifSksaS5hcnJvd1N3YXA9bmV3IGkoImFycm93LXN3YXAiLHtmb250Q2hhcmFjdGVyOiJcXGViY2IifSksaS5jb3B5PW5ldyBpKCJjb3B5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmNjIn0pLGkucGVyc29uQWRkPW5ldyBpKCJwZXJzb24tYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNkIn0pLGkuZmlsdGVyRmlsbGVkPW5ldyBpKCJmaWx0ZXItZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmNlIn0pLGkud2FuZD1uZXcgaSgid2FuZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZiJ9KSxpLmRlYnVnTGluZUJ5TGluZT1uZXcgaSgiZGVidWctbGluZS1ieS1saW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmQwIn0pLGkuaW5zcGVjdD1uZXcgaSgiaW5zcGVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkMSJ9KSxpLmxheWVycz1uZXcgaSgibGF5ZXJzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQyIn0pLGkubGF5ZXJzRG90PW5ldyBpKCJsYXllcnMtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQzIn0pLGkubGF5ZXJzQWN0aXZlPW5ldyBpKCJsYXllcnMtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ0In0pLGkuY29tcGFzcz1uZXcgaSgiY29tcGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNSJ9KSxpLmNvbXBhc3NEb3Q9bmV3IGkoImNvbXBhc3MtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQ2In0pLGkuY29tcGFzc0FjdGl2ZT1uZXcgaSgiY29tcGFzcy1hY3RpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDcifSksaS5henVyZT1uZXcgaSgiYXp1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDgifSksaS5pc3N1ZURyYWZ0PW5ldyBpKCJpc3N1ZS1kcmFmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkOSJ9KSxpLmdpdFB1bGxSZXF1ZXN0Q2xvc2VkPW5ldyBpKCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkYSJ9KSxpLmdpdFB1bGxSZXF1ZXN0RHJhZnQ9bmV3IGkoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGIifSksaS5kZWJ1Z0FsbD1uZXcgaSgiZGVidWctYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmRjIn0pLGkuZGVidWdDb3ZlcmFnZT1uZXcgaSgiZGVidWctY292ZXJhZ2UiLHtmb250Q2hhcmFjdGVyOiJcXGViZGQifSksaS5ydW5FcnJvcnM9bmV3IGkoInJ1bi1lcnJvcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZGUifSksaS5mb2xkZXJMaWJyYXJ5PW5ldyBpKCJmb2xkZXItbGlicmFyeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkZiJ9KSxpLmRlYnVnQ29udGludWVTbWFsbD1uZXcgaSgiZGVidWctY29udGludWUtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZTAifSksaS5iZWFrZXJTdG9wPW5ldyBpKCJiZWFrZXItc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMSJ9KSxpLmdyYXBoTGluZT1uZXcgaSgiZ3JhcGgtbGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMiJ9KSxpLmdyYXBoU2NhdHRlcj1uZXcgaSgiZ3JhcGgtc2NhdHRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMyJ9KSxpLnBpZUNoYXJ0PW5ldyBpKCJwaWUtY2hhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZTQifSksaS5icmFja2V0PW5ldyBpKCJicmFja2V0IixpLmpzb24uZGVmaW5pdGlvbiksaS5icmFja2V0RG90PW5ldyBpKCJicmFja2V0LWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNSJ9KSxpLmJyYWNrZXRFcnJvcj1uZXcgaSgiYnJhY2tldC1lcnJvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNiJ9KSxpLmxvY2tTbWFsbD1uZXcgaSgibG9jay1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNyJ9KSxpLmF6dXJlRGV2b3BzPW5ldyBpKCJhenVyZS1kZXZvcHMiLHtmb250Q2hhcmFjdGVyOiJcXGViZTgifSksaS52ZXJpZmllZEZpbGxlZD1uZXcgaSgidmVyaWZpZWQtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmU5In0pLGkubmV3TGluZT1uZXcgaSgibmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYSJ9KSxpLmxheW91dD1uZXcgaSgibGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmViIn0pLGkubGF5b3V0QWN0aXZpdHliYXJMZWZ0PW5ldyBpKCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYyJ9KSxpLmxheW91dEFjdGl2aXR5YmFyUmlnaHQ9bmV3IGkoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZCJ9KSxpLmxheW91dFBhbmVsTGVmdD1uZXcgaSgibGF5b3V0LXBhbmVsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWUifSksaS5sYXlvdXRQYW5lbENlbnRlcj1uZXcgaSgibGF5b3V0LXBhbmVsLWNlbnRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZiJ9KSxpLmxheW91dFBhbmVsSnVzdGlmeT1uZXcgaSgibGF5b3V0LXBhbmVsLWp1c3RpZnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZjAifSksaS5sYXlvdXRQYW5lbFJpZ2h0PW5ldyBpKCJsYXlvdXQtcGFuZWwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjEifSksaS5sYXlvdXRQYW5lbD1uZXcgaSgibGF5b3V0LXBhbmVsIix7Zm9udENoYXJhY3RlcjoiXFxlYmYyIn0pLGkubGF5b3V0U2lkZWJhckxlZnQ9bmV3IGkoImxheW91dC1zaWRlYmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjMifSksaS5sYXlvdXRTaWRlYmFyUmlnaHQ9bmV3IGkoImxheW91dC1zaWRlYmFyLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY0In0pLGkubGF5b3V0U3RhdHVzYmFyPW5ldyBpKCJsYXlvdXQtc3RhdHVzYmFyIix7Zm9udENoYXJhY3RlcjoiXFxlYmY1In0pLGkubGF5b3V0TWVudWJhcj1uZXcgaSgibGF5b3V0LW1lbnViYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZjYifSksaS5sYXlvdXRDZW50ZXJlZD1uZXcgaSgibGF5b3V0LWNlbnRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmY3In0pLGkudGFyZ2V0PW5ldyBpKCJ0YXJnZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjgifSksaS5pbmRlbnQ9bmV3IGkoImluZGVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmOSJ9KSxpLnJlY29yZFNtYWxsPW5ldyBpKCJyZWNvcmQtc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZmEifSksaS5lcnJvclNtYWxsPW5ldyBpKCJlcnJvci1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYiJ9KSxpLmFycm93Q2lyY2xlRG93bj1uZXcgaSgiYXJyb3ctY2lyY2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViZmMifSksaS5hcnJvd0NpcmNsZUxlZnQ9bmV3IGkoImFycm93LWNpcmNsZS1sZWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmZkIn0pLGkuYXJyb3dDaXJjbGVSaWdodD1uZXcgaSgiYXJyb3ctY2lyY2xlLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmZlIn0pLGkuYXJyb3dDaXJjbGVVcD1uZXcgaSgiYXJyb3ctY2lyY2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYmZmIn0pLGkuZGlhbG9nRXJyb3I9bmV3IGkoImRpYWxvZy1lcnJvciIsaS5lcnJvci5kZWZpbml0aW9uKSxpLmRpYWxvZ1dhcm5pbmc9bmV3IGkoImRpYWxvZy13YXJuaW5nIixpLndhcm5pbmcuZGVmaW5pdGlvbiksaS5kaWFsb2dJbmZvPW5ldyBpKCJkaWFsb2ctaW5mbyIsaS5pbmZvLmRlZmluaXRpb24pLGkuZGlhbG9nQ2xvc2U9bmV3IGkoImRpYWxvZy1jbG9zZSIsaS5jbG9zZS5kZWZpbml0aW9uKSxpLnRyZWVJdGVtRXhwYW5kZWQ9bmV3IGkoInRyZWUtaXRlbS1leHBhbmRlZCIsaS5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxpLnRyZWVGaWx0ZXJPblR5cGVPbj1uZXcgaSgidHJlZS1maWx0ZXItb24tdHlwZS1vbiIsaS5saXN0RmlsdGVyLmRlZmluaXRpb24pLGkudHJlZUZpbHRlck9uVHlwZU9mZj1uZXcgaSgidHJlZS1maWx0ZXItb24tdHlwZS1vZmYiLGkubGlzdFNlbGVjdGlvbi5kZWZpbml0aW9uKSxpLnRyZWVGaWx0ZXJDbGVhcj1uZXcgaSgidHJlZS1maWx0ZXItY2xlYXIiLGkuY2xvc2UuZGVmaW5pdGlvbiksaS50cmVlSXRlbUxvYWRpbmc9bmV3IGkoInRyZWUtaXRlbS1sb2FkaW5nIixpLmxvYWRpbmcuZGVmaW5pdGlvbiksaS5tZW51U2VsZWN0aW9uPW5ldyBpKCJtZW51LXNlbGVjdGlvbiIsaS5jaGVjay5kZWZpbml0aW9uKSxpLm1lbnVTdWJtZW51PW5ldyBpKCJtZW51LXN1Ym1lbnUiLGkuY2hldnJvblJpZ2h0LmRlZmluaXRpb24pLGkubWVudUJhck1vcmU9bmV3IGkoIm1lbnViYXItbW9yZSIsaS5tb3JlLmRlZmluaXRpb24pLGkuc2Nyb2xsYmFyQnV0dG9uTGVmdD1uZXcgaSgic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IixpLnRyaWFuZ2xlTGVmdC5kZWZpbml0aW9uKSxpLnNjcm9sbGJhckJ1dHRvblJpZ2h0PW5ldyBpKCJzY3JvbGxiYXItYnV0dG9uLXJpZ2h0IixpLnRyaWFuZ2xlUmlnaHQuZGVmaW5pdGlvbiksaS5zY3JvbGxiYXJCdXR0b25VcD1uZXcgaSgic2Nyb2xsYmFyLWJ1dHRvbi11cCIsaS50cmlhbmdsZVVwLmRlZmluaXRpb24pLGkuc2Nyb2xsYmFyQnV0dG9uRG93bj1uZXcgaSgic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIixpLnRyaWFuZ2xlRG93bi5kZWZpbml0aW9uKSxpLnRvb2xCYXJNb3JlPW5ldyBpKCJ0b29sYmFyLW1vcmUiLGkubW9yZS5kZWZpbml0aW9uKSxpLnF1aWNrSW5wdXRCYWNrPW5ldyBpKCJxdWljay1pbnB1dC1iYWNrIixpLmFycm93TGVmdC5kZWZpbml0aW9uKTt7dmFyIGU7KGU9SG49SG58fHt9KS5pY29uTmFtZVNlZ21lbnQ9IltBLVphLXowLTldKyIsZS5pY29uTmFtZUV4cHJlc3Npb249IltBLVphLXowLTktXSsiLGUuaWNvbk1vZGlmaWVyRXhwcmVzc2lvbj0ifltBLVphLXpdKyIsZS5pY29uTmFtZUNoYXJhY3Rlcj0iW0EtWmEtejAtOX4tXSI7Y29uc3QgcW89bmV3IFJlZ0V4cChgXigke2UuaWNvbk5hbWVFeHByZXNzaW9ufSkoJHtlLmljb25Nb2RpZmllckV4cHJlc3Npb259KT8kYCk7ZnVuY3Rpb24gSHQoZSl7aWYoZSBpbnN0YW5jZW9mIGkpcmV0dXJuWyJjb2RpY29uIiwiY29kaWNvbi0iK2UuaWRdO2U9cW8uZXhlYyhlLmlkKTtpZighZSlyZXR1cm4gSHQoaS5lcnJvcik7bGV0Wyx0LHJdPWU7Y29uc3Qgbj1bImNvZGljb24iLCJjb2RpY29uLSIrdF07cmV0dXJuIHImJm4ucHVzaCgiY29kaWNvbi1tb2RpZmllci0iK3Iuc3Vic3RyKDEpKSxufWUuYXNDbGFzc05hbWVBcnJheT1IdCxlLmFzQ2xhc3NOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBIdChlKS5qb2luKCIgIil9LGUuYXNDU1NTZWxlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4iLiIrSHQoZSkuam9pbigiLiIpfX1jbGFzcyB6dHtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5fdG9rZW5CcmFuZD12b2lkIDAsdGhpcy5vZmZzZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLmxhbmd1YWdlPXJ9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5vZmZzZXQrIiwgIit0aGlzLnR5cGUrIikifX1jbGFzcyBKdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3Rva2VuaXphdGlvblJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLnRva2Vucz1lLHRoaXMuZW5kU3RhdGU9dH19Y2xhc3MgR3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9lbmNvZGVkVG9rZW5pemF0aW9uUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMudG9rZW5zPWUsdGhpcy5lbmRTdGF0ZT10fX17ST17fTtjb25zdCBCbz1uZXcgTWFwLCRvPShCby5zZXQoMCxpLnN5bWJvbE1ldGhvZCksQm8uc2V0KDEsaS5zeW1ib2xGdW5jdGlvbiksQm8uc2V0KDIsaS5zeW1ib2xDb25zdHJ1Y3RvciksQm8uc2V0KDMsaS5zeW1ib2xGaWVsZCksQm8uc2V0KDQsaS5zeW1ib2xWYXJpYWJsZSksQm8uc2V0KDUsaS5zeW1ib2xDbGFzcyksQm8uc2V0KDYsaS5zeW1ib2xTdHJ1Y3QpLEJvLnNldCg3LGkuc3ltYm9sSW50ZXJmYWNlKSxCby5zZXQoOCxpLnN5bWJvbE1vZHVsZSksQm8uc2V0KDksaS5zeW1ib2xQcm9wZXJ0eSksQm8uc2V0KDEwLGkuc3ltYm9sRXZlbnQpLEJvLnNldCgxMSxpLnN5bWJvbE9wZXJhdG9yKSxCby5zZXQoMTIsaS5zeW1ib2xVbml0KSxCby5zZXQoMTMsaS5zeW1ib2xWYWx1ZSksQm8uc2V0KDE1LGkuc3ltYm9sRW51bSksQm8uc2V0KDE0LGkuc3ltYm9sQ29uc3RhbnQpLEJvLnNldCgxNSxpLnN5bWJvbEVudW0pLEJvLnNldCgxNixpLnN5bWJvbEVudW1NZW1iZXIpLEJvLnNldCgxNyxpLnN5bWJvbEtleXdvcmQpLEJvLnNldCgyNyxpLnN5bWJvbFNuaXBwZXQpLEJvLnNldCgxOCxpLnN5bWJvbFRleHQpLEJvLnNldCgxOSxpLnN5bWJvbENvbG9yKSxCby5zZXQoMjAsaS5zeW1ib2xGaWxlKSxCby5zZXQoMjEsaS5zeW1ib2xSZWZlcmVuY2UpLEJvLnNldCgyMixpLnN5bWJvbEN1c3RvbUNvbG9yKSxCby5zZXQoMjMsaS5zeW1ib2xGb2xkZXIpLEJvLnNldCgyNCxpLnN5bWJvbFR5cGVQYXJhbWV0ZXIpLEJvLnNldCgyNSxpLmFjY291bnQpLEJvLnNldCgyNixpLmlzc3VlcyksSS50b0ljb249ZnVuY3Rpb24oZSl7bGV0IHQ9Qm8uZ2V0KGUpO3JldHVybiB0fHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitlKSx0PWkuc3ltYm9sUHJvcGVydHkpLHR9LG5ldyBNYXApOyRvLnNldCgibWV0aG9kIiwwKSwkby5zZXQoImZ1bmN0aW9uIiwxKSwkby5zZXQoImNvbnN0cnVjdG9yIiwyKSwkby5zZXQoImZpZWxkIiwzKSwkby5zZXQoInZhcmlhYmxlIiw0KSwkby5zZXQoImNsYXNzIiw1KSwkby5zZXQoInN0cnVjdCIsNiksJG8uc2V0KCJpbnRlcmZhY2UiLDcpLCRvLnNldCgibW9kdWxlIiw4KSwkby5zZXQoInByb3BlcnR5Iiw5KSwkby5zZXQoImV2ZW50IiwxMCksJG8uc2V0KCJvcGVyYXRvciIsMTEpLCRvLnNldCgidW5pdCIsMTIpLCRvLnNldCgidmFsdWUiLDEzKSwkby5zZXQoImNvbnN0YW50IiwxNCksJG8uc2V0KCJlbnVtIiwxNSksJG8uc2V0KCJlbnVtLW1lbWJlciIsMTYpLCRvLnNldCgiZW51bU1lbWJlciIsMTYpLCRvLnNldCgia2V5d29yZCIsMTcpLCRvLnNldCgic25pcHBldCIsMjcpLCRvLnNldCgidGV4dCIsMTgpLCRvLnNldCgiY29sb3IiLDE5KSwkby5zZXQoImZpbGUiLDIwKSwkby5zZXQoInJlZmVyZW5jZSIsMjEpLCRvLnNldCgiY3VzdG9tY29sb3IiLDIyKSwkby5zZXQoImZvbGRlciIsMjMpLCRvLnNldCgidHlwZS1wYXJhbWV0ZXIiLDI0KSwkby5zZXQoInR5cGVQYXJhbWV0ZXIiLDI0KSwkby5zZXQoImFjY291bnQiLDI1KSwkby5zZXQoImlzc3VlIiwyNiksSS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUsdCl7bGV0IHI9JG8uZ2V0KGUpO3JldHVybiByPXZvaWQgMCE9PXJ8fHQ/cjo5fX17dD17fTtjb25zdCBXbz1uZXcgTWFwO1dvLnNldCgwLGkuc3ltYm9sRmlsZSksV28uc2V0KDEsaS5zeW1ib2xNb2R1bGUpLFdvLnNldCgyLGkuc3ltYm9sTmFtZXNwYWNlKSxXby5zZXQoMyxpLnN5bWJvbFBhY2thZ2UpLFdvLnNldCg0LGkuc3ltYm9sQ2xhc3MpLFdvLnNldCg1LGkuc3ltYm9sTWV0aG9kKSxXby5zZXQoNixpLnN5bWJvbFByb3BlcnR5KSxXby5zZXQoNyxpLnN5bWJvbEZpZWxkKSxXby5zZXQoOCxpLnN5bWJvbENvbnN0cnVjdG9yKSxXby5zZXQoOSxpLnN5bWJvbEVudW0pLFdvLnNldCgxMCxpLnN5bWJvbEludGVyZmFjZSksV28uc2V0KDExLGkuc3ltYm9sRnVuY3Rpb24pLFdvLnNldCgxMixpLnN5bWJvbFZhcmlhYmxlKSxXby5zZXQoMTMsaS5zeW1ib2xDb25zdGFudCksV28uc2V0KDE0LGkuc3ltYm9sU3RyaW5nKSxXby5zZXQoMTUsaS5zeW1ib2xOdW1iZXIpLFdvLnNldCgxNixpLnN5bWJvbEJvb2xlYW4pLFdvLnNldCgxNyxpLnN5bWJvbEFycmF5KSxXby5zZXQoMTgsaS5zeW1ib2xPYmplY3QpLFdvLnNldCgxOSxpLnN5bWJvbEtleSksV28uc2V0KDIwLGkuc3ltYm9sTnVsbCksV28uc2V0KDIxLGkuc3ltYm9sRW51bU1lbWJlciksV28uc2V0KDIyLGkuc3ltYm9sU3RydWN0KSxXby5zZXQoMjMsaS5zeW1ib2xFdmVudCksV28uc2V0KDI0LGkuc3ltYm9sT3BlcmF0b3IpLFdvLnNldCgyNSxpLnN5bWJvbFR5cGVQYXJhbWV0ZXIpLHQudG9JY29uPWZ1bmN0aW9uKGUpe2xldCB0PVdvLmdldChlKTtyZXR1cm4gdHx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK2UpLHQ9aS5zeW1ib2xQcm9wZXJ0eSksdH19KG58fHt9KS5pcz1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpJiYoInN0cmluZyI9PXR5cGVvZiBlLmlkJiYic3RyaW5nIj09dHlwZW9mIGUudGl0bGUpfSxuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgUSx0aGlzLm9uRGlkQ2hhbmdlPXRoaXMuX29uRGlkQ2hhbmdlLmV2ZW50LHRoaXMuX2NvbG9yTWFwPW51bGx9ZmlyZShlKXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOmUsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIoZSx0KXtyZXR1cm4gdGhpcy5fbWFwLnNldChlLHQpLHRoaXMuZmlyZShbZV0pLHYoKCk9Pnt0aGlzLl9tYXAuZ2V0KGUpPT09dCYmKHRoaXMuX21hcC5kZWxldGUoZSksdGhpcy5maXJlKFtlXSkpfSl9cmVnaXN0ZXJGYWN0b3J5KHQsZSl7dmFyIHI7bnVsbCE9PShyPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCkpJiZ2b2lkIDAhPT1yJiZyLmRpc3Bvc2UoKTtjb25zdCBuPW5ldyBXdCh0aGlzLHQsZSk7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQodCxuKSx2KCgpPT57Y29uc3QgZT10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO2UmJmU9PT1uJiYodGhpcy5fZmFjdG9yaWVzLmRlbGV0ZSh0KSxlLmRpc3Bvc2UoKSl9KX1nZXRPckNyZWF0ZShyKXtyZXR1cm4gJHQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBlPXRoaXMuZ2V0KHIpO2lmKGUpcmV0dXJuIGU7Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KHIpO3JldHVybiF0fHx0LmlzUmVzb2x2ZWQ/bnVsbDooeWllbGQgdC5yZXNvbHZlKCksdGhpcy5nZXQocikpfSl9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUpfHxudWxsfWlzUmVzb2x2ZWQoZSl7aWYodGhpcy5nZXQoZSkpcmV0dXJuITA7ZT10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiEoZSYmIWUuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAoZSl7dGhpcy5fY29sb3JNYXA9ZSx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fbWFwLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJjI8dGhpcy5fY29sb3JNYXAubGVuZ3RoP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fSwocj1sbj1sbnx8e30pW3IuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIscltyLlVua25vd249MF09IlVua25vd24iLHJbci5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIscltyLlRhYj0yXT0iVGFiIixyW3IuRW50ZXI9M109IkVudGVyIixyW3IuU2hpZnQ9NF09IlNoaWZ0IixyW3IuQ3RybD01XT0iQ3RybCIscltyLkFsdD02XT0iQWx0IixyW3IuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIscltyLkNhcHNMb2NrPThdPSJDYXBzTG9jayIscltyLkVzY2FwZT05XT0iRXNjYXBlIixyW3IuU3BhY2U9MTBdPSJTcGFjZSIscltyLlBhZ2VVcD0xMV09IlBhZ2VVcCIscltyLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLHJbci5FbmQ9MTNdPSJFbmQiLHJbci5Ib21lPTE0XT0iSG9tZSIscltyLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIscltyLlVwQXJyb3c9MTZdPSJVcEFycm93IixyW3IuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLHJbci5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLHJbci5JbnNlcnQ9MTldPSJJbnNlcnQiLHJbci5EZWxldGU9MjBdPSJEZWxldGUiLHJbci5EaWdpdDA9MjFdPSJEaWdpdDAiLHJbci5EaWdpdDE9MjJdPSJEaWdpdDEiLHJbci5EaWdpdDI9MjNdPSJEaWdpdDIiLHJbci5EaWdpdDM9MjRdPSJEaWdpdDMiLHJbci5EaWdpdDQ9MjVdPSJEaWdpdDQiLHJbci5EaWdpdDU9MjZdPSJEaWdpdDUiLHJbci5EaWdpdDY9MjddPSJEaWdpdDYiLHJbci5EaWdpdDc9MjhdPSJEaWdpdDciLHJbci5EaWdpdDg9MjldPSJEaWdpdDgiLHJbci5EaWdpdDk9MzBdPSJEaWdpdDkiLHJbci5LZXlBPTMxXT0iS2V5QSIscltyLktleUI9MzJdPSJLZXlCIixyW3IuS2V5Qz0zM109IktleUMiLHJbci5LZXlEPTM0XT0iS2V5RCIscltyLktleUU9MzVdPSJLZXlFIixyW3IuS2V5Rj0zNl09IktleUYiLHJbci5LZXlHPTM3XT0iS2V5RyIscltyLktleUg9MzhdPSJLZXlIIixyW3IuS2V5ST0zOV09IktleUkiLHJbci5LZXlKPTQwXT0iS2V5SiIscltyLktleUs9NDFdPSJLZXlLIixyW3IuS2V5TD00Ml09IktleUwiLHJbci5LZXlNPTQzXT0iS2V5TSIscltyLktleU49NDRdPSJLZXlOIixyW3IuS2V5Tz00NV09IktleU8iLHJbci5LZXlQPTQ2XT0iS2V5UCIscltyLktleVE9NDddPSJLZXlRIixyW3IuS2V5Uj00OF09IktleVIiLHJbci5LZXlTPTQ5XT0iS2V5UyIscltyLktleVQ9NTBdPSJLZXlUIixyW3IuS2V5VT01MV09IktleVUiLHJbci5LZXlWPTUyXT0iS2V5ViIscltyLktleVc9NTNdPSJLZXlXIixyW3IuS2V5WD01NF09IktleVgiLHJbci5LZXlZPTU1XT0iS2V5WSIscltyLktleVo9NTZdPSJLZXlaIixyW3IuTWV0YT01N109Ik1ldGEiLHJbci5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixyW3IuRjE9NTldPSJGMSIscltyLkYyPTYwXT0iRjIiLHJbci5GMz02MV09IkYzIixyW3IuRjQ9NjJdPSJGNCIscltyLkY1PTYzXT0iRjUiLHJbci5GNj02NF09IkY2IixyW3IuRjc9NjVdPSJGNyIscltyLkY4PTY2XT0iRjgiLHJbci5GOT02N109IkY5IixyW3IuRjEwPTY4XT0iRjEwIixyW3IuRjExPTY5XT0iRjExIixyW3IuRjEyPTcwXT0iRjEyIixyW3IuRjEzPTcxXT0iRjEzIixyW3IuRjE0PTcyXT0iRjE0IixyW3IuRjE1PTczXT0iRjE1IixyW3IuRjE2PTc0XT0iRjE2IixyW3IuRjE3PTc1XT0iRjE3IixyW3IuRjE4PTc2XT0iRjE4IixyW3IuRjE5PTc3XT0iRjE5IixyW3IuTnVtTG9jaz03OF09Ik51bUxvY2siLHJbci5TY3JvbGxMb2NrPTc5XT0iU2Nyb2xsTG9jayIscltyLlNlbWljb2xvbj04MF09IlNlbWljb2xvbiIscltyLkVxdWFsPTgxXT0iRXF1YWwiLHJbci5Db21tYT04Ml09IkNvbW1hIixyW3IuTWludXM9ODNdPSJNaW51cyIscltyLlBlcmlvZD04NF09IlBlcmlvZCIscltyLlNsYXNoPTg1XT0iU2xhc2giLHJbci5CYWNrcXVvdGU9ODZdPSJCYWNrcXVvdGUiLHJbci5CcmFja2V0TGVmdD04N109IkJyYWNrZXRMZWZ0IixyW3IuQmFja3NsYXNoPTg4XT0iQmFja3NsYXNoIixyW3IuQnJhY2tldFJpZ2h0PTg5XT0iQnJhY2tldFJpZ2h0IixyW3IuUXVvdGU9OTBdPSJRdW90ZSIscltyLk9FTV84PTkxXT0iT0VNXzgiLHJbci5JbnRsQmFja3NsYXNoPTkyXT0iSW50bEJhY2tzbGFzaCIscltyLk51bXBhZDA9OTNdPSJOdW1wYWQwIixyW3IuTnVtcGFkMT05NF09Ik51bXBhZDEiLHJbci5OdW1wYWQyPTk1XT0iTnVtcGFkMiIscltyLk51bXBhZDM9OTZdPSJOdW1wYWQzIixyW3IuTnVtcGFkND05N109Ik51bXBhZDQiLHJbci5OdW1wYWQ1PTk4XT0iTnVtcGFkNSIscltyLk51bXBhZDY9OTldPSJOdW1wYWQ2IixyW3IuTnVtcGFkNz0xMDBdPSJOdW1wYWQ3IixyW3IuTnVtcGFkOD0xMDFdPSJOdW1wYWQ4IixyW3IuTnVtcGFkOT0xMDJdPSJOdW1wYWQ5IixyW3IuTnVtcGFkTXVsdGlwbHk9MTAzXT0iTnVtcGFkTXVsdGlwbHkiLHJbci5OdW1wYWRBZGQ9MTA0XT0iTnVtcGFkQWRkIixyW3IuTlVNUEFEX1NFUEFSQVRPUj0xMDVdPSJOVU1QQURfU0VQQVJBVE9SIixyW3IuTnVtcGFkU3VidHJhY3Q9MTA2XT0iTnVtcGFkU3VidHJhY3QiLHJbci5OdW1wYWREZWNpbWFsPTEwN109Ik51bXBhZERlY2ltYWwiLHJbci5OdW1wYWREaXZpZGU9MTA4XT0iTnVtcGFkRGl2aWRlIixyW3IuS0VZX0lOX0NPTVBPU0lUSU9OPTEwOV09IktFWV9JTl9DT01QT1NJVElPTiIscltyLkFCTlRfQzE9MTEwXT0iQUJOVF9DMSIscltyLkFCTlRfQzI9MTExXT0iQUJOVF9DMiIscltyLkF1ZGlvVm9sdW1lTXV0ZT0xMTJdPSJBdWRpb1ZvbHVtZU11dGUiLHJbci5BdWRpb1ZvbHVtZVVwPTExM109IkF1ZGlvVm9sdW1lVXAiLHJbci5BdWRpb1ZvbHVtZURvd249MTE0XT0iQXVkaW9Wb2x1bWVEb3duIixyW3IuQnJvd3NlclNlYXJjaD0xMTVdPSJCcm93c2VyU2VhcmNoIixyW3IuQnJvd3NlckhvbWU9MTE2XT0iQnJvd3NlckhvbWUiLHJbci5Ccm93c2VyQmFjaz0xMTddPSJCcm93c2VyQmFjayIscltyLkJyb3dzZXJGb3J3YXJkPTExOF09IkJyb3dzZXJGb3J3YXJkIixyW3IuTWVkaWFUcmFja05leHQ9MTE5XT0iTWVkaWFUcmFja05leHQiLHJbci5NZWRpYVRyYWNrUHJldmlvdXM9MTIwXT0iTWVkaWFUcmFja1ByZXZpb3VzIixyW3IuTWVkaWFTdG9wPTEyMV09Ik1lZGlhU3RvcCIscltyLk1lZGlhUGxheVBhdXNlPTEyMl09Ik1lZGlhUGxheVBhdXNlIixyW3IuTGF1bmNoTWVkaWFQbGF5ZXI9MTIzXT0iTGF1bmNoTWVkaWFQbGF5ZXIiLHJbci5MYXVuY2hNYWlsPTEyNF09IkxhdW5jaE1haWwiLHJbci5MYXVuY2hBcHAyPTEyNV09IkxhdW5jaEFwcDIiLHJbci5DbGVhcj0xMjZdPSJDbGVhciIscltyLk1BWF9WQUxVRT0xMjddPSJNQVhfVkFMVUUiLCgkbj1Ebj1Ebnx8e30pWyRuLlRyYWNlPTBdPSJUcmFjZSIsJG5bJG4uRGVidWc9MV09IkRlYnVnIiwkblskbi5JbmZvPTJdPSJJbmZvIiwkblskbi5XYXJuaW5nPTNdPSJXYXJuaW5nIiwkblskbi5FcnJvcj00XT0iRXJyb3IiLCRuWyRuLkNyaXRpY2FsPTVdPSJDcml0aWNhbCIsJG5bJG4uT2ZmPTZdPSJPZmYiLChlPXVuPXVufHx7fSlbZS5QYXJhZ3JhcGg9MF09IlBhcmFncmFwaCIsZVtlLkJyZWFrPTFdPSJCcmVhayIsKHQ9Q249Q258fHt9KVt0LkhpbnQ9MV09IkhpbnQiLHRbdC5JbmZvPTJdPSJJbmZvIix0W3QuV2FybmluZz00XT0iV2FybmluZyIsdFt0LkVycm9yPThdPSJFcnJvciIsKG49SW49SW58fHt9KVtuLlVubmVjZXNzYXJ5PTFdPSJVbm5lY2Vzc2FyeSIsbltuLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQiLCgkbj1tbj1tbnx8e30pWyRuLkxUUj0wXT0iTFRSIiwkblskbi5SVEw9MV09IlJUTCI7Y2xhc3MgWnR7Y29uc3RydWN0b3IoKXt0aGlzW0J0XT0iTGlua2VkTWFwIix0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGU9MH1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZSsrfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5faGVhZCYmIXRoaXMuX3RhaWx9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1nZXQgZmlyc3QoKXt2YXIgZTtyZXR1cm4gbnVsbD09PShlPXRoaXMuX2hlYWQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnZhbHVlfWdldCBsYXN0KCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT10aGlzLl90YWlsKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS52YWx1ZX1oYXMoZSl7cmV0dXJuIHRoaXMuX21hcC5oYXMoZSl9Z2V0KGUsdD0wKXtlPXRoaXMuX21hcC5nZXQoZSk7aWYoZSlyZXR1cm4gMCE9PXQmJnRoaXMudG91Y2goZSx0KSxlLnZhbHVlfXNldChlLHQscj0wKXtsZXQgbj10aGlzLl9tYXAuZ2V0KGUpO2lmKG4pbi52YWx1ZT10LDAhPT1yJiZ0aGlzLnRvdWNoKG4scik7ZWxzZXtzd2l0Y2gobj17a2V5OmUsdmFsdWU6dCxuZXh0OnZvaWQgMCxwcmV2aW91czp2b2lkIDB9LHIpe2Nhc2UgMDp0aGlzLmFkZEl0ZW1MYXN0KG4pO2JyZWFrO2Nhc2UgMTp0aGlzLmFkZEl0ZW1GaXJzdChuKTticmVhaztkZWZhdWx0OnRoaXMuYWRkSXRlbUxhc3Qobil9dGhpcy5fbWFwLnNldChlLG4pLHRoaXMuX3NpemUrK31yZXR1cm4gdGhpc31kZWxldGUoZSl7cmV0dXJuISF0aGlzLnJlbW92ZShlKX1yZW1vdmUoZSl7dmFyIHQ9dGhpcy5fbWFwLmdldChlKTtpZih0KXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKGUpLHRoaXMucmVtb3ZlSXRlbSh0KSx0aGlzLl9zaXplLS0sdC52YWx1ZX1zaGlmdCgpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3ZhciBlPXRoaXMuX2hlYWQ7cmV0dXJuIHRoaXMuX21hcC5kZWxldGUoZS5rZXkpLHRoaXMucmVtb3ZlSXRlbShlKSx0aGlzLl9zaXplLS0sZS52YWx1ZX19Zm9yRWFjaChlLHQpe3ZhciByPXRoaXMuX3N0YXRlO2xldCBuPXRoaXMuX2hlYWQ7Zm9yKDtuOyl7aWYoKHQ/ZS5iaW5kKHQpOmUpKG4udmFsdWUsbi5rZXksdGhpcyksdGhpcy5fc3RhdGUhPT1yKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO249bi5uZXh0fX1rZXlzKCl7Y29uc3QgdD10aGlzLHI9dGhpcy5fc3RhdGU7bGV0IG49dGhpcy5faGVhZDtjb25zdCBlPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBlfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1yKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO3ZhciBlO3JldHVybiBuPyhlPXt2YWx1ZTpuLmtleSxkb25lOiExfSxuPW4ubmV4dCxlKTp7dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGV9dmFsdWVzKCl7Y29uc3QgdD10aGlzLHI9dGhpcy5fc3RhdGU7bGV0IG49dGhpcy5faGVhZDtjb25zdCBlPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBlfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1yKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO3ZhciBlO3JldHVybiBuPyhlPXt2YWx1ZTpuLnZhbHVlLGRvbmU6ITF9LG49bi5uZXh0LGUpOnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fTtyZXR1cm4gZX1lbnRyaWVzKCl7Y29uc3QgdD10aGlzLHI9dGhpcy5fc3RhdGU7bGV0IG49dGhpcy5faGVhZDtjb25zdCBlPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBlfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1yKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO3ZhciBlO3JldHVybiBuPyhlPXt2YWx1ZTpbbi5rZXksbi52YWx1ZV0sZG9uZTohMX0sbj1uLm5leHQsZSk6e3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiBlfVsoQnQ9U3ltYm9sLnRvU3RyaW5nVGFnLFN5bWJvbC5pdGVyYXRvcildKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfXRyaW1PbGQocil7aWYoIShyPj10aGlzLnNpemUpKWlmKDAhPT1yKXtsZXQgZT10aGlzLl9oZWFkLHQ9dGhpcy5zaXplO2Zvcig7ZSYmdD5yOyl0aGlzLl9tYXAuZGVsZXRlKGUua2V5KSxlPWUubmV4dCx0LS07dGhpcy5faGVhZD1lLHRoaXMuX3NpemU9dCxlJiYoZS5wcmV2aW91cz12b2lkIDApLHRoaXMuX3N0YXRlKyt9ZWxzZSB0aGlzLmNsZWFyKCl9YWRkSXRlbUZpcnN0KGUpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl9oZWFkKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz1lfWVsc2UgdGhpcy5fdGFpbD1lO3RoaXMuX2hlYWQ9ZSx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1MYXN0KGUpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD1lfWVsc2UgdGhpcy5faGVhZD1lO3RoaXMuX3RhaWw9ZSx0aGlzLl9zdGF0ZSsrfXJlbW92ZUl0ZW0oZSl7aWYoZT09PXRoaXMuX2hlYWQmJmU9PT10aGlzLl90YWlsKXRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwO2Vsc2UgaWYoZT09PXRoaXMuX2hlYWQpe2lmKCFlLm5leHQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtlLm5leHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9ZS5uZXh0fWVsc2UgaWYoZT09PXRoaXMuX3RhaWwpe2lmKCFlLnByZXZpb3VzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5wcmV2aW91cy5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPWUucHJldmlvdXN9ZWxzZXtjb25zdCB0PWUubmV4dCxyPWUucHJldmlvdXM7aWYoIXR8fCFyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7KHQucHJldmlvdXM9cikubmV4dD10fWUubmV4dD12b2lkIDAsZS5wcmV2aW91cz12b2lkIDAsdGhpcy5fc3RhdGUrK310b3VjaChlLHQpe2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2lmKDE9PT10fHwyPT09dClpZigxPT09dCl7aWYoZSE9PXRoaXMuX2hlYWQpe2NvbnN0IHI9ZS5uZXh0LG49ZS5wcmV2aW91cztlPT09dGhpcy5fdGFpbD8obi5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPW4pOihyLnByZXZpb3VzPW4pLm5leHQ9cixlLnByZXZpb3VzPXZvaWQgMCxlLm5leHQ9dGhpcy5faGVhZCx0aGlzLl9oZWFkLnByZXZpb3VzPWUsdGhpcy5faGVhZD1lLHRoaXMuX3N0YXRlKyt9fWVsc2UgaWYoMj09PXQmJmUhPT10aGlzLl90YWlsKXtjb25zdCBpPWUubmV4dCxvPWUucHJldmlvdXM7ZT09PXRoaXMuX2hlYWQ/KGkucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9aSk6KGkucHJldmlvdXM9bykubmV4dD1pLGUubmV4dD12b2lkIDAsZS5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD1lLHRoaXMuX3RhaWw9ZSx0aGlzLl9zdGF0ZSsrfX10b0pTT04oKXtjb25zdCByPVtdO3JldHVybiB0aGlzLmZvckVhY2goKGUsdCk9PntyLnB1c2goW3QsZV0pfSkscn1mcm9tSlNPTihlKXt0aGlzLmNsZWFyKCk7Zm9yKHZhclt0LHJdb2YgZSl0aGlzLnNldCh0LHIpfX1mdW5jdGlvbiBYdChlLHQscil7aWYoIXJ8fHIubGVuZ3RoPHQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuO3ZhciBpLG87cmV0dXJuKG49ZT8oZT1yLG89KGk9dCkubGVuZ3RoLCEoaS5sZW5ndGg+ZS5sZW5ndGgpJiYwPT09cmUoZSxpLDAsbykpOjA9PT1yLmluZGV4T2YodCkpPzA8dC5sZW5ndGg/W3tzdGFydDowLGVuZDp0Lmxlbmd0aH1dOltdOm51bGx9WHQuYmluZCh2b2lkIDAsITEpLFh0LmJpbmQodm9pZCAwLCEwKTtjb25zdCBRdD1uZXcgU2V0OyIoKVtde308PmAnXCItLzs6LC4/ISIuc3BsaXQoIiIpLmZvckVhY2goZT0+UXQuYWRkKGUuY2hhckNvZGVBdCgwKSkpLG5ldyBjbGFzcyBleHRlbmRzIFp0e2NvbnN0cnVjdG9yKGUsdD0xKXtzdXBlcigpLHRoaXMuX2xpbWl0PWUsdGhpcy5fcmF0aW89TWF0aC5taW4oTWF0aC5tYXgoMCx0KSwxKX1nZXQgbGltaXQoKXtyZXR1cm4gdGhpcy5fbGltaXR9c2V0IGxpbWl0KGUpe3RoaXMuX2xpbWl0PWUsdGhpcy5jaGVja1RyaW0oKX1nZXQoZSx0PTIpe3JldHVybiBzdXBlci5nZXQoZSx0KX1wZWVrKGUpe3JldHVybiBzdXBlci5nZXQoZSwwKX1zZXQoZSx0KXtyZXR1cm4gc3VwZXIuc2V0KGUsdCwyKSx0aGlzLmNoZWNrVHJpbSgpLHRoaXN9Y2hlY2tUcmltKCl7dGhpcy5zaXplPnRoaXMuX2xpbWl0JiZ0aGlzLnRyaW1PbGQoTWF0aC5yb3VuZCh0aGlzLl9saW1pdCp0aGlzLl9yYXRpbykpfX0oMWU0KTtmdW5jdGlvbiBZdCgpe2NvbnN0IHQ9W10scj1bXTtmb3IobGV0IGU9MDtlPD0xMjg7ZSsrKXJbZV09MDtmb3IobGV0IGU9MDtlPD0xMjg7ZSsrKXQucHVzaChyLnNsaWNlKDApKTtyZXR1cm4gdH1mdW5jdGlvbiBlcih0KXtjb25zdCByPVtdO2ZvcihsZXQgZT0wO2U8PXQ7ZSsrKXJbZV09MDtyZXR1cm4gcn1lcigyNTYpLGVyKDI1NiksWXQoKSxZdCgpLFl0KCk7dmFyIHRyLHJyLG5yLGU9bmV3IFJlZ0V4cChgXFwkXFwoJHtIbi5pY29uTmFtZUV4cHJlc3Npb259KD86JHtIbi5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/XFwpYCwiZyIpO25ldyBSZWdFeHAoSG4uaWNvbk5hbWVDaGFyYWN0ZXIpO2NvbnN0IGlyPW5ldyBSZWdFeHAoIihcXFxcKT8iK2Uuc291cmNlLCJnIik7bmV3IFJlZ0V4cCgiXFxcXCIrZS5zb3VyY2UsImciKSxuZXcgUmVnRXhwKGAoXFxzKT8oXFxcXCk/JHtlLnNvdXJjZX0oXFxzKT9gLCJnIik7Y2xhc3Mgb3J7Y29uc3RydWN0b3IoZT0iIix0PSExKXtpZih0aGlzLnZhbHVlPWUsInN0cmluZyIhPXR5cGVvZiB0aGlzLnZhbHVlKXRocm93KGU9InZhbHVlIik/bmV3IEVycm9yKCJJbGxlZ2FsIGFyZ3VtZW50OiAiK2UpOm5ldyBFcnJvcigiSWxsZWdhbCBhcmd1bWVudCIpOyJib29sZWFuIj09dHlwZW9mIHQ/KHRoaXMuaXNUcnVzdGVkPXQsdGhpcy5zdXBwb3J0VGhlbWVJY29ucz0hMSx0aGlzLnN1cHBvcnRIdG1sPSExKToodGhpcy5pc1RydXN0ZWQ9bnVsbCE9PShlPXQuaXNUcnVzdGVkKSYmdm9pZCAwIT09ZT9lOnZvaWQgMCx0aGlzLnN1cHBvcnRUaGVtZUljb25zPW51bGwhPT0oZT10LnN1cHBvcnRUaGVtZUljb25zKSYmdm9pZCAwIT09ZSYmZSx0aGlzLnN1cHBvcnRIdG1sPW51bGwhPT0oZT10LnN1cHBvcnRIdG1sKSYmdm9pZCAwIT09ZSYmZSl9YXBwZW5kVGV4dChlLHQ9MCl7cmV0dXJuIHRoaXMudmFsdWUrPSh0aGlzLnN1cHBvcnRUaGVtZUljb25zP2UucmVwbGFjZShpciwoZSx0KT0+dD9lOiJcXCIrZSk6ZSkucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0hXS9nLCJcXCQmIikucmVwbGFjZSgvKFsgXHRdKykvZywoZSx0KT0+IiZuYnNwOyIucmVwZWF0KHQubGVuZ3RoKSkucmVwbGFjZSgvXD4vZ20sIlxcPiIpLnJlcGxhY2UoL1xuL2csMT09PXQ/IlxcXG4iOiJcblxuIiksdGhpc31hcHBlbmRNYXJrZG93bihlKXtyZXR1cm4gdGhpcy52YWx1ZSs9ZSx0aGlzfWFwcGVuZENvZGVibG9jayhlLHQpe3JldHVybiB0aGlzLnZhbHVlKz0iXG5gYGAiLHRoaXMudmFsdWUrPWUsdGhpcy52YWx1ZSs9IlxuIix0aGlzLnZhbHVlKz10LHRoaXMudmFsdWUrPSJcbmBgYFxuIix0aGlzfX1mdW5jdGlvbiBhcihlKXtpZih0ci5zZXJ2aWNlSWRzLmhhcyhlKSlyZXR1cm4gdHIuc2VydmljZUlkcy5nZXQoZSk7ZnVuY3Rpb24gaShlLHQscil7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJASVNlcnZpY2VOYW1lLWRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIHRvIGRlY29yYXRlIGEgcGFyYW1ldGVyIik7dmFyIG47bj1pLHI9ciwoZT1lKVt0ci5ESV9UQVJHRVRdPT09ZT9lW3RyLkRJX0RFUEVOREVOQ0lFU10ucHVzaCh7aWQ6bixpbmRleDpyfSk6KGVbdHIuRElfREVQRU5ERU5DSUVTXT1be2lkOm4saW5kZXg6cn1dLGVbdHIuRElfVEFSR0VUXT1lKX1yZXR1cm4gaS50b1N0cmluZz0oKT0+ZSx0ci5zZXJ2aWNlSWRzLnNldChlLGkpLGksMX0ocnI9dHI9dHJ8fHt9KS5zZXJ2aWNlSWRzPW5ldyBNYXAscnIuRElfVEFSR0VUPSIkZGkkdGFyZ2V0Iixyci5ESV9ERVBFTkRFTkNJRVM9IiRkaSRkZXBlbmRlbmNpZXMiLHJyLmdldFNlcnZpY2VEZXBlbmRlbmNpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbcnIuRElfREVQRU5ERU5DSUVTXXx8W119LGFyKCJpbnN0YW50aWF0aW9uU2VydmljZSIpLGFyKCJsb2dTZXJ2aWNlIiksYXIoImxvZ2dlclNlcnZpY2UiKSwodD1ucj1ucnx8e30pW3QuVHJhY2U9MF09IlRyYWNlIix0W3QuRGVidWc9MV09IkRlYnVnIix0W3QuSW5mbz0yXT0iSW5mbyIsdFt0Lldhcm5pbmc9M109Ildhcm5pbmciLHRbdC5FcnJvcj00XT0iRXJyb3IiLHRbdC5Dcml0aWNhbD01XT0iQ3JpdGljYWwiLHRbdC5PZmY9Nl09Ik9mZiI7Y29uc3Qgc3I9bnIuSW5mbztjbGFzcyBsciBleHRlbmRzIEN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubGV2ZWw9c3IsdGhpcy5fb25EaWRDaGFuZ2VMb2dMZXZlbD10aGlzLl9yZWdpc3RlcihuZXcgUSksdGhpcy5vbkRpZENoYW5nZUxvZ0xldmVsPXRoaXMuX29uRGlkQ2hhbmdlTG9nTGV2ZWwuZXZlbnR9c2V0TGV2ZWwoZSl7dGhpcy5sZXZlbCE9PWUmJih0aGlzLmxldmVsPWUsdGhpcy5fb25EaWRDaGFuZ2VMb2dMZXZlbC5maXJlKHRoaXMubGV2ZWwpKX1nZXRMZXZlbCgpe3JldHVybiB0aGlzLmxldmVsfX1jbGFzcyBjciBleHRlbmRzIGxye2NvbnN0cnVjdG9yKGU9c3Ipe3N1cGVyKCksdGhpcy5zZXRMZXZlbChlKX10cmFjZShlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9bnIuVHJhY2UmJmNvbnNvbGUubG9nKCIlY1RSQUNFIiwiY29sb3I6ICM4ODgiLGUsLi4udCl9ZGVidWcoZSwuLi50KXt0aGlzLmdldExldmVsKCk8PW5yLkRlYnVnJiZjb25zb2xlLmxvZygiJWNERUJVRyIsImJhY2tncm91bmQ6ICNlZWU7IGNvbG9yOiAjODg4IixlLC4uLnQpfWluZm8oZSwuLi50KXt0aGlzLmdldExldmVsKCk8PW5yLkluZm8mJmNvbnNvbGUubG9nKCIlYyBJTkZPIiwiY29sb3I6ICMzM2YiLGUsLi4udCl9d2FybihlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9bnIuV2FybmluZyYmY29uc29sZS5sb2coIiVjIFdBUk4iLCJjb2xvcjogIzk5MyIsZSwuLi50KX1lcnJvcihlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9bnIuRXJyb3ImJmNvbnNvbGUubG9nKCIlYyAgRVJSIiwiY29sb3I6ICNmMzMiLGUsLi4udCl9Y3JpdGljYWwoZSwuLi50KXt0aGlzLmdldExldmVsKCk8PW5yLkNyaXRpY2FsJiZjb25zb2xlLmxvZygiJWNDUklUSSIsImJhY2tncm91bmQ6ICNmMzM7IGNvbG9yOiB3aGl0ZSIsZSwuLi50KX1kaXNwb3NlKCl7fWZsdXNoKCl7fX1jbGFzcyB1cntzdGF0aWMgY2hvcmQoZSx0KXtyZXR1cm4oZXwoNjU1MzUmdCk8PDE2Pj4+MCk+Pj4wfX1mdW5jdGlvbiBocihlLHQscixuLGkpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtpZigwPT09cilyZXR1cm4gMTt2YXIgaT10LmNoYXJDb2RlQXQoci0xKTtpZigwIT09ZS5nZXQoaSkpcmV0dXJuIDE7aWYoMTM9PT1pfHwxMD09PWkpcmV0dXJuIDE7aWYoMDxuKXtpPXQuY2hhckNvZGVBdChyKTtpZigwIT09ZS5nZXQoaSkpcmV0dXJuIDF9cmV0dXJufShlLHQsbixpKSYmZnVuY3Rpb24oZSx0LHIsbixpKXtpZihuK2k9PT1yKXJldHVybiAxO2lmKHI9dC5jaGFyQ29kZUF0KG4raSksMCE9PWUuZ2V0KHIpKXJldHVybiAxO2lmKDEzPT09cnx8MTA9PT1yKXJldHVybiAxO2lmKDA8aSl7cj10LmNoYXJDb2RlQXQobitpLTEpO2lmKDAhPT1lLmdldChyKSlyZXR1cm4gMX1yZXR1cm59KGUsdCxyLG4saSl9dXIuQ3RybENtZD0yMDQ4LHVyLlNoaWZ0PTEwMjQsdXIuQWx0PTUxMix1ci5XaW5DdHJsPTI1NjtjbGFzcyBmcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3dvcmRTZXBhcmF0b3JzPWUsdGhpcy5fc2VhcmNoUmVnZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KGUpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD1lLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dChlKXt2YXIgdD1lLmxlbmd0aDtsZXQgcjtkb3tpZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4K3RoaXMuX3ByZXZNYXRjaExlbmd0aD09PXQpcmV0dXJuIG51bGw7aWYoIShyPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWMoZSkpKXJldHVybiBudWxsO3ZhciBuPXIuaW5kZXgsaT1yWzBdLmxlbmd0aDtpZihuIT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleHx8aSE9PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1uLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1pLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8aHIodGhpcy5fd29yZFNlcGFyYXRvcnMsZSx0LG4saSkpcmV0dXJuIHJ9ZWxzZXtpZigwIT09aSlyZXR1cm4gbnVsbDs2NTUzNTxmdW5jdGlvbihlLHQscil7dmFyIG49ZS5jaGFyQ29kZUF0KHIpO2lmKG9lKG4pJiZyKzE8dCl7dD1lLmNoYXJDb2RlQXQocisxKTtpZig1NjMyMDw9KGU9dCkmJmU8PTU3MzQzKXJldHVybiB0LTU2MzIwKyhuLTU1Mjk2PDwxMCkrNjU1MzZ9cmV0dXJuIG59KGUsdCx0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpP3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTF9fXdoaWxlKHIpO3JldHVybiBudWxsfX1jbGFzcyBkcntzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQsdSxlKXt2YXIgaD1lP2Uuc3RhcnRMaW5lTnVtYmVyOjEsZj1lP2UuZW5kTGluZU51bWJlcjp0LmdldExpbmVDb3VudCgpO2NvbnN0IG49bmV3IG1yKHUpO3ZhciBpLGU9bi5nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCk7bGV0IHI7cj0iYWxsTm9uQmFzaWNBc2NpaSI9PT1lP25ldyBSZWdFeHAoIlteXFx0XFxuXFxyXFx4MjAtXFx4N0VdIiwiZyIpOm5ldyBSZWdFeHAoIiIrZnVuY3Rpb24oZSl7ZT1gWyR7ZS5tYXAoZT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpLmpvaW4oIiIpLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9XWA7cmV0dXJuIGV9KEFycmF5LmZyb20oZSkpLCJnIik7Y29uc3Qgbz1uZXcgZnIobnVsbCxyKSxhPVtdO2xldCBkPSExLG09MCxnPTAscD0wO2U6Zm9yKGxldCByPWgsZT1mO3I8PWU7cisrKXtjb25zdCBjPXQuZ2V0TGluZUNvbnRlbnQocik7dmFyIGI9Yy5sZW5ndGg7by5yZXNldCgwKTtkb3tpZihpPW8ubmV4dChjKSl7bGV0IGU9aS5pbmRleCx0PWkuaW5kZXgraVswXS5sZW5ndGg7MDxlJiZvZShjLmNoYXJDb2RlQXQoZS0xKSkmJmUtLSx0KzE8YiYmb2UoYy5jaGFyQ29kZUF0KHQtMSkpJiZ0Kys7dmFyIHM9Yy5zdWJzdHJpbmcoZSx0KSxsPUN0KGUrMSx2dCxjLDApLHM9bi5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKHMsbD9sLndvcmQ6bnVsbCk7aWYoMCE9PXMpe2lmKDM9PT1zKW0rKztlbHNlIGlmKDI9PT1zKWcrKztlbHNle2lmKDEhPT1zKXRocm93IGw9dm9pZCAwLFtsPSJVbnJlYWNoYWJsZSJdPVtdLG5ldyBFcnJvcihsKTtwKyt9aWYoMWUzPD1hLmxlbmd0aCl7ZD0hMDticmVhayBlfWEucHVzaChuZXcgaXQocixlKzEscix0KzEpKX19fXdoaWxlKGkpfXJldHVybntyYW5nZXM6YSxoYXNNb3JlOmQsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6bSxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDpnLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDpwfX1zdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRSZWFzb24oZSx0KXtjb25zdCByPW5ldyBtcih0KTtzd2l0Y2goci5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKGUsbnVsbCkpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDI6cmV0dXJue2tpbmQ6MX07Y2FzZSAzOntjb25zdCBvPWUuY29kZVBvaW50QXQoMCk7dmFyIG49ci5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKG8pLGk9c2UuZ2V0TG9jYWxlcygpLmZpbHRlcihlPT4hc2UuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4udC5hbGxvd2VkTG9jYWxlcyxlXSkpLmlzQW1iaWd1b3VzKG8pKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KG4pLG5vdEFtYmlndW91c0luTG9jYWxlczppfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX1jbGFzcyBtcntjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLmFsbG93ZWRDb2RlUG9pbnRzPW5ldyBTZXQoZS5hbGxvd2VkQ29kZVBvaW50cyksdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzPXNlLmdldEluc3RhbmNlKG5ldyBTZXQoZS5hbGxvd2VkTG9jYWxlcykpfWdldENhbmRpZGF0ZUNvZGVQb2ludHMoKXtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4iYWxsTm9uQmFzaWNBc2NpaSI7Y29uc3QgZT1uZXcgU2V0O2lmKHRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzKWZvcihjb25zdCB0IG9mIGxlLmNvZGVQb2ludHMpZ3IoU3RyaW5nLmZyb21Db2RlUG9pbnQodCkpfHxlLmFkZCh0KTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgciBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSllLmFkZChyKTtmb3IoY29uc3QgbiBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKWUuZGVsZXRlKG4pO3JldHVybiBlfXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSx0KXtjb25zdCByPWUuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMocikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IG49ITEsaT0hMTtpZih0KWZvcih2YXIgbyBvZiB0KXtjb25zdCByPW8uY29kZVBvaW50QXQoMCk7bz1vO289YWUudGVzdChvKTtuPW58fG8sb3x8dGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHIpfHxsZS5pc0ludmlzaWJsZUNoYXJhY3RlcihyKXx8KGk9ITApfXJldHVybiFuJiZpPzA6dGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMmJiFncihlKSYmbGUuaXNJbnZpc2libGVDaGFyYWN0ZXIocik/Mjp0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycyYmdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHIpPzM6MH19ZnVuY3Rpb24gZ3IoZSl7cmV0dXJuIiAiPT09ZXx8IlxuIj09PWV8fCJcdCI9PT1lfXZhciBwcixicj1mdW5jdGlvbihlLGEscyxsKXtyZXR1cm4gbmV3KHM9c3x8UHJvbWlzZSkoZnVuY3Rpb24ocix0KXtmdW5jdGlvbiBuKGUpe3RyeXtvKGwubmV4dChlKSl9Y2F0Y2goZSl7dChlKX19ZnVuY3Rpb24gaShlKXt0cnl7byhsLnRocm93KGUpKX1jYXRjaChlKXt0KGUpfX1mdW5jdGlvbiBvKGUpe3ZhciB0O2UuZG9uZT9yKGUudmFsdWUpOigodD1lLnZhbHVlKWluc3RhbmNlb2Ygcz90Om5ldyBzKGZ1bmN0aW9uKGUpe2UodCl9KSkudGhlbihuLGkpfW8oKGw9bC5hcHBseShlLGF8fFtdKSkubmV4dCgpKX0pfTtjbGFzcyB2ciBleHRlbmRzIGNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMuX3VyaT1lLHRoaXMuX2xpbmVzPXQsdGhpcy5fZW9sPXIsdGhpcy5fdmVyc2lvbklkPW4sdGhpcy5fbGluZVN0YXJ0cz1udWxsLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9saW5lcy5sZW5ndGg9MH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9uSWR9Z2V0VGV4dCgpe3JldHVybiBudWxsPT09dGhpcy5fY2FjaGVkVGV4dFZhbHVlJiYodGhpcy5fY2FjaGVkVGV4dFZhbHVlPXRoaXMuX2xpbmVzLmpvaW4odGhpcy5fZW9sKSksdGhpcy5fY2FjaGVkVGV4dFZhbHVlfW9uRXZlbnRzKGUpe2UuZW9sJiZlLmVvbCE9PXRoaXMuX2VvbCYmKHRoaXMuX2VvbD1lLmVvbCx0aGlzLl9saW5lU3RhcnRzPW51bGwpO2Zvcihjb25zdCB0IG9mIGUuY2hhbmdlcyl0aGlzLl9hY2NlcHREZWxldGVSYW5nZSh0LnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBudCh0LnJhbmdlLnN0YXJ0TGluZU51bWJlcix0LnJhbmdlLnN0YXJ0Q29sdW1uKSx0LnRleHQpO3RoaXMuX3ZlcnNpb25JZD1lLnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXt2YXIgdD10aGlzLl9lb2wubGVuZ3RoLHI9dGhpcy5fbGluZXMubGVuZ3RoO2NvbnN0IG49bmV3IFVpbnQzMkFycmF5KHIpO2ZvcihsZXQgZT0wO2U8cjtlKyspbltlXT10aGlzLl9saW5lc1tlXS5sZW5ndGgrdDt0aGlzLl9saW5lU3RhcnRzPW5ldyBwdChuKX19X3NldExpbmVUZXh0KGUsdCl7dGhpcy5fbGluZXNbZV09dCx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnNldFZhbHVlKGUsdGhpcy5fbGluZXNbZV0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGgpfV9hY2NlcHREZWxldGVSYW5nZShlKXtpZihlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlcilyZXR1cm4gZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1uP3ZvaWQgMDp2b2lkIHRoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5lbmRDb2x1bW4tMSkpO3RoaXMuX3NldExpbmVUZXh0KGUuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1tlLmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKGUuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyhlLnN0YXJ0TGluZU51bWJlcixlLmVuZExpbmVOdW1iZXItZS5zdGFydExpbmVOdW1iZXIpfV9hY2NlcHRJbnNlcnRUZXh0KHQsZSl7aWYoMCE9PWUubGVuZ3RoKXtjb25zdCByPWUuc3BsaXQoL1xyXG58XHJ8XG4vKTtpZigxIT09ci5sZW5ndGgpe3Jbci5sZW5ndGgtMV0rPXRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSksdGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3JbMF0pO2NvbnN0IG49bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoLTEpO2ZvcihsZXQgZT0xO2U8ci5sZW5ndGg7ZSsrKXRoaXMuX2xpbmVzLnNwbGljZSh0LmxpbmVOdW1iZXIrZS0xLDAscltlXSksbltlLTFdPXJbZV0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGg7dGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5pbnNlcnRWYWx1ZXModC5saW5lTnVtYmVyLG4pfWVsc2UgdGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3JbMF0rdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSl9fX17Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGVvbCgpe3JldHVybiB0aGlzLl9lb2x9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRUZXh0KCl9Z2V0TGluZXNDb250ZW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLnNsaWNlKDApfWdldExpbmVDb3VudCgpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGh9Z2V0TGluZUNvbnRlbnQoZSl7cmV0dXJuIHRoaXMuX2xpbmVzW2UtMV19Z2V0V29yZEF0UG9zaXRpb24oZSx0KXt0PUN0KGUuY29sdW1uLGZ1bmN0aW9uKHQpe2xldCByPXZ0O2lmKHQmJnQgaW5zdGFuY2VvZiBSZWdFeHApaWYodC5nbG9iYWwpcj10O2Vsc2V7bGV0IGU9ImciO3QuaWdub3JlQ2FzZSYmKGUrPSJpIiksdC5tdWx0aWxpbmUmJihlKz0ibSIpLHQudW5pY29kZSYmKGUrPSJ1Iikscj1uZXcgUmVnRXhwKHQuc291cmNlLGUpfXJldHVybiByLmxhc3RJbmRleD0wLHJ9KHQpLHRoaXMuX2xpbmVzW2UubGluZU51bWJlci0xXSwwKTtyZXR1cm4gdD9uZXcgaXQoZS5saW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sZS5saW5lTnVtYmVyLHQuZW5kQ29sdW1uKTpudWxsfXdvcmRzKHQpe2NvbnN0IHI9dGhpcy5fbGluZXMsbj10aGlzLl93b3JkZW5pemUuYmluZCh0aGlzKTtsZXQgaT0wLG89IiIsYT0wLHM9W107cmV0dXJueypbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcig7OylpZihhPHMubGVuZ3RoKXt2YXIgZT1vLnN1YnN0cmluZyhzW2FdLnN0YXJ0LHNbYV0uZW5kKTthKz0xLHlpZWxkIGV9ZWxzZXtpZighKGk8ci5sZW5ndGgpKWJyZWFrO289cltpXSxzPW4obyx0KSxhPTAsaSs9MX19fX1nZXRMaW5lV29yZHMoZSx0KXtjb25zdCByPXRoaXMuX2xpbmVzW2UtMV07Y29uc3Qgbj1bXTtmb3IoY29uc3QgaSBvZiB0aGlzLl93b3JkZW5pemUocix0KSluLnB1c2goe3dvcmQ6ci5zdWJzdHJpbmcoaS5zdGFydCxpLmVuZCksc3RhcnRDb2x1bW46aS5zdGFydCsxLGVuZENvbHVtbjppLmVuZCsxfSk7cmV0dXJuIG59X3dvcmRlbml6ZShlLHQpe2NvbnN0IHI9W107dmFyIG47Zm9yKHQubGFzdEluZGV4PTA7KG49dC5leGVjKGUpKSYmMCE9PW5bMF0ubGVuZ3RoOylyLnB1c2goe3N0YXJ0Om4uaW5kZXgsZW5kOm4uaW5kZXgrblswXS5sZW5ndGh9KTtyZXR1cm4gcn1nZXRWYWx1ZUluUmFuZ2UoZSl7aWYoKGU9dGhpcy5fdmFsaWRhdGVSYW5nZShlKSkuc3RhcnRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyKXJldHVybiB0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoZS5zdGFydENvbHVtbi0xLGUuZW5kQ29sdW1uLTEpO3ZhciB0PXRoaXMuX2VvbCxyPWUuc3RhcnRMaW5lTnVtYmVyLTEsbj1lLmVuZExpbmVOdW1iZXItMTtjb25zdCBpPVtdO2kucHVzaCh0aGlzLl9saW5lc1tyXS5zdWJzdHJpbmcoZS5zdGFydENvbHVtbi0xKSk7Zm9yKGxldCBlPTErcjtlPG47ZSsrKWkucHVzaCh0aGlzLl9saW5lc1tlXSk7cmV0dXJuIGkucHVzaCh0aGlzLl9saW5lc1tuXS5zdWJzdHJpbmcoMCxlLmVuZENvbHVtbi0xKSksaS5qb2luKHQpfW9mZnNldEF0KGUpe3JldHVybiBlPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oZSksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpLHRoaXMuX2xpbmVTdGFydHMuZ2V0UHJlZml4U3VtKGUubGluZU51bWJlci0yKSsoZS5jb2x1bW4tMSl9cG9zaXRpb25BdChlKXtlPU1hdGguZmxvb3IoZSksZT1NYXRoLm1heCgwLGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKTt2YXIgZT10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YoZSksdD10aGlzLl9saW5lc1tlLmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MStlLmluZGV4LGNvbHVtbjoxK01hdGgubWluKGUucmVtYWluZGVyLHQpfX1fdmFsaWRhdGVSYW5nZShlKXt2YXIgdD10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOmUuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjplLnN0YXJ0Q29sdW1ufSkscj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOmUuZW5kTGluZU51bWJlcixjb2x1bW46ZS5lbmRDb2x1bW59KTtyZXR1cm4gdC5saW5lTnVtYmVyIT09ZS5zdGFydExpbmVOdW1iZXJ8fHQuY29sdW1uIT09ZS5zdGFydENvbHVtbnx8ci5saW5lTnVtYmVyIT09ZS5lbmRMaW5lTnVtYmVyfHxyLmNvbHVtbiE9PWUuZW5kQ29sdW1uP3tzdGFydExpbmVOdW1iZXI6dC5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnQuY29sdW1uLGVuZExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGVuZENvbHVtbjpyLmNvbHVtbn06ZX1fdmFsaWRhdGVQb3NpdGlvbihlKXtpZighbnQuaXNJUG9zaXRpb24oZSkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9zaXRpb24iKTtsZXR7bGluZU51bWJlcjp0LGNvbHVtbjpyfT1lLG49ITE7dmFyIGk7cmV0dXJuIHQ8MT8odD0xLHI9MSxuPSEwKTp0PnRoaXMuX2xpbmVzLmxlbmd0aD8odD10aGlzLl9saW5lcy5sZW5ndGgscj10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLG49ITApOihpPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzEscjwxPyhyPTEsbj0hMCk6cj5pJiYocj1pLG49ITApKSxuP3tsaW5lTnVtYmVyOnQsY29sdW1uOnJ9OmV9fWNsYXNzIHlye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faG9zdD1lLHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PXQsdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwoZSl7cmV0dXJuIHRoaXMuX21vZGVsc1tlXX1fZ2V0TW9kZWxzKCl7Y29uc3QgdD1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKGU9PnQucHVzaCh0aGlzLl9tb2RlbHNbZV0pKSx0fWFjY2VwdE5ld01vZGVsKGUpe3RoaXMuX21vZGVsc1tlLnVybF09bmV3IHZyKHplLnBhcnNlKGUudXJsKSxlLmxpbmVzLGUuRU9MLGUudmVyc2lvbklkKX1hY2NlcHRNb2RlbENoYW5nZWQoZSx0KXtpZih0aGlzLl9tb2RlbHNbZV0pe2NvbnN0IHI9dGhpcy5fbW9kZWxzW2VdO3Iub25FdmVudHModCl9fWFjY2VwdFJlbW92ZWRNb2RlbChlKXt0aGlzLl9tb2RlbHNbZV0mJmRlbGV0ZSB0aGlzLl9tb2RlbHNbZV19Y29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQscixuKXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBlPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBlP2RyLmNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHIsbik6e3JhbmdlczpbXSxoYXNNb3JlOiExLGFtYmlndW91c0NoYXJhY3RlckNvdW50OjAsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6MCxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6MH19KX1jb21wdXRlRGlmZihvLGEscyxsKXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwobyksdD10aGlzLl9nZXRNb2RlbChhKTtpZighZXx8IXQpcmV0dXJuIG51bGw7dmFyIHI9ZS5nZXRMaW5lc0NvbnRlbnQoKSxuPXQuZ2V0TGluZXNDb250ZW50KCk7Y29uc3QgaT1uZXcgdXQocixuLHtzaG91bGRDb21wdXRlQ2hhckNoYW5nZXM6ITAsc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlczohMCxzaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZTpzLHNob3VsZE1ha2VQcmV0dHlEaWZmOiEwLG1heENvbXB1dGF0aW9uVGltZTpsfSk7cj1pLmNvbXB1dGVEaWZmKCksbj0hKDA8ci5jaGFuZ2VzLmxlbmd0aCkmJnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbChlLHQpO3JldHVybntxdWl0RWFybHk6ci5xdWl0RWFybHksaWRlbnRpY2FsOm4sY2hhbmdlczpyLmNoYW5nZXN9fSl9X21vZGVsc0FyZUlkZW50aWNhbCh0LHIpe3ZhciBuPXQuZ2V0TGluZUNvdW50KCk7aWYobiE9PXIuZ2V0TGluZUNvdW50KCkpcmV0dXJuITE7Zm9yKGxldCBlPTE7ZTw9bjtlKyspaWYodC5nZXRMaW5lQ29udGVudChlKSE9PXIuZ2V0TGluZUNvbnRlbnQoZSkpcmV0dXJuITE7cmV0dXJuITB9Y29tcHV0ZU1vcmVNaW5pbWFsRWRpdHMoZixkKXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwoZik7aWYoIWUpcmV0dXJuIGQ7Y29uc3QgdD1bXTtsZXQgcj12b2lkIDA7Zm9yKHZhcntyYW5nZTpuLHRleHQ6aSxlb2w6b31vZiBkPWQuc2xpY2UoMCkuc29ydCgoZSx0KT0+e3JldHVybiBlLnJhbmdlJiZ0LnJhbmdlP2l0LmNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLnJhbmdlLHQucmFuZ2UpOihlLnJhbmdlPzA6MSktKHQucmFuZ2U/MDoxKX0pKWlmKCJudW1iZXIiPT10eXBlb2YgbyYmKHI9byksIWl0LmlzRW1wdHkobil8fGkpe289ZS5nZXRWYWx1ZUluUmFuZ2Uobik7aWYobyE9PShpPWkucmVwbGFjZSgvXHJcbnxcbnxcci9nLGUuZW9sKSkpaWYoTWF0aC5tYXgoaS5sZW5ndGgsby5sZW5ndGgpPnlyLl9kaWZmTGltaXQpdC5wdXNoKHtyYW5nZTpuLHRleHQ6aX0pO2Vsc2V7bz1vLHU9aSxoPSExO3ZhciBvPW5ldyB4ZShuZXcgd2UobyksbmV3IHdlKHUpKS5Db21wdXRlRGlmZihoKS5jaGFuZ2VzLGE9ZS5vZmZzZXRBdChpdC5saWZ0KG4pLmdldFN0YXJ0UG9zaXRpb24oKSk7Zm9yKGNvbnN0IGMgb2Ygbyl7dmFyIHM9ZS5wb3NpdGlvbkF0KGErYy5vcmlnaW5hbFN0YXJ0KSxsPWUucG9zaXRpb25BdChhK2Mub3JpZ2luYWxTdGFydCtjLm9yaWdpbmFsTGVuZ3RoKSxzPXt0ZXh0Omkuc3Vic3RyKGMubW9kaWZpZWRTdGFydCxjLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnMubGluZU51bWJlcixzdGFydENvbHVtbjpzLmNvbHVtbixlbmRMaW5lTnVtYmVyOmwubGluZU51bWJlcixlbmRDb2x1bW46bC5jb2x1bW59fTtlLmdldFZhbHVlSW5SYW5nZShzLnJhbmdlKSE9PXMudGV4dCYmdC5wdXNoKHMpfX19dmFyIHUsaDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHImJnQucHVzaCh7ZW9sOnIsdGV4dDoiIixyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOjAsc3RhcnRDb2x1bW46MCxlbmRMaW5lTnVtYmVyOjAsZW5kQ29sdW1uOjB9fSksdH0pfWNvbXB1dGVMaW5rcyh0KXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBlPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBlPyhlPWUpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ291bnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmdldExpbmVDb250ZW50P0V0LmNvbXB1dGVMaW5rcyhlKTpbXTpudWxsfSl9dGV4dHVhbFN1Z2dlc3QoYSxzLGwsYyl7cmV0dXJuIGJyKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlPW5ldyBLKCEwKTt2YXIgdD1uZXcgUmVnRXhwKGwsYyk7Y29uc3Qgcj1uZXcgU2V0O2U6Zm9yKHZhciBuIG9mIGEpe2NvbnN0IG89dGhpcy5fZ2V0TW9kZWwobik7aWYobylmb3IodmFyIGkgb2Ygby53b3Jkcyh0KSlpZihpIT09cyYmaXNOYU4oTnVtYmVyKGkpKSYmKHIuYWRkKGkpLHIuc2l6ZT55ci5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShyKSxkdXJhdGlvbjplLmVsYXBzZWQoKX19KX1jb21wdXRlV29yZFJhbmdlcyh0LG8sYSxzKXtyZXR1cm4gYnIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIWUpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7dmFyIHI9bmV3IFJlZ0V4cChhLHMpO2NvbnN0IG49T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHQ9by5zdGFydExpbmVOdW1iZXI7dDxvLmVuZExpbmVOdW1iZXI7dCsrKWZvcihjb25zdCBpIG9mIGUuZ2V0TGluZVdvcmRzKHQscikpaWYoaXNOYU4oTnVtYmVyKGkud29yZCkpKXtsZXQgZT1uW2kud29yZF07ZXx8KGU9W10sbltpLndvcmRdPWUpLGUucHVzaCh7c3RhcnRMaW5lTnVtYmVyOnQsc3RhcnRDb2x1bW46aS5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOnQsZW5kQ29sdW1uOmkuZW5kQ29sdW1ufSl9cmV0dXJuIG59KX1uYXZpZ2F0ZVZhbHVlU2V0KGksbyxhLHMsbCl7cmV0dXJuIGJyKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlPXRoaXMuX2dldE1vZGVsKGkpO2lmKCFlKXJldHVybiBudWxsO3ZhciB0PW5ldyBSZWdFeHAocyxsKSxyPShvLnN0YXJ0Q29sdW1uPT09by5lbmRDb2x1bW4mJihvPXtzdGFydExpbmVOdW1iZXI6by5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46by5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOm8uZW5kTGluZU51bWJlcixlbmRDb2x1bW46by5lbmRDb2x1bW4rMX0pLGUuZ2V0VmFsdWVJblJhbmdlKG8pKSx0PWUuZ2V0V29yZEF0UG9zaXRpb24oe2xpbmVOdW1iZXI6by5zdGFydExpbmVOdW1iZXIsY29sdW1uOm8uc3RhcnRDb2x1bW59LHQpO2lmKCF0KXJldHVybiBudWxsO3ZhciBuPWUuZ2V0VmFsdWVJblJhbmdlKHQpO3JldHVybiBOdC5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KG8scix0LG4sYSl9KX1sb2FkRm9yZWlnbk1vZHVsZShlLHQscil7cj1lZShyLChlLHQpPT50aGlzLl9ob3N0LmZocihlLHQpKTtyZXR1cm4gdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk/KHRoaXMuX2ZvcmVpZ25Nb2R1bGU9dGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnkoe2hvc3Q6cixnZXRNaXJyb3JNb2RlbHM6KCk9PnRoaXMuX2dldE1vZGVscygpfSx0KSxQcm9taXNlLnJlc29sdmUoWSh0aGlzLl9mb3JlaWduTW9kdWxlKSkpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiVW5leHBlY3RlZCB1c2FnZSIpKX1mbXIoZSx0KXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrZSkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbZV0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSx0KSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfX19eXIuX2RpZmZMaW1pdD0xZTUseXIuX3N1Z2dlc3Rpb25zTGltaXQ9MWU0LCJmdW5jdGlvbiI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzJiYoTy5tb25hY289e2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxleHRyYTp2b2lkIDAsQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U6TXQsRW1pdHRlcjpRLEtleUNvZGU6bG4sS2V5TW9kOnVyLFBvc2l0aW9uOm50LFJhbmdlOml0LFNlbGVjdGlvbjpxdCxVcmk6emUsVG9rZW46enQsTWFya2Rvd25TdHJpbmc6b3IsTWFya2Rvd25TdHJpbmdUZXh0TmV3bGluZVN0eWxlOnVuLERpc3Bvc2FibGU6QyxEaXNwb3NhYmxlU3RvcmU6eSxFcnJvckhhbmRsZXI6cyxBYnN0cmFjdExvZ2dlcjpscixDb25zb2xlTG9nZ2VyOmNyLFRva2VuaXphdGlvblJlc3VsdDpKdCxFbmNvZGVkVG9rZW5pemF0aW9uUmVzdWx0Okd0LFNlbGVjdGlvbkRpcmVjdGlvbjptbixNYXJrZXJTZXZlcml0eTpDbixNYXJrZXJUYWc6SW4sTG9nTGV2ZWw6RG4sZXJyb3JIYW5kbGVyOmx9KTtsZXQgQ3I9ITE7ZnVuY3Rpb24gd3IodCl7aWYoIUNyKXtDcj0hMDtjb25zdCByPW5ldyB2ZShlPT57c2VsZi5wb3N0TWVzc2FnZShlKX0sZT0+bmV3IHlyKGUsdCkpO3NlbGYub25tZXNzYWdlPWU9PntyLm9ubWVzc2FnZShlLmRhdGEpfX19ZnVuY3Rpb24gX3IobyxlKXt2YXIgYT1vLmxlbmd0aCxzPTAsbD0iIixjPTAsdT0xNixoPTAsbT0wLGY9MCxnPTAsZD0wO2Z1bmN0aW9uIHAoKXtmb3IodmFyIGU9IiIsdD1zOzspe2lmKGE8PXMpe2UrPW8uc3Vic3RyaW5nKHQscyksZD0yO2JyZWFrfXZhciByPW8uY2hhckNvZGVBdChzKTtpZigzND09PXIpe2UrPW8uc3Vic3RyaW5nKHQscykscysrO2JyZWFrfWlmKDkyIT09cil7aWYoMDw9ciYmcjw9MzEpe2lmKEFyKHIpKXtlKz1vLnN1YnN0cmluZyh0LHMpLGQ9MjticmVha31kPTZ9cysrfWVsc2V7aWYoZSs9by5zdWJzdHJpbmcodCxzKSxhPD0rK3Mpe2Q9MjticmVha31zd2l0Y2goby5jaGFyQ29kZUF0KHMrKykpe2Nhc2UgMzQ6ZSs9JyInO2JyZWFrO2Nhc2UgOTI6ZSs9IlxcIjticmVhaztjYXNlIDQ3OmUrPSIvIjticmVhaztjYXNlIDk4OmUrPSJcYiI7YnJlYWs7Y2FzZSAxMDI6ZSs9IlxmIjticmVhaztjYXNlIDExMDplKz0iXG4iO2JyZWFrO2Nhc2UgMTE0OmUrPSJcciI7YnJlYWs7Y2FzZSAxMTY6ZSs9Ilx0IjticmVhaztjYXNlIDExNzp2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wLG49MDtyPGV8fCF0Oyl7dmFyIGk9by5jaGFyQ29kZUF0KHMpO2lmKDQ4PD1pJiZpPD01NyluPTE2Km4raS00ODtlbHNlIGlmKDY1PD1pJiZpPD03MCluPTE2Km4raS02NSsxMDtlbHNle2lmKCEoOTc8PWkmJmk8PTEwMikpYnJlYWs7bj0xNipuK2ktOTcrMTB9cysrLHIrK31yZXR1cm4gbj1yPGU/LTE6bn0oNCwhMCk7MDw9bj9lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pOmQ9NDticmVhaztkZWZhdWx0OmQ9NX10PXN9fXJldHVybiBlfWZ1bmN0aW9uIHQoKXtpZihsPSIiLGQ9MCxtPWgsZz1mLGE8PShjPXMpKXJldHVybiBjPWEsdT0xNzt2YXIgZT1vLmNoYXJDb2RlQXQocyk7aWYoU3IoZSkpe2Zvcig7cysrLGwrPVN0cmluZy5mcm9tQ2hhckNvZGUoZSksU3IoZT1vLmNoYXJDb2RlQXQocykpOyk7cmV0dXJuIHU9MTV9aWYoQXIoZSkpcmV0dXJuIHMrKyxsKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLDEzPT09ZSYmMTA9PT1vLmNoYXJDb2RlQXQocykmJihzKyssbCs9IlxuIiksaCsrLGY9cyx1PTE0O3N3aXRjaChlKXtjYXNlIDEyMzpyZXR1cm4gcysrLHU9MTtjYXNlIDEyNTpyZXR1cm4gcysrLHU9MjtjYXNlIDkxOnJldHVybiBzKyssdT0zO2Nhc2UgOTM6cmV0dXJuIHMrKyx1PTQ7Y2FzZSA1ODpyZXR1cm4gcysrLHU9NjtjYXNlIDQ0OnJldHVybiBzKyssdT01O2Nhc2UgMzQ6cmV0dXJuIHMrKyxsPXAoKSx1PTEwO2Nhc2UgNDc6dmFyIHQ9cy0xO2lmKDQ3PT09by5jaGFyQ29kZUF0KHMrMSkpe2ZvcihzKz0yO3M8YSYmIUFyKG8uY2hhckNvZGVBdChzKSk7KXMrKztyZXR1cm4gbD1vLnN1YnN0cmluZyh0LHMpLHU9MTJ9aWYoNDIhPT1vLmNoYXJDb2RlQXQocysxKSlyZXR1cm4gbCs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSxzKyssdT0xNjtzKz0yO2Zvcih2YXIgcj1hLTEsbj0hMTtzPHI7KXt2YXIgaT1vLmNoYXJDb2RlQXQocyk7aWYoNDI9PT1pJiY0Nz09PW8uY2hhckNvZGVBdChzKzEpKXtzKz0yLG49ITA7YnJlYWt9cysrLEFyKGkpJiYoMTM9PT1pJiYxMD09PW8uY2hhckNvZGVBdChzKSYmcysrLGgrKyxmPXMpfXJldHVybiBufHwocysrLGQ9MSksbD1vLnN1YnN0cmluZyh0LHMpLHU9MTM7Y2FzZSA0NTppZihsKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLCsrcz09PWF8fCF4cihvLmNoYXJDb2RlQXQocykpKXJldHVybiB1PTE2O2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIGwrPWZ1bmN0aW9uKCl7dmFyIGU9cztpZig0OD09PW8uY2hhckNvZGVBdChzKSlzKys7ZWxzZSBmb3IocysrO3M8by5sZW5ndGgmJnhyKG8uY2hhckNvZGVBdChzKSk7KXMrKztpZihzPG8ubGVuZ3RoJiY0Nj09PW8uY2hhckNvZGVBdChzKSl7aWYoISgrK3M8by5sZW5ndGgmJnhyKG8uY2hhckNvZGVBdChzKSkpKXJldHVybiBkPTMsby5zdWJzdHJpbmcoZSxzKTtmb3IocysrO3M8by5sZW5ndGgmJnhyKG8uY2hhckNvZGVBdChzKSk7KXMrK312YXIgdD1zO2lmKHM8by5sZW5ndGgmJig2OT09PW8uY2hhckNvZGVBdChzKXx8MTAxPT09by5jaGFyQ29kZUF0KHMpKSlpZigoKytzPG8ubGVuZ3RoJiY0Mz09PW8uY2hhckNvZGVBdChzKXx8NDU9PT1vLmNoYXJDb2RlQXQocykpJiZzKyssczxvLmxlbmd0aCYmeHIoby5jaGFyQ29kZUF0KHMpKSl7Zm9yKHMrKztzPG8ubGVuZ3RoJiZ4cihvLmNoYXJDb2RlQXQocykpOylzKys7dD1zfWVsc2UgZD0zO3JldHVybiBvLnN1YnN0cmluZyhlLHQpfSgpLHU9MTE7ZGVmYXVsdDpmb3IoO3M8YSYmZnVuY3Rpb24oZSl7aWYoU3IoZSl8fEFyKGUpKXJldHVybiExO3N3aXRjaChlKXtjYXNlIDEyNTpjYXNlIDkzOmNhc2UgMTIzOmNhc2UgOTE6Y2FzZSAzNDpjYXNlIDU4OmNhc2UgNDQ6Y2FzZSA0NzpyZXR1cm4hMX1yZXR1cm4hMH0oZSk7KXMrKyxlPW8uY2hhckNvZGVBdChzKTtpZihjPT09cylyZXR1cm4gbCs9U3RyaW5nLmZyb21DaGFyQ29kZShlKSxzKyssdT0xNjtzd2l0Y2gobD1vLnN1YnN0cmluZyhjLHMpKXtjYXNlInRydWUiOnJldHVybiB1PTg7Y2FzZSJmYWxzZSI6cmV0dXJuIHU9OTtjYXNlIm51bGwiOnJldHVybiB1PTd9cmV0dXJuIHU9MTZ9fXJldHVybntzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXtzPWUsbD0iIix1PTE2LGQ9Yz0wfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBzfSxzY2FuOihlPXZvaWQgMD09PWU/ITE6ZSk/ZnVuY3Rpb24oKXtmb3IodmFyIGU7MTI8PShlPXQoKSkmJmU8PTE1Oyk7cmV0dXJuIGV9OnQsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBsfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBjfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBzLWN9LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIG19LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gYy1nfSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGR9fX1mdW5jdGlvbiBTcihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTE9PT1lfHwxMj09PWV8fDE2MD09PWV8fDU3NjA9PT1lfHw4MTkyPD1lJiZlPD04MjAzfHw4MjM5PT09ZXx8ODI4Nz09PWV8fDEyMjg4PT09ZXx8NjUyNzk9PT1lfWZ1bmN0aW9uIEFyKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfWZ1bmN0aW9uIHhyKGUpe3JldHVybiA0ODw9ZSYmZTw9NTd9ZnVuY3Rpb24gRXIobix1LGUpe3ZhciBoLHQsZixkO2lmKHUpe2ZvcihmPXUub2Zmc2V0LGQ9Zit1Lmxlbmd0aCx0PWY7MDx0JiYha3Iobix0LTEpOyl0LS07Zm9yKHZhciBtPWQ7bTxuLmxlbmd0aCYmIWtyKG4sbSk7KW0rKzthPW4uc3Vic3RyaW5nKHQsbSksaD1mdW5jdGlvbihlLHQpe3ZhciByPTAsbj0wLGk9dC50YWJTaXplfHw0O2Zvcig7cjxlLmxlbmd0aDspe3ZhciBvPWUuY2hhckF0KHIpO2lmKCIgIj09PW8pbisrO2Vsc2V7aWYoIlx0IiE9PW8pYnJlYWs7bis9aX1yKyt9cmV0dXJuIE1hdGguZmxvb3Iobi9pKX0oYSxlKX1lbHNlIGY9dD1oPTAsZD0oYT1uKS5sZW5ndGg7dmFyIGc9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dC5jaGFyQXQocik7aWYoIlxyIj09PW4pcmV0dXJuIHIrMTx0Lmxlbmd0aCYmIlxuIj09PXQuY2hhckF0KHIrMSk/IlxyXG4iOiJcciI7aWYoIlxuIj09PW4pcmV0dXJuIlxuIn1yZXR1cm4gZSYmZS5lb2x8fCJcbiJ9KGUsbikscj0hMSxwPTAsYj1lLmluc2VydFNwYWNlcz9OcigiICIsZS50YWJTaXplfHw0KToiXHQiLGk9X3IoYSwhMSksdj0hMTtmdW5jdGlvbiBvKCl7cmV0dXJuIGcrTnIoYixoK3ApfWZ1bmN0aW9uIHkoKXt2YXIgZT1pLnNjYW4oKTtmb3Iocj0hMTsxNT09PWV8fDE0PT09ZTspcj1yfHwxND09PWUsZT1pLnNjYW4oKTtyZXR1cm4gdj0xNj09PWV8fDAhPT1pLmdldFRva2VuRXJyb3IoKSxlfXZhciBDPVtdO2Z1bmN0aW9uIHcoZSx0LHIpe3Z8fHUmJiEodDxkJiZmPHIpfHxuLnN1YnN0cmluZyh0LHIpPT09ZXx8Qy5wdXNoKHtvZmZzZXQ6dCxsZW5ndGg6ci10LGNvbnRlbnQ6ZX0pfXZhciBhLHM9eSgpO2ZvcigxNyE9PXMmJihhPWkuZ2V0VG9rZW5PZmZzZXQoKSt0LHcoTnIoYixoKSx0LGEpKTsxNyE9PXM7KXtmb3IodmFyIF89aS5nZXRUb2tlbk9mZnNldCgpK2kuZ2V0VG9rZW5MZW5ndGgoKSt0LGw9eSgpLGM9IiIsUz0hMTshciYmKDEyPT09bHx8MTM9PT1sKTspdygiICIsXyxpLmdldFRva2VuT2Zmc2V0KCkrdCksXz1pLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpK3QsYz0oUz0xMj09PWwpP28oKToiIixsPXkoKTtpZigyPT09bCkxIT09cyYmKHAtLSxjPW8oKSk7ZWxzZSBpZig0PT09bCkzIT09cyYmKHAtLSxjPW8oKSk7ZWxzZXtzd2l0Y2gocyl7Y2FzZSAzOmNhc2UgMTpwKyssYz1vKCk7YnJlYWs7Y2FzZSA1OmNhc2UgMTI6Yz1vKCk7YnJlYWs7Y2FzZSAxMzpyP2M9bygpOlN8fChjPSIgIik7YnJlYWs7Y2FzZSA2OlN8fChjPSIgIik7YnJlYWs7Y2FzZSAxMDppZig2PT09bCl7U3x8KGM9IiIpO2JyZWFrfWNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6Y2FzZSAyOmNhc2UgNDoxMj09PWx8fDEzPT09bD9TfHwoYz0iICIpOjUhPT1sJiYxNyE9PWwmJih2PSEwKTticmVhaztjYXNlIDE2OnY9ITB9IXJ8fDEyIT09bCYmMTMhPT1sfHwoYz1vKCkpfXcoYz0xNz09PWw/ZS5pbnNlcnRGaW5hbE5ld2xpbmU/ZzoiIjpjLF8saS5nZXRUb2tlbk9mZnNldCgpK3QpLHM9bH1yZXR1cm4gQ31mdW5jdGlvbiBOcihlLHQpe2Zvcih2YXIgcj0iIixuPTA7bjx0O24rKylyKz1lO3JldHVybiByfWZ1bmN0aW9uIGtyKGUsdCl7cmV0dXJuLTEhPT0iXHJcbiIuaW5kZXhPZihlLmNoYXJBdCh0KSl9c2VsZi5vbm1lc3NhZ2U9ZT0+e0NyfHx3cihudWxsKX0sKHByPXByfHx7fSkuREVGQVVMVD17YWxsb3dUcmFpbGluZ0NvbW1hOiExfTt2YXIgTHIsTXIsT3IsVHIsSXIsUHIsVnIsUnIsRHIsRnIsS3IsanIsVXIscXIsQnIsJHIsV3IsSHIsenI9X3IsSnI9ZnVuY3Rpb24oZSxuLHQpe3ZvaWQgMD09PW4mJihuPVtdKSx2b2lkIDA9PT10JiYodD1wci5ERUZBVUxUKTt2YXIgcj1udWxsLGk9W10sbz1bXTtmdW5jdGlvbiBhKGUpe0FycmF5LmlzQXJyYXkoaSk/aS5wdXNoKGUpOm51bGwhPT1yJiYoaVtyXT1lKX1yZXR1cm4gZnVuY3Rpb24odSxlLHQpe3ZvaWQgMD09PXQmJih0PXByLkRFRkFVTFQpO3ZhciBpPV9yKHUsITEpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGU/ZnVuY3Rpb24oKXtyZXR1cm4gZShpLmdldFRva2VuT2Zmc2V0KCksaS5nZXRUb2tlbkxlbmd0aCgpLGkuZ2V0VG9rZW5TdGFydExpbmUoKSxpLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxpLmdldFRva2VuT2Zmc2V0KCksaS5nZXRUb2tlbkxlbmd0aCgpLGkuZ2V0VG9rZW5TdGFydExpbmUoKSxpLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fXZhciBoPXIoZS5vbk9iamVjdEJlZ2luKSxmPW4oZS5vbk9iamVjdFByb3BlcnR5KSxkPXIoZS5vbk9iamVjdEVuZCksbT1yKGUub25BcnJheUJlZ2luKSxnPXIoZS5vbkFycmF5RW5kKSxvPW4oZS5vbkxpdGVyYWxWYWx1ZSksYT1uKGUub25TZXBhcmF0b3IpLHA9cihlLm9uQ29tbWVudCksYj1uKGUub25FcnJvciksdj10JiZ0LmRpc2FsbG93Q29tbWVudHMseT10JiZ0LmFsbG93VHJhaWxpbmdDb21tYTtmdW5jdGlvbiBzKCl7Zm9yKDs7KXt2YXIgZT1pLnNjYW4oKTtzd2l0Y2goaS5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpsKDE0KTticmVhaztjYXNlIDU6bCgxNSk7YnJlYWs7Y2FzZSAzOmwoMTMpO2JyZWFrO2Nhc2UgMTp2fHxsKDExKTticmVhaztjYXNlIDI6bCgxMik7YnJlYWs7Y2FzZSA2OmwoMTYpfXN3aXRjaChlKXtjYXNlIDEyOmNhc2UgMTM6dj9sKDEwKTpwKCk7YnJlYWs7Y2FzZSAxNjpsKDEpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiBlfX19ZnVuY3Rpb24gbChlLHQscil7aWYodm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PXImJihyPVtdKSxiKGUpLDA8dC5sZW5ndGgrci5sZW5ndGgpZm9yKHZhciBuPWkuZ2V0VG9rZW4oKTsxNyE9PW47KXtpZigtMSE9PXQuaW5kZXhPZihuKSl7cygpO2JyZWFrfWlmKC0xIT09ci5pbmRleE9mKG4pKWJyZWFrO249cygpfX1mdW5jdGlvbiBDKGUpe3ZhciB0PWkuZ2V0VG9rZW5WYWx1ZSgpO3JldHVybihlP286ZikodCkscygpLCEwfWZ1bmN0aW9uIHcoKXtoKCkscygpO2Zvcih2YXIgZT0hMTsyIT09aS5nZXRUb2tlbigpJiYxNyE9PWkuZ2V0VG9rZW4oKTspe2lmKDU9PT1pLmdldFRva2VuKCkpe2lmKGV8fGwoNCxbXSxbXSksYSgiLCIpLHMoKSwyPT09aS5nZXRUb2tlbigpJiZ5KWJyZWFrfWVsc2UgZSYmbCg2LFtdLFtdKTshZnVuY3Rpb24oKXtpZigxMD09PWkuZ2V0VG9rZW4oKSlyZXR1cm4gQyghMSksNj09PWkuZ2V0VG9rZW4oKT8oYSgiOiIpLHMoKSxjKCl8fGwoNCxbXSxbMiw1XSkpOmwoNSxbXSxbMiw1XSksMTtsKDMsW10sWzIsNV0pfSgpJiZsKDQsW10sWzIsNV0pLGU9ITB9cmV0dXJuIGQoKSwyIT09aS5nZXRUb2tlbigpP2woNyxbMl0sW10pOnMoKSwhMH1mdW5jdGlvbiBjKCl7c3dpdGNoKGkuZ2V0VG9rZW4oKSl7Y2FzZSAzOm0oKSxzKCk7Zm9yKHZhciBlPSExOzQhPT1pLmdldFRva2VuKCkmJjE3IT09aS5nZXRUb2tlbigpOyl7aWYoNT09PWkuZ2V0VG9rZW4oKSl7aWYoZXx8bCg0LFtdLFtdKSxhKCIsIikscygpLDQ9PT1pLmdldFRva2VuKCkmJnkpYnJlYWt9ZWxzZSBlJiZsKDYsW10sW10pO2MoKXx8bCg0LFtdLFs0LDVdKSxlPSEwfXJldHVybiBnKCksNCE9PWkuZ2V0VG9rZW4oKT9sKDgsWzRdLFtdKTpzKCksMTtjYXNlIDE6cmV0dXJuIHcoKTtjYXNlIDEwOnJldHVybiBDKCEwKTtkZWZhdWx0OnN3aXRjaChpLmdldFRva2VuKCkpe2Nhc2UgMTE6dmFyIHQ9aS5nZXRUb2tlblZhbHVlKCksdD1OdW1iZXIodCk7aXNOYU4odCkmJihsKDIpLHQ9MCksbyh0KTticmVhaztjYXNlIDc6byhudWxsKTticmVhaztjYXNlIDg6byghMCk7YnJlYWs7Y2FzZSA5Om8oITEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXJldHVybiBzKCksMX19aWYocygpLDE3PT09aS5nZXRUb2tlbigpKXJldHVybiB0LmFsbG93RW1wdHlDb250ZW50fHxsKDQsW10sW10pO2lmKCFjKCkpcmV0dXJuIGwoNCxbXSxbXSk7MTchPT1pLmdldFRva2VuKCkmJmwoOSxbXSxbXSl9KGUse29uT2JqZWN0QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT17fTthKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbk9iamVjdFByb3BlcnR5OmZ1bmN0aW9uKGUpe3I9ZX0sb25PYmplY3RFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uQXJyYXlCZWdpbjpmdW5jdGlvbigpe3ZhciBlPVtdO2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uQXJyYXlFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uTGl0ZXJhbFZhbHVlOmEsb25FcnJvcjpmdW5jdGlvbihlLHQscil7bi5wdXNoKHtlcnJvcjplLG9mZnNldDp0LGxlbmd0aDpyfSl9fSx0KSxpWzBdfSxHcj1mdW5jdGlvbiBlKHQscixuKXtpZih2b2lkIDA9PT0oYz1uPXZvaWQgMCE9PW4mJm4pJiYoYz0hMSksKGw9cik+PShzPXQpLm9mZnNldCYmbDxzLm9mZnNldCtzLmxlbmd0aHx8YyYmbD09PXMub2Zmc2V0K3MubGVuZ3RoKXt2YXIgaT10LmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmaVtvXS5vZmZzZXQ8PXI7bysrKXt2YXIgYT1lKGlbb10scixuKTtpZihhKXJldHVybiBhfXJldHVybiB0fXZhciBzLGwsY30sWnI9ZnVuY3Rpb24gZSh0KXtpZighdC5wYXJlbnR8fCF0LnBhcmVudC5jaGlsZHJlbilyZXR1cm5bXTt2YXIgcixuPWUodC5wYXJlbnQpO3JldHVybiJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlPyhyPXQucGFyZW50LmNoaWxkcmVuWzBdLnZhbHVlLG4ucHVzaChyKSk6ImFycmF5IiE9PXQucGFyZW50LnR5cGV8fC0xIT09KHI9dC5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0KSkmJm4ucHVzaChyKSxufSxYcj1mdW5jdGlvbiBlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiB0LmNoaWxkcmVuLm1hcChlKTtjYXNlIm9iamVjdCI6Zm9yKHZhciByPU9iamVjdC5jcmVhdGUobnVsbCksbj0wLGk9dC5jaGlsZHJlbjtuPGkubGVuZ3RoO24rKyl7dmFyIG89aVtuXSxhPW8uY2hpbGRyZW5bMV07YSYmKHJbby5jaGlsZHJlblswXS52YWx1ZV09ZShhKSl9cmV0dXJuIHI7Y2FzZSJudWxsIjpjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIHQudmFsdWU7ZGVmYXVsdDpyZXR1cm59fTtmdW5jdGlvbiBRcihlLHQpe2lmKGU9PT10KXJldHVybiAxO2lmKG51bGwhPWUmJm51bGwhPXQmJnR5cGVvZiBlPT10eXBlb2YgdCYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUpPT09QXJyYXkuaXNBcnJheSh0KSl7dmFyIHIsbjtpZihBcnJheS5pc0FycmF5KGUpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFRcihlW3JdLHRbcl0pKXJldHVybn1lbHNle3ZhciBpPVtdO2ZvcihuIGluIGUpaS5wdXNoKG4pO2kuc29ydCgpO3ZhciBvPVtdO2ZvcihuIGluIHQpby5wdXNoKG4pO2lmKG8uc29ydCgpLCFRcihpLG8pKXJldHVybjtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlmKCFRcihlW2lbcl1dLHRbaVtyXV0pKXJldHVybn1yZXR1cm4gMX19ZnVuY3Rpb24gWXIoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfWZ1bmN0aW9uIGVuKGUpe3JldHVybiB2b2lkIDAhPT1lfWZ1bmN0aW9uIHRuKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV9ZnVuY3Rpb24gcm4oZSx0KXt2YXIgcj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gMDxyP2UubGFzdEluZGV4T2YodCk9PT1yOjA9PXImJmU9PT10fWZ1bmN0aW9uIG5uKHQpe3ZhciByPSIiOyFmdW5jdGlvbihlLHQpe2lmKCEoZS5sZW5ndGg8dC5sZW5ndGgpKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm47cmV0dXJuIDF9fSh0LCIoP2kpIil8fCh0PXQuc3Vic3RyaW5nKDQpLHI9ImkiKTt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCxyKyJ1Iil9Y2F0Y2goZSl7dHJ5e3JldHVybiBuZXcgUmVnRXhwKHQscil9Y2F0Y2goZSl7cmV0dXJufX19KG49THI9THJ8fHt9KS5NSU5fVkFMVUU9MCxuLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LCgkbj1Ncj1Ncnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsaW5lOmU9ZT09PU51bWJlci5NQVhfVkFMVUU/THIuTUFYX1ZBTFVFOmUsY2hhcmFjdGVyOnQ9dD09PU51bWJlci5NQVhfVkFMVUU/THIuTUFYX1ZBTFVFOnR9fSwkbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5vYmplY3RMaXRlcmFsKGUpJiZhLnVpbnRlZ2VyKGUubGluZSkmJmEudWludGVnZXIoZS5jaGFyYWN0ZXIpfSwoSG49T3I9T3J8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoYS51aW50ZWdlcihlKSYmYS51aW50ZWdlcih0KSYmYS51aW50ZWdlcihyKSYmYS51aW50ZWdlcihuKSlyZXR1cm57c3RhcnQ6TXIuY3JlYXRlKGUsdCksZW5kOk1yLmNyZWF0ZShyLG4pfTtpZihNci5pcyhlKSYmTXIuaXModCkpcmV0dXJue3N0YXJ0OmUsZW5kOnR9O3Rocm93IG5ldyBFcnJvcigiUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyIrZSsiLCAiK3QrIiwgIityKyIsICIrbisiXSIpfSxIbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5vYmplY3RMaXRlcmFsKGUpJiZNci5pcyhlLnN0YXJ0KSYmTXIuaXMoZS5lbmQpfSwoZT1Ucj1Ucnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSxyYW5nZTp0fX0sZS5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5kZWZpbmVkKGUpJiZPci5pcyhlLnJhbmdlKSYmKGEuc3RyaW5nKGUudXJpKXx8YS51bmRlZmluZWQoZS51cmkpKX0sKHQ9JHI9JHJ8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJue3JlZDplLGdyZWVuOnQsYmx1ZTpyLGFscGhhOm59fSx0LmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLm51bWJlclJhbmdlKGUucmVkLDAsMSkmJmEubnVtYmVyUmFuZ2UoZS5ncmVlbiwwLDEpJiZhLm51bWJlclJhbmdlKGUuYmx1ZSwwLDEpJiZhLm51bWJlclJhbmdlKGUuYWxwaGEsMCwxKX0sKGxuPUlyPUlyfHx7fSkuQ29tbWVudD0iY29tbWVudCIsbG4uSW1wb3J0cz0iaW1wb3J0cyIsbG4uUmVnaW9uPSJyZWdpb24iLCh1bj1Qcj1Qcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsb2NhdGlvbjplLG1lc3NhZ2U6dH19LHVuLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLmRlZmluZWQoZSkmJlRyLmlzKGUubG9jYXRpb24pJiZhLnN0cmluZyhlLm1lc3NhZ2UpfSwobW49VnI9VnJ8fHt9KS5FcnJvcj0xLG1uLldhcm5pbmc9Mixtbi5JbmZvcm1hdGlvbj0zLG1uLkhpbnQ9NCwocG58fHt9KS5pcz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmYS5zdHJpbmcoZS5ocmVmKX0sKENuPVJyPVJyfHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXtyZXR1cm4gZT17cmFuZ2U6ZSxtZXNzYWdlOnR9LGEuZGVmaW5lZChyKSYmKGUuc2V2ZXJpdHk9ciksYS5kZWZpbmVkKG4pJiYoZS5jb2RlPW4pLGEuZGVmaW5lZChpKSYmKGUuc291cmNlPWkpLGEuZGVmaW5lZChvKSYmKGUucmVsYXRlZEluZm9ybWF0aW9uPW8pLGV9LENuLmlzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBhLmRlZmluZWQoZSkmJk9yLmlzKGUucmFuZ2UpJiZhLnN0cmluZyhlLm1lc3NhZ2UpJiYoYS5udW1iZXIoZS5zZXZlcml0eSl8fGEudW5kZWZpbmVkKGUuc2V2ZXJpdHkpKSYmKGEuaW50ZWdlcihlLmNvZGUpfHxhLnN0cmluZyhlLmNvZGUpfHxhLnVuZGVmaW5lZChlLmNvZGUpKSYmKGEudW5kZWZpbmVkKGUuY29kZURlc2NyaXB0aW9uKXx8YS5zdHJpbmcobnVsbD09PSh0PWUuY29kZURlc2NyaXB0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ocmVmKSkmJihhLnN0cmluZyhlLnNvdXJjZSl8fGEudW5kZWZpbmVkKGUuc291cmNlKSkmJihhLnVuZGVmaW5lZChlLnJlbGF0ZWRJbmZvcm1hdGlvbil8fGEudHlwZWRBcnJheShlLnJlbGF0ZWRJbmZvcm1hdGlvbixQci5pcykpfSwoSW49RW49RW58fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTJdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZT17dGl0bGU6ZSxjb21tYW5kOnR9LGEuZGVmaW5lZChyKSYmMDxyLmxlbmd0aCYmKGUuYXJndW1lbnRzPXIpLGV9LEluLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLmRlZmluZWQoZSkmJmEuc3RyaW5nKGUudGl0bGUpJiZhLnN0cmluZyhlLmNvbW1hbmQpfSwoRG49RHI9RHJ8fHt9KS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0fX0sRG4uaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnR9fSxEbi5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIn19LERuLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLm9iamVjdExpdGVyYWwoZSkmJmEuc3RyaW5nKGUubmV3VGV4dCkmJk9yLmlzKGUucmFuZ2UpfSwobj1Gcj1Gcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9e2xhYmVsOmV9LHZvaWQgMCE9PXQmJihlLm5lZWRzQ29uZmlybWF0aW9uPXQpLHZvaWQgMCE9PXImJihlLmRlc2NyaXB0aW9uPXIpLGV9LG4uaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJmEub2JqZWN0TGl0ZXJhbChlKSYmYS5zdHJpbmcoZS5sYWJlbCkmJihhLmJvb2xlYW4oZS5uZWVkc0NvbmZpcm1hdGlvbil8fHZvaWQgMD09PWUubmVlZHNDb25maXJtYXRpb24pJiYoYS5zdHJpbmcoZS5kZXNjcmlwdGlvbil8fHZvaWQgMD09PWUuZGVzY3JpcHRpb24pfSwoS3J8fChLcj17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0sKCRuPWpyPWpyfHx7fSkucmVwbGFjZT1mdW5jdGlvbihlLHQscil7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0LGFubm90YXRpb25JZDpyfX0sJG4uaW5zZXJ0PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmUsZW5kOmV9LG5ld1RleHQ6dCxhbm5vdGF0aW9uSWQ6cn19LCRuLmRlbD1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLG5ld1RleHQ6IiIsYW5ub3RhdGlvbklkOnR9fSwkbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gRHIuaXMoZSkmJihGci5pcyhlLmFubm90YXRpb25JZCl8fEtyLmlzKGUuYW5ub3RhdGlvbklkKSl9LChIbj1Vcj1Vcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0ZXh0RG9jdW1lbnQ6ZSxlZGl0czp0fX0sSG4uaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZGVmaW5lZChlKSYmc24uaXMoZS50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KGUuZWRpdHMpfSwoZT1xcj1xcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9e2tpbmQ6ImNyZWF0ZSIsdXJpOmV9LHZvaWQgMD09PXR8fHZvaWQgMD09PXQub3ZlcndyaXRlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmRXhpc3RzfHwoZS5vcHRpb25zPXQpLHZvaWQgMCE9PXImJihlLmFubm90YXRpb25JZD1yKSxlfSxlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiY3JlYXRlIj09PWUua2luZCYmYS5zdHJpbmcoZS51cmkpJiYodm9pZCAwPT09ZS5vcHRpb25zfHwodm9pZCAwPT09ZS5vcHRpb25zLm92ZXJ3cml0ZXx8YS5ib29sZWFuKGUub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PWUub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8YS5ib29sZWFuKGUub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PWUuYW5ub3RhdGlvbklkfHxLci5pcyhlLmFubm90YXRpb25JZCkpfSwoJHI9QnI9QnJ8fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGU9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOmUsbmV3VXJpOnR9LHZvaWQgMD09PXJ8fHZvaWQgMD09PXIub3ZlcndyaXRlJiZ2b2lkIDA9PT1yLmlnbm9yZUlmRXhpc3RzfHwoZS5vcHRpb25zPXIpLHZvaWQgMCE9PW4mJihlLmFubm90YXRpb25JZD1uKSxlfSwkci5pcz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmInJlbmFtZSI9PT1lLmtpbmQmJmEuc3RyaW5nKGUub2xkVXJpKSYmYS5zdHJpbmcoZS5uZXdVcmkpJiYodm9pZCAwPT09ZS5vcHRpb25zfHwodm9pZCAwPT09ZS5vcHRpb25zLm92ZXJ3cml0ZXx8YS5ib29sZWFuKGUub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PWUub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8YS5ib29sZWFuKGUub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHZvaWQgMD09PWUuYW5ub3RhdGlvbklkfHxLci5pcyhlLmFubm90YXRpb25JZCkpfSwodD1Xcj1Xcnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9e2tpbmQ6ImRlbGV0ZSIsdXJpOmV9LHZvaWQgMD09PXR8fHZvaWQgMD09PXQucmVjdXJzaXZlJiZ2b2lkIDA9PT10Lmlnbm9yZUlmTm90RXhpc3RzfHwoZS5vcHRpb25zPXQpLHZvaWQgMCE9PXImJihlLmFubm90YXRpb25JZD1yKSxlfSx0LmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZGVsZXRlIj09PWUua2luZCYmYS5zdHJpbmcoZS51cmkpJiYodm9pZCAwPT09ZS5vcHRpb25zfHwodm9pZCAwPT09ZS5vcHRpb25zLnJlY3Vyc2l2ZXx8YS5ib29sZWFuKGUub3B0aW9ucy5yZWN1cnNpdmUpKSYmKHZvaWQgMD09PWUub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0c3x8YS5ib29sZWFuKGUub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cykpKSYmKHZvaWQgMD09PWUuYW5ub3RhdGlvbklkfHxLci5pcyhlLmFubm90YXRpb25JZCkpfSwoSHJ8fChIcj17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYodm9pZCAwIT09ZS5jaGFuZ2VzfHx2b2lkIDAhPT1lLmRvY3VtZW50Q2hhbmdlcykmJih2b2lkIDA9PT1lLmRvY3VtZW50Q2hhbmdlc3x8ZS5kb2N1bWVudENoYW5nZXMuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGEuc3RyaW5nKGUua2luZCk/cXIuaXMoZSl8fEJyLmlzKGUpfHxXci5pcyhlKTpVci5pcyhlKX0pKX07YW4ucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQscil7dmFyIG4scj12b2lkIDA9PT1yP0RyLmluc2VydChlLHQpOktyLmlzKHIpP2pyLmluc2VydChlLHQsbj1yKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxuPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGpyLmluc2VydChlLHQsbikpO2lmKHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1uKXJldHVybiBufSxhbi5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihlLHQscil7dmFyIG4scj12b2lkIDA9PT1yP0RyLnJlcGxhY2UoZSx0KTpLci5pcyhyKT9qci5yZXBsYWNlKGUsdCxuPXIpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLG49dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksanIucmVwbGFjZShlLHQsbikpO2lmKHRoaXMuZWRpdHMucHVzaChyKSx2b2lkIDAhPT1uKXJldHVybiBufSxhbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsdD12b2lkIDA9PT10P0RyLmRlbChlKTpLci5pcyh0KT9qci5kZWwoZSxyPXQpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UodCksanIuZGVsKGUscikpO2lmKHRoaXMuZWRpdHMucHVzaCh0KSx2b2lkIDAhPT1yKXJldHVybiByfSxhbi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuZWRpdHMucHVzaChlKX0sYW4ucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxhbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmVkaXRzLnNwbGljZSgwLHRoaXMuZWRpdHMubGVuZ3RoKX0sYW4ucHJvdG90eXBlLmFzc2VydENoYW5nZUFubm90YXRpb25zPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJUZXh0IGVkaXQgY2hhbmdlIGlzIG5vdCBjb25maWd1cmVkIHRvIG1hbmFnZSBjaGFuZ2UgYW5ub3RhdGlvbnMuIil9O3ZhciBvbj1hbjtmdW5jdGlvbiBhbihlLHQpe3RoaXMuZWRpdHM9ZSx0aGlzLmNoYW5nZUFubm90YXRpb25zPXR9T24ucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KE9uLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9uLnByb3RvdHlwZS5tYW5hZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZihLci5pcyhlKT9yPWU6KHI9dGhpcy5uZXh0SWQoKSx0PWUpLHZvaWQgMCE9PXRoaXMuX2Fubm90YXRpb25zW3JdKXRocm93IG5ldyBFcnJvcigiSWQgIityKyIgaXMgYWxyZWFkeSBpbiB1c2UuIik7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFubm90YXRpb24gcHJvdmlkZWQgZm9yIGlkICIrcik7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zW3JdPXQsdGhpcy5fc2l6ZSsrLHJ9LE9uLnByb3RvdHlwZS5uZXh0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY291bnRlcisrLHRoaXMuX2NvdW50ZXIudG9TdHJpbmcoKX07dmFyIHNuLGxuLGNuLHVuLGhuLGZuLGRuLG1uLGduLHBuLGJuLHZuLHluLENuLHduLF9uLFNuLEFuLHhuLEVuLE5uLGtuLExuLE1uPU9uO2Z1bmN0aW9uIE9uKGUpe3RoaXMuX2Fubm90YXRpb25zPXZvaWQgMD09PWU/T2JqZWN0LmNyZWF0ZShudWxsKTplLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9zaXplPTB9ZnVuY3Rpb24gVG4ocil7dmFyIG49dGhpczt0aGlzLl90ZXh0RWRpdENoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx2b2lkIDAhPT1yPyh0aGlzLl93b3Jrc3BhY2VFZGl0PXIpLmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IE1uKHIuY2hhbmdlQW5ub3RhdGlvbnMpLHIuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksci5kb2N1bWVudENoYW5nZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdDtVci5pcyhlKSYmKHQ9bmV3IG9uKGUuZWRpdHMsbi5fY2hhbmdlQW5ub3RhdGlvbnMpLG4uX3RleHRFZGl0Q2hhbmdlc1tlLnRleHREb2N1bWVudC51cmldPXQpfSkpOnIuY2hhbmdlcyYmT2JqZWN0LmtleXMoci5jaGFuZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBvbihyLmNoYW5nZXNbZV0pO24uX3RleHRFZGl0Q2hhbmdlc1tlXT10fSk6dGhpcy5fd29ya3NwYWNlRWRpdD17fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoVG4ucHJvdG90eXBlLCJlZGl0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMCE9PXRoaXMuX2NoYW5nZUFubm90YXRpb25zJiYoMD09PXRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemU/dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz12b2lkIDA6dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSksdGhpcy5fd29ya3NwYWNlRWRpdH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxUbi5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYoc24uaXMoZSkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHQ9e3VyaTplLnVyaSx2ZXJzaW9uOmUudmVyc2lvbn07cmV0dXJuKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXSl8fCh0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHt0ZXh0RG9jdW1lbnQ6dCxlZGl0czpuPVtdfSkscj1uZXcgb24obix0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3QudXJpXT1yKSxyfWlmKHRoaXMuaW5pdENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3Igbm9ybWFsIHRleHQgZWRpdCBjaGFuZ2VzLiIpO3ZhciByLG47cmV0dXJuKHI9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW2VdKXx8KHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1tlXT1uPVtdLHI9bmV3IG9uKG4pLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXT1yKSxyfSxUbi5wcm90b3R5cGUuaW5pdERvY3VtZW50Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgTW4sdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9W10sdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSl9LFRuLnByb3RvdHlwZS5pbml0Q2hhbmdlcz1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzJiZ2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXMmJih0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSl9LFRuLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBuLGk7aWYoRnIuaXModCl8fEtyLmlzKHQpP249dDpyPXQsdD12b2lkIDA9PT1uP3FyLmNyZWF0ZShlLHIpOihpPUtyLmlzKG4pP246dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHFyLmNyZWF0ZShlLHIsaSkpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2godCksdm9pZCAwIT09aSlyZXR1cm4gaX0sVG4ucHJvdG90eXBlLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgaSxvO2lmKEZyLmlzKHIpfHxLci5pcyhyKT9pPXI6bj1yLHI9dm9pZCAwPT09aT9Cci5jcmVhdGUoZSx0LG4pOihvPUtyLmlzKGkpP2k6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLEJyLmNyZWF0ZShlLHQsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChyKSx2b2lkIDAhPT1vKXJldHVybiBvfSxUbi5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbihlLHQscil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgbixpO2lmKEZyLmlzKHQpfHxLci5pcyh0KT9uPXQ6cj10LHQ9dm9pZCAwPT09bj9Xci5jcmVhdGUoZSxyKTooaT1Lci5pcyhuKT9uOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShuKSxXci5jcmVhdGUoZSxyLGkpKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHQpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LChsbj1zbj1zbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSxsbi5pcz1mdW5jdGlvbihlKXtyZXR1cm4gYS5kZWZpbmVkKGUpJiZhLnN0cmluZyhlLnVyaSkmJihudWxsPT09ZS52ZXJzaW9ufHxhLmludGVnZXIoZS52ZXJzaW9uKSl9LCh1bj1jbj1jbnx8e30pLlBsYWluVGV4dD0icGxhaW50ZXh0Iix1bi5NYXJrZG93bj0ibWFya2Rvd24iLChobj1jbj1jbnx8e30pLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09aG4uUGxhaW5UZXh0fHxlPT09aG4uTWFya2Rvd259LChmbnx8KGZuPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gYS5vYmplY3RMaXRlcmFsKGUpJiZjbi5pcyh0LmtpbmQpJiZhLnN0cmluZyh0LnZhbHVlKX0sKG1uPWRuPWRufHx7fSkuVGV4dD0xLG1uLk1ldGhvZD0yLG1uLkZ1bmN0aW9uPTMsbW4uQ29uc3RydWN0b3I9NCxtbi5GaWVsZD01LG1uLlZhcmlhYmxlPTYsbW4uQ2xhc3M9Nyxtbi5JbnRlcmZhY2U9OCxtbi5Nb2R1bGU9OSxtbi5Qcm9wZXJ0eT0xMCxtbi5Vbml0PTExLG1uLlZhbHVlPTEyLG1uLkVudW09MTMsbW4uS2V5d29yZD0xNCxtbi5TbmlwcGV0PTE1LG1uLkNvbG9yPTE2LG1uLkZpbGU9MTcsbW4uUmVmZXJlbmNlPTE4LG1uLkZvbGRlcj0xOSxtbi5FbnVtTWVtYmVyPTIwLG1uLkNvbnN0YW50PTIxLG1uLlN0cnVjdD0yMixtbi5FdmVudD0yMyxtbi5PcGVyYXRvcj0yNCxtbi5UeXBlUGFyYW1ldGVyPTI1LChwbj1nbj1nbnx8e30pLlBsYWluVGV4dD0xLHBuLlNuaXBwZXQ9MiwoYm58fChibj17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57bGFiZWw6ZX19LCh2bnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntpdGVtczplfHxbXSxpc0luY29tcGxldGU6ISF0fX0sKENuPXluPXlufHx7fSkuZnJvbVBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9LENuLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBhLnN0cmluZyhlKXx8YS5vYmplY3RMaXRlcmFsKGUpJiZhLnN0cmluZyhlLmxhbmd1YWdlKSYmYS5zdHJpbmcoZS52YWx1ZSl9LCh3bnx8e30pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuISF0JiZhLm9iamVjdExpdGVyYWwodCkmJihmbi5pcyh0LmNvbnRlbnRzKXx8eW4uaXModC5jb250ZW50cyl8fGEudHlwZWRBcnJheSh0LmNvbnRlbnRzLHluLmlzKSkmJih2b2lkIDA9PT1lLnJhbmdlfHxPci5pcyhlLnJhbmdlKSl9LChfbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0P3tsYWJlbDplLGRvY3VtZW50YXRpb246dH06e2xhYmVsOmV9fSwoU258fHt9KS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9W10sbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTJdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZT17bGFiZWw6ZX0sYS5kZWZpbmVkKHQpJiYoZS5kb2N1bWVudGF0aW9uPXQpLGEuZGVmaW5lZChyKT9lLnBhcmFtZXRlcnM9cjplLnBhcmFtZXRlcnM9W10sZX0sKEFufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9e3JhbmdlOmV9LGEubnVtYmVyKHQpJiYoZS5raW5kPXQpLGV9LChFbj14bj14bnx8e30pLkZpbGU9MSxFbi5Nb2R1bGU9MixFbi5OYW1lc3BhY2U9MyxFbi5QYWNrYWdlPTQsRW4uQ2xhc3M9NSxFbi5NZXRob2Q9NixFbi5Qcm9wZXJ0eT03LEVuLkZpZWxkPTgsRW4uQ29uc3RydWN0b3I9OSxFbi5FbnVtPTEwLEVuLkludGVyZmFjZT0xMSxFbi5GdW5jdGlvbj0xMixFbi5WYXJpYWJsZT0xMyxFbi5Db25zdGFudD0xNCxFbi5TdHJpbmc9MTUsRW4uTnVtYmVyPTE2LEVuLkJvb2xlYW49MTcsRW4uQXJyYXk9MTgsRW4uT2JqZWN0PTE5LEVuLktleT0yMCxFbi5OdWxsPTIxLEVuLkVudW1NZW1iZXI9MjIsRW4uU3RydWN0PTIzLEVuLkV2ZW50PTI0LEVuLk9wZXJhdG9yPTI1LEVuLlR5cGVQYXJhbWV0ZXI9MjYsKE5ufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGU9e25hbWU6ZSxraW5kOnQsbG9jYXRpb246e3VyaTpuLHJhbmdlOnJ9fSxpJiYoZS5jb250YWluZXJOYW1lPWkpLGV9LChMbj1rbj1rbnx8e30pLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntyYW5nZTplLHBhcmVudDp0fX0sTG4uaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJk9yLmlzKGUucmFuZ2UpJiYodm9pZCAwPT09ZS5wYXJlbnR8fExuLmlzKGUucGFyZW50KSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShWbi5wcm90b3R5cGUsInVyaSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl91cml9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFZuLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWbi5wcm90b3R5cGUsInZlcnNpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxWbi5wcm90b3R5cGUuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZT8odD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLGU9dGhpcy5vZmZzZXRBdChlLmVuZCksdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxlKSk6dGhpcy5fY29udGVudH0sVm4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRlbnQ9ZS50ZXh0LHRoaXMuX3ZlcnNpb249dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9LFZuLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzKXtmb3IodmFyIGU9W10sdD10aGlzLl9jb250ZW50LHI9ITAsbj0wO248dC5sZW5ndGg7bisrKXtyJiYoZS5wdXNoKG4pLHI9ITEpO3ZhciBpPXQuY2hhckF0KG4pLHI9IlxyIj09PWl8fCJcbiI9PT1pOyJcciI9PT1pJiZuKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChuKzEpJiZuKyt9ciYmMDx0Lmxlbmd0aCYmZS5wdXNoKHQubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c30sVm4ucHJvdG90eXBlLnBvc2l0aW9uQXQ9ZnVuY3Rpb24oZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCkscj0wLG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIE1yLmNyZWF0ZSgwLGUpO2Zvcig7cjxuOyl7dmFyIGk9TWF0aC5mbG9vcigocituKS8yKTt0W2ldPmU/bj1pOnI9aSsxfXZhciBvPXItMTtyZXR1cm4gTXIuY3JlYXRlKG8sZS10W29dKX0sVm4ucHJvdG90eXBlLm9mZnNldEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDt2YXIgcj10W2UubGluZV0sdD1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4ocitlLmNoYXJhY3Rlcix0KSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFZuLnByb3RvdHlwZSwibGluZUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSk7dmFyIGEsSW4sUG47ZnVuY3Rpb24gVm4oZSx0LHIsbil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249cix0aGlzLl9jb250ZW50PW4sdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfUluPWE9YXx8e30sUG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJbi5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lfSxJbi51bmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV9LEluLmJvb2xlYW49ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lfHwhMT09PWV9LEluLnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PVBuLmNhbGwoZSl9LEluLm51bWJlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PVBuLmNhbGwoZSl9LEluLm51bWJlclJhbmdlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PVBuLmNhbGwoZSkmJnQ8PWUmJmU8PXJ9LEluLmludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1Qbi5jYWxsKGUpJiYtMjE0NzQ4MzY0ODw9ZSYmZTw9MjE0NzQ4MzY0N30sSW4udWludGVnZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1Qbi5jYWxsKGUpJiYwPD1lJiZlPD0yMTQ3NDgzNjQ3fSxJbi5mdW5jPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1Qbi5jYWxsKGUpfSxJbi5vYmplY3RMaXRlcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfSxJbi50eXBlZEFycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkodCl9O3ZhciBSbixEbixqZSxuLEZuPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPXIsdGhpcy5fY29udGVudD1uLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXt2YXIgdDtyZXR1cm4gZT8odD10aGlzLm9mZnNldEF0KGUuc3RhcnQpLGU9dGhpcy5vZmZzZXRBdChlLmVuZCksdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxlKSk6dGhpcy5fY29udGVudH11cGRhdGUoZSx0KXtmb3IodmFyIG4gb2YgZSlpZihGbi5pc0luY3JlbWVudGFsKG4pKXt2YXIgaT1qbihuLnJhbmdlKSxvPXRoaXMub2Zmc2V0QXQoaS5zdGFydCksYT10aGlzLm9mZnNldEF0KGkuZW5kKSxzPSh0aGlzLl9jb250ZW50PXRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAsbykrbi50ZXh0K3RoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKGEsdGhpcy5fY29udGVudC5sZW5ndGgpLE1hdGgubWF4KGkuc3RhcnQubGluZSwwKSksaT1NYXRoLm1heChpLmVuZC5saW5lLDApO2xldCByPXRoaXMuX2xpbmVPZmZzZXRzO3ZhciBsPUtuKG4udGV4dCwhMSxvKTtpZihpLXM9PT1sLmxlbmd0aClmb3IobGV0IGU9MCx0PWwubGVuZ3RoO2U8dDtlKyspcltlK3MrMV09bFtlXTtlbHNlIGwubGVuZ3RoPDFlND9yLnNwbGljZShzKzEsaS1zLC4uLmwpOnRoaXMuX2xpbmVPZmZzZXRzPXI9ci5zbGljZSgwLHMrMSkuY29uY2F0KGwsci5zbGljZShpKzEpKTt2YXIgYz1uLnRleHQubGVuZ3RoLShhLW8pO2lmKDAhPWMpZm9yKGxldCBlPXMrMStsLmxlbmd0aCx0PXIubGVuZ3RoO2U8dDtlKyspcltlXT1yW2VdK2N9ZWxzZXtpZighRm4uaXNGdWxsKG4pKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGFuZ2UgZXZlbnQgcmVjZWl2ZWQiKTt0aGlzLl9jb250ZW50PW4udGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9dGhpcy5fdmVyc2lvbj10fWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzJiYodGhpcy5fbGluZU9mZnNldHM9S24odGhpcy5fY29udGVudCwhMCkpLHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7bGV0IHI9MCxuPXQubGVuZ3RoO2lmKDA9PT1uKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOmV9O2Zvcig7cjxuOyl7dmFyIGk9TWF0aC5mbG9vcigocituKS8yKTt0W2ldPmU/bj1pOnI9aSsxfXZhciBvPXItMTtyZXR1cm57bGluZTpvLGNoYXJhY3RlcjplLXRbb119fW9mZnNldEF0KGUpe3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDt2YXIgcj10W2UubGluZV0sdD1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4ocitlLmNoYXJhY3Rlcix0KSxyKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwoZSl7cmV0dXJuIG51bGwhPWUmJiJzdHJpbmciPT10eXBlb2YgZS50ZXh0JiZ2b2lkIDAhPT1lLnJhbmdlJiYodm9pZCAwPT09ZS5yYW5nZUxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiBlLnJhbmdlTGVuZ3RoKX1zdGF0aWMgaXNGdWxsKGUpe3JldHVybiBudWxsIT1lJiYic3RyaW5nIj09dHlwZW9mIGUudGV4dCYmdm9pZCAwPT09ZS5yYW5nZSYmdm9pZCAwPT09ZS5yYW5nZUxlbmd0aH19O2Z1bmN0aW9uIEtuKHQsZSxyPTApe2NvbnN0IG49ZT9bcl06W107Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBpPXQuY2hhckNvZGVBdChlKTsxMyE9PWkmJjEwIT09aXx8KDEzPT09aSYmZSsxPHQubGVuZ3RoJiYxMD09PXQuY2hhckNvZGVBdChlKzEpJiZlKyssbi5wdXNoKHIrZSsxKSl9cmV0dXJuIG59ZnVuY3Rpb24gam4oZSl7dmFyIHQ9ZS5zdGFydCxyPWUuZW5kO3JldHVybiB0LmxpbmU+ci5saW5lfHx0LmxpbmU9PT1yLmxpbmUmJnQuY2hhcmFjdGVyPnIuY2hhcmFjdGVyP3tzdGFydDpyLGVuZDp0fTplfWZ1bmN0aW9uIFVuKGUpe3ZhciB0PWpuKGUucmFuZ2UpO3JldHVybiB0IT09ZS5yYW5nZT97bmV3VGV4dDplLm5ld1RleHQscmFuZ2U6dH06ZX1mdW5jdGlvbiBxbihlLHQsLi4ucil7e3ZhciBuPXI7bGV0IGU7cmV0dXJuIGU9MD09PW4ubGVuZ3RoP3Q6dC5yZXBsYWNlKC9ceyhcZCspXH0vZywoZSx0KT0+e3Q9dFswXTtyZXR1cm4gdm9pZCAwIT09blt0XT9uW3RdOmV9KX19KERuPVJuPVJufHx7fSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBuZXcgRm4oZSx0LHIsbil9LERuLnVwZGF0ZT1mdW5jdGlvbihlLHQscil7aWYoZSBpbnN0YW5jZW9mIEZuKXJldHVybiBlLnVwZGF0ZSh0LHIpLGU7dGhyb3cgbmV3IEVycm9yKCJUZXh0RG9jdW1lbnQudXBkYXRlOiBkb2N1bWVudCBtdXN0IGJlIGNyZWF0ZWQgYnkgVGV4dERvY3VtZW50LmNyZWF0ZSIpfSxEbi5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsdCl7bGV0IHI9ZS5nZXRUZXh0KCksbj0wO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgZnVuY3Rpb24gZSh0LHIpe2lmKHQubGVuZ3RoPD0xKXJldHVybiB0O2NvbnN0IG49dC5sZW5ndGgvMnwwO2NvbnN0IGk9dC5zbGljZSgwLG4pO2NvbnN0IG89dC5zbGljZShuKTtlKGkscik7ZShvLHIpO2xldCBhPTA7bGV0IHM9MDtsZXQgbD0wO2Zvcig7YTxpLmxlbmd0aCYmczxvLmxlbmd0aDspe2xldCBlPXIoaVthXSxvW3NdKTtlPD0wP3RbbCsrXT1pW2ErK106dFtsKytdPW9bcysrXX1mb3IoO2E8aS5sZW5ndGg7KXRbbCsrXT1pW2ErK107Zm9yKDtzPG8ubGVuZ3RoOyl0W2wrK109b1tzKytdO3JldHVybiB0fSh0Lm1hcChVbiksKGUsdCk9Pnt2YXIgcj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT1yP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOnJ9KSl7dmFyIG89ZS5vZmZzZXRBdChhLnJhbmdlLnN0YXJ0KTtpZihvPG4pdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7bz5uJiZpLnB1c2goci5zdWJzdHJpbmcobixvKSksYS5uZXdUZXh0Lmxlbmd0aCYmaS5wdXNoKGEubmV3VGV4dCksbj1lLm9mZnNldEF0KGEucmFuZ2UuZW5kKX1yZXR1cm4gaS5wdXNoKHIuc3Vic3RyKG4pKSxpLmpvaW4oIiIpfSwobj1qZT1qZXx8e30pW24uVW5kZWZpbmVkPTBdPSJVbmRlZmluZWQiLG5bbi5FbnVtVmFsdWVNaXNtYXRjaD0xXT0iRW51bVZhbHVlTWlzbWF0Y2giLG5bbi5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIixuW24uVW5leHBlY3RlZEVuZE9mQ29tbWVudD0yNTddPSJVbmV4cGVjdGVkRW5kT2ZDb21tZW50IixuW24uVW5leHBlY3RlZEVuZE9mU3RyaW5nPTI1OF09IlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsbltuLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0yNTldPSJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLG5bbi5JbnZhbGlkVW5pY29kZT0yNjBdPSJJbnZhbGlkVW5pY29kZSIsbltuLkludmFsaWRFc2NhcGVDaGFyYWN0ZXI9MjYxXT0iSW52YWxpZEVzY2FwZUNoYXJhY3RlciIsbltuLkludmFsaWRDaGFyYWN0ZXI9MjYyXT0iSW52YWxpZENoYXJhY3RlciIsbltuLlByb3BlcnR5RXhwZWN0ZWQ9NTEzXT0iUHJvcGVydHlFeHBlY3RlZCIsbltuLkNvbW1hRXhwZWN0ZWQ9NTE0XT0iQ29tbWFFeHBlY3RlZCIsbltuLkNvbG9uRXhwZWN0ZWQ9NTE1XT0iQ29sb25FeHBlY3RlZCIsbltuLlZhbHVlRXhwZWN0ZWQ9NTE2XT0iVmFsdWVFeHBlY3RlZCIsbltuLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkPTUxN109IkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkIixuW24uQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZD01MThdPSJDb21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkIixuW24uVHJhaWxpbmdDb21tYT01MTldPSJUcmFpbGluZ0NvbW1hIixuW24uRHVwbGljYXRlS2V5PTUyMF09IkR1cGxpY2F0ZUtleSIsbltuLkNvbW1lbnROb3RQZXJtaXR0ZWQ9NTIxXT0iQ29tbWVudE5vdFBlcm1pdHRlZCIsbltuLlNjaGVtYVJlc29sdmVFcnJvcj03NjhdPSJTY2hlbWFSZXNvbHZlRXJyb3IiLGNuLk1hcmtkb3duLGNuLlBsYWluVGV4dDtCbj1mdW5jdGlvbihlLHQpe3JldHVybihCbj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmKGVbcl09dFtyXSl9KShlLHQpfTt2YXIgQm4sJG49ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfUJuKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KTooci5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHIpfSxVZT1xbixXbj17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpVZSgiY29sb3JIZXhGb3JtYXRXYXJuaW5nIiwiSW52YWxpZCBjb2xvciBmb3JtYXQuIFVzZSAjUkdCLCAjUkdCQSwgI1JSR0dCQiBvciAjUlJHR0JCQUEuIikscGF0dGVybjovXiMoWzAtOUEtRmEtZl17Myw0fXwoWzAtOUEtRmEtZl17Mn0pezMsNH0pJC99LCJkYXRlLXRpbWUiOntlcnJvck1lc3NhZ2U6VWUoImRhdGVUaW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOlVlKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOlVlKCJ0aW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTpVZSgiZW1haWxGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6VWUoImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTpVZSgiaXB2NEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjQgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZClcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSQvfSxpcHY2OntlcnJvck1lc3NhZ2U6VWUoImlwdjZGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY2IGFkZHJlc3MuIikscGF0dGVybjovXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSQvaX19LEhuPShPYmplY3QuZGVmaW5lUHJvcGVydHkoem4ucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHpuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9LHpuKTtmdW5jdGlvbiB6bihlLHQscil7dm9pZCAwPT09ciYmKHI9MCksdGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1yLHRoaXMucGFyZW50PWV9JG4oWm4sSm49SG4pO3ZhciBKbixHbj1abjtmdW5jdGlvbiBabihlLHQpe2U9Sm4uY2FsbCh0aGlzLGUsdCl8fHRoaXM7cmV0dXJuIGUudHlwZT0ibnVsbCIsZS52YWx1ZT1udWxsLGV9JG4oWW4sWG49SG4pO3ZhciBYbixRbj1ZbjtmdW5jdGlvbiBZbihlLHQscil7ZT1Ybi5jYWxsKHRoaXMsZSxyKXx8dGhpcztyZXR1cm4gZS50eXBlPSJib29sZWFuIixlLnZhbHVlPXQsZX0kbihyaSxlaT1IbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHJpLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KTt2YXIgZWksdGk9cmk7ZnVuY3Rpb24gcmkoZSx0KXtlPWVpLmNhbGwodGhpcyxlLHQpfHx0aGlzO3JldHVybiBlLnR5cGU9ImFycmF5IixlLml0ZW1zPVtdLGV9JG4ob2ksbmk9SG4pO3ZhciBuaSxpaT1vaTtmdW5jdGlvbiBvaShlLHQpe2U9bmkuY2FsbCh0aGlzLGUsdCl8fHRoaXM7cmV0dXJuIGUudHlwZT0ibnVtYmVyIixlLmlzSW50ZWdlcj0hMCxlLnZhbHVlPU51bWJlci5OYU4sZX0kbihsaSxhaT1Ibik7dmFyIGFpLHNpPWxpO2Z1bmN0aW9uIGxpKGUsdCxyKXtlPWFpLmNhbGwodGhpcyxlLHQscil8fHRoaXM7cmV0dXJuIGUudHlwZT0ic3RyaW5nIixlLnZhbHVlPSIiLGV9JG4oaGksY2k9SG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoaS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBjaSx1aT1oaTtmdW5jdGlvbiBoaShlLHQscil7ZT1jaS5jYWxsKHRoaXMsZSx0KXx8dGhpcztyZXR1cm4gZS50eXBlPSJwcm9wZXJ0eSIsZS5jb2xvbk9mZnNldD0tMSxlLmtleU5vZGU9cixlfSRuKG1pLGZpPUhuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWkucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3BlcnRpZXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSk7dmFyIGZpLGRpPW1pO2Z1bmN0aW9uIG1pKGUsdCl7ZT1maS5jYWxsKHRoaXMsZSx0KXx8dGhpcztyZXR1cm4gZS50eXBlPSJvYmplY3QiLGUucHJvcGVydGllcz1bXSxlfWZ1bmN0aW9uIGdpKGUpe3JldHVybiB0bihlKT9lP3t9Ontub3Q6e319OmV9YmkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLnNjaGVtYXMucHVzaChlKX0sYmkucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKGUpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuc2NoZW1hcyxlLnNjaGVtYXMpfSxiaS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4oLTE9PT10aGlzLmZvY3VzT2Zmc2V0fHxBaShlLHRoaXMuZm9jdXNPZmZzZXQpKSYmZSE9PXRoaXMuZXhjbHVkZX0sYmkucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiBuZXcgYmkoLTEsdGhpcy5leGNsdWRlKX07dmFyIHBpPWJpO2Z1bmN0aW9uIGJpKGUsdCl7dGhpcy5mb2N1c09mZnNldD1lPXZvaWQgMD09PWU/LTE6ZSx0aGlzLmV4Y2x1ZGU9dCx0aGlzLnNjaGVtYXM9W119T2JqZWN0LmRlZmluZVByb3BlcnR5KHlpLnByb3RvdHlwZSwic2NoZW1hcyIse2dldDpmdW5jdGlvbigpe3JldHVybltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHlpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7fSx5aS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7fSx5aS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4hMH0seWkucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx5aS5pbnN0YW5jZT1uZXcgeWk7dmFyIHZpPXlpO2Z1bmN0aW9uIHlpKCl7fXdpLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LHdpLnByb3RvdHlwZS5tZXJnZUFsbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWU7dDxyLmxlbmd0aDt0Kyspe3ZhciBuPXJbdF07dGhpcy5tZXJnZShuKX19LHdpLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt0aGlzLnByb2JsZW1zPXRoaXMucHJvYmxlbXMuY29uY2F0KGUucHJvYmxlbXMpfSx3aS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhZS5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZlLmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KGUuZW51bVZhbHVlcyk7Zm9yKHZhciB0PTAscj10aGlzLnByb2JsZW1zO3Q8ci5sZW5ndGg7dCsrKXt2YXIgbj1yW3RdO24uY29kZT09PWplLkVudW1WYWx1ZU1pc21hdGNoJiYobi5tZXNzYWdlPVVlKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0aGlzLmVudW1WYWx1ZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pLmpvaW4oIiwgIikpKX19fSx3aS5wcm90b3R5cGUubWVyZ2VQcm9wZXJ0eU1hdGNoPWZ1bmN0aW9uKGUpe3RoaXMubWVyZ2UoZSksdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcysrLChlLmVudW1WYWx1ZU1hdGNofHwhZS5oYXNQcm9ibGVtcygpJiZlLnByb3BlcnRpZXNNYXRjaGVzKSYmdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyssZS5lbnVtVmFsdWVNYXRjaCYmZS5lbnVtVmFsdWVzJiYxPT09ZS5lbnVtVmFsdWVzLmxlbmd0aCYmdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzKyt9LHdpLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzUHJvYmxlbXMoKTtyZXR1cm4gdCE9PWUuaGFzUHJvYmxlbXMoKT90Py0xOjE6dGhpcy5lbnVtVmFsdWVNYXRjaCE9PWUuZW51bVZhbHVlTWF0Y2g/ZS5lbnVtVmFsdWVNYXRjaD8tMToxOnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcyE9PWUucHJpbWFyeVZhbHVlTWF0Y2hlcz90aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMtZS5wcmltYXJ5VmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyE9PWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz90aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMtZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc01hdGNoZXMtZS5wcm9wZXJ0aWVzTWF0Y2hlc307dmFyIENpPXdpO2Z1bmN0aW9uIHdpKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfWZ1bmN0aW9uIF9pKGUpe3JldHVybiBYcihlKX1mdW5jdGlvbiBTaShlKXtyZXR1cm4gWnIoZSl9ZnVuY3Rpb24gQWkoZSx0LHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fHImJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH1FaS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD0hMSksdGhpcy5yb290KXJldHVybiBHcih0aGlzLnJvb3QsZSx0KX0sRWkucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGkpe3ZhciBvO3RoaXMucm9vdCYmKG89ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKSxyPWUuY2hpbGRyZW47aWYoQXJyYXkuaXNBcnJheShyKSlmb3IodmFyIG49MDtuPHIubGVuZ3RoJiZ0O24rKyl0PW8ocltuXSk7cmV0dXJuIHR9KSh0aGlzLnJvb3QpfSxFaS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24ocixlLG4pe3ZhciB0O2lmKHZvaWQgMD09PW4mJihuPVZyLldhcm5pbmcpLHRoaXMucm9vdCYmZSlyZXR1cm4gdD1uZXcgQ2ksTmkodGhpcy5yb290LGUsdCx2aS5pbnN0YW5jZSksdC5wcm9ibGVtcy5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9T3IuY3JlYXRlKHIucG9zaXRpb25BdChlLmxvY2F0aW9uLm9mZnNldCksci5wb3NpdGlvbkF0KGUubG9jYXRpb24ub2Zmc2V0K2UubG9jYXRpb24ubGVuZ3RoKSk7cmV0dXJuIFJyLmNyZWF0ZSh0LGUubWVzc2FnZSxudWxsIT09KHQ9ZS5zZXZlcml0eSkmJnZvaWQgMCE9PXQ/dDpuLGUuY29kZSl9KX0sRWkucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQscil7dD1uZXcgcGkodD12b2lkIDA9PT10Py0xOnQscik7cmV0dXJuIHRoaXMucm9vdCYmZSYmTmkodGhpcy5yb290LGUsbmV3IENpLHQpLHQuc2NoZW1hc307dmFyIHhpPUVpO2Z1bmN0aW9uIEVpKGUsdCxyKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ciYmKHI9W10pLHRoaXMucm9vdD1lLHRoaXMuc3ludGF4RXJyb3JzPXQsdGhpcy5jb21tZW50cz1yfWZ1bmN0aW9uIE5pKGwsZSx1LGYpe2lmKGwmJmYuaW5jbHVkZShsKSl7dmFyIGMsZCxtLGcscCxiLHYsaD1sO3N3aXRjaChoLnR5cGUpe2Nhc2Uib2JqZWN0Ijpmb3IodmFyIHQ9aCxyPWUsbj11LHk9ZixDPU9iamVjdC5jcmVhdGUobnVsbCksdz1bXSxfPTAsUz10LnByb3BlcnRpZXM7XzxTLmxlbmd0aDtfKyspe3ZhciBBPSgkPVNbX10pLmtleU5vZGUudmFsdWU7Q1tBXT0kLnZhbHVlTm9kZSx3LnB1c2goQSl9aWYoQXJyYXkuaXNBcnJheShyLnJlcXVpcmVkKSlmb3IodmFyIHg9MCxFPXIucmVxdWlyZWQ7eDxFLmxlbmd0aDt4Kyspe3ZhciBOLGs9RVt4XTtDW2tdfHwoTj10LnBhcmVudCYmInByb3BlcnR5Ij09PXQucGFyZW50LnR5cGUmJnQucGFyZW50LmtleU5vZGUsTj1OP3tvZmZzZXQ6Ti5vZmZzZXQsbGVuZ3RoOk4ubGVuZ3RofTp7b2Zmc2V0OnQub2Zmc2V0LGxlbmd0aDoxfSxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOk4sbWVzc2FnZTpVZSgiTWlzc2luZ1JlcXVpcmVkUHJvcFdhcm5pbmciLCdNaXNzaW5nIHByb3BlcnR5ICJ7MH0iLicsayl9KSl9ZnVuY3Rpb24gTChlKXtmb3IodmFyIHQ9dy5pbmRleE9mKGUpOzA8PXQ7KXcuc3BsaWNlKHQsMSksdD13LmluZGV4T2YoZSl9aWYoci5wcm9wZXJ0aWVzKWZvcih2YXIgTT0wLE89T2JqZWN0LmtleXMoci5wcm9wZXJ0aWVzKTtNPE8ubGVuZ3RoO00rKyl7dmFyIGs9T1tNXSxUPShMKGspLHIucHJvcGVydGllc1trXSk7KEI9Q1trXSkmJih0bihUKT9UPyhuLnByb3BlcnRpZXNNYXRjaGVzKyssbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyspOigkPUIucGFyZW50LG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDokLmtleU5vZGUub2Zmc2V0LGxlbmd0aDokLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnIuZXJyb3JNZXNzYWdlfHxVZSgiRGlzYWxsb3dlZEV4dHJhUHJvcFdhcm5pbmciLCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixrKX0pKTooej1uZXcgQ2ksTmkoQixULHoseSksbi5tZXJnZVByb3BlcnR5TWF0Y2goeikpKX1pZihyLnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgST0wLFA9T2JqZWN0LmtleXMoci5wYXR0ZXJuUHJvcGVydGllcyk7STxQLmxlbmd0aDtJKyspZm9yKHZhciBWPVBbSV0sUj1ubihWKSxEPTAsRj13LnNsaWNlKDApO0Q8Ri5sZW5ndGg7RCsrKXtrPUZbRF07bnVsbCE9UiYmUi50ZXN0KGspJiYoTChrKSwoQj1DW2tdKSYmKHRuKFQ9ci5wYXR0ZXJuUHJvcGVydGllc1tWXSk/VD8obi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrKTooJD1CLnBhcmVudCxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6JC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6JC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTpyLmVycm9yTWVzc2FnZXx8VWUoIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsayl9KSk6KHo9bmV3IENpLE5pKEIsVCx6LHkpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHopKSkpfWlmKCJvYmplY3QiPT10eXBlb2Ygci5hZGRpdGlvbmFsUHJvcGVydGllcylmb3IodmFyIEs9MCxqPXc7SzxqLmxlbmd0aDtLKyspe2s9altLXTsoQj1DW2tdKSYmKHo9bmV3IENpLE5pKEIsci5hZGRpdGlvbmFsUHJvcGVydGllcyx6LHkpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHopKX1lbHNlIGlmKCExPT09ci5hZGRpdGlvbmFsUHJvcGVydGllcyYmMDx3Lmxlbmd0aClmb3IodmFyIFU9MCxxPXc7VTxxLmxlbmd0aDtVKyspe3ZhciBCLCQsaz1xW1VdOyhCPUNba10pJiYoJD1CLnBhcmVudCxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6JC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6JC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTpyLmVycm9yTWVzc2FnZXx8VWUoIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsayl9KSl9aWYoWXIoci5tYXhQcm9wZXJ0aWVzKSYmdC5wcm9wZXJ0aWVzLmxlbmd0aD5yLm1heFByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDp0Lm9mZnNldCxsZW5ndGg6dC5sZW5ndGh9LG1lc3NhZ2U6VWUoIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIixyLm1heFByb3BlcnRpZXMpfSksWXIoci5taW5Qcm9wZXJ0aWVzKSYmdC5wcm9wZXJ0aWVzLmxlbmd0aDxyLm1pblByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDp0Lm9mZnNldCxsZW5ndGg6dC5sZW5ndGh9LG1lc3NhZ2U6VWUoIk1pblByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBmZXdlciBwcm9wZXJ0aWVzIHRoYW4gdGhlIHJlcXVpcmVkIG51bWJlciBvZiB7MH0iLHIubWluUHJvcGVydGllcyl9KSxyLmRlcGVuZGVuY2llcylmb3IodmFyIFc9MCxIPU9iamVjdC5rZXlzKHIuZGVwZW5kZW5jaWVzKTtXPEgubGVuZ3RoO1crKyl7QT1IW1ddO2lmKENbQV0pe3ZhciB6LEo9ci5kZXBlbmRlbmNpZXNbQV07aWYoQXJyYXkuaXNBcnJheShKKSlmb3IodmFyIEc9MCxaPUo7RzxaLmxlbmd0aDtHKyspe3ZhciBYPVpbR107Q1tYXT9uLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKzpuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6dC5vZmZzZXQsbGVuZ3RoOnQubGVuZ3RofSxtZXNzYWdlOlVlKCJSZXF1aXJlZERlcGVuZGVudFByb3BXYXJuaW5nIiwiT2JqZWN0IGlzIG1pc3NpbmcgcHJvcGVydHkgezB9IHJlcXVpcmVkIGJ5IHByb3BlcnR5IHsxfS4iLFgsQSl9KX1lbHNlKFQ9Z2koSikpJiYoej1uZXcgQ2ksTmkodCxULHoseSksbi5tZXJnZVByb3BlcnR5TWF0Y2goeikpfX12YXIgUT1naShyLnByb3BlcnR5TmFtZXMpO2lmKFEpZm9yKHZhciBZPTAsZWU9dC5wcm9wZXJ0aWVzO1k8ZWUubGVuZ3RoO1krKyl7dmFyIHRlPWVlW1ldOyhBPXRlLmtleU5vZGUpJiZOaShBLFEsbix2aS5pbnN0YW5jZSl9YnJlYWs7Y2FzZSJhcnJheSI6dmFyIGk9aCxyZT1lLG5lPXUsaWU9ZjtpZihBcnJheS5pc0FycmF5KHJlLml0ZW1zKSl7Zm9yKHZhciBvZT1yZS5pdGVtcyxhZT0wO2FlPG9lLmxlbmd0aDthZSsrKXt2YXIgc2U9Z2kob2VbYWVdKSxsZT1uZXcgQ2k7KGRlPWkuaXRlbXNbYWVdKT8oTmkoZGUsc2UsbGUsaWUpLG5lLm1lcmdlUHJvcGVydHlNYXRjaChsZSkpOmkuaXRlbXMubGVuZ3RoPj1vZS5sZW5ndGgmJm5lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrK31pZihpLml0ZW1zLmxlbmd0aD5vZS5sZW5ndGgpaWYoIm9iamVjdCI9PXR5cGVvZiByZS5hZGRpdGlvbmFsSXRlbXMpZm9yKHZhciBjZT1vZS5sZW5ndGg7Y2U8aS5pdGVtcy5sZW5ndGg7Y2UrKyl7bGU9bmV3IENpO05pKGkuaXRlbXNbY2VdLHJlLmFkZGl0aW9uYWxJdGVtcyxsZSxpZSksbmUubWVyZ2VQcm9wZXJ0eU1hdGNoKGxlKX1lbHNlITE9PT1yZS5hZGRpdGlvbmFsSXRlbXMmJm5lLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOlVlKCJhZGRpdGlvbmFsSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zIGFjY29yZGluZyB0byBzY2hlbWEuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLG9lLmxlbmd0aCl9KX1lbHNle3ZhciB1ZT1naShyZS5pdGVtcyk7aWYodWUpZm9yKHZhciBoZT0wLGZlPWkuaXRlbXM7aGU8ZmUubGVuZ3RoO2hlKyspe3ZhciBkZT1mZVtoZV0sbGU9bmV3IENpO05pKGRlLHVlLGxlLGllKSxuZS5tZXJnZVByb3BlcnR5TWF0Y2gobGUpfX12YXIgbWUsZ2U9Z2kocmUuY29udGFpbnMpO2dlJiYoaS5pdGVtcy5zb21lKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBDaTtyZXR1cm4gTmkoZSxnZSx0LHZpLmluc3RhbmNlKSwhdC5oYXNQcm9ibGVtcygpfSl8fG5lLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnJlLmVycm9yTWVzc2FnZXx8VWUoInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSkpLFlyKHJlLm1pbkl0ZW1zKSYmaS5pdGVtcy5sZW5ndGg8cmUubWluSXRlbXMmJm5lLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOlVlKCJtaW5JdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIGZldyBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIG1vcmUuIixyZS5taW5JdGVtcyl9KSxZcihyZS5tYXhJdGVtcykmJmkuaXRlbXMubGVuZ3RoPnJlLm1heEl0ZW1zJiZuZS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTpVZSgibWF4SXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIixyZS5tYXhJdGVtcyl9KSwhMCE9PXJlLnVuaXF1ZUl0ZW1zfHwobWU9X2koaSkpLnNvbWUoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCE9PW1lLmxhc3RJbmRleE9mKGUpfSkmJm5lLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOlVlKCJ1bmlxdWVJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgZHVwbGljYXRlIGl0ZW1zLiIpfSk7YnJlYWs7Y2FzZSJzdHJpbmciOnZhciBvLGE9aCxzPWUscGU9dTtpZihZcihzLm1pbkxlbmd0aCkmJmEudmFsdWUubGVuZ3RoPHMubWluTGVuZ3RoJiZwZS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmEub2Zmc2V0LGxlbmd0aDphLmxlbmd0aH0sbWVzc2FnZTpVZSgibWluTGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHswfS4iLHMubWluTGVuZ3RoKX0pLFlyKHMubWF4TGVuZ3RoKSYmYS52YWx1ZS5sZW5ndGg+cy5tYXhMZW5ndGgmJnBlLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6YS5vZmZzZXQsbGVuZ3RoOmEubGVuZ3RofSxtZXNzYWdlOlVlKCJtYXhMZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB7MH0uIixzLm1heExlbmd0aCl9KSwic3RyaW5nIj09dHlwZW9mIHMucGF0dGVybiYmKG51bGwhPShvPW5uKHMucGF0dGVybikpJiZvLnRlc3QoYS52YWx1ZSl8fHBlLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6YS5vZmZzZXQsbGVuZ3RoOmEubGVuZ3RofSxtZXNzYWdlOnMucGF0dGVybkVycm9yTWVzc2FnZXx8cy5lcnJvck1lc3NhZ2V8fFVlKCJwYXR0ZXJuV2FybmluZyIsJ1N0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybiBvZiAiezB9Ii4nLHMucGF0dGVybil9KSkscy5mb3JtYXQpc3dpdGNoKHMuZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp2YXIgYmU9dm9pZCAwO2EudmFsdWU/KHZlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLmV4ZWMoYS52YWx1ZSkpP3ZlWzJdfHwidXJpIiE9PXMuZm9ybWF0fHwoYmU9VWUoInVyaVNjaGVtZU1pc3NpbmciLCJVUkkgd2l0aCBhIHNjaGVtZSBpcyBleHBlY3RlZC4iKSk6YmU9VWUoInVyaU1pc3NpbmciLCJVUkkgaXMgZXhwZWN0ZWQuIik6YmU9VWUoInVyaUVtcHR5IiwiVVJJIGV4cGVjdGVkLiIpLGJlJiZwZS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmEub2Zmc2V0LGxlbmd0aDphLmxlbmd0aH0sbWVzc2FnZTpzLnBhdHRlcm5FcnJvck1lc3NhZ2V8fHMuZXJyb3JNZXNzYWdlfHxVZSgidXJpRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBVUkk6IHswfSIsYmUpfSk7YnJlYWs7Y2FzZSJjb2xvci1oZXgiOmNhc2UiZGF0ZS10aW1lIjpjYXNlImRhdGUiOmNhc2UidGltZSI6Y2FzZSJlbWFpbCI6Y2FzZSJob3N0bmFtZSI6Y2FzZSJpcHY0IjpjYXNlImlwdjYiOnZhciB2ZT1XbltzLmZvcm1hdF07YS52YWx1ZSYmdmUucGF0dGVybi5leGVjKGEudmFsdWUpfHxwZS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmEub2Zmc2V0LGxlbmd0aDphLmxlbmd0aH0sbWVzc2FnZTpzLnBhdHRlcm5FcnJvck1lc3NhZ2V8fHMuZXJyb3JNZXNzYWdlfHx2ZS5lcnJvck1lc3NhZ2V9KX1icmVhaztjYXNlIm51bWJlciI6bz1lLGQ9dSxtPShjPWgpLnZhbHVlLFlyKG8ubXVsdGlwbGVPZikmJih2PS0xLE51bWJlci5pc0ludGVnZXIoby5tdWx0aXBsZU9mKT92PW0lby5tdWx0aXBsZU9mOihiPURlKG8ubXVsdGlwbGVPZikscD1EZShtKSxiJiZwJiYoZz1NYXRoLnBvdygxMCxNYXRoLmFicyhwLm11bHRpcGxpZXItYi5tdWx0aXBsaWVyKSkscC5tdWx0aXBsaWVyPGIubXVsdGlwbGllcj9wLnZhbHVlKj1nOmIudmFsdWUqPWcsdj1wLnZhbHVlJWIudmFsdWUpKSwwIT09diYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpVZSgibXVsdGlwbGVPZldhcm5pbmciLCJWYWx1ZSBpcyBub3QgZGl2aXNpYmxlIGJ5IHswfS4iLG8ubXVsdGlwbGVPZil9KSksWXIoZz1GZShvLm1pbmltdW0sby5leGNsdXNpdmVNaW5pbXVtKSkmJm08PWcmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6VWUoImV4Y2x1c2l2ZU1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIGV4Y2x1c2l2ZSBtaW5pbXVtIG9mIHswfS4iLGcpfSksWXIocD1GZShvLm1heGltdW0sby5leGNsdXNpdmVNYXhpbXVtKSkmJnA8PW0mJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6VWUoImV4Y2x1c2l2ZU1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIGV4Y2x1c2l2ZSBtYXhpbXVtIG9mIHswfS4iLHApfSksWXIoYj1LZShvLm1pbmltdW0sby5leGNsdXNpdmVNaW5pbXVtKSkmJm08YiYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpVZSgibWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgbWluaW11bSBvZiB7MH0uIixiKX0pLFlyKHY9S2Uoby5tYXhpbXVtLG8uZXhjbHVzaXZlTWF4aW11bSkpJiZ2PG0mJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6VWUoIm1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIG1heGltdW0gb2YgezB9LiIsdil9KTticmVhaztjYXNlInByb3BlcnR5IjpyZXR1cm4gTmkoaC52YWx1ZU5vZGUsZSx1LGYpfWZ1bmN0aW9uIHllKGUpe3JldHVybiBoLnR5cGU9PT1lfHwiaW50ZWdlciI9PT1lJiYibnVtYmVyIj09PWgudHlwZSYmaC5pc0ludGVnZXJ9aWYoQXJyYXkuaXNBcnJheShlLnR5cGUpP2UudHlwZS5zb21lKHllKXx8dS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omgub2Zmc2V0LGxlbmd0aDpoLmxlbmd0aH0sbWVzc2FnZTplLmVycm9yTWVzc2FnZXx8VWUoInR5cGVBcnJheU1pc21hdGNoV2FybmluZyIsIkluY29ycmVjdCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgezB9LiIsZS50eXBlLmpvaW4oIiwgIikpfSk6ZS50eXBlJiYoeWUoZS50eXBlKXx8dS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omgub2Zmc2V0LGxlbmd0aDpoLmxlbmd0aH0sbWVzc2FnZTplLmVycm9yTWVzc2FnZXx8VWUoInR5cGVNaXNtYXRjaFdhcm5pbmciLCdJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgInswfSIuJyxlLnR5cGUpfSkpLEFycmF5LmlzQXJyYXkoZS5hbGxPZikpZm9yKHZhciBDZT0wLHdlPWUuYWxsT2Y7Q2U8d2UubGVuZ3RoO0NlKyspe3ZhciBfZT13ZVtDZV07TmkoaCxnaShfZSksdSxmKX1sPWdpKGUubm90KTtpZihsKXt2YXIgU2U9bmV3IENpLEFlPWYubmV3U3ViKCk7TmkoaCxsLFNlLEFlKSxTZS5oYXNQcm9ibGVtcygpfHx1LnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aC5vZmZzZXQsbGVuZ3RoOmgubGVuZ3RofSxtZXNzYWdlOlVlKCJub3RTY2hlbWFXYXJuaW5nIiwiTWF0Y2hlcyBhIHNjaGVtYSB0aGF0IGlzIG5vdCBhbGxvd2VkLiIpfSk7Zm9yKHZhciB4ZT0wLEVlPUFlLnNjaGVtYXM7eGU8RWUubGVuZ3RoO3hlKyspe3ZhciBOZT1FZVt4ZV07TmUuaW52ZXJ0ZWQ9IU5lLmludmVydGVkLGYuYWRkKE5lKX19ZnVuY3Rpb24ga2UoZSx0KXtmb3IodmFyIHI9W10sbj12b2lkIDAsaT0wLG89ZTtpPG8ubGVuZ3RoO2krKyl7dmFyIGEscz1naShvW2ldKSxsPW5ldyBDaSxjPWYubmV3U3ViKCk7TmkoaCxzLGwsYyksbC5oYXNQcm9ibGVtcygpfHxyLnB1c2gocyksbj90fHxsLmhhc1Byb2JsZW1zKCl8fG4udmFsaWRhdGlvblJlc3VsdC5oYXNQcm9ibGVtcygpPzA8KGE9bC5jb21wYXJlKG4udmFsaWRhdGlvblJlc3VsdCkpP249e3NjaGVtYTpzLHZhbGlkYXRpb25SZXN1bHQ6bCxtYXRjaGluZ1NjaGVtYXM6Y306MD09PWEmJihuLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShjKSxuLnZhbGlkYXRpb25SZXN1bHQubWVyZ2VFbnVtVmFsdWVzKGwpKToobi5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoYyksbi52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzKz1sLnByb3BlcnRpZXNNYXRjaGVzLG4udmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1sLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMpOm49e3NjaGVtYTpzLHZhbGlkYXRpb25SZXN1bHQ6bCxtYXRjaGluZ1NjaGVtYXM6Y319cmV0dXJuIDE8ci5sZW5ndGgmJnQmJnUucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpoLm9mZnNldCxsZW5ndGg6MX0sbWVzc2FnZTpVZSgib25lT2ZXYXJuaW5nIiwiTWF0Y2hlcyBtdWx0aXBsZSBzY2hlbWFzIHdoZW4gb25seSBvbmUgbXVzdCB2YWxpZGF0ZS4iKX0pLG4mJih1Lm1lcmdlKG4udmFsaWRhdGlvblJlc3VsdCksdS5wcm9wZXJ0aWVzTWF0Y2hlcys9bi52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzLHUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9bi52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsZi5tZXJnZShuLm1hdGNoaW5nU2NoZW1hcykpLHIubGVuZ3RofWZ1bmN0aW9uIExlKGUpe3ZhciB0PW5ldyBDaSxyPWYubmV3U3ViKCk7TmkoaCxnaShlKSx0LHIpLHUubWVyZ2UodCksdS5wcm9wZXJ0aWVzTWF0Y2hlcys9dC5wcm9wZXJ0aWVzTWF0Y2hlcyx1LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPXQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxmLm1lcmdlKHIpfWlmKEFycmF5LmlzQXJyYXkoZS5hbnlPZikmJmtlKGUuYW55T2YsITEpLEFycmF5LmlzQXJyYXkoZS5vbmVPZikmJmtlKGUub25lT2YsITApLGw9Z2koZS5pZikpe1NlPWw7QWU9Z2koZS50aGVuKTtsPWdpKGUuZWxzZSk7dmFyIFNlPWdpKFNlKSxNZT1uZXcgQ2ksT2U9Zi5uZXdTdWIoKTtOaShoLFNlLE1lLE9lKSxmLm1lcmdlKE9lKSxNZS5oYXNQcm9ibGVtcygpP2wmJkxlKGwpOkFlJiZMZShBZSl9aWYoQXJyYXkuaXNBcnJheShlLmVudW0pKXtmb3IodmFyIFRlPV9pKGgpLEllPSExLFBlPTAsVmU9ZS5lbnVtO1BlPFZlLmxlbmd0aDtQZSsrKXt2YXIgUmU9VmVbUGVdO2lmKFFyKFRlLFJlKSl7SWU9ITA7YnJlYWt9fXUuZW51bVZhbHVlcz1lLmVudW0sKHUuZW51bVZhbHVlTWF0Y2g9SWUpfHx1LnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aC5vZmZzZXQsbGVuZ3RoOmgubGVuZ3RofSxjb2RlOmplLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6ZS5lcnJvck1lc3NhZ2V8fFVlKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIixlLmVudW0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pLmpvaW4oIiwgIikpfSl9ZW4oZS5jb25zdCkmJihRcihUZT1faShoKSxlLmNvbnN0KT91LmVudW1WYWx1ZU1hdGNoPSEwOih1LnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aC5vZmZzZXQsbGVuZ3RoOmgubGVuZ3RofSxjb2RlOmplLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6ZS5lcnJvck1lc3NhZ2V8fFVlKCJjb25zdFdhcm5pbmciLCJWYWx1ZSBtdXN0IGJlIHswfS4iLEpTT04uc3RyaW5naWZ5KGUuY29uc3QpKX0pLHUuZW51bVZhbHVlTWF0Y2g9ITEpLHUuZW51bVZhbHVlcz1bZS5jb25zdF0pLGUuZGVwcmVjYXRpb25NZXNzYWdlJiZoLnBhcmVudCYmdS5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmgucGFyZW50Lm9mZnNldCxsZW5ndGg6aC5wYXJlbnQubGVuZ3RofSxzZXZlcml0eTpWci5XYXJuaW5nLG1lc3NhZ2U6ZS5kZXByZWNhdGlvbk1lc3NhZ2UsY29kZTpqZS5EZXByZWNhdGVkfSksZi5hZGQoe25vZGU6aCxzY2hlbWE6ZX0pfWZ1bmN0aW9uIERlKGUpe3ZhciB0LGU9L14oLT9cZCspKD86XC4oXGQrKSk/KD86ZShbLStdXGQrKSk/JC8uZXhlYyhlLnRvU3RyaW5nKCkpO3JldHVybiBlJiZ7dmFsdWU6TnVtYmVyKGVbMV0rKGVbMl18fCIiKSksbXVsdGlwbGllcjooKG51bGw9PT0odD1lWzJdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5sZW5ndGgpfHwwKS0ocGFyc2VJbnQoZVszXSl8fDApfX1mdW5jdGlvbiBGZShlLHQpe3JldHVybiBZcih0KT90OnRuKHQpJiZ0P2U6dm9pZCAwfWZ1bmN0aW9uIEtlKGUsdCl7aWYoIXRuKHQpfHwhdClyZXR1cm4gZX19ZnVuY3Rpb24ga2kobyxlKXt2YXIgYT1bXSxkPS0xLG09by5nZXRUZXh0KCksbD16cihtLCExKSx0PWUmJmUuY29sbGVjdENvbW1lbnRzP1tdOnZvaWQgMDtmdW5jdGlvbiBjKCl7Zm9yKDs7KXt2YXIgZT1sLnNjYW4oKTtzd2l0Y2goIWZ1bmN0aW9uKCl7c3dpdGNoKGwuZ2V0VG9rZW5FcnJvcigpKXtjYXNlIDQ6cmV0dXJuIHMoVWUoIkludmFsaWRVbmljb2RlIiwiSW52YWxpZCB1bmljb2RlIHNlcXVlbmNlIGluIHN0cmluZy4iKSxqZS5JbnZhbGlkVW5pY29kZSk7Y2FzZSA1OnJldHVybiBzKFVlKCJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIiwiSW52YWxpZCBlc2NhcGUgY2hhcmFjdGVyIGluIHN0cmluZy4iKSxqZS5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyKTtjYXNlIDM6cmV0dXJuIHMoVWUoIlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsIlVuZXhwZWN0ZWQgZW5kIG9mIG51bWJlci4iKSxqZS5VbmV4cGVjdGVkRW5kT2ZOdW1iZXIpO2Nhc2UgMTpyZXR1cm4gcyhVZSgiVW5leHBlY3RlZEVuZE9mQ29tbWVudCIsIlVuZXhwZWN0ZWQgZW5kIG9mIGNvbW1lbnQuIiksamUuVW5leHBlY3RlZEVuZE9mQ29tbWVudCk7Y2FzZSAyOnJldHVybiBzKFVlKCJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLCJVbmV4cGVjdGVkIGVuZCBvZiBzdHJpbmcuIiksamUuVW5leHBlY3RlZEVuZE9mU3RyaW5nKTtjYXNlIDY6cmV0dXJuIHMoVWUoIkludmFsaWRDaGFyYWN0ZXIiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gc3RyaW5nLiBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkLiIpLGplLkludmFsaWRDaGFyYWN0ZXIpfX0oKSxlKXtjYXNlIDEyOmNhc2UgMTM6QXJyYXkuaXNBcnJheSh0KSYmdC5wdXNoKE9yLmNyZWF0ZShvLnBvc2l0aW9uQXQobC5nZXRUb2tlbk9mZnNldCgpKSxvLnBvc2l0aW9uQXQobC5nZXRUb2tlbk9mZnNldCgpK2wuZ2V0VG9rZW5MZW5ndGgoKSkpKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZX19fWZ1bmN0aW9uIHUoZSx0LHIsbixpKXt2b2lkIDA9PT1pJiYoaT1Wci5FcnJvciksMCE9PWEubGVuZ3RoJiZyPT09ZHx8KG49T3IuY3JlYXRlKG8ucG9zaXRpb25BdChyKSxvLnBvc2l0aW9uQXQobikpLGEucHVzaChSci5jcmVhdGUobixlLGksdCxvLmxhbmd1YWdlSWQpKSxkPXIpfWZ1bmN0aW9uIHMoZSx0LHIsbixpKXt2b2lkIDA9PT1yJiYocj12b2lkIDApLHZvaWQgMD09PW4mJihuPVtdKSx2b2lkIDA9PT1pJiYoaT1bXSk7dmFyIG89bC5nZXRUb2tlbk9mZnNldCgpLGE9bC5nZXRUb2tlbk9mZnNldCgpK2wuZ2V0VG9rZW5MZW5ndGgoKTtpZihvPT09YSYmMDxvKXtmb3Ioby0tOzA8byYmL1xzLy50ZXN0KG0uY2hhckF0KG8pKTspby0tO2E9bysxfWlmKHUoZSx0LG8sYSksciYmaChyLCExKSwwPG4ubGVuZ3RoK2kubGVuZ3RoKWZvcih2YXIgcz1sLmdldFRva2VuKCk7MTchPT1zOyl7aWYoLTEhPT1uLmluZGV4T2Yocykpe2MoKTticmVha31pZigtMSE9PWkuaW5kZXhPZihzKSlicmVhaztzPWMoKX1yZXR1cm4gcn1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGUubGVuZ3RoPWwuZ2V0VG9rZW5PZmZzZXQoKStsLmdldFRva2VuTGVuZ3RoKCktZS5vZmZzZXQsdCYmYygpLGV9dmFyIGc9bmV3IHNpKHZvaWQgMCwwLDApO2Z1bmN0aW9uIHIoZSl7aWYoMT09PWwuZ2V0VG9rZW4oKSl7Zm9yKHZhciB0PW5ldyBkaShlLGwuZ2V0VG9rZW5PZmZzZXQoKSkscj1PYmplY3QuY3JlYXRlKG51bGwpLG49KGMoKSwhMSk7MiE9PWwuZ2V0VG9rZW4oKSYmMTchPT1sLmdldFRva2VuKCk7KXtpZig1PT09bC5nZXRUb2tlbigpKXtufHxzKFVlKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxqZS5Qcm9wZXJ0eUV4cGVjdGVkKTt2YXIgaT1sLmdldFRva2VuT2Zmc2V0KCk7aWYoYygpLDI9PT1sLmdldFRva2VuKCkpe24mJnUoVWUoIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLGplLlRyYWlsaW5nQ29tbWEsaSxpKzEpO2NvbnRpbnVlfX1lbHNlIG4mJnMoVWUoIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLGplLkNvbW1hRXhwZWN0ZWQpO2k9ZnVuY3Rpb24oZSx0KXt2YXIgcj1wKGU9bmV3IHVpKGUsbC5nZXRUb2tlbk9mZnNldCgpLGcpKTtpZighcil7aWYoMTYhPT1sLmdldFRva2VuKCkpcmV0dXJuO3MoVWUoIkRvdWJsZVF1b3Rlc0V4cGVjdGVkIiwiUHJvcGVydHkga2V5cyBtdXN0IGJlIGRvdWJsZXF1b3RlZCIpLGplLlVuZGVmaW5lZCk7dmFyIG49bmV3IHNpKGUsbC5nZXRUb2tlbk9mZnNldCgpLGwuZ2V0VG9rZW5MZW5ndGgoKSk7bi52YWx1ZT1sLmdldFRva2VuVmFsdWUoKSxyPW4sYygpfWlmKChuPXRbKGUua2V5Tm9kZT1yKS52YWx1ZV0pPyh1KFVlKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSxqZS5EdXBsaWNhdGVLZXksZS5rZXlOb2RlLm9mZnNldCxlLmtleU5vZGUub2Zmc2V0K2Uua2V5Tm9kZS5sZW5ndGgsVnIuV2FybmluZyksIm9iamVjdCI9PXR5cGVvZiBuJiZ1KFVlKCJEdXBsaWNhdGVLZXlXYXJuaW5nIiwiRHVwbGljYXRlIG9iamVjdCBrZXkiKSxqZS5EdXBsaWNhdGVLZXksbi5rZXlOb2RlLm9mZnNldCxuLmtleU5vZGUub2Zmc2V0K24ua2V5Tm9kZS5sZW5ndGgsVnIuV2FybmluZyksdFtyLnZhbHVlXT0hMCk6dFtyLnZhbHVlXT1lLDY9PT1sLmdldFRva2VuKCkpZS5jb2xvbk9mZnNldD1sLmdldFRva2VuT2Zmc2V0KCksYygpO2Vsc2UgaWYocyhVZSgiQ29sb25FeHBlY3RlZCIsIkNvbG9uIGV4cGVjdGVkIiksamUuQ29sb25FeHBlY3RlZCksMTA9PT1sLmdldFRva2VuKCkmJm8ucG9zaXRpb25BdChyLm9mZnNldCtyLmxlbmd0aCkubGluZTxvLnBvc2l0aW9uQXQobC5nZXRUb2tlbk9mZnNldCgpKS5saW5lKXJldHVybiBlLmxlbmd0aD1yLmxlbmd0aCxlO3JldHVybihuPWYoZSkpPyhlLnZhbHVlTm9kZT1uLGUubGVuZ3RoPW4ub2Zmc2V0K24ubGVuZ3RoLWUub2Zmc2V0LGUpOnMoVWUoIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLGplLlZhbHVlRXhwZWN0ZWQsZSxbXSxbMiw1XSl9KHQscik7aT90LnByb3BlcnRpZXMucHVzaChpKTpzKFVlKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxqZS5Qcm9wZXJ0eUV4cGVjdGVkLHZvaWQgMCxbXSxbMiw1XSksbj0hMH1yZXR1cm4gMiE9PWwuZ2V0VG9rZW4oKT9zKFVlKCJFeHBlY3RlZENsb3NlQnJhY2UiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNlIiksamUuQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCx0KTpoKHQsITApfX1mdW5jdGlvbiBwKGUpe2lmKDEwPT09bC5nZXRUb2tlbigpKXJldHVybiBlPW5ldyBzaShlLGwuZ2V0VG9rZW5PZmZzZXQoKSksZS52YWx1ZT1sLmdldFRva2VuVmFsdWUoKSxoKGUsITApfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKDM9PT1sLmdldFRva2VuKCkpe2Zvcih2YXIgdD1uZXcgdGkoZSxsLmdldFRva2VuT2Zmc2V0KCkpLHI9KGMoKSwhMSk7NCE9PWwuZ2V0VG9rZW4oKSYmMTchPT1sLmdldFRva2VuKCk7KXtpZig1PT09bC5nZXRUb2tlbigpKXtyfHxzKFVlKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxqZS5WYWx1ZUV4cGVjdGVkKTt2YXIgbj1sLmdldFRva2VuT2Zmc2V0KCk7aWYoYygpLDQ9PT1sLmdldFRva2VuKCkpe3ImJnUoVWUoIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLGplLlRyYWlsaW5nQ29tbWEsbixuKzEpO2NvbnRpbnVlfX1lbHNlIHImJnMoVWUoIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLGplLkNvbW1hRXhwZWN0ZWQpO249Zih0KTtuP3QuaXRlbXMucHVzaChuKTpzKFVlKCJQcm9wZXJ0eUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxqZS5WYWx1ZUV4cGVjdGVkLHZvaWQgMCxbXSxbNCw1XSkscj0hMH1yZXR1cm4gNCE9PWwuZ2V0VG9rZW4oKT9zKFVlKCJFeHBlY3RlZENsb3NlQnJhY2tldCIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2tldCIpLGplLkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkLHQpOmgodCwhMCl9fShlKXx8cihlKXx8cChlKXx8ZnVuY3Rpb24odCl7aWYoMTE9PT1sLmdldFRva2VuKCkpe3Q9bmV3IGlpKHQsbC5nZXRUb2tlbk9mZnNldCgpKTtpZigwPT09bC5nZXRUb2tlbkVycm9yKCkpe3ZhciBlPWwuZ2V0VG9rZW5WYWx1ZSgpO3RyeXt2YXIgcj1KU09OLnBhcnNlKGUpO2lmKCFZcihyKSlyZXR1cm4gcyhVZSgiSW52YWxpZE51bWJlckZvcm1hdCIsIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSxqZS5VbmRlZmluZWQsdCk7dC52YWx1ZT1yfWNhdGNoKGUpe3JldHVybiBzKFVlKCJJbnZhbGlkTnVtYmVyRm9ybWF0IiwiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLGplLlVuZGVmaW5lZCx0KX10LmlzSW50ZWdlcj0tMT09PWUuaW5kZXhPZigiLiIpfXJldHVybiBoKHQsITApfX0oZSl8fGZ1bmN0aW9uKGUpe3N3aXRjaChsLmdldFRva2VuKCkpe2Nhc2UgNzpyZXR1cm4gaChuZXcgR24oZSxsLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtjYXNlIDg6cmV0dXJuIGgobmV3IFFuKGUsITAsbC5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA5OnJldHVybiBoKG5ldyBRbihlLCExLGwuZ2V0VG9rZW5PZmZzZXQoKSksITApO2RlZmF1bHQ6cmV0dXJufX0oZSl9ZT12b2lkIDA7cmV0dXJuIDE3IT09YygpJiYoKGU9ZihlKSk/MTchPT1sLmdldFRva2VuKCkmJnMoVWUoIkVuZCBvZiBmaWxlIGV4cGVjdGVkIiwiRW5kIG9mIGZpbGUgZXhwZWN0ZWQuIiksamUuVW5kZWZpbmVkKTpzKFVlKCJJbnZhbGlkIHN5bWJvbCIsIkV4cGVjdGVkIGEgSlNPTiBvYmplY3QsIGFycmF5IG9yIGxpdGVyYWwuIiksamUuVW5kZWZpbmVkKSksbmV3IHhpKGUsYSx0KX12YXIgTGk9cW4sTWk9KG8ucHJvdG90eXBlLmRvUmVzb2x2ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xOzA8PXQ7dC0tKXt2YXIgcj10aGlzLmNvbnRyaWJ1dGlvbnNbdF0ucmVzb2x2ZUNvbXBsZXRpb247aWYocil7cj1yKGUpO2lmKHIpcmV0dXJuIHJ9fXJldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5yZXNvbHZlKGUpfSxvLnByb3RvdHlwZS5kb0NvbXBsZXRlPWZ1bmN0aW9uKGMsdCx1KXt2YXIgaD10aGlzLGY9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0sZD1jLmdldFRleHQoKSxtPWMub2Zmc2V0QXQodCksZz11LmdldE5vZGVGcm9tT2Zmc2V0KG0sITApO2lmKHRoaXMuaXNJbkNvbW1lbnQoYyxnP2cub2Zmc2V0OjAsbSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZShmKTtnJiZtPT09Zy5vZmZzZXQrZy5sZW5ndGgmJjA8bSYmKGU9ZFttLTFdLCgib2JqZWN0Ij09PWcudHlwZSYmIn0iPT09ZXx8ImFycmF5Ij09PWcudHlwZSYmIl0iPT09ZSkmJihnPWcucGFyZW50KSk7dmFyIGUscD10aGlzLmdldEN1cnJlbnRXb3JkKGMsbSksdj0hZ3x8InN0cmluZyIhPT1nLnR5cGUmJiJudW1iZXIiIT09Zy50eXBlJiYiYm9vbGVhbiIhPT1nLnR5cGUmJiJudWxsIiE9PWcudHlwZT8oMDwoZT1tLXAubGVuZ3RoKSYmJyInPT09ZFtlLTFdJiZlLS0sT3IuY3JlYXRlKGMucG9zaXRpb25BdChlKSx0KSk6T3IuY3JlYXRlKGMucG9zaXRpb25BdChnLm9mZnNldCksYy5wb3NpdGlvbkF0KGcub2Zmc2V0K2cubGVuZ3RoKSkseT17fSxiPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYWJlbCxyPXlbdF07cj8oci5kb2N1bWVudGF0aW9ufHwoci5kb2N1bWVudGF0aW9uPWUuZG9jdW1lbnRhdGlvbiksci5kZXRhaWx8fChyLmRldGFpbD1lLmRldGFpbCkpOig2MDwodD10LnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLmxlbmd0aCYmKHI9dC5zdWJzdHIoMCw1NykudHJpbSgpKyIuLi4iLHlbcl18fCh0PXIpKSx2JiZ2b2lkIDAhPT1lLmluc2VydFRleHQmJihlLnRleHRFZGl0PURyLnJlcGxhY2UodixlLmluc2VydFRleHQpKSxlLmxhYmVsPXQseVt0XT1lLGYuaXRlbXMucHVzaChlKSl9LHNldEFzSW5jb21wbGV0ZTpmdW5jdGlvbigpe2YuaXNJbmNvbXBsZXRlPSEwfSxlcnJvcjpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpfSxsb2c6ZnVuY3Rpb24oZSl7Y29uc29sZS5sb2coZSl9LGdldE51bWJlck9mUHJvcG9zYWxzOmZ1bmN0aW9uKCl7cmV0dXJuIGYuaXRlbXMubGVuZ3RofX07cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShjLnVyaSx1KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0LHI9W10sbj0hMCxpPSIiLG89dm9pZCAwO2lmKGcmJigic3RyaW5nIiE9PWcudHlwZXx8KHQ9Zy5wYXJlbnQpJiYicHJvcGVydHkiPT09dC50eXBlJiZ0LmtleU5vZGU9PT1nJiYobj0hdC52YWx1ZU5vZGUsbz10LGk9ZC5zdWJzdHIoZy5vZmZzZXQrMSxnLmxlbmd0aC0yKSx0JiYoZz10LnBhcmVudCkpKSxnJiYib2JqZWN0Ij09PWcudHlwZSl7aWYoZy5vZmZzZXQ9PT1tKXJldHVybiBmO2cucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe28mJm89PT1lfHwoeVtlLmtleU5vZGUudmFsdWVdPWJuLmNyZWF0ZSgiX18iKSl9KTt2YXIgYT0iIixzPShuJiYoYT1oLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoYyxjLm9mZnNldEF0KHYuZW5kKSkpLGU/aC5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKGUsdSxnLG4sYSxiKTpoLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zKHUsZyxpLGIpLFNpKGcpKTtoLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlPWUuY29sbGVjdFByb3BlcnR5Q29tcGxldGlvbnMoYy51cmkscyxwLG4sIiI9PT1hLGIpO2UmJnIucHVzaChlKX0pLCFlJiYwPHAubGVuZ3RoJiYnIichPT1kLmNoYXJBdChtLXAubGVuZ3RoLTEpJiYoYi5hZGQoe2tpbmQ6ZG4uUHJvcGVydHksbGFiZWw6aC5nZXRMYWJlbEZvclZhbHVlKHApLGluc2VydFRleHQ6aC5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkocCx2b2lkIDAsITEsYSksaW5zZXJ0VGV4dEZvcm1hdDpnbi5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxiLnNldEFzSW5jb21wbGV0ZSgpKX12YXIgbD17fTtyZXR1cm4gZT9oLmdldFZhbHVlQ29tcGxldGlvbnMoZSx1LGcsbSxjLGIsbCk6aC5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucyh1LGcsbSxjLGIpLDA8aC5jb250cmlidXRpb25zLmxlbmd0aCYmaC5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnModSxnLG0sYyxiLHIpLGgucHJvbWlzZUNvbnN0cnVjdG9yLmFsbChyKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIDA9PT1iLmdldE51bWJlck9mUHJvcG9zYWxzKCkmJihlPW0sIWd8fCJzdHJpbmciIT09Zy50eXBlJiYibnVtYmVyIiE9PWcudHlwZSYmImJvb2xlYW4iIT09Zy50eXBlJiYibnVsbCIhPT1nLnR5cGV8fChlPWcub2Zmc2V0K2cubGVuZ3RoKSxlPWguZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihjLGUpLGguYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucyhsLGUsYikpLGZ9KX0pfSxvLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxhLHMsbCxjKXt2YXIgdT10aGlzO3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLGEub2Zmc2V0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUubm9kZT09PWEmJiFlLmludmVydGVkKXt2YXIgcj1lLnNjaGVtYS5wcm9wZXJ0aWVzLG49KHImJk9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9cltlXTsib2JqZWN0IiE9dHlwZW9mIHR8fHQuZGVwcmVjYXRpb25NZXNzYWdlfHx0LmRvTm90U3VnZ2VzdHx8KGU9e2tpbmQ6ZG4uUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OnUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsdCxzLGwpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxmaWx0ZXJUZXh0OnUuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGRvY3VtZW50YXRpb246dS5mcm9tTWFya3VwKHQubWFya2Rvd25EZXNjcmlwdGlvbil8fHQuZGVzY3JpcHRpb258fCIifSx2b2lkIDAhPT10LnN1Z2dlc3RTb3J0VGV4dCYmKGUuc29ydFRleHQ9dC5zdWdnZXN0U29ydFRleHQpLGUuaW5zZXJ0VGV4dCYmcm4oZS5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KGwpKSYmKGUuY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksYy5hZGQoZSkpfSksZS5zY2hlbWEucHJvcGVydHlOYW1lcyk7aWYoIm9iamVjdCI9PXR5cGVvZiBuJiYhbi5kZXByZWNhdGlvbk1lc3NhZ2UmJiFuLmRvTm90U3VnZ2VzdCl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD12b2lkIDApO2U9e2tpbmQ6ZG4uUHJvcGVydHksbGFiZWw6ZSxpbnNlcnRUZXh0OnUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KGUsdm9pZCAwLHMsbCksaW5zZXJ0VGV4dEZvcm1hdDpnbi5TbmlwcGV0LGZpbHRlclRleHQ6dS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSksZG9jdW1lbnRhdGlvbjp0fHx1LmZyb21NYXJrdXAobi5tYXJrZG93bkRlc2NyaXB0aW9uKXx8bi5kZXNjcmlwdGlvbnx8IiJ9O3ZvaWQgMCE9PW4uc3VnZ2VzdFNvcnRUZXh0JiYoZS5zb3J0VGV4dD1uLnN1Z2dlc3RTb3J0VGV4dCksZS5pbnNlcnRUZXh0JiZybihlLmluc2VydFRleHQsIiQxIi5jb25jYXQobCkpJiYoZS5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxjLmFkZChlKX07aWYobi5lbnVtKWZvcih2YXIgaT0wO2k8bi5lbnVtLmxlbmd0aDtpKyspe3ZhciBvPXZvaWQgMDtuLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmaTxuLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGg/bz11LmZyb21NYXJrdXAobi5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbaV0pOm4uZW51bURlc2NyaXB0aW9ucyYmaTxuLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYobz1uLmVudW1EZXNjcmlwdGlvbnNbaV0pLHQobi5lbnVtW2ldLG8pfW4uY29uc3QmJnQobi5jb25zdCl9fX0pfSxvLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuKXtmdW5jdGlvbiBpKGUpe2UucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2U9ZS5rZXlOb2RlLnZhbHVlO24uYWRkKHtraW5kOmRuLlByb3BlcnR5LGxhYmVsOmUsaW5zZXJ0VGV4dDphLmdldEluc2VydFRleHRGb3JWYWx1ZShlLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOiIifSl9KX12YXIgbyxhPXRoaXM7dC5wYXJlbnQ/InByb3BlcnR5Ij09PXQucGFyZW50LnR5cGU/KG89dC5wYXJlbnQua2V5Tm9kZS52YWx1ZSxlLnZpc2l0KGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUhPT10LnBhcmVudCYmZS5rZXlOb2RlLnZhbHVlPT09byYmZS52YWx1ZU5vZGUmJiJvYmplY3QiPT09ZS52YWx1ZU5vZGUudHlwZSYmaShlLnZhbHVlTm9kZSksITB9KSk6ImFycmF5Ij09PXQucGFyZW50LnR5cGUmJnQucGFyZW50Lml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7Im9iamVjdCI9PT1lLnR5cGUmJmUhPT10JiZpKGUpfSk6Im9iamVjdCI9PT10LnR5cGUmJm4uYWRkKHtraW5kOmRuLlByb3BlcnR5LGxhYmVsOiIkc2NoZW1hIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KCIkc2NoZW1hIix2b2lkIDAsITAsIiIpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkb2N1bWVudGF0aW9uOiIiLGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoIiRzY2hlbWEiKX0pfSxvLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMsYT1yO2lmKCF0fHwic3RyaW5nIiE9PXQudHlwZSYmIm51bWJlciIhPT10LnR5cGUmJiJib29sZWFuIiE9PXQudHlwZSYmIm51bGwiIT09dC50eXBlfHwoYT10Lm9mZnNldCt0Lmxlbmd0aCx0PXQucGFyZW50KSwhdClyZXR1cm4gaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6IkVtcHR5IG9iamVjdCIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSwiIiksaW5zZXJ0VGV4dEZvcm1hdDpnbi5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSx2b2lkIGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IkVtcHR5IGFycmF5IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pO2Z1bmN0aW9uIHMoZSl7ZS5wYXJlbnQmJiFBaShlLnBhcmVudCxyLCEwKSYmaS5hZGQoe2tpbmQ6by5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOm8uZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlKGUsbiksaW5zZXJ0VGV4dDpvLmdldEluc2VydFRleHRGb3JNYXRjaGluZ05vZGUoZSxuLGMpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSksImJvb2xlYW4iPT09ZS50eXBlJiZvLmFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oIWUudmFsdWUsYyxpKX12YXIgbCxjPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihuLGEpO2lmKCJwcm9wZXJ0eSI9PT10LnR5cGUmJnI+KHQuY29sb25PZmZzZXR8fDApKXthPXQudmFsdWVOb2RlO2lmKGEmJihyPmEub2Zmc2V0K2EubGVuZ3RofHwib2JqZWN0Ij09PWEudHlwZXx8ImFycmF5Ij09PWEudHlwZSkpcmV0dXJuO3ZhciB1PXQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PXUmJmUudmFsdWVOb2RlJiZzKGUudmFsdWVOb2RlKSwhMH0pLCIkc2NoZW1hIj09PXUmJnQucGFyZW50JiYhdC5wYXJlbnQucGFyZW50JiZ0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGMsaSl9ImFycmF5Ij09PXQudHlwZSYmKHQucGFyZW50JiYicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZT8obD10LnBhcmVudC5rZXlOb2RlLnZhbHVlLGUudmlzaXQoZnVuY3Rpb24oZSl7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmZS5rZXlOb2RlLnZhbHVlPT09bCYmZS52YWx1ZU5vZGUmJiJhcnJheSI9PT1lLnZhbHVlTm9kZS50eXBlJiZlLnZhbHVlTm9kZS5pdGVtcy5mb3JFYWNoKHMpLCEwfSkpOnQuaXRlbXMuZm9yRWFjaChzKSl9LG8ucHJvdG90eXBlLmdldFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24odSxoLGUsdCxmLHIsbil7dmFyIGQ9dCxpPXZvaWQgMCxtPXZvaWQgMDtpZighZXx8InN0cmluZyIhPT1lLnR5cGUmJiJudW1iZXIiIT09ZS50eXBlJiYiYm9vbGVhbiIhPT1lLnR5cGUmJiJudWxsIiE9PWUudHlwZXx8KGQ9ZS5vZmZzZXQrZS5sZW5ndGgsZT0obT1lKS5wYXJlbnQpLGUpe2lmKCJwcm9wZXJ0eSI9PT1lLnR5cGUmJnQ+KGUuY29sb25PZmZzZXR8fDApKXt2YXIgbz1lLnZhbHVlTm9kZTtpZihvJiZ0Pm8ub2Zmc2V0K28ubGVuZ3RoKXJldHVybjtpPWUua2V5Tm9kZS52YWx1ZSxlPWUucGFyZW50fWlmKGUmJih2b2lkIDAhPT1pfHwiYXJyYXkiPT09ZS50eXBlKSl7Zm9yKHZhciBhPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihmLGQpLGc9MCxwPWguZ2V0TWF0Y2hpbmdTY2hlbWFzKHUuc2NoZW1hLGUub2Zmc2V0LG0pO2c8cC5sZW5ndGg7ZysrKXt2YXIgYixzPXBbZ107aWYocy5ub2RlPT09ZSYmIXMuaW52ZXJ0ZWQmJnMuc2NoZW1hKWlmKCJhcnJheSI9PT1lLnR5cGUmJnMuc2NoZW1hLml0ZW1zJiYoQXJyYXkuaXNBcnJheShzLnNjaGVtYS5pdGVtcyk/KGI9dGhpcy5maW5kSXRlbUF0T2Zmc2V0KGUsZix0KSk8cy5zY2hlbWEuaXRlbXMubGVuZ3RoJiZ0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMocy5zY2hlbWEuaXRlbXNbYl0sYSxyLG4pOnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhzLnNjaGVtYS5pdGVtcyxhLHIsbikpLHZvaWQgMCE9PWkpe3ZhciBsPSExO2lmKHMuc2NoZW1hLnByb3BlcnRpZXMmJihjPXMuc2NoZW1hLnByb3BlcnRpZXNbaV0pJiYobD0hMCx0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoYyxhLHIsbikpLHMuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzJiYhbClmb3IodmFyIHY9MCx5PU9iamVjdC5rZXlzKHMuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKTt2PHkubGVuZ3RoO3YrKyl7dmFyIGMsQz15W3ZdLHc9bm4oQyk7bnVsbCE9dyYmdy50ZXN0KGkpJiYobD0hMCxjPXMuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzW0NdLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhjLGEscixuKSl9cy5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMmJiFsJiYoYz1zLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyx0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoYyxhLHIsbikpfX0iJHNjaGVtYSIhPT1pfHxlLnBhcmVudHx8dGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhhLHIpLG4uYm9vbGVhbiYmKHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMCxhLHIpLHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMSxhLHIpKSxuLm51bGwmJnRoaXMuYWRkTnVsbFZhbHVlQ29tcGxldGlvbihhLHIpfX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyh1LnNjaGVtYSwiIixyLG4pfSxvLnByb3RvdHlwZS5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhLHMsbDt0Pyh0PSJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGU/dDp0LnBhcmVudCkmJiJwcm9wZXJ0eSI9PT10LnR5cGUmJnI+KHQuY29sb25PZmZzZXR8fDApJiYoYT10LmtleU5vZGUudmFsdWUsKCEocz10LnZhbHVlTm9kZSl8fHI8PXMub2Zmc2V0K3MubGVuZ3RoKSYmdC5wYXJlbnQmJihsPVNpKHQucGFyZW50KSx0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtlPWUuY29sbGVjdFZhbHVlQ29tcGxldGlvbnMobi51cmksbCxhLGkpO2UmJm8ucHVzaChlKX0pKSk6dGhpcy5jb250cmlidXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7ZT1lLmNvbGxlY3REZWZhdWx0Q29tcGxldGlvbnMobi51cmksaSk7ZSYmby5wdXNoKGUpfSl9LG8ucHJvdG90eXBlLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dGhpczsib2JqZWN0Ij09dHlwZW9mIGUmJih0aGlzLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zKGUsdCxyKSx0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUsdCxyKSx0aGlzLmNvbGxlY3RUeXBlcyhlLG4pLEFycmF5LmlzQXJyYXkoZS5hbGxPZikmJmUuYWxsT2YuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxyLG4pfSksQXJyYXkuaXNBcnJheShlLmFueU9mKSYmZS5hbnlPZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LHIsbil9KSxBcnJheS5pc0FycmF5KGUub25lT2YpJiZlLm9uZU9mLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQscixuKX0pKX0sby5wcm90b3R5cGUuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24odSxoLGYsZCl7dmFyIG09dGhpcyxnPSh2b2lkIDA9PT1kJiYoZD0wKSwhMSk7aWYoZW4odS5kZWZhdWx0KSl7Zm9yKHZhciBlPXUudHlwZSx0PXUuZGVmYXVsdCxyPWQ7MDxyO3ItLSl0PVt0XSxlPSJhcnJheSI7Zi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUodCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh0LGgpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkZXRhaWw6TGkoImpzb24uc3VnZ2VzdC5kZWZhdWx0IiwiRGVmYXVsdCB2YWx1ZSIpfSksZz0hMH1BcnJheS5pc0FycmF5KHUuZXhhbXBsZXMpJiZ1LmV4YW1wbGVzLmZvckVhY2goZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXUudHlwZSxyPWUsbj1kOzA8bjtuLS0pcj1bcl0sdD0iYXJyYXkiO2YuYWRkKHtraW5kOm0uZ2V0U3VnZ2VzdGlvbktpbmQodCksbGFiZWw6bS5nZXRMYWJlbEZvclZhbHVlKHIpLGluc2VydFRleHQ6bS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocixoKSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXR9KSxnPSEwfSksQXJyYXkuaXNBcnJheSh1LmRlZmF1bHRTbmlwcGV0cykmJnUuZGVmYXVsdFNuaXBwZXRzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQscixuPXUudHlwZSxpPWUuYm9keSxvPWUubGFiZWw7aWYoZW4oaSkpe3UudHlwZTtmb3IodmFyIGE9ZDswPGE7YS0tKWk9W2ldO3Q9bS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKGksaCkscj1tLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWUoaSksbz1vfHxtLmdldExhYmVsRm9yU25pcHBldFZhbHVlKGkpfWVsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlLmJvZHlUZXh0KXJldHVybjtmb3IodmFyIHM9IiIsbD0iIixjPSIiLGE9ZDswPGE7YS0tKXM9cytjKyJbXG4iLGw9bCsiXG4iK2MrIl0iLGMrPSJcdCIsbj0iYXJyYXkiO3Q9cytjK2UuYm9keVRleHQuc3BsaXQoIlxuIikuam9pbigiXG4iK2MpK2wraCxvPW98fHQscj10LnJlcGxhY2UoL1tcbl0vZywiIil9Zi5hZGQoe2tpbmQ6bS5nZXRTdWdnZXN0aW9uS2luZChuKSxsYWJlbDpvLGRvY3VtZW50YXRpb246bS5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb24saW5zZXJ0VGV4dDp0LGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxmaWx0ZXJUZXh0OnJ9KSxnPSEwfSksIWcmJiJvYmplY3QiPT10eXBlb2YgdS5pdGVtcyYmIUFycmF5LmlzQXJyYXkodS5pdGVtcykmJmQ8NSYmdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyh1Lml0ZW1zLGgsZixkKzEpfSxvLnByb3RvdHlwZS5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQscil7aWYoZW4oZS5jb25zdCkmJnIuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoZS5jb25zdCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLmNvbnN0LHQpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkb2N1bWVudGF0aW9uOnRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9ufSksQXJyYXkuaXNBcnJheShlLmVudW0pKWZvcih2YXIgbj0wLGk9ZS5lbnVtLmxlbmd0aDtuPGk7bisrKXt2YXIgbz1lLmVudW1bbl0sYT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbjtlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmbjxlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpP2E9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW25dKTplLmVudW1EZXNjcmlwdGlvbnMmJm48ZS5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKGE9ZS5lbnVtRGVzY3JpcHRpb25zW25dKSxyLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKG8pLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobyx0KSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjphfSl9fSxvLnByb3RvdHlwZS5jb2xsZWN0VHlwZXM9ZnVuY3Rpb24oZSx0KXtBcnJheS5pc0FycmF5KGUuZW51bSl8fGVuKGUuY29uc3QpfHwoZT1lLnR5cGUsQXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV09ITB9KTplJiYodFtlXT0hMCkpfSxvLnByb3RvdHlwZS5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxyKXtlLm9iamVjdCYmci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6Int9IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh7fSx0KSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZGV0YWlsOkxpKCJkZWZhdWx0cy5vYmplY3QiLCJOZXcgb2JqZWN0IiksZG9jdW1lbnRhdGlvbjoiIn0pLGUuYXJyYXkmJnIuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IltdIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShbXSx0KSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZGV0YWlsOkxpKCJkZWZhdWx0cy5hcnJheSIsIk5ldyBhcnJheSIpLGRvY3VtZW50YXRpb246IiJ9KX0sby5wcm90b3R5cGUuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQscil7ci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYm9vbGVhbiIpLGxhYmVsOmU/InRydWUiOiJmYWxzZSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpLGluc2VydFRleHRGb3JtYXQ6Z24uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LG8ucHJvdG90eXBlLmFkZE51bGxWYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0KXt0LmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJudWxsIiksbGFiZWw6Im51bGwiLGluc2VydFRleHQ6Im51bGwiK2UsaW5zZXJ0VGV4dEZvcm1hdDpnbi5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sby5wcm90b3R5cGUuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuc2NoZW1hU2VydmljZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzKGZ1bmN0aW9uKGUpe3JldHVybiJodHRwIj09PWV8fCJodHRwcyI9PT1lfSkuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gci5hZGQoe2tpbmQ6ZG4uTW9kdWxlLGxhYmVsOm4uZ2V0TGFiZWxGb3JWYWx1ZShlKSxmaWx0ZXJUZXh0Om4uZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGUpLGluc2VydFRleHQ6bi5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KSxpbnNlcnRUZXh0Rm9ybWF0OmduLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSl9LG8ucHJvdG90eXBlLmdldExhYmVsRm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxvLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfSxvLnByb3RvdHlwZS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxvLnByb3RvdHlwZS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sby5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxcJFx9XS9nLCJcXCQmIil9LG8ucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JWYWx1ZT1mdW5jdGlvbihlLHQpe2U9SlNPTi5zdHJpbmdpZnkoZSxudWxsLCJcdCIpO3JldHVybiJ7fSI9PT1lPyJ7JDF9Iit0OiJbXSI9PT1lPyJbJDFdIit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChlK3QpfSxvLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxyLG4pe2lmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpcmV0dXJuIG4odCk7dmFyIGk9cisiXHQiO2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4iW10iO2Zvcih2YXIgbz0iW1xuIixhPTA7YTx0Lmxlbmd0aDthKyspbys9aStlKHRbYV0saSxuKSxhPHQubGVuZ3RoLTEmJihvKz0iLCIpLG8rPSJcbiI7cmV0dXJuIG8rPXIrIl0ifXZhciBzPU9iamVjdC5rZXlzKHQpO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4ie30iO2ZvcihvPSJ7XG4iLGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGw9c1thXTtvKz1pK0pTT04uc3RyaW5naWZ5KGwpKyI6ICIrZSh0W2xdLGksbiksYTxzLmxlbmd0aC0xJiYobys9IiwiKSxvKz0iXG4ifXJldHVybiBvKz1yKyJ9In0oZSwiIixmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJiJeIj09PWVbMF0/ZS5zdWJzdHIoMSk6SlNPTi5zdHJpbmdpZnkoZSl9KSt0fSxvLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlIm9iamVjdCI6cmV0dXJuIG51bGw9PT1lPyIkezE6bnVsbH0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KTtjYXNlInN0cmluZyI6dmFyIHI9KHI9SlNPTi5zdHJpbmdpZnkoZSkpLnN1YnN0cigxLHIubGVuZ3RoLTIpO3JldHVybiciJHsxOicrKHI9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KHIpKSsnfSInK3Q7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIiR7MToiK0pTT04uc3RyaW5naWZ5KGUpKyJ9Iit0fXJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpfSxvLnByb3RvdHlwZS5nZXRTdWdnZXN0aW9uS2luZD1mdW5jdGlvbihlKXt2YXIgdDtpZighKGU9QXJyYXkuaXNBcnJheShlKT8wPCh0PWUpLmxlbmd0aD90WzBdOnZvaWQgMDplKSlyZXR1cm4gZG4uVmFsdWU7c3dpdGNoKGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gZG4uVmFsdWU7Y2FzZSJvYmplY3QiOnJldHVybiBkbi5Nb2R1bGU7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIGRuLlByb3BlcnR5O2RlZmF1bHQ6cmV0dXJuIGRuLlZhbHVlfX0sby5wcm90b3R5cGUuZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIltdIjtjYXNlIm9iamVjdCI6cmV0dXJuInt9IjtkZWZhdWx0OnJldHVybiB0LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpfX0sby5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQscil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLHIpO2Nhc2Uib2JqZWN0IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30scik7ZGVmYXVsdDp2YXIgbj10LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpK3I7cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuKX19LG8ucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eT1mdW5jdGlvbihlLHQscixuKXt2YXIgaT10aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLCIiKTtpZighcilyZXR1cm4gaTt2YXIgbyxlPWkrIjogIixyPTA7aWYodCYmKEFycmF5LmlzQXJyYXkodC5kZWZhdWx0U25pcHBldHMpJiYoMSE9PXQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aHx8ZW4oYT10LmRlZmF1bHRTbmlwcGV0c1swXS5ib2R5KSYmKG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKGEsIiIpKSxyKz10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGgpLHQuZW51bSYmKG98fDEhPT10LmVudW0ubGVuZ3RofHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5lbnVtWzBdLCIiKSkscis9dC5lbnVtLmxlbmd0aCksZW4odC5kZWZhdWx0KSYmKG89b3x8dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZGVmYXVsdCwiIikscisrKSxBcnJheS5pc0FycmF5KHQuZXhhbXBsZXMpJiZ0LmV4YW1wbGVzLmxlbmd0aCYmKG89b3x8dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZXhhbXBsZXNbMF0sIiIpLHIrPXQuZXhhbXBsZXMubGVuZ3RoKSwwPT09cikpe3ZhciBhPUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGVbMF06dC50eXBlO3N3aXRjaChhfHwodC5wcm9wZXJ0aWVzP2E9Im9iamVjdCI6dC5pdGVtcyYmKGE9ImFycmF5IikpLGEpe2Nhc2UiYm9vbGVhbiI6bz0iJDEiO2JyZWFrO2Nhc2Uic3RyaW5nIjpvPSciJDEiJzticmVhaztjYXNlIm9iamVjdCI6bz0ieyQxfSI7YnJlYWs7Y2FzZSJhcnJheSI6bz0iWyQxXSI7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6bz0iJHsxOjB9IjticmVhaztjYXNlIm51bGwiOm89IiR7MTpudWxsfSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaX19cmV0dXJuIGUrKG89IW98fDE8cj8iJDEiOm8pK259LG8ucHJvdG90eXBlLmdldEN1cnJlbnRXb3JkPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQtMSxuPWUuZ2V0VGV4dCgpOzA8PXImJi0xPT09JyBcdFxuXHJcdiI6e1ssXX0nLmluZGV4T2Yobi5jaGFyQXQocikpOylyLS07cmV0dXJuIG4uc3Vic3RyaW5nKHIrMSx0KX0sby5wcm90b3R5cGUuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcj1mdW5jdGlvbihlLHQpe2U9enIoZS5nZXRUZXh0KCksITApO3N3aXRjaChlLnNldFBvc2l0aW9uKHQpLGUuc2NhbigpKXtjYXNlIDU6Y2FzZSAyOmNhc2UgNDpjYXNlIDE3OnJldHVybiIiO2RlZmF1bHQ6cmV0dXJuIiwifX0sby5wcm90b3R5cGUuZmluZEl0ZW1BdE9mZnNldD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXpyKHQuZ2V0VGV4dCgpLCEwKSxpPWUuaXRlbXMsbz1pLmxlbmd0aC0xOzA8PW87by0tKXt2YXIgYT1pW29dO2lmKHI+YS5vZmZzZXQrYS5sZW5ndGgpcmV0dXJuIG4uc2V0UG9zaXRpb24oYS5vZmZzZXQrYS5sZW5ndGgpLDU9PT1uLnNjYW4oKSYmcj49bi5nZXRUb2tlbk9mZnNldCgpK24uZ2V0VG9rZW5MZW5ndGgoKT9vKzE6bztpZihyPj1hLm9mZnNldClyZXR1cm4gb31yZXR1cm4gMH0sby5wcm90b3R5cGUuaXNJbkNvbW1lbnQ9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj16cihlLmdldFRleHQoKSwhMSksaT0obi5zZXRQb3NpdGlvbih0KSxuLnNjYW4oKSk7MTchPT1pJiZuLmdldFRva2VuT2Zmc2V0KCkrbi5nZXRUb2tlbkxlbmd0aCgpPHI7KWk9bi5zY2FuKCk7cmV0dXJuKDEyPT09aXx8MTM9PT1pKSYmbi5nZXRUb2tlbk9mZnNldCgpPD1yfSxvLnByb3RvdHlwZS5mcm9tTWFya3VwPWZ1bmN0aW9uKGUpe2lmKGUmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXJldHVybntraW5kOmNuLk1hcmtkb3duLHZhbHVlOmV9fSxvLnByb3RvdHlwZS5kb2VzU3VwcG9ydE1hcmtkb3duPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIGVuKHRoaXMuc3VwcG9ydHNNYXJrZG93bil8fChlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb24sdGhpcy5zdXBwb3J0c01hcmtkb3duPWUmJmUuY29tcGxldGlvbkl0ZW0mJkFycmF5LmlzQXJyYXkoZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0KSYmLTEhPT1lLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQuaW5kZXhPZihjbi5NYXJrZG93bikpLHRoaXMuc3VwcG9ydHNNYXJrZG93bn0sby5wcm90b3R5cGUuZG9lc1N1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlbih0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycyl8fChlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb24sdGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZSYmZS5jb21wbGV0aW9uSXRlbSYmISFlLmNvbXBsZXRpb25JdGVtLmNvbW1pdENoYXJhY3RlcnNTdXBwb3J0KSx0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVyc30sbyk7ZnVuY3Rpb24gbyhlLHQscixuKXt2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09ciYmKHI9UHJvbWlzZSksdm9pZCAwPT09biYmKG49e30pLHRoaXMuc2NoZW1hU2VydmljZT1lLHRoaXMuY29udHJpYnV0aW9ucz10LHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPXIsdGhpcy5jbGllbnRDYXBhYmlsaXRpZXM9bn1UaS5wcm90b3R5cGUuZG9Ib3Zlcj1mdW5jdGlvbihlLHQsYSl7dmFyIHQ9ZS5vZmZzZXRBdCh0KSxzPWEuZ2V0Tm9kZUZyb21PZmZzZXQodCk7aWYoIXN8fCgib2JqZWN0Ij09PXMudHlwZXx8ImFycmF5Ij09PXMudHlwZSkmJnQ+cy5vZmZzZXQrMSYmdDxzLm9mZnNldCtzLmxlbmd0aC0xKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKTt0PXM7aWYoInN0cmluZyI9PT1zLnR5cGUpe3ZhciByPXMucGFyZW50O2lmKHImJiJwcm9wZXJ0eSI9PT1yLnR5cGUmJnIua2V5Tm9kZT09PXMmJiEocz1yLnZhbHVlTm9kZSkpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpfWZvcih2YXIgbj1Pci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKSxsPWZ1bmN0aW9uKGUpe3JldHVybntjb250ZW50czplLHJhbmdlOm59fSxpPVNpKHMpLG89dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xOzA8PW87by0tKXt2YXIgYz10aGlzLmNvbnRyaWJ1dGlvbnNbb10uZ2V0SW5mb0NvbnRyaWJ1dGlvbihlLnVyaSxpKTtpZihjKXJldHVybiBjLnRoZW4obCl9cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSxhKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxvLHQ7cmV0dXJuIGUmJnM/KGU9YS5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEscy5vZmZzZXQpLG89aT1uPXI9dm9pZCAwLGUuZXZlcnkoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUubm9kZT09PXMmJiFlLmludmVydGVkJiZlLnNjaGVtYSYmKHI9cnx8ZS5zY2hlbWEudGl0bGUsbj1ufHxlLnNjaGVtYS5tYXJrZG93bkRlc2NyaXB0aW9ufHxJaShlLnNjaGVtYS5kZXNjcmlwdGlvbiksZS5zY2hlbWEuZW51bSYmKHQ9ZS5zY2hlbWEuZW51bS5pbmRleE9mKF9pKHMpKSxlLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnM/aT1lLnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbdF06ZS5zY2hlbWEuZW51bURlc2NyaXB0aW9ucyYmKGk9SWkoZS5zY2hlbWEuZW51bURlc2NyaXB0aW9uc1t0XSkpLGkmJiJzdHJpbmciIT10eXBlb2Yobz1lLnNjaGVtYS5lbnVtW3RdKSYmKG89SlNPTi5zdHJpbmdpZnkobykpKSksITB9KSxlPSIiLHImJihlPUlpKHIpKSxuJiYoMDxlLmxlbmd0aCYmKGUrPSJcblxuIiksZSs9biksaSYmKDA8ZS5sZW5ndGgmJihlKz0iXG5cbiIpLGUrPSJgIi5jb25jYXQoLTE9PT0odD1vKS5pbmRleE9mKCJgIik/dDoiYGAgIit0KyIgYGAiLCJgOiAiKS5jb25jYXQoaSkpLGwoW2VdKSk6bnVsbH0pfTt2YXIgT2k9VGk7ZnVuY3Rpb24gVGkoZSx0LHIpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2U9cnx8UHJvbWlzZX1mdW5jdGlvbiBJaShlKXtpZihlKXJldHVybiBlLnJlcGxhY2UoLyhbXlxuXHJdKShccj9cbikoW15cblxyXSkvZ20sIiQxXG5cbiQzIikucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfXZhciBQaT1xbixWaT0oUmkucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihlKXtlJiYodGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMSE9PWUudmFsaWRhdGUsdGhpcy5jb21tZW50U2V2ZXJpdHk9ZS5hbGxvd0NvbW1lbnRzP3ZvaWQgMDpWci5FcnJvcil9LFJpLnByb3RvdHlwZS5kb1ZhbGlkYXRpb249ZnVuY3Rpb24oaCxmLGQsZSl7dmFyIG09dGhpcztpZighdGhpcy52YWxpZGF0aW9uRW5hYmxlZClyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUoW10pO2Z1bmN0aW9uIHQoZSl7dmFyIHQscixuPW51bGwhPWQmJmQudHJhaWxpbmdDb21tYXM/RmkoZC50cmFpbGluZ0NvbW1hcyk6VnIuRXJyb3IsaT1udWxsIT1kJiZkLmNvbW1lbnRzP0ZpKGQuY29tbWVudHMpOm0uY29tbWVudFNldmVyaXR5LG89bnVsbCE9ZCYmZC5zY2hlbWFWYWxpZGF0aW9uP0ZpKGQuc2NoZW1hVmFsaWRhdGlvbik6VnIuV2FybmluZyxhPW51bGwhPWQmJmQuc2NoZW1hUmVxdWVzdD9GaShkLnNjaGVtYVJlcXVlc3QpOlZyLldhcm5pbmc7ZSYmKGUuZXJyb3JzLmxlbmd0aCYmZi5yb290JiZhPyh0PSh0PSJvYmplY3QiPT09KHI9Zi5yb290KS50eXBlP3IucHJvcGVydGllc1swXTp2b2lkIDApJiYiJHNjaGVtYSI9PT10LmtleU5vZGUudmFsdWU/KHQ9dC52YWx1ZU5vZGV8fHQsT3IuY3JlYXRlKGgucG9zaXRpb25BdCh0Lm9mZnNldCksaC5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoKSkpOk9yLmNyZWF0ZShoLnBvc2l0aW9uQXQoci5vZmZzZXQpLGgucG9zaXRpb25BdChyLm9mZnNldCsxKSkscChSci5jcmVhdGUodCxlLmVycm9yc1swXSxhLGplLlNjaGVtYVJlc29sdmVFcnJvcikpKTohb3x8KHI9Zi52YWxpZGF0ZShoLGUuc2NoZW1hLG8pKSYmci5mb3JFYWNoKHApLGZ1bmN0aW9uIGUodCl7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtpZih0bih0LmFsbG93Q29tbWVudHMpKXJldHVybiB0LmFsbG93Q29tbWVudHM7aWYodC5hbGxPZilmb3IodmFyIHI9MCxuPXQuYWxsT2Y7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl0saT1lKGkpO2lmKHRuKGkpKXJldHVybiBpfX1yZXR1cm59KGUuc2NoZW1hKSYmKGk9dm9pZCAwKSxmdW5jdGlvbiBlKHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7aWYodG4odC5hbGxvd1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gdC5hbGxvd1RyYWlsaW5nQ29tbWFzO3ZhciByPXQ7aWYodG4oci5hbGxvd3NUcmFpbGluZ0NvbW1hcykpcmV0dXJuIHIuYWxsb3dzVHJhaWxpbmdDb21tYXM7aWYodC5hbGxPZilmb3IodmFyIG49MCxpPXQuYWxsT2Y7bjxpLmxlbmd0aDtuKyspe3ZhciBvPWlbbl0sbz1lKG8pO2lmKHRuKG8pKXJldHVybiBvfX1yZXR1cm59KGUuc2NoZW1hKSYmKG49dm9pZCAwKSk7Zm9yKHZhciBzLGw9MCx1PWYuc3ludGF4RXJyb3JzO2w8dS5sZW5ndGg7bCsrKXt2YXIgYz11W2xdO2lmKGMuY29kZT09PWplLlRyYWlsaW5nQ29tbWEpe2lmKCJudW1iZXIiIT10eXBlb2Ygbiljb250aW51ZTtjLnNldmVyaXR5PW59cChjKX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIGkmJihzPVBpKCJJbnZhbGlkQ29tbWVudFRva2VuIiwiQ29tbWVudHMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gSlNPTi4iKSxmLmNvbW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZSl7cChSci5jcmVhdGUoZSxzLGksamUuQ29tbWVudE5vdFBlcm1pdHRlZCkpfSkpLGd9dmFyIHIsZz1bXSxuPXt9LHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yYW5nZS5zdGFydC5saW5lKyIgIitlLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcisiICIrZS5tZXNzYWdlO25bdF18fChuW3RdPSEwLGcucHVzaChlKSl9O3JldHVybiBlPyhyPWUuaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvIitEaSsrLHRoaXMuanNvblNjaGVtYVNlcnZpY2UucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShyLFtdLGUpLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbih0KSk6dGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShoLnVyaSxmKS50aGVuKHQpfSxSaS5wcm90b3R5cGUuZ2V0TGFuZ3VhZ2VTdGF0dXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57c2NoZW1hczp0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZShlLnVyaSx0KX19LFJpKTtmdW5jdGlvbiBSaShlLHQpe3RoaXMuanNvblNjaGVtYVNlcnZpY2U9ZSx0aGlzLnByb21pc2U9dCx0aGlzLnZhbGlkYXRpb25FbmFibGVkPSEwfXZhciBEaT0wO2Z1bmN0aW9uIEZpKGUpe3N3aXRjaChlKXtjYXNlImVycm9yIjpyZXR1cm4gVnIuRXJyb3I7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gVnIuV2FybmluZztjYXNlImlnbm9yZSI6cmV0dXJufX12YXIgS2k9NDgsamk9NTcsVWk9NjUscWk9OTcsQmk9MTAyO2Z1bmN0aW9uICRpKGUpe3JldHVybiBlPEtpPzA6ZTw9amk/ZS1LaTooZTxxaSYmKGUrPXFpLVVpKSxxaTw9ZSYmZTw9Qmk/ZS1xaSsxMDowKX1IaS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9scz1mdW5jdGlvbihvLGUsdCl7dmFyIHU9dGhpcyxlPSh2b2lkIDA9PT10JiYodD17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pLGUucm9vdCk7aWYoIWUpcmV0dXJuW107dmFyIGE9dC5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxyPW8udXJpO2lmKCgidnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24iPT09cnx8cm4oci50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiYiYXJyYXkiPT09ZS50eXBlKXtmb3IodmFyIG49W10saT0wLGg9ZS5pdGVtcztpPGgubGVuZ3RoO2krKyl7dmFyIHM9aFtpXTtpZigib2JqZWN0Ij09PXMudHlwZSlmb3IodmFyIGw9MCxmPXMucHJvcGVydGllcztsPGYubGVuZ3RoO2wrKyl7dmFyIGQ9ZltsXTtpZigia2V5Ij09PWQua2V5Tm9kZS52YWx1ZSYmZC52YWx1ZU5vZGUpe3ZhciBtPVRyLmNyZWF0ZShvLnVyaSx6aShvLHMpKTtpZihuLnB1c2goe25hbWU6X2koZC52YWx1ZU5vZGUpLGtpbmQ6eG4uRnVuY3Rpb24sbG9jYXRpb246bX0pLC0tYTw9MClyZXR1cm4gdCYmdC5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHIpLG59fX1yZXR1cm4gbn1mb3IodmFyIGM9W3tub2RlOmUsY29udGFpbmVyTmFtZToiIn1dLGc9MCxwPSExLGI9W107ZzxjLmxlbmd0aDspe3ZhciB2PWNbZysrXTshZnVuY3Rpb24oZSxpKXsiYXJyYXkiPT09ZS50eXBlP2UuaXRlbXMuZm9yRWFjaChmdW5jdGlvbihlKXtlJiZjLnB1c2goe25vZGU6ZSxjb250YWluZXJOYW1lOml9KX0pOiJvYmplY3QiPT09ZS50eXBlJiZlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxyLG49ZS52YWx1ZU5vZGU7biYmKDA8YT8oYS0tLHQ9VHIuY3JlYXRlKG8udXJpLHppKG8sZSkpLHI9aT9pKyIuIitlLmtleU5vZGUudmFsdWU6ZS5rZXlOb2RlLnZhbHVlLGIucHVzaCh7bmFtZTp1LmdldEtleUxhYmVsKGUpLGtpbmQ6dS5nZXRTeW1ib2xLaW5kKG4udHlwZSksbG9jYXRpb246dCxjb250YWluZXJOYW1lOml9KSxjLnB1c2goe25vZGU6bixjb250YWluZXJOYW1lOnJ9KSk6cD0hMCl9KX0odi5ub2RlLHYuY29udGFpbmVyTmFtZSl9cmV0dXJuIHAmJnQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmVzdWx0TGltaXRFeGNlZWRlZChyKSxifSxIaS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9sczI9ZnVuY3Rpb24oYSxlLHQpe3ZhciBzPXRoaXMsZT0odm9pZCAwPT09dCYmKHQ9e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KSxlLnJvb3QpO2lmKCFlKXJldHVybltdO3ZhciBsPXQucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUscj1hLnVyaTtpZigoInZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uIj09PXJ8fHJuKHIudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmImFycmF5Ij09PWUudHlwZSl7Zm9yKHZhciBuPVtdLGk9MCx1PWUuaXRlbXM7aTx1Lmxlbmd0aDtpKyspe3ZhciBoPXVbaV07aWYoIm9iamVjdCI9PT1oLnR5cGUpZm9yKHZhciBmPTAsZD1oLnByb3BlcnRpZXM7ZjxkLmxlbmd0aDtmKyspe3ZhciBvPWRbZl07aWYoImtleSI9PT1vLmtleU5vZGUudmFsdWUmJm8udmFsdWVOb2RlKXt2YXIgbT16aShhLGgpLGc9emkoYSxvLmtleU5vZGUpO2lmKG4ucHVzaCh7bmFtZTpfaShvLnZhbHVlTm9kZSksa2luZDp4bi5GdW5jdGlvbixyYW5nZTptLHNlbGVjdGlvblJhbmdlOmd9KSwtLWw8PTApcmV0dXJuIHQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmVzdWx0TGltaXRFeGNlZWRlZChyKSxufX19cmV0dXJuIG59Zm9yKHZhciBwPVtdLGM9W3tub2RlOmUscmVzdWx0OnB9XSxiPTAsdj0hMTtiPGMubGVuZ3RoOyl7dmFyIHk9Y1tiKytdOyFmdW5jdGlvbihlLG8peyJhcnJheSI9PT1lLnR5cGU/ZS5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIHIsbjtlJiYoMDxsPyhsLS0sbj1yPXppKGEsZSksdD17bmFtZTpTdHJpbmcodCksa2luZDpzLmdldFN5bWJvbEtpbmQoZS50eXBlKSxyYW5nZTpyLHNlbGVjdGlvblJhbmdlOm4sY2hpbGRyZW46W119LG8ucHVzaCh0KSxjLnB1c2goe3Jlc3VsdDp0LmNoaWxkcmVuLG5vZGU6ZX0pKTp2PSEwKX0pOiJvYmplY3QiPT09ZS50eXBlJiZlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxyLG4saT1lLnZhbHVlTm9kZTtpJiYoMDxsPyhsLS0sdD16aShhLGUpLHI9emkoYSxlLmtleU5vZGUpLG49W10sZT17bmFtZTpzLmdldEtleUxhYmVsKGUpLGtpbmQ6cy5nZXRTeW1ib2xLaW5kKGkudHlwZSkscmFuZ2U6dCxzZWxlY3Rpb25SYW5nZTpyLGNoaWxkcmVuOm4sZGV0YWlsOnMuZ2V0RGV0YWlsKGkpfSxvLnB1c2goZSksYy5wdXNoKHtyZXN1bHQ6bixub2RlOml9KSk6dj0hMCl9KX0oeS5ub2RlLHkucmVzdWx0KX1yZXR1cm4gdiYmdCYmdC5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnQub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHIpLHB9LEhpLnByb3RvdHlwZS5nZXRTeW1ib2xLaW5kPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIm9iamVjdCI6cmV0dXJuIHhuLk1vZHVsZTtjYXNlInN0cmluZyI6cmV0dXJuIHhuLlN0cmluZztjYXNlIm51bWJlciI6cmV0dXJuIHhuLk51bWJlcjtjYXNlImFycmF5IjpyZXR1cm4geG4uQXJyYXk7Y2FzZSJib29sZWFuIjpyZXR1cm4geG4uQm9vbGVhbjtkZWZhdWx0OnJldHVybiB4bi5WYXJpYWJsZX19LEhpLnByb3RvdHlwZS5nZXRLZXlMYWJlbD1mdW5jdGlvbihlKXtlPWUua2V5Tm9kZS52YWx1ZTtyZXR1cm4oZT1lJiZlLnJlcGxhY2UoL1tcbl0vZywi4oa1IikpJiZlLnRyaW0oKT9lOiciJy5jb25jYXQoZSwnIicpfSxIaS5wcm90b3R5cGUuZ2V0RGV0YWlsPWZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuImJvb2xlYW4iPT09ZS50eXBlfHwibnVtYmVyIj09PWUudHlwZXx8Im51bGwiPT09ZS50eXBlfHwic3RyaW5nIj09PWUudHlwZT9TdHJpbmcoZS52YWx1ZSk6ImFycmF5Ij09PWUudHlwZT9lLmNoaWxkcmVuLmxlbmd0aD92b2lkIDA6IltdIjoib2JqZWN0IiE9PWUudHlwZXx8ZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJ7fSJ9LEhpLnByb3RvdHlwZS5maW5kRG9jdW1lbnRDb2xvcnM9ZnVuY3Rpb24oYyx1LGgpe3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoYy51cmksdSkudGhlbihmdW5jdGlvbihlKXt2YXIgdD1bXTtpZihlKWZvcih2YXIgcj1oJiYibnVtYmVyIj09dHlwZW9mIGgucmVzdWx0TGltaXQ/aC5yZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFLG49e30saT0wLG89dS5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEpO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2lmKCFhLmludmVydGVkJiZhLnNjaGVtYSYmKCJjb2xvciI9PT1hLnNjaGVtYS5mb3JtYXR8fCJjb2xvci1oZXgiPT09YS5zY2hlbWEuZm9ybWF0KSYmYS5ub2RlJiYic3RyaW5nIj09PWEubm9kZS50eXBlKXt2YXIgcz1TdHJpbmcoYS5ub2RlLm9mZnNldCk7aWYoIW5bc10pe3ZhciBsPWZ1bmN0aW9uKGUpe2lmKCIjIj09PWVbMF0pc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDoxNyokaShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNyokaShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KiRpKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOjE3KiRpKGUuY2hhckNvZGVBdCgxKSkvMjU1LGdyZWVuOjE3KiRpKGUuY2hhckNvZGVBdCgyKSkvMjU1LGJsdWU6MTcqJGkoZS5jaGFyQ29kZUF0KDMpKS8yNTUsYWxwaGE6MTcqJGkoZS5jaGFyQ29kZUF0KDQpKS8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOigxNiokaShlLmNoYXJDb2RlQXQoMSkpKyRpKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqJGkoZS5jaGFyQ29kZUF0KDMpKSskaShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqJGkoZS5jaGFyQ29kZUF0KDUpKSskaShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KDE2KiRpKGUuY2hhckNvZGVBdCgxKSkrJGkoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOigxNiokaShlLmNoYXJDb2RlQXQoMykpKyRpKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOigxNiokaShlLmNoYXJDb2RlQXQoNSkpKyRpKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYTooMTYqJGkoZS5jaGFyQ29kZUF0KDcpKSskaShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX0oX2koYS5ub2RlKSk7aWYobCYmKGE9emkoYyxhLm5vZGUpLHQucHVzaCh7Y29sb3I6bCxyYW5nZTphfSkpLG5bc109ITAsLS1yPD0wKXJldHVybiBoJiZoLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmaC5vblJlc3VsdExpbWl0RXhjZWVkZWQoYy51cmkpLHR9fX1yZXR1cm4gdH0pfSxIaS5wcm90b3R5cGUuZ2V0Q29sb3JQcmVzZW50YXRpb25zPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPVtdLG89TWF0aC5yb3VuZCgyNTUqci5yZWQpLGE9TWF0aC5yb3VuZCgyNTUqci5ncmVlbikscz1NYXRoLnJvdW5kKDI1NSpyLmJsdWUpO2Z1bmN0aW9uIGwoZSl7ZT1lLnRvU3RyaW5nKDE2KTtyZXR1cm4gMiE9PWUubGVuZ3RoPyIwIitlOmV9cmV0dXJuIG89MT09PXIuYWxwaGE/IiMiLmNvbmNhdChsKG8pKS5jb25jYXQobChhKSkuY29uY2F0KGwocykpOiIjIi5jb25jYXQobChvKSkuY29uY2F0KGwoYSkpLmNvbmNhdChsKHMpKS5jb25jYXQobChNYXRoLnJvdW5kKDI1NSpyLmFscGhhKSkpLGkucHVzaCh7bGFiZWw6byx0ZXh0RWRpdDpEci5yZXBsYWNlKG4sSlNPTi5zdHJpbmdpZnkobykpfSksaX07dmFyIFdpPUhpO2Z1bmN0aW9uIEhpKGUpe3RoaXMuc2NoZW1hU2VydmljZT1lfWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIE9yLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpfXZhciBKaSxHaSxaaSxYaSxRaSxZaSxlbyxlPXFuLHRvPXtzY2hlbWFBc3NvY2lhdGlvbnM6W10sc2NoZW1hczp7Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hIyI6eyRyZWY6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyJ9LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiOnskc2NoZW1hOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiLGRlZmluaXRpb25zOntzY2hlbWFBcnJheTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsaXRlbXM6eyRyZWY6IiMifX0scG9zaXRpdmVJbnRlZ2VyOnt0eXBlOiJpbnRlZ2VyIixtaW5pbXVtOjB9LHBvc2l0aXZlSW50ZWdlckRlZmF1bHQwOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn0se2RlZmF1bHQ6MH1dfSxzaW1wbGVUeXBlczp7dHlwZToic3RyaW5nIixlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH19LHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkc2NoZW1hOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sdGl0bGU6e3R5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0eXBlOiJzdHJpbmcifSxkZWZhdWx0Ont9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsbWluaW11bTowLGV4Y2x1c2l2ZU1pbmltdW06ITB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1heExlbmd0aDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluTGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHBhdHRlcm46e3R5cGU6InN0cmluZyIsZm9ybWF0OiJyZWdleCJ9LGFkZGl0aW9uYWxJdGVtczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6e319LG1heEl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5JdGVtczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4UHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluUHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSxyZXF1aXJlZDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfSxhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxkZXBlbmRlbmNpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfX0sZW51bTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7YW55T2Y6W3t0eXBlOiJzdHJpbmciLGVudW06WyJkYXRlLXRpbWUiLCJ1cmkiLCJlbWFpbCIsImhvc3RuYW1lIiwiaXB2NCIsImlwdjYiLCJyZWdleCJdfSx7dHlwZToic3RyaW5nIn1dfSxhbGxPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxhbnlPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxvbmVPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxub3Q6e2FsbE9mOlt7JHJlZjoiIyJ9XX19LGRlcGVuZGVuY2llczp7ZXhjbHVzaXZlTWF4aW11bTpbIm1heGltdW0iXSxleGNsdXNpdmVNaW5pbXVtOlsibWluaW11bSJdfSxkZWZhdWx0Ont9fSwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIjp7ZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxub25OZWdhdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0sbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOntlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sdW5pcXVlSXRlbXM6ITAsZGVmYXVsdDpbXX19LHR5cGU6WyJvYmplY3QiLCJib29sZWFuIl0scHJvcGVydGllczp7JGlkOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkcmVmOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRjb21tZW50Ont0eXBlOiJzdHJpbmcifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6ITAscmVhZE9ubHk6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGV4YW1wbGVzOnt0eXBlOiJhcnJheSIsaXRlbXM6ITB9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsZXhjbHVzaXZlTWluaW11bTowfSxtYXhpbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNYXhpbXVtOnt0eXBlOiJudW1iZXIifSxtaW5pbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0eXBlOiJudW1iZXIifSxtYXhMZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluTGVuZ3RoOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnskcmVmOiIjIn0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6ITB9LG1heEl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pbkl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0sdW5pcXVlSXRlbXM6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGNvbnRhaW5zOnskcmVmOiIjIn0sbWF4UHJvcGVydGllczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5Qcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scmVxdWlyZWQ6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifSxhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmluaXRpb25zOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHBhdHRlcm5Qcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0scHJvcGVydHlOYW1lczp7Zm9ybWF0OiJyZWdleCJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxwcm9wZXJ0eU5hbWVzOnskcmVmOiIjIn0sY29uc3Q6ITAsZW51bTp7dHlwZToiYXJyYXkiLGl0ZW1zOiEwLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7dHlwZToic3RyaW5nIn0sY29udGVudE1lZGlhVHlwZTp7dHlwZToic3RyaW5nIn0sY29udGVudEVuY29kaW5nOnt0eXBlOiJzdHJpbmcifSxpZjp7JHJlZjoiIyJ9LHRoZW46eyRyZWY6IiMifSxlbHNlOnskcmVmOiIjIn0sYWxsT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxhbnlPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LG9uZU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sbm90OnskcmVmOiIjIn19LGRlZmF1bHQ6ITB9fX0scm89e2lkOmUoInNjaGVtYS5qc29uLmlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkc2NoZW1hOmUoInNjaGVtYS5qc29uLiRzY2hlbWEiLCJUaGUgc2NoZW1hIHRvIHZlcmlmeSB0aGlzIGRvY3VtZW50IGFnYWluc3QuIiksdGl0bGU6ZSgic2NoZW1hLmpzb24udGl0bGUiLCJBIGRlc2NyaXB0aXZlIHRpdGxlIG9mIHRoZSBlbGVtZW50LiIpLGRlc2NyaXB0aW9uOmUoInNjaGVtYS5qc29uLmRlc2NyaXB0aW9uIiwiQSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50LiBVc2VkIGluIGhvdmVyIG1lbnVzIGFuZCBzdWdnZXN0aW9ucy4iKSxkZWZhdWx0OmUoInNjaGVtYS5qc29uLmRlZmF1bHQiLCJBIGRlZmF1bHQgdmFsdWUuIFVzZWQgYnkgc3VnZ2VzdGlvbnMuIiksbXVsdGlwbGVPZjplKCJzY2hlbWEuanNvbi5tdWx0aXBsZU9mIiwiQSBudW1iZXIgdGhhdCBzaG91bGQgY2xlYW5seSBkaXZpZGUgdGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gaGF2ZSBubyByZW1haW5kZXIpLiIpLG1heGltdW06ZSgic2NoZW1hLmpzb24ubWF4aW11bSIsIlRoZSBtYXhpbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWF4aW11bTplKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNYXhpbXVtIiwiTWFrZXMgdGhlIG1heGltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1pbmltdW06ZSgic2NoZW1hLmpzb24ubWluaW11bSIsIlRoZSBtaW5pbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWluaW11bTplKCJzY2hlbWEuanNvbi5leGNsdXNpdmVNaW5pbnVtIiwiTWFrZXMgdGhlIG1pbmltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1heExlbmd0aDplKCJzY2hlbWEuanNvbi5tYXhMZW5ndGgiLCJUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBzdHJpbmcuIiksbWluTGVuZ3RoOmUoInNjaGVtYS5qc29uLm1pbkxlbmd0aCIsIlRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxwYXR0ZXJuOmUoInNjaGVtYS5qc29uLnBhdHRlcm4iLCJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgc3RyaW5nIGFnYWluc3QuIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLiIpLGFkZGl0aW9uYWxJdGVtczplKCJzY2hlbWEuanNvbi5hZGRpdGlvbmFsSXRlbXMiLCJGb3IgYXJyYXlzLCBvbmx5IHdoZW4gaXRlbXMgaXMgc2V0IGFzIGFuIGFycmF5LiBJZiBpdCBpcyBhIHNjaGVtYSwgdGhlbiB0aGlzIHNjaGVtYSB2YWxpZGF0ZXMgaXRlbXMgYWZ0ZXIgdGhlIG9uZXMgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtcyBhcnJheS4gSWYgaXQgaXMgZmFsc2UsIHRoZW4gYWRkaXRpb25hbCBpdGVtcyB3aWxsIGNhdXNlIHZhbGlkYXRpb24gdG8gZmFpbC4iKSxpdGVtczplKCJzY2hlbWEuanNvbi5pdGVtcyIsIkZvciBhcnJheXMuIENhbiBlaXRoZXIgYmUgYSBzY2hlbWEgdG8gdmFsaWRhdGUgZXZlcnkgZWxlbWVudCBhZ2FpbnN0IG9yIGFuIGFycmF5IG9mIHNjaGVtYXMgdG8gdmFsaWRhdGUgZWFjaCBpdGVtIGFnYWluc3QgaW4gb3JkZXIgKHRoZSBmaXJzdCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIHNlY29uZCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi4iKSxtYXhJdGVtczplKCJzY2hlbWEuanNvbi5tYXhJdGVtcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSxtaW5JdGVtczplKCJzY2hlbWEuanNvbi5taW5JdGVtcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBpbnNpZGUgYW4gYXJyYXkuIEluY2x1c2l2ZS4iKSx1bmlxdWVJdGVtczplKCJzY2hlbWEuanNvbi51bmlxdWVJdGVtcyIsIklmIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IG11c3QgYmUgdW5pcXVlLiBEZWZhdWx0cyB0byBmYWxzZS4iKSxtYXhQcm9wZXJ0aWVzOmUoInNjaGVtYS5qc29uLm1heFByb3BlcnRpZXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxtaW5Qcm9wZXJ0aWVzOmUoInNjaGVtYS5qc29uLm1pblByb3BlcnRpZXMiLCJUaGUgbWluaW11bSBudW1iZXIgb2YgcHJvcGVydGllcyBhbiBvYmplY3QgY2FuIGhhdmUuIEluY2x1c2l2ZS4iKSxyZXF1aXJlZDplKCJzY2hlbWEuanNvbi5yZXF1aXJlZCIsIkFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgcmVxdWlyZWQgb24gdGhpcyBvYmplY3QuIiksYWRkaXRpb25hbFByb3BlcnRpZXM6ZSgic2NoZW1hLmpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMiLCJFaXRoZXIgYSBzY2hlbWEgb3IgYSBib29sZWFuLiBJZiBhIHNjaGVtYSwgdGhlbiB1c2VkIHRvIHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5ICdwcm9wZXJ0aWVzJyBvciAncGF0dGVyblByb3BlcnRpZXMnLiBJZiBmYWxzZSwgdGhlbiBhbnkgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSBlaXRoZXIgd2lsbCBjYXVzZSB0aGlzIHNjaGVtYSB0byBmYWlsLiIpLGRlZmluaXRpb25zOmUoInNjaGVtYS5qc29uLmRlZmluaXRpb25zIiwiTm90IHVzZWQgZm9yIHZhbGlkYXRpb24uIFBsYWNlIHN1YnNjaGVtYXMgaGVyZSB0aGF0IHlvdSB3aXNoIHRvIHJlZmVyZW5jZSBpbmxpbmUgd2l0aCAkcmVmLiIpLHByb3BlcnRpZXM6ZSgic2NoZW1hLmpzb24ucHJvcGVydGllcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIGVhY2ggcHJvcGVydHkuIikscGF0dGVyblByb3BlcnRpZXM6ZSgic2NoZW1hLmpzb24ucGF0dGVyblByb3BlcnRpZXMiLCJBIG1hcCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIG9uIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIG1hdGNoaW5nIHByb3BlcnRpZXMuIiksZGVwZW5kZW5jaWVzOmUoInNjaGVtYS5qc29uLmRlcGVuZGVuY2llcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIGVpdGhlciBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBvciBhIHNjaGVtYS4gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgbWVhbnMgdGhlIHByb3BlcnR5IG5hbWVkIGluIHRoZSBrZXkgZGVwZW5kcyBvbiB0aGUgcHJvcGVydGllcyBpbiB0aGUgYXJyYXkgYmVpbmcgcHJlc2VudCBpbiB0aGUgb2JqZWN0IGluIG9yZGVyIHRvIGJlIHZhbGlkLiBJZiB0aGUgdmFsdWUgaXMgYSBzY2hlbWEsIHRoZW4gdGhlIHNjaGVtYSBpcyBvbmx5IGFwcGxpZWQgdG8gdGhlIG9iamVjdCBpZiB0aGUgcHJvcGVydHkgaW4gdGhlIGtleSBleGlzdHMgb24gdGhlIG9iamVjdC4iKSxlbnVtOmUoInNjaGVtYS5qc29uLmVudW0iLCJUaGUgc2V0IG9mIGxpdGVyYWwgdmFsdWVzIHRoYXQgYXJlIHZhbGlkLiIpLHR5cGU6ZSgic2NoZW1hLmpzb24udHlwZSIsIkVpdGhlciBhIHN0cmluZyBvZiBvbmUgb2YgdGhlIGJhc2ljIHNjaGVtYSB0eXBlcyAobnVtYmVyLCBpbnRlZ2VyLCBudWxsLCBhcnJheSwgb2JqZWN0LCBib29sZWFuLCBzdHJpbmcpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3Mgc3BlY2lmeWluZyBhIHN1YnNldCBvZiB0aG9zZSB0eXBlcy4iKSxmb3JtYXQ6ZSgic2NoZW1hLmpzb24uZm9ybWF0IiwiRGVzY3JpYmVzIHRoZSBmb3JtYXQgZXhwZWN0ZWQgZm9yIHRoZSB2YWx1ZS4iKSxhbGxPZjplKCJzY2hlbWEuanNvbi5hbGxPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGFsbCBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLGFueU9mOmUoInNjaGVtYS5qc29uLmFueU9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgd2hlcmUgYXQgbGVhc3Qgb25lIG11c3QgbWF0Y2guIiksb25lT2Y6ZSgic2NoZW1hLmpzb24ub25lT2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCBleGFjdGx5IG9uZSBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLG5vdDplKCJzY2hlbWEuanNvbi5ub3QiLCJBIHNjaGVtYSB3aGljaCBtdXN0IG5vdCBtYXRjaC4iKSwkaWQ6ZSgic2NoZW1hLmpzb24uJGlkIiwiQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYS4iKSwkcmVmOmUoInNjaGVtYS5qc29uLiRyZWYiLCJSZWZlcmVuY2UgYSBkZWZpbml0aW9uIGhvc3RlZCBvbiBhbnkgbG9jYXRpb24uIiksJGNvbW1lbnQ6ZSgic2NoZW1hLmpzb24uJGNvbW1lbnQiLCJDb21tZW50cyBmcm9tIHNjaGVtYSBhdXRob3JzIHRvIHJlYWRlcnMgb3IgbWFpbnRhaW5lcnMgb2YgdGhlIHNjaGVtYS4iKSxyZWFkT25seTplKCJzY2hlbWEuanNvbi5yZWFkT25seSIsIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2UgaXMgbWFuYWdlZCBleGNsdXNpdmVseSBieSB0aGUgb3duaW5nIGF1dGhvcml0eS4iKSxleGFtcGxlczplKCJzY2hlbWEuanNvbi5leGFtcGxlcyIsIlNhbXBsZSBKU09OIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNjaGVtYSwgZm9yIHRoZSBwdXJwb3NlIG9mIGlsbHVzdHJhdGluZyB1c2FnZS4iKSxjb250YWluczplKCJzY2hlbWEuanNvbi5jb250YWlucyIsJ0FuIGFycmF5IGluc3RhbmNlIGlzIHZhbGlkIGFnYWluc3QgImNvbnRhaW5zIiBpZiBhdCBsZWFzdCBvbmUgb2YgaXRzIGVsZW1lbnRzIGlzIHZhbGlkIGFnYWluc3QgdGhlIGdpdmVuIHNjaGVtYS4nKSxwcm9wZXJ0eU5hbWVzOmUoInNjaGVtYS5qc29uLnByb3BlcnR5TmFtZXMiLCJJZiB0aGUgaW5zdGFuY2UgaXMgYW4gb2JqZWN0LCB0aGlzIGtleXdvcmQgdmFsaWRhdGVzIGlmIGV2ZXJ5IHByb3BlcnR5IG5hbWUgaW4gdGhlIGluc3RhbmNlIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBwcm92aWRlZCBzY2hlbWEuIiksY29uc3Q6ZSgic2NoZW1hLmpzb24uY29uc3QiLCJBbiBpbnN0YW5jZSB2YWxpZGF0ZXMgc3VjY2Vzc2Z1bGx5IGFnYWluc3QgdGhpcyBrZXl3b3JkIGlmIGl0cyB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgdGhlIGtleXdvcmQuIiksY29udGVudE1lZGlhVHlwZTplKCJzY2hlbWEuanNvbi5jb250ZW50TWVkaWFUeXBlIiwiRGVzY3JpYmVzIHRoZSBtZWRpYSB0eXBlIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGNvbnRlbnRFbmNvZGluZzplKCJzY2hlbWEuanNvbi5jb250ZW50RW5jb2RpbmciLCJEZXNjcmliZXMgdGhlIGNvbnRlbnQgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksaWY6ZSgic2NoZW1hLmpzb24uaWYiLCdUaGUgdmFsaWRhdGlvbiBvdXRjb21lIG9mIHRoZSAiaWYiIHN1YnNjaGVtYSBjb250cm9scyB3aGljaCBvZiB0aGUgInRoZW4iIG9yICJlbHNlIiBrZXl3b3JkcyBhcmUgZXZhbHVhdGVkLicpLHRoZW46ZSgic2NoZW1hLmpzb24udGhlbiIsJ1RoZSAiaWYiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIHN1Y2NlZWRzLicpLGVsc2U6ZSgic2NoZW1hLmpzb24uZWxzZSIsJ1RoZSAiZWxzZSIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgZmFpbHMuJyl9O2ZvcihRaSBpbiB0by5zY2hlbWFzKWZvcihYaSBpbihKaT10by5zY2hlbWFzW1FpXSkucHJvcGVydGllcykiYm9vbGVhbiI9PXR5cGVvZihHaT1KaS5wcm9wZXJ0aWVzW1hpXSkmJihHaT1KaS5wcm9wZXJ0aWVzW1hpXT17fSksKFppPXJvW1hpXSk/R2kuZGVzY3JpcHRpb249Wmk6Y29uc29sZS5sb2coIiIuY29uY2F0KFhpLCI6IGxvY2FsaXplKCdzY2hlbWEuanNvbi4iKS5jb25jYXQoWGksYCcsICIiKWApKTtmdW5jdGlvbiBubyhlKXtpZihlb1tlXSlyZXR1cm4gZW9bZV0uZXhwb3J0czt2YXIgdD1lb1tlXT17ZXhwb3J0czp7fX07cmV0dXJuIFlpW2VdKHQsdC5leHBvcnRzLG5vKSx0LmV4cG9ydHN9WWk9ezQ3MDplPT57ZnVuY3Rpb24gZihlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByLG49IiIsaT0wLG89LTEsYT0wLHM9MDtzPD1lLmxlbmd0aDsrK3Mpe2lmKHM8ZS5sZW5ndGgpcj1lLmNoYXJDb2RlQXQocyk7ZWxzZXtpZig0Nz09PXIpYnJlYWs7cj00N31pZig0Nz09PXIpe2lmKG8hPT1zLTEmJjEhPT1hKWlmKG8hPT1zLTEmJjI9PT1hKXtpZihuLmxlbmd0aDwyfHwyIT09aXx8NDYhPT1uLmNoYXJDb2RlQXQobi5sZW5ndGgtMSl8fDQ2IT09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTIpKWlmKDI8bi5sZW5ndGgpe3ZhciBsPW4ubGFzdEluZGV4T2YoIi8iKTtpZihsIT09bi5sZW5ndGgtMSl7aT0tMT09PWw/KG49IiIsMCk6KG49bi5zbGljZSgwLGwpKS5sZW5ndGgtMS1uLmxhc3RJbmRleE9mKCIvIiksbz1zLGE9MDtjb250aW51ZX19ZWxzZSBpZigyPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCl7bj0iIixvPXMsYT1pPTA7Y29udGludWV9dCYmKDA8bi5sZW5ndGg/bis9Ii8uLiI6bj0iLi4iLGk9Mil9ZWxzZSAwPG4ubGVuZ3RoP24rPSIvIitlLnNsaWNlKG8rMSxzKTpuPWUuc2xpY2UobysxLHMpLGk9cy1vLTE7bz1zLGE9MH1lbHNlIDQ2PT09ciYmLTEhPT1hPysrYTphPS0xfXJldHVybiBufXZhciBkPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9IiIscj0hMSxuPWFyZ3VtZW50cy5sZW5ndGgtMTstMTw9biYmIXI7bi0tKXt2YXIgaT0wPD1uP2FyZ3VtZW50c1tuXTplPXZvaWQgMD09PWU/cHJvY2Vzcy5jd2QoKTplO2YoaSksMCE9PWkubGVuZ3RoJiYodD1pKyIvIit0LHI9NDc9PT1pLmNoYXJDb2RlQXQoMCkpfXJldHVybiB0PW8odCwhcikscj8wPHQubGVuZ3RoPyIvIit0OiIvIjowPHQubGVuZ3RoP3Q6Ii4ifSxub3JtYWxpemU6ZnVuY3Rpb24oZSl7aWYoZihlKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO3ZhciB0PTQ3PT09ZS5jaGFyQ29kZUF0KDApLHI9NDc9PT1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk7cmV0dXJuIDA8KGU9MCE9PShlPW8oZSwhdCkpLmxlbmd0aHx8dD9lOiIuIikubGVuZ3RoJiZyJiYoZSs9Ii8iKSx0PyIvIitlOmV9LGlzQWJzb2x1dGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSksMDxlLmxlbmd0aCYmNDc9PT1lLmNoYXJDb2RlQXQoMCl9LGpvaW46ZnVuY3Rpb24oKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBlLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7Kyt0KXt2YXIgcj1hcmd1bWVudHNbdF07ZihyKSwwPHIubGVuZ3RoJiYodm9pZCAwPT09ZT9lPXI6ZSs9Ii8iK3IpfXJldHVybiB2b2lkIDA9PT1lPyIuIjpkLm5vcm1hbGl6ZShlKX0scmVsYXRpdmU6ZnVuY3Rpb24oZSx0KXtpZihmKGUpLGYodCksZT09PXQpcmV0dXJuIiI7aWYoKGU9ZC5yZXNvbHZlKGUpKT09PSh0PWQucmVzb2x2ZSh0KSkpcmV0dXJuIiI7Zm9yKHZhciByPTE7cjxlLmxlbmd0aCYmNDc9PT1lLmNoYXJDb2RlQXQocik7KytyKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uLXIsbz0xO288dC5sZW5ndGgmJjQ3PT09dC5jaGFyQ29kZUF0KG8pOysrbyk7Zm9yKHZhciB1PXQubGVuZ3RoLW8sYT1pPHU/aTp1LHM9LTEsbD0wO2w8PWE7KytsKXtpZihsPT09YSl7aWYoYTx1KXtpZig0Nz09PXQuY2hhckNvZGVBdChvK2wpKXJldHVybiB0LnNsaWNlKG8rbCsxKTtpZigwPT09bClyZXR1cm4gdC5zbGljZShvK2wpfWVsc2UgYTxpJiYoNDc9PT1lLmNoYXJDb2RlQXQocitsKT9zPWw6MD09PWwmJihzPTApKTticmVha312YXIgaD1lLmNoYXJDb2RlQXQocitsKTtpZihoIT09dC5jaGFyQ29kZUF0KG8rbCkpYnJlYWs7NDc9PT1oJiYocz1sKX1mb3IodmFyIGM9IiIsbD1yK3MrMTtsPD1uOysrbClsIT09biYmNDchPT1lLmNoYXJDb2RlQXQobCl8fCgwPT09Yy5sZW5ndGg/Yys9Ii4uIjpjKz0iLy4uIik7cmV0dXJuIDA8Yy5sZW5ndGg/Yyt0LnNsaWNlKG8rcyk6KDQ3PT09dC5jaGFyQ29kZUF0KG8rPXMpJiYrK28sdC5zbGljZShvKSl9LF9tYWtlTG9uZzpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZGlybmFtZTpmdW5jdGlvbihlKXtpZihmKGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciB0PTQ3PT09ZS5jaGFyQ29kZUF0KDApLHI9LTEsbj0hMCxpPWUubGVuZ3RoLTE7MTw9aTstLWkpaWYoNDc9PT1lLmNoYXJDb2RlQXQoaSkpe2lmKCFuKXtyPWk7YnJlYWt9fWVsc2Ugbj0hMTtyZXR1cm4tMT09PXI/dD8iLyI6Ii4iOnQmJjE9PT1yPyIvLyI6ZS5zbGljZSgwLHIpfSxiYXNlbmFtZTpmdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQmJiJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7ZihlKTt2YXIgcj0wLG49LTEsaT0hMDtpZih2b2lkIDAhPT10JiYwPHQubGVuZ3RoJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQ9PT1lKXJldHVybiIiO2Zvcih2YXIgbz10Lmxlbmd0aC0xLGE9LTEscz1lLmxlbmd0aC0xOzA8PXM7LS1zKXt2YXIgbD1lLmNoYXJDb2RlQXQocyk7aWYoNDc9PT1sKXtpZighaSl7cj1zKzE7YnJlYWt9fWVsc2UtMT09PWEmJihpPSExLGE9cysxKSwwPD1vJiYobD09PXQuY2hhckNvZGVBdChvKT8tMT09LS1vJiYobj1zKToobz0tMSxuPWEpKX1yZXR1cm4gcj09PW4/bj1hOi0xPT09biYmKG49ZS5sZW5ndGgpLGUuc2xpY2UocixuKX1mb3Iocz1lLmxlbmd0aC0xOzA8PXM7LS1zKWlmKDQ3PT09ZS5jaGFyQ29kZUF0KHMpKXtpZighaSl7cj1zKzE7YnJlYWt9fWVsc2UtMT09PW4mJihpPSExLG49cysxKTtyZXR1cm4tMT09PW4/IiI6ZS5zbGljZShyLG4pfSxleHRuYW1lOmZ1bmN0aW9uKGUpe2YoZSk7Zm9yKHZhciB0PS0xLHI9MCxuPS0xLGk9ITAsbz0wLGE9ZS5sZW5ndGgtMTswPD1hOy0tYSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGEpO2lmKDQ3IT09cyktMT09PW4mJihpPSExLG49YSsxKSw0Nj09PXM/LTE9PT10P3Q9YToxIT09byYmKG89MSk6LTEhPT10JiYobz0tMSk7ZWxzZSBpZighaSl7cj1hKzE7YnJlYWt9fXJldHVybi0xPT09dHx8LTE9PT1ufHwwPT09b3x8MT09PW8mJnQ9PT1uLTEmJnQ9PT1yKzE/IiI6ZS5zbGljZSh0LG4pfSxmb3JtYXQ6ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7cmV0dXJuIHQ9ZS5kaXJ8fGUucm9vdCxyPWUuYmFzZXx8KGUubmFtZXx8IiIpKyhlLmV4dHx8IiIpLHQ/dD09PWUucm9vdD90K3I6dCsiLyIrcjpyO3ZhciB0LHJ9LHBhcnNlOmZ1bmN0aW9uKGUpe2YoZSk7dmFyIHQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDtmb3IodmFyIHIsbj00Nz09PWUuY2hhckNvZGVBdCgwKSx1PW4/KHQucm9vdD0iLyIsMSk6MCxpPS0xLG89MCxhPS0xLHM9ITAsbD1lLmxlbmd0aC0xLGM9MDt1PD1sOy0tbClpZig0NyE9PShyPWUuY2hhckNvZGVBdChsKSkpLTE9PT1hJiYocz0hMSxhPWwrMSksNDY9PT1yPy0xPT09aT9pPWw6MSE9PWMmJihjPTEpOi0xIT09aSYmKGM9LTEpO2Vsc2UgaWYoIXMpe289bCsxO2JyZWFrfXJldHVybi0xPT09aXx8LTE9PT1hfHwwPT09Y3x8MT09PWMmJmk9PT1hLTEmJmk9PT1vKzE/LTEhPT1hJiYodC5iYXNlPXQubmFtZT0wPT09byYmbj9lLnNsaWNlKDEsYSk6ZS5zbGljZShvLGEpKTooMD09PW8mJm4/KHQubmFtZT1lLnNsaWNlKDEsaSksdC5iYXNlPWUuc2xpY2UoMSxhKSk6KHQubmFtZT1lLnNsaWNlKG8saSksdC5iYXNlPWUuc2xpY2UobyxhKSksdC5leHQ9ZS5zbGljZShpLGEpKSwwPG8/dC5kaXI9ZS5zbGljZSgwLG8tMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ZC5wb3NpeD1kLGUuZXhwb3J0cz1kfSw0NDc6KHUsZSx0KT0+e3ZhciBuO3QucihlKSx0LmQoZSx7VVJJOigpPT5wLFV0aWxzOigpPT5sfSksIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzP249IndpbjMyIj09PXByb2Nlc3MucGxhdGZvcm06Im9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJihuPTA8PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiV2luZG93cyIpKTtvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG89T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJihlW3JdPXRbcl0pfSkoZSx0KX07dmFyIG8saD0vXlx3W1x3XGQrLi1dKiQvLGY9L15cLy8sZD0vXlwvXC8vO2Z1bmN0aW9uIG0oZSx0KXtpZighZS5zY2hlbWUmJnQpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KGUuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KGUucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoZS5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoZS5mcmFnbWVudCwnIn0nKSk7aWYoZS5zY2hlbWUmJiFoLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFmLnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKGQudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfXZhciBnPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLHA9KHIuaXNVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiByfHwhIWUmJiJzdHJpbmciPT10eXBlb2YgZS5hdXRob3JpdHkmJiJzdHJpbmciPT10eXBlb2YgZS5mcmFnbWVudCYmInN0cmluZyI9PXR5cGVvZiBlLnBhdGgmJiJzdHJpbmciPT10eXBlb2YgZS5xdWVyeSYmInN0cmluZyI9PXR5cGVvZiBlLnNjaGVtZSYmInN0cmluZyI9PXR5cGVvZiBlLmZzUGF0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGUud2l0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGUudG9TdHJpbmd9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcodGhpcywhMSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksci5wcm90b3R5cGUud2l0aD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gdGhpczt2YXIgdD1lLnNjaGVtZSxyPWUuYXV0aG9yaXR5LG49ZS5wYXRoLGk9ZS5xdWVyeSxlPWUuZnJhZ21lbnQ7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9IiIpLHZvaWQgMD09PXI/cj10aGlzLmF1dGhvcml0eTpudWxsPT09ciYmKHI9IiIpLHZvaWQgMD09PW4/bj10aGlzLnBhdGg6bnVsbD09PW4mJihuPSIiKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9IiIpLHZvaWQgMD09PWU/ZT10aGlzLmZyYWdtZW50Om51bGw9PT1lJiYoZT0iIiksdD09PXRoaXMuc2NoZW1lJiZyPT09dGhpcy5hdXRob3JpdHkmJm49PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZlPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBhKHQscixuLGksZSl9LHIucGFyc2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMSk7ZT1nLmV4ZWMoZSk7cmV0dXJuIGU/bmV3IGEoZVsyXXx8IiIsaShlWzRdfHwiIiksaShlWzVdfHwiIiksaShlWzddfHwiIiksaShlWzldfHwiIiksdCk6bmV3IGEoIiIsIiIsIiIsIiIsIiIpfSxyLmZpbGU9ZnVuY3Rpb24oZSl7dmFyIHQscj0iIjtyZXR1cm4iLyI9PT0oZT1uP2UucmVwbGFjZSgvXFwvZywiLyIpOmUpWzBdJiYiLyI9PT1lWzFdJiYoZT0tMT09PSh0PWUuaW5kZXhPZigiLyIsMikpPyhyPWUuc3Vic3RyaW5nKDIpLCIvIik6KHI9ZS5zdWJzdHJpbmcoMix0KSxlLnN1YnN0cmluZyh0KXx8Ii8iKSksbmV3IGEoImZpbGUiLHIsZSwiIiwiIil9LHIuZnJvbT1mdW5jdGlvbihlKXtlPW5ldyBhKGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQpO3JldHVybiBtKGUsITApLGV9LHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBzKHRoaXMsZT12b2lkIDA9PT1lPyExOmUpfSxyLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sci5yZXZpdmU9ZnVuY3Rpb24oZSl7aWYoZSl7aWYoZSBpbnN0YW5jZW9mIHIpcmV0dXJuIGU7dmFyIHQ9bmV3IGEoZSk7cmV0dXJuIHQuX2Zvcm1hdHRlZD1lLmV4dGVybmFsLHQuX2ZzUGF0aD1lLl9zZXA9PT1iP2UuZnNQYXRoOm51bGwsdH1yZXR1cm4gZX0sciksYj1uPzE6dm9pZCAwLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fZm9ybWF0dGVkPW51bGwsZS5fZnNQYXRoPW51bGwsZX12YXIgcj1lLG49dDtpZigiZnVuY3Rpb24iIT10eXBlb2YgbiYmbnVsbCE9PW4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhuKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBpKCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfXJldHVybiBvKHIsbiksci5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooaS5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IGkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD13KHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dm9pZCAwPT09ZT8hMTplKT9zKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9cyh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGU9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGUuZnNQYXRoPXRoaXMuX2ZzUGF0aCxlLl9zZXA9YiksdGhpcy5fZm9ybWF0dGVkJiYoZS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGUucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoZS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoZS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihlLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihlLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGV9LGV9KHApLHY9KChlPXt9KVs1OF09IiUzQSIsZVs0N109IiUyRiIsZVs2M109IiUzRiIsZVszNV09IiUyMyIsZVs5MV09IiU1QiIsZVs5M109IiU1RCIsZVs2NF09IiU0MCIsZVszM109IiUyMSIsZVszNl09IiUyNCIsZVszOF09IiUyNiIsZVszOV09IiUyNyIsZVs0MF09IiUyOCIsZVs0MV09IiUyOSIsZVs0Ml09IiUyQSIsZVs0M109IiUyQiIsZVs0NF09IiUyQyIsZVs1OV09IiUzQiIsZVs2MV09IiUzRCIsZVszMl09IiUyMCIsZSk7ZnVuY3Rpb24gcihlLHQscixuLGksbyl7dm9pZCAwPT09byYmKG89ITEpLCJvYmplY3QiPT10eXBlb2YgZT8odGhpcy5zY2hlbWU9ZS5zY2hlbWV8fCIiLHRoaXMuYXV0aG9yaXR5PWUuYXV0aG9yaXR5fHwiIix0aGlzLnBhdGg9ZS5wYXRofHwiIix0aGlzLnF1ZXJ5PWUucXVlcnl8fCIiLHRoaXMuZnJhZ21lbnQ9ZS5mcmFnbWVudHx8IiIpOih0aGlzLnNjaGVtZT1lfHxvP2U6ImZpbGUiLHRoaXMuYXV0aG9yaXR5PXR8fCIiLHRoaXMucGF0aD1mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD8iLyIhPT10WzBdJiYodD0iLyIrdCk6dD0iLyJ9cmV0dXJuIHR9KHRoaXMuc2NoZW1lLHJ8fCIiKSx0aGlzLnF1ZXJ5PW58fCIiLHRoaXMuZnJhZ21lbnQ9aXx8IiIsbSh0aGlzLG8pKX1mdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciByPXZvaWQgMCxuPS0xLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZS5jaGFyQ29kZUF0KGkpOzk3PD1vJiZvPD0xMjJ8fDY1PD1vJiZvPD05MHx8NDg8PW8mJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHx0JiY0Nz09PW8/KC0xIT09biYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhuLGkpKSxuPS0xKSx2b2lkIDAhPT1yJiYocis9ZS5jaGFyQXQoaSkpKToodm9pZCAwPT09ciYmKHI9ZS5zdWJzdHIoMCxpKSksdm9pZCAwIT09KG89dltvXSk/KC0xIT09biYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhuLGkpKSxuPS0xKSxyKz1vKTotMT09PW4mJihuPWkpKX1yZXR1cm4tMSE9PW4mJihyKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcobikpKSx2b2lkIDAhPT1yP3I6ZX1mdW5jdGlvbiBDKGUpe2Zvcih2YXIgdD12b2lkIDAscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lLmNoYXJDb2RlQXQocik7MzU9PT1ufHw2Mz09PW4/KHZvaWQgMD09PXQmJih0PWUuc3Vic3RyKDAscikpLHQrPXZbbl0pOnZvaWQgMCE9PXQmJih0Kz1lW3JdKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gdyhlLHQpe3Q9ZS5hdXRob3JpdHkmJjE8ZS5wYXRoLmxlbmd0aCYmImZpbGUiPT09ZS5zY2hlbWU/Ii8vIi5jb25jYXQoZS5hdXRob3JpdHkpLmNvbmNhdChlLnBhdGgpOjQ3PT09ZS5wYXRoLmNoYXJDb2RlQXQoMCkmJig2NTw9ZS5wYXRoLmNoYXJDb2RlQXQoMSkmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8OTc8PWUucGF0aC5jaGFyQ29kZUF0KDEpJiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmNTg9PT1lLnBhdGguY2hhckNvZGVBdCgyKT90P2UucGF0aC5zdWJzdHIoMSk6ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTplLnBhdGg7cmV0dXJuIHQ9bj90LnJlcGxhY2UoL1wvL2csIlxcIik6dH1mdW5jdGlvbiBzKGUsdCl7dmFyIHIsbixpPXQ/Qzp5LG89IiIsYT1lLnNjaGVtZSxzPWUuYXV0aG9yaXR5LGw9ZS5wYXRoLGM9ZS5xdWVyeSxlPWUuZnJhZ21lbnQ7cmV0dXJuIGEmJihvPW8rYSsiOiIpLCFzJiYiZmlsZSIhPT1hfHwobys9Ii8vIikscyYmKC0xIT09KGE9cy5pbmRleE9mKCJAIikpJiYocj1zLnN1YnN0cigwLGEpLHM9cy5zdWJzdHIoYSsxKSwtMT09PShhPXIuaW5kZXhPZigiOiIpKT9vKz1pKHIsITEpOm89KG89bytpKHIuc3Vic3RyKDAsYSksITEpKyI6IikraShyLnN1YnN0cihhKzEpLCExKSxvKz0iQCIpLC0xPT09KGE9KHM9cy50b0xvd2VyQ2FzZSgpKS5pbmRleE9mKCI6IikpP28rPWkocywhMSk6bz0obys9aShzLnN1YnN0cigwLGEpLCExKSkrcy5zdWJzdHIoYSkpLGwmJigzPD1sLmxlbmd0aCYmNDc9PT1sLmNoYXJDb2RlQXQoMCkmJjU4PT09bC5jaGFyQ29kZUF0KDIpPzY1PD0obj1sLmNoYXJDb2RlQXQoMSkpJiZuPD05MCYmKGw9Ii8iLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKG4rMzIpLCI6IikuY29uY2F0KGwuc3Vic3RyKDMpKSk6Mjw9bC5sZW5ndGgmJjU4PT09bC5jaGFyQ29kZUF0KDEpJiY2NTw9KG49bC5jaGFyQ29kZUF0KDApKSYmbjw9OTAmJihsPSIiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKG4rMzIpLCI6IikuY29uY2F0KGwuc3Vic3RyKDIpKSksbys9aShsLCEwKSksYyYmKG89KG8rPSI/IikraShjLCExKSksbz1lPyhvKz0iIyIpKyh0P2U6eShlLCExKSk6b312YXIgXz0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBpKGUpe3JldHVybiBlLm1hdGNoKF8pP2UucmVwbGFjZShfLGZ1bmN0aW9uIHQocil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQocil9Y2F0Y2goZSl7cmV0dXJuIDM8ci5sZW5ndGg/ci5zdWJzdHIoMCwzKSt0KHIuc3Vic3RyKDMpKTpyfX0pOmV9ZnVuY3Rpb24gUyhlLHQscil7aWYocnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBuLGk9MCxvPXQubGVuZ3RoO2k8bztpKyspIW4mJmkgaW4gdHx8KChuPW58fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSlbaV09dFtpXSk7cmV0dXJuIGUuY29uY2F0KG58fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX12YXIgbCxlPXQoNDcwKSxjPWUucG9zaXh8fGU7KHQ9bD1sfHx7fSkuam9pblBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIGUud2l0aCh7cGF0aDpjLmpvaW4uYXBwbHkoYyxTKFtlLnBhdGhdLHQsITEpKX0pfSx0LnJlc29sdmVQYXRoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3ItMV09YXJndW1lbnRzW3JdO3ZhciBuPWUucGF0aHx8Ii8iO3JldHVybiBlLndpdGgoe3BhdGg6Yy5yZXNvbHZlLmFwcGx5KGMsUyhbbl0sdCwhMSkpfSl9LHQuZGlybmFtZT1mdW5jdGlvbihlKXt2YXIgdD1jLmRpcm5hbWUoZS5wYXRoKTtyZXR1cm4gMT09PXQubGVuZ3RoJiY0Nj09PXQuY2hhckNvZGVBdCgwKT9lOmUud2l0aCh7cGF0aDp0fSl9LHQuYmFzZW5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuYmFzZW5hbWUoZS5wYXRoKX0sdC5leHRuYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBjLmV4dG5hbWUoZS5wYXRoKX19fSxlbz17fSxuby5kPShlLHQpPT57Zm9yKHZhciByIGluIHQpbm8ubyh0LHIpJiYhbm8ubyhlLHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDp0W3JdfSl9LG5vLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLG5vLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBpbz1ubyg0NDcpWyJVUkkiXTt2YXIgb289cW4sYW89KHNvLnByb3RvdHlwZS5tYXRjaGVzUGF0dGVybj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ITEscj0wLG49dGhpcy5nbG9iV3JhcHBlcnM7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl0sbz1pLnJlZ2V4cCxpPWkuaW5jbHVkZTtvLnRlc3QoZSkmJih0PWkpfXJldHVybiB0fSxzby5wcm90b3R5cGUuZ2V0VVJJcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaXN9LHNvKTtmdW5jdGlvbiBzbyhlLHQpe3RoaXMuZ2xvYldyYXBwZXJzPVtdO3RyeXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl0sbz0iISIhPT1pWzBdOzA8KGk9bz9pOmkuc3Vic3RyaW5nKDEpKS5sZW5ndGgmJigiLyI9PT1pWzBdJiYoaT1pLnN1YnN0cmluZygxKSksdGhpcy5nbG9iV3JhcHBlcnMucHVzaCh7cmVnZXhwOmZ1bmN0aW9uKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7Zm9yKHZhciByLG49U3RyaW5nKGUpLGk9IiIsbz0hIXQmJiEhdC5leHRlbmRlZCx1PSEhdCYmISF0Lmdsb2JzdGFyLGE9ITEsZT10JiYic3RyaW5nIj09dHlwZW9mIHQuZmxhZ3M/dC5mbGFnczoiIixzPTAsaD1uLmxlbmd0aDtzPGg7cysrKXN3aXRjaChyPW5bc10pe2Nhc2UiLyI6Y2FzZSIkIjpjYXNlIl4iOmNhc2UiKyI6Y2FzZSIuIjpjYXNlIigiOmNhc2UiKSI6Y2FzZSI9IjpjYXNlIiEiOmNhc2UifCI6aSs9IlxcIityO2JyZWFrO2Nhc2UiPyI6aWYobyl7aSs9Ii4iO2JyZWFrfWNhc2UiWyI6Y2FzZSJdIjppZihvKXtpKz1yO2JyZWFrfWNhc2UieyI6aWYobyl7YT0hMCxpKz0iKCI7YnJlYWt9Y2FzZSJ9IjppZihvKXthPSExLGkrPSIpIjticmVha31jYXNlIiwiOmlmKGEpe2krPSJ8IjticmVha31pKz0iXFwiK3I7YnJlYWs7Y2FzZSIqIjpmb3IodmFyIGw9bltzLTFdLGY9MTsiKiI9PT1uW3MrMV07KWYrKyxzKys7dmFyIGM9bltzKzFdO3U/MTxmJiYoIi8iPT09bHx8dm9pZCAwPT09bHx8InsiPT09bHx8IiwiPT09bCkmJigiLyI9PT1jfHx2b2lkIDA9PT1jfHwiLCI9PT1jfHwifSI9PT1jKT8oIi8iPT09Yz9zKys6Ii8iPT09bCYmaS5lbmRzV2l0aCgiXFwvIikmJihpPWkuc3Vic3RyKDAsaS5sZW5ndGgtMikpLGkrPSIoKD86W14vXSooPzovfCQpKSopIik6aSs9IihbXi9dKikiOmkrPSIuKiI7YnJlYWs7ZGVmYXVsdDppKz1yfXJldHVybiBlJiZ+ZS5pbmRleE9mKCJnIil8fChpPSJeIitpKyIkIiksbmV3IFJlZ0V4cChpLGUpfSgiKiovIitpLHtleHRlbmRlZDohMCxnbG9ic3RhcjohMH0pLGluY2x1ZGU6b30pKX10aGlzLnVyaXM9dH1jYXRjaChlKXt0aGlzLmdsb2JXcmFwcGVycy5sZW5ndGg9MCx0aGlzLnVyaXM9W119fWNvLnByb3RvdHlwZS5nZXRVbnJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5yZXNvbHZlZFNjaGVtYXx8KHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UubG9hZFNjaGVtYSh0aGlzLnVyaSkpLHRoaXMudW5yZXNvbHZlZFNjaGVtYX0sY28ucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYXx8KHRoaXMucmVzb2x2ZWRTY2hlbWE9dGhpcy5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5zZXJ2aWNlLnJlc29sdmVTY2hlbWFDb250ZW50KGUsdCl9KSksdGhpcy5yZXNvbHZlZFNjaGVtYX0sY28ucHJvdG90eXBlLmNsZWFyU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIGU9ISF0aGlzLnVucmVzb2x2ZWRTY2hlbWE7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMudW5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKSx0aGlzLmFuY2hvcnM9dm9pZCAwLGV9O3ZhciBsbz1jbztmdW5jdGlvbiBjbyhlLHQscil7dGhpcy5zZXJ2aWNlPWUsdGhpcy51cmk9dCx0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0LHRoaXMuYW5jaG9ycz12b2lkIDAsciYmKHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UucHJvbWlzZS5yZXNvbHZlKG5ldyB1byhyKSkpfXZhciB1bz1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9LGhvPShmby5wcm90b3R5cGUuZ2V0U2VjdGlvbj1mdW5jdGlvbihlKXtlPXRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHRoaXMuc2NoZW1hKTtpZihlKXJldHVybiBnaShlKX0sZm8ucHJvdG90eXBlLmdldFNlY3Rpb25SZWN1cnNpdmU9ZnVuY3Rpb24oZSx0KXtpZighdHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8MD09PWUubGVuZ3RoKXJldHVybiB0O3ZhciByPWUuc2hpZnQoKTtpZih0LnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXNbcl0sMSkpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucHJvcGVydGllc1tyXSk7aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIG49MCxpPU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO248aS5sZW5ndGg7bisrKXt2YXIgbz1pW25dLGE9bm4obyk7aWYobnVsbCE9YSYmYS50ZXN0KHIpKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LnBhdHRlcm5Qcm9wZXJ0aWVzW29dKX1lbHNle2lmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsUHJvcGVydGllcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5hZGRpdGlvbmFsUHJvcGVydGllcyk7aWYoci5tYXRjaCgiWzAtOV0rIikpaWYoQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSl7dmFyIHM9cGFyc2VJbnQociwxMCk7aWYoIWlzTmFOKHMpJiZ0Lml0ZW1zW3NdKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zW3NdKX1lbHNlIGlmKHQuaXRlbXMpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXMpfX0sZm8pO2Z1bmN0aW9uIGZvKGUsdCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2NoZW1hPWUsdGhpcy5lcnJvcnM9dH1nby5wcm90b3R5cGUuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkcykuZmlsdGVyKGZ1bmN0aW9uKGUpe2U9aW8ucGFyc2UoZSkuc2NoZW1lO3JldHVybiJzY2hlbWFzZXJ2aWNlIiE9PWUmJighdHx8dChlKSl9KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGdvLnByb3RvdHlwZSwicHJvbWlzZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxnby5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcig7MDx0aGlzLmNhbGxPbkRpc3Bvc2UubGVuZ3RoOyl0aGlzLmNhbGxPbkRpc3Bvc2UucG9wKCkoKX0sZ28ucHJvdG90eXBlLm9uUmVzb3VyY2VDaGFuZ2U9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMscj0odGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsITEpLG49W2U9dm8oZSldLGk9T2JqZWN0LmtleXModGhpcy5zY2hlbWFzQnlJZCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVtYXNCeUlkW2VdfSk7bi5sZW5ndGg7KWZvcih2YXIgbz1uLnBvcCgpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtzJiYocy51cmk9PT1vfHxzLmRlcGVuZGVuY2llcy5oYXMobykpJiYocy51cmkhPT1vJiZuLnB1c2gocy51cmkpLHMuY2xlYXJTY2hlbWEoKSYmKHI9ITApLGlbYV09dm9pZCAwKX1yZXR1cm4gcn0sZ28ucHJvdG90eXBlLnNldFNjaGVtYUNvbnRyaWJ1dGlvbnM9ZnVuY3Rpb24oZSl7aWYoZS5zY2hlbWFzKXt2YXIgdCxyPWUuc2NoZW1hcztmb3IodCBpbiByKXt2YXIgbj12byh0KTt0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbbl09dGhpcy5hZGRTY2hlbWFIYW5kbGUobixyW3RdKX19aWYoQXJyYXkuaXNBcnJheShlLnNjaGVtYUFzc29jaWF0aW9ucykpZm9yKHZhciBpPTAsbz1lLnNjaGVtYUFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXSxzPWEudXJpcy5tYXAodm8pLGE9dGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKGEucGF0dGVybixzKTt0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucy5wdXNoKGEpfX0sZ28ucHJvdG90eXBlLmFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbihlLHQpe3Q9bmV3IGxvKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXT10fSxnby5wcm90b3R5cGUuZ2V0T3JBZGRTY2hlbWFIYW5kbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXXx8dGhpcy5hZGRTY2hlbWFIYW5kbGUoZSx0KX0sZ28ucHJvdG90eXBlLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb249ZnVuY3Rpb24oZSx0KXtlPW5ldyBhbyhlLHQpO3JldHVybiB0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zLnB1c2goZSksZX0sZ28ucHJvdG90eXBlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWE9ZnVuY3Rpb24oZSx0LHIpe2U9dm8oZSk7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbZV09ITAsdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsdCYmdGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKHQsW2VdKSxyP3RoaXMuYWRkU2NoZW1hSGFuZGxlKGUscik6dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShlKX0sZ28ucHJvdG90eXBlLmNsZWFyRXh0ZXJuYWxTY2hlbWFzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9LHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcyl0aGlzLnNjaGVtYXNCeUlkW2VdPXRoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tlXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW2VdPSEwO2Zvcih2YXIgdD0wLHI9dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM7dDxyLmxlbmd0aDt0Kyspe3ZhciBuPXJbdF07dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKG4pfX0sZ28ucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKGUpe2U9dm8oZSksZT10aGlzLnNjaGVtYXNCeUlkW2VdO3JldHVybiBlP2UuZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApfSxnby5wcm90b3R5cGUubG9hZFNjaGVtYT1mdW5jdGlvbihyKXt2YXIgZTtyZXR1cm4gdGhpcy5yZXF1ZXN0U2VydmljZT90aGlzLnJlcXVlc3RTZXJ2aWNlKHIpLnRoZW4oZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHQ9b28oImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiBObyBjb250ZW50LiIseW8ocikpLG5ldyB1byh7fSxbdF0pO3ZhciB0PVtdLGU9SnIoZSx0KSx0PXQubGVuZ3RoP1tvbygianNvbi5zY2hlbWEuaW52YWxpZEZvcm1hdCIsIlVuYWJsZSB0byBwYXJzZSBjb250ZW50IGZyb20gJ3swfSc6IFBhcnNlIGVycm9yIGF0IG9mZnNldCB7MX0uIix5byhyKSx0WzBdLm9mZnNldCldOltdO3JldHVybiBuZXcgdW8oZSx0KX0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b1N0cmluZygpLGU9ZS50b1N0cmluZygpLnNwbGl0KCJFcnJvcjogIik7cmV0dXJuIHJuKHQ9MTxlLmxlbmd0aD9lWzFdOnQsIi4iKSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksbmV3IHVvKHt9LFtvbygianNvbi5zY2hlbWEubm9jb250ZW50IiwiVW5hYmxlIHRvIGxvYWQgc2NoZW1hIGZyb20gJ3swfSc6IHsxfS4iLHlvKHIpLHQpXSl9KTooZT1vbygianNvbi5zY2hlbWEubm9yZXF1ZXN0c2VydmljZSIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nLiBObyBzY2hlbWEgcmVxdWVzdCBzZXJ2aWNlIGF2YWlsYWJsZSIseW8ocikpLHRoaXMucHJvbWlzZS5yZXNvbHZlKG5ldyB1byh7fSxbZV0pKSl9LGdvLnByb3RvdHlwZS5yZXNvbHZlU2NoZW1hQ29udGVudD1mdW5jdGlvbihlLHQpe3ZhciBzPXRoaXMsbD1lLmVycm9ycy5zbGljZSgwKSxyPWUuc2NoZW1hO2lmKHIuJHNjaGVtYSl7ZT12byhyLiRzY2hlbWEpO2lmKCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTAzL3NjaGVtYSI9PT1lKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgaG8oe30sW29vKCJqc29uLnNjaGVtYS5kcmFmdDAzLm5vdHN1cHBvcnRlZCIsIkRyYWZ0LTAzIHNjaGVtYXMgYXJlIG5vdCBzdXBwb3J0ZWQuIildKSk7Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvc2NoZW1hIj09PWU/bC5wdXNoKG9vKCJqc29uLnNjaGVtYS5kcmFmdDIwMTkwOS5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDE5LTA5IHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKToiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPT09ZSYmbC5wdXNoKG9vKCJqc29uLnNjaGVtYS5kcmFmdDIwMjAxMi5ub3RzdXBwb3J0ZWQiLCJEcmFmdCAyMDIwLTEyIHNjaGVtYXMgYXJlIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiIpKX12YXIgYz10aGlzLmNvbnRleHRTZXJ2aWNlLGk9ZnVuY3Rpb24oZSx0KXt0PWRlY29kZVVSSUNvbXBvbmVudCh0KTt2YXIgcj1lO3JldHVybih0PSIvIj09PXRbMF0/dC5zdWJzdHJpbmcoMSk6dCkuc3BsaXQoIi8iKS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKSwhKHI9cltlXSl9KSxyfSxvPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdC5hbmNob3JzfHwodC5hbmNob3JzPW4oZSkpLHQuYW5jaG9ycy5nZXQocil9LGE9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYhZS5oYXNPd25Qcm9wZXJ0eShyKSYmImlkIiE9PXImJiIkaWQiIT09ciYmKGVbcl09dFtyXSl9LHU9ZnVuY3Rpb24oZSx0LHIsbil7dD12b2lkIDA9PT1ufHwwPT09bi5sZW5ndGg/dDoiLyI9PT1uLmNoYXJBdCgwKT9pKHQsbik6byh0LHIsbik7dD9hKGUsdCk6bC5wdXNoKG9vKCJqc29uLnNjaGVtYS5pbnZhbGlkaWQiLCIkcmVmICd7MH0nIGluICd7MX0nIGNhbiBub3QgYmUgcmVzb2x2ZWQuIixuLHIudXJpKSl9LGY9ZnVuY3Rpb24ocixuLGksbyl7bj12byhuPWMmJiEvXltBLVphLXpdW0EtWmEtejAtOStcLS4rXSo6XC9cLy4qLy50ZXN0KG4pP2MucmVzb2x2ZVJlbGF0aXZlUGF0aChuLG8udXJpKTpuKTt2YXIgYT1zLmdldE9yQWRkU2NoZW1hSGFuZGxlKG4pO3JldHVybiBhLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBvLmRlcGVuZGVuY2llcy5hZGQobiksZS5lcnJvcnMubGVuZ3RoJiYodD1pP24rIiMiK2k6bixsLnB1c2gob28oImpzb24uc2NoZW1hLnByb2JsZW1sb2FkaW5ncmVmIiwiUHJvYmxlbXMgbG9hZGluZyByZWZlcmVuY2UgJ3swfSc6IHsxfSIsdCxlLmVycm9yc1swXSkpKSx1KHIsZS5zY2hlbWEsYSxpKSxoKHIsZS5zY2hlbWEsYSl9KX0saD1mdW5jdGlvbihlLGksbyl7dmFyIGE9W107cmV0dXJuIHMudHJhdmVyc2VOb2RlcyhlLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgU2V0O2UuJHJlZjspe3ZhciByPWUuJHJlZixuPXIuc3BsaXQoIiMiLDIpO2lmKGRlbGV0ZSBlLiRyZWYsMDxuWzBdLmxlbmd0aClyZXR1cm4gdm9pZCBhLnB1c2goZihlLG5bMF0sblsxXSxvKSk7dC5oYXMocil8fChuPW5bMV0sdShlLGksbyxuKSx0LmFkZChyKSl9fSkscy5wcm9taXNlLmFsbChhKX0sbj1mdW5jdGlvbihlKXt2YXIgbj1uZXcgTWFwO3JldHVybiBzLnRyYXZlcnNlTm9kZXMoZSxmdW5jdGlvbihlKXt2YXIgdCxyPWUuJGlkfHxlLmlkOyJzdHJpbmciPT10eXBlb2YgciYmIiMiPT09ci5jaGFyQXQoMCkmJih0PXIuc3Vic3RyaW5nKDEpLG4uaGFzKHQpP2wucHVzaChvbygianNvbi5zY2hlbWEuZHVwbGljYXRlaWQiLCJEdXBsaWNhdGUgaWQgZGVjbGFyYXRpb246ICd7MH0nIixyKSk6bi5zZXQodCxlKSl9KSxufTtyZXR1cm4gaChyLHIsdCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhvKHIsbCl9KX0sZ28ucHJvdG90eXBlLnRyYXZlcnNlTm9kZXM9ZnVuY3Rpb24oZSx0KXtpZighZXx8Im9iamVjdCIhPXR5cGVvZiBlKXJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7Zm9yKHZhciByPW5ldyBTZXQsbD1bZV0sbj1sLnBvcCgpO247KXIuaGFzKG4pfHwoci5hZGQobiksdChuKSxmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07Im9iamVjdCI9PXR5cGVvZiBpJiZsLnB1c2goaSl9fShuLml0ZW1zLG4uYWRkaXRpb25hbEl0ZW1zLG4uYWRkaXRpb25hbFByb3BlcnRpZXMsbi5ub3Qsbi5jb250YWlucyxuLnByb3BlcnR5TmFtZXMsbi5pZixuLnRoZW4sbi5lbHNlKSxmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKXtvPWlbb107Im9iamVjdCI9PXR5cGVvZiBvJiZsLnB1c2gobyl9fX0obi5kZWZpbml0aW9ucyxuLnByb3BlcnRpZXMsbi5wYXR0ZXJuUHJvcGVydGllcyxuLmRlcGVuZGVuY2llcyksZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTAsYT1pO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dOyJvYmplY3QiPT10eXBlb2YgcyYmbC5wdXNoKHMpfX19KG4uYW55T2Ysbi5hbGxPZixuLm9uZU9mLG4uaXRlbXMpKSxuPWwucG9wKCl9LGdvLnByb3RvdHlwZS5nZXRTY2hlbWFGcm9tUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZigib2JqZWN0Ij09PShudWxsPT09KHI9dC5yb290KXx8dm9pZCAwPT09cj92b2lkIDA6ci50eXBlKSlmb3IodmFyIG49MCxpPXQucm9vdC5wcm9wZXJ0aWVzO248aS5sZW5ndGg7bisrKXt2YXIgbyxhPWlbbl07aWYoIiRzY2hlbWEiPT09YS5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KG89YS52YWx1ZU5vZGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnR5cGUpKXJldHVybiBvPWEudmFsdWVOb2RlLnZhbHVlLHRoaXMuY29udGV4dFNlcnZpY2UmJiEvXlx3W1x3XGQrLi1dKjovLnRlc3Qobyk/dGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlUmVsYXRpdmVQYXRoKG8sZSk6b319LGdvLnByb3RvdHlwZS5nZXRBc3NvY2lhdGVkU2NoZW1hcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxyPVtdLG49ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBpby5wYXJzZSh0KS53aXRoKHtmcmFnbWVudDpudWxsLHF1ZXJ5Om51bGx9KS50b1N0cmluZygpfWNhdGNoKGUpe3JldHVybiB0fX0oZSksaT0wLG89dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXTtpZihhLm1hdGNoZXNQYXR0ZXJuKG4pKWZvcih2YXIgcz0wLGw9YS5nZXRVUklzKCk7czxsLmxlbmd0aDtzKyspe3ZhciBjPWxbc107dFtjXXx8KHIucHVzaChjKSx0W2NdPSEwKX19cmV0dXJuIHJ9LGdvLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXt0PXQmJnRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7cmV0dXJuIHQ/W3RdOnRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSl9LGdvLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe2lmKHQpe3ZhciB0PXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7aWYodClyZXR1cm4gdD12byh0KSx0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKHQpLmdldFJlc29sdmVkU2NoZW1hKCl9aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PWUpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dD10aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpLHQ9MDx0Lmxlbmd0aD90aGlzLmNyZWF0ZUNvbWJpbmVkU2NoZW1hKGUsdCkuZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApO3JldHVybiB0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXtyZXNvdXJjZTplLHJlc29sdmVkU2NoZW1hOnR9LHR9LGdvLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbihlLHQpe3JldHVybiAxPT09dC5sZW5ndGg/dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0WzBdKTooZT0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KGUpLHQ9e2FsbE9mOnQubWFwKGZ1bmN0aW9uKGUpe3JldHVybnskcmVmOmV9fSl9LHRoaXMuYWRkU2NoZW1hSGFuZGxlKGUsdCkpfSxnby5wcm90b3R5cGUuZ2V0TWF0Y2hpbmdTY2hlbWFzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtyZXR1cm4gcj8obj1yLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkL21hdGNoaW5nU2NoZW1hcy8iK2JvKyssdGhpcy5hZGRTY2hlbWFIYW5kbGUobixyKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaW52ZXJ0ZWR9KX0pKTp0aGlzLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5pbnZlcnRlZH0pOltdfSl9O3ZhciBtbz1nbztmdW5jdGlvbiBnbyhlLHQscil7dGhpcy5jb250ZXh0U2VydmljZT10LHRoaXMucmVxdWVzdFNlcnZpY2U9ZSx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1yfHxQcm9taXNlLHRoaXMuY2FsbE9uRGlzcG9zZT1bXSx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXM9e30sdGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM9W10sdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e319dmFyIHBvLGJvPTA7ZnVuY3Rpb24gdm8odCl7dHJ5e3JldHVybiBpby5wYXJzZSh0KS50b1N0cmluZygpfWNhdGNoKGUpe3JldHVybiB0fX1mdW5jdGlvbiB5byhlKXt0cnl7dmFyIHQ9aW8ucGFyc2UoZSk7aWYoImZpbGUiPT09dC5zY2hlbWUpcmV0dXJuIHQuZnNQYXRofWNhdGNoKGUpe31yZXR1cm4gZX1mdW5jdGlvbiBDbyhlLHQpe3ZhciByPVtdLHU9W10sbj1bXSxoPS0xLGk9enIoZS5nZXRUZXh0KCksITEpLGY9aS5zY2FuKCk7ZnVuY3Rpb24gZChlKXtyLnB1c2goZSksdS5wdXNoKG4ubGVuZ3RoKX1mb3IoOzE3IT09Zjspe3N3aXRjaChmKXtjYXNlIDE6Y2FzZSAzOnZhciBvPXtzdGFydExpbmU6YT1lLnBvc2l0aW9uQXQoaS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGVuZExpbmU6YSxraW5kOjE9PT1mPyJvYmplY3QiOiJhcnJheSJ9O24ucHVzaChvKTticmVhaztjYXNlIDI6Y2FzZSA0OjA8bi5sZW5ndGgmJm5bbi5sZW5ndGgtMV0ua2luZD09PSgyPT09Zj8ib2JqZWN0IjoiYXJyYXkiKSYmKG89bi5wb3AoKSxzPWUucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsbyYmcz5vLnN0YXJ0TGluZSsxJiZoIT09by5zdGFydExpbmUmJihvLmVuZExpbmU9cy0xLGQobyksaD1vLnN0YXJ0TGluZSkpO2JyZWFrO2Nhc2UgMTM6dmFyIGE9ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxtPWUucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkraS5nZXRUb2tlbkxlbmd0aCgpKS5saW5lOzE9PT1pLmdldFRva2VuRXJyb3IoKSYmYSsxPGUubGluZUNvdW50P2kuc2V0UG9zaXRpb24oZS5vZmZzZXRBdChNci5jcmVhdGUoYSsxLDApKSk6YTxtJiYoZCh7c3RhcnRMaW5lOmEsZW5kTGluZTptLGtpbmQ6SXIuQ29tbWVudH0pLGg9YSk7YnJlYWs7Y2FzZSAxMjptPWUuZ2V0VGV4dCgpLnN1YnN0cihpLmdldFRva2VuT2Zmc2V0KCksaS5nZXRUb2tlbkxlbmd0aCgpKS5tYXRjaCgvXlwvXC9ccyojKHJlZ2lvblxiKXwoZW5kcmVnaW9uXGIpLyk7aWYobSl7dmFyIHM9ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtpZihtWzFdKXtvPXtzdGFydExpbmU6cyxlbmRMaW5lOnMsa2luZDpJci5SZWdpb259O24ucHVzaChvKX1lbHNle2Zvcih2YXIgbD1uLmxlbmd0aC0xOzA8PWwmJm5bbF0ua2luZCE9PUlyLlJlZ2lvbjspbC0tOzA8PWwmJihvPW5bbF0sbi5sZW5ndGg9bCxzPm8uc3RhcnRMaW5lJiZoIT09by5zdGFydExpbmUmJihvLmVuZExpbmU9cyxkKG8pLGg9by5zdGFydExpbmUpKX19fWY9aS5zY2FuKCl9dmFyIGc9dCYmdC5yYW5nZUxpbWl0O2lmKCJudW1iZXIiIT10eXBlb2YgZ3x8ci5sZW5ndGg8PWcpcmV0dXJuIHI7dCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZCYmdC5vblJhbmdlTGltaXRFeGNlZWRlZChlLnVyaSk7Zm9yKHZhciBwPVtdLGI9MCx2PXU7Yjx2Lmxlbmd0aDtiKyspKGM9dltiXSk8MzAmJihwW2NdPShwW2NdfHwwKSsxKTtmb3IodmFyIHk9MCxDPTAsbD0wO2w8cC5sZW5ndGg7bCsrKXt2YXIgdz1wW2xdO2lmKHcpe2lmKGc8dyt5KXtDPWw7YnJlYWt9eSs9d319Zm9yKHZhciBjLF89W10sbD0wO2w8ci5sZW5ndGg7bCsrKSJudW1iZXIiPT10eXBlb2YoYz11W2xdKSYmKGM8Q3x8Yz09PUMmJnkrKzxnKSYmXy5wdXNoKHJbbF0pO3JldHVybiBffWZ1bmN0aW9uIHdvKHUsZSxoKXtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIE9yLmNyZWF0ZSh1LnBvc2l0aW9uQXQoZSksdS5wb3NpdGlvbkF0KHQpKX12YXIgZD16cih1LmdldFRleHQoKSwhMCk7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49dS5vZmZzZXRBdChlKSxpPWguZ2V0Tm9kZUZyb21PZmZzZXQobiwhMCksbz1bXTtpOyl7c3dpdGNoKGkudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2Uib2JqZWN0IjpjYXNlImFycmF5Ijp2YXIgYT1pLm9mZnNldCsxLHM9aS5vZmZzZXQraS5sZW5ndGgtMTthPHMmJmE8PW4mJm48PXMmJm8ucHVzaChmKGEscykpLG8ucHVzaChmKGkub2Zmc2V0LGkub2Zmc2V0K2kubGVuZ3RoKSk7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6Y2FzZSJudWxsIjpjYXNlInByb3BlcnR5IjpvLnB1c2goZihpLm9mZnNldCxpLm9mZnNldCtpLmxlbmd0aCkpfSgicHJvcGVydHkiPT09aS50eXBlfHxpLnBhcmVudCYmImFycmF5Ij09PWkucGFyZW50LnR5cGUpJiYodD1pLm9mZnNldCtpLmxlbmd0aCxyPTUsZC5zZXRQb3NpdGlvbih0KSwtMSE9PSh0PWQuc2NhbigpIT09cj8tMTpkLmdldFRva2VuT2Zmc2V0KCkrZC5nZXRUb2tlbkxlbmd0aCgpKSYmby5wdXNoKGYoaS5vZmZzZXQsdCkpKSxpPWkucGFyZW50fWZvcih2YXIgbD12b2lkIDAsYz1vLmxlbmd0aC0xOzA8PWM7Yy0tKWw9a24uY3JlYXRlKG9bY10sbCk7cmV0dXJuIGw9bHx8a24uY3JlYXRlKE9yLmNyZWF0ZShlLGUpKX0pfWZ1bmN0aW9uIF9vKHIsbil7dmFyIGk9W107cmV0dXJuIG4udmlzaXQoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuInByb3BlcnR5Ij09PWUudHlwZSYmIiRyZWYiPT09ZS5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KHQ9ZS52YWx1ZU5vZGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnR5cGUpJiYodD1lLnZhbHVlTm9kZS52YWx1ZSwodD1mdW5jdGlvbihlLHQpe3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIiMiIT09ZT8iIyI9PT1lWzBdJiYiLyI9PT1lWzFdP2Uuc3Vic3RyaW5nKDIpLnNwbGl0KC9cLy8pLm1hcChTbyk6bnVsbDpbXX0odCk7cmV0dXJuIHQ/ZnVuY3Rpb24gZSh0LHIpe2lmKCFyKXJldHVybiBudWxsO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gcjt2YXIgbj10LnNoaWZ0KCk7e3ZhciBpO3tpZihyJiYib2JqZWN0Ij09PXIudHlwZSlyZXR1cm4oaT1yLnByb3BlcnRpZXMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXlOb2RlLnZhbHVlPT09bn0pKT9lKHQsaS52YWx1ZU5vZGUpOm51bGw7aWYociYmImFycmF5Ij09PXIudHlwZSlpZihuLm1hdGNoKC9eKDB8WzEtOV1bMC05XSopJC8pKXJldHVybiBpPU51bWJlci5wYXJzZUludChuKSwocj1yLml0ZW1zW2ldKT9lKHQscik6bnVsbH19cmV0dXJuIG51bGx9KHQsZS5yb290KTpudWxsfShuLHQpKSYmKHQ9ci5wb3NpdGlvbkF0KHQub2Zmc2V0KSxpLnB1c2goe3RhcmdldDoiIi5jb25jYXQoci51cmksIiMiKS5jb25jYXQodC5saW5lKzEsIiwiKS5jb25jYXQodC5jaGFyYWN0ZXIrMSkscmFuZ2U6KHQ9cixlPWUudmFsdWVOb2RlLE9yLmNyZWF0ZSh0LnBvc2l0aW9uQXQoZS5vZmZzZXQrMSksdC5wb3NpdGlvbkF0KGUub2Zmc2V0K2UubGVuZ3RoLTEpKSl9KSkpLCEwfSksUHJvbWlzZS5yZXNvbHZlKGkpfWZ1bmN0aW9uIFNvKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gQW8oZSl7dmFyIHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Uscj1uZXcgbW8oZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCksbj0oci5zZXRTY2hlbWFDb250cmlidXRpb25zKHRvKSxuZXcgTWkocixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcykpLGU9bmV3IE9pKHIsZS5jb250cmlidXRpb25zLHQpLGk9bmV3IFdpKHIpLG89bmV3IFZpKHIsdCk7cmV0dXJue2NvbmZpZ3VyZTpmdW5jdGlvbihlKXtyLmNsZWFyRXh0ZXJuYWxTY2hlbWFzKCksZS5zY2hlbWFzJiZlLnNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbihlKXtyLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEoZS51cmksZS5maWxlTWF0Y2gsZS5zY2hlbWEpfSksby5jb25maWd1cmUoZSl9LHJlc2V0U2NoZW1hOmZ1bmN0aW9uKGUpe3JldHVybiByLm9uUmVzb3VyY2VDaGFuZ2UoZSl9LGRvVmFsaWRhdGlvbjpvLmRvVmFsaWRhdGlvbi5iaW5kKG8pLGdldExhbmd1YWdlU3RhdHVzOm8uZ2V0TGFuZ3VhZ2VTdGF0dXMuYmluZChvKSxwYXJzZUpTT05Eb2N1bWVudDpmdW5jdGlvbihlKXtyZXR1cm4ga2koZSx7Y29sbGVjdENvbW1lbnRzOiEwfSl9LG5ld0pTT05Eb2N1bWVudDpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgeGkoZSxlPXZvaWQgMD09PShlPXQpP1tdOmUsW10pfSxnZXRNYXRjaGluZ1NjaGVtYXM6ci5nZXRNYXRjaGluZ1NjaGVtYXMuYmluZChyKSxkb1Jlc29sdmU6bi5kb1Jlc29sdmUuYmluZChuKSxkb0NvbXBsZXRlOm4uZG9Db21wbGV0ZS5iaW5kKG4pLGZpbmREb2N1bWVudFN5bWJvbHM6aS5maW5kRG9jdW1lbnRTeW1ib2xzLmJpbmQoaSksZmluZERvY3VtZW50U3ltYm9sczI6aS5maW5kRG9jdW1lbnRTeW1ib2xzMi5iaW5kKGkpLGZpbmREb2N1bWVudENvbG9yczppLmZpbmREb2N1bWVudENvbG9ycy5iaW5kKGkpLGdldENvbG9yUHJlc2VudGF0aW9uczppLmdldENvbG9yUHJlc2VudGF0aW9ucy5iaW5kKGkpLGRvSG92ZXI6ZS5kb0hvdmVyLmJpbmQoZSksZ2V0Rm9sZGluZ1JhbmdlczpDbyxnZXRTZWxlY3Rpb25SYW5nZXM6d28sZmluZERlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX0sZmluZExpbmtzOl9vLGZvcm1hdDpmdW5jdGlvbih0LGUscil7dmFyIG4saT12b2lkIDAsZT0oZSYmKGk9e29mZnNldDpuPXQub2Zmc2V0QXQoZS5zdGFydCksbGVuZ3RoOnQub2Zmc2V0QXQoZS5lbmQpLW59KSx7dGFiU2l6ZTpyP3IudGFiU2l6ZTo0LGluc2VydFNwYWNlczohMD09PShudWxsPT1yP3ZvaWQgMDpyLmluc2VydFNwYWNlcyksaW5zZXJ0RmluYWxOZXdsaW5lOiEwPT09KG51bGw9PXI/dm9pZCAwOnIuaW5zZXJ0RmluYWxOZXdsaW5lKSxlb2w6IlxuIn0pO3JldHVybiBFcih0LmdldFRleHQoKSxpLGUpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gRHIucmVwbGFjZShPci5jcmVhdGUodC5wb3NpdGlvbkF0KGUub2Zmc2V0KSx0LnBvc2l0aW9uQXQoZS5vZmZzZXQrZS5sZW5ndGgpKSxlLmNvbnRlbnQpfSl9fX0idW5kZWZpbmVkIiE9dHlwZW9mIGZldGNoJiYocG89ZnVuY3Rpb24oZSl7cmV0dXJuIGZldGNoKGUpLnRoZW4oZT0+ZS50ZXh0KCkpfSk7dmFyIHhvPWNsYXNze19jdHg7X2xhbmd1YWdlU2VydmljZTtfbGFuZ3VhZ2VTZXR0aW5ncztfbGFuZ3VhZ2VJZDtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2N0eD1lLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3M9dC5sYW5ndWFnZVNldHRpbmdzLHRoaXMuX2xhbmd1YWdlSWQ9dC5sYW5ndWFnZUlkLHRoaXMuX2xhbmd1YWdlU2VydmljZT1Bbyh7d29ya3NwYWNlQ29udGV4dDp7cmVzb2x2ZVJlbGF0aXZlUGF0aDooZSx0KT0+e3Q9dC5zdWJzdHIoMCx0Lmxhc3RJbmRleE9mKCIvIikrMSk7aWYoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKT09PUVvfShlKSl7Y29uc3QgaT1pby5wYXJzZSh0KTt2YXIgcj1lLnNwbGl0KCIvIik7cmV0dXJuIGkud2l0aCh7cGF0aDprbyhyKX0pLnRvU3RyaW5nKCl9e3I9dCx0PVtlXTtjb25zdCBvPWlvLnBhcnNlKHIpLGE9by5wYXRoLnNwbGl0KCIvIik7Zm9yKHZhciBuIG9mIHQpYS5wdXNoKC4uLm4uc3BsaXQoIi8iKSk7cmV0dXJuIG8ud2l0aCh7cGF0aDprbyhhKX0pLnRvU3RyaW5nKCl9fX0sc2NoZW1hUmVxdWVzdFNlcnZpY2U6dC5lbmFibGVTY2hlbWFSZXF1ZXN0P3BvOnZvaWQgMH0pLHRoaXMuX2xhbmd1YWdlU2VydmljZS5jb25maWd1cmUodGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9YXN5bmMgZG9WYWxpZGF0aW9uKGUpe3ZhciB0LGU9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO3JldHVybiBlPyh0PXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChlKSx0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9WYWxpZGF0aW9uKGUsdCx0aGlzLl9sYW5ndWFnZVNldHRpbmdzKSk6UHJvbWlzZS5yZXNvbHZlKFtdKX1hc3luYyBkb0NvbXBsZXRlKGUsdCl7ZT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KGUpO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShlLHQscil9YXN5bmMgZG9SZXNvbHZlKGUpe3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZXNvbHZlKGUpfWFzeW5jIGRvSG92ZXIoZSx0KXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm4gbnVsbDt2YXIgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQoZSk7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0hvdmVyKGUsdCxyKX1hc3luYyBmb3JtYXQoZSx0LHIpe2U9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFlKXJldHVybltdO2U9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZvcm1hdChlLHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1hc3luYyByZXNldFNjaGVtYShlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5yZXNldFNjaGVtYShlKSl9YXN5bmMgZmluZERvY3VtZW50U3ltYm9scyhlKXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm5bXTt2YXIgdD10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQoZSksZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50U3ltYm9scyhlLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9YXN5bmMgZmluZERvY3VtZW50Q29sb3JzKGUpe2U9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFlKXJldHVybltdO3ZhciB0PXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChlKSxlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRDb2xvcnMoZSx0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfWFzeW5jIGdldENvbG9yUHJlc2VudGF0aW9ucyhlLHQscil7ZT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIWUpcmV0dXJuW107dmFyIG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KGUpLGU9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldENvbG9yUHJlc2VudGF0aW9ucyhlLG4sdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfWFzeW5jIGdldEZvbGRpbmdSYW5nZXMoZSx0KXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm5bXTtlPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRGb2xkaW5nUmFuZ2VzKGUsdCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX1hc3luYyBnZXRTZWxlY3Rpb25SYW5nZXMoZSx0KXtlPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighZSlyZXR1cm5bXTt2YXIgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQoZSksZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfV9nZXRUZXh0RG9jdW1lbnQoZSl7dmFyIHQ7Zm9yKHQgb2YgdGhpcy5fY3R4LmdldE1pcnJvck1vZGVscygpKWlmKHQudXJpLnRvU3RyaW5nKCk9PT1lKXJldHVybiBSbi5jcmVhdGUoZSx0aGlzLl9sYW5ndWFnZUlkLHQudmVyc2lvbix0LmdldFZhbHVlKCkpO3JldHVybiBudWxsfX0sRW89Ii8iLmNoYXJDb2RlQXQoMCksTm89Ii4iLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24ga28oZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKTA9PT1uLmxlbmd0aHx8MT09PW4ubGVuZ3RoJiZuLmNoYXJDb2RlQXQoMCk9PT1Ob3x8KDI9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09Tm8mJm4uY2hhckNvZGVBdCgxKT09PU5vP3QucG9wKCk6dC5wdXNoKG4pKTsxPGUubGVuZ3RoJiYwPT09ZVtlLmxlbmd0aC0xXS5sZW5ndGgmJnQucHVzaCgiIik7bGV0IHI9dC5qb2luKCIvIik7cmV0dXJuIHI9MD09PWVbMF0ubGVuZ3RoPyIvIityOnJ9c2VsZi5vbm1lc3NhZ2U9KCk9Pnt3cigoZSx0KT0+bmV3IHhvKGUsdCkpfX0oKTsKCg==', null, false);
|
|
3
|
+
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y2xhc3MgZXtjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdGVuZXJzPVtdLHRoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcj1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KCgoKT0+e2lmKGUuc3RhY2spdGhyb3cgbmV3IEVycm9yKGUubWVzc2FnZSsiXG5cbiIrZS5zdGFjayk7dGhyb3cgZX0pLDApfX1hZGRMaXN0ZW5lcihlKXtyZXR1cm4gdGhpcy5saXN0ZW5lcnMucHVzaChlKSwoKT0+e3RoaXMuX3JlbW92ZUxpc3RlbmVyKGUpfX1lbWl0KGUpe3RoaXMubGlzdGVuZXJzLmZvckVhY2goKHQ9Pnt0KGUpfSkpfV9yZW1vdmVMaXN0ZW5lcihlKXt0aGlzLmxpc3RlbmVycy5zcGxpY2UodGhpcy5saXN0ZW5lcnMuaW5kZXhPZihlKSwxKX1zZXRVbmV4cGVjdGVkRXJyb3JIYW5kbGVyKGUpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcj1lfWdldFVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoKXtyZXR1cm4gdGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyfW9uVW5leHBlY3RlZEVycm9yKGUpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcihlKSx0aGlzLmVtaXQoZSl9b25VbmV4cGVjdGVkRXh0ZXJuYWxFcnJvcihlKXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIoZSl9fWNvbnN0IHQ9bmV3IGU7ZnVuY3Rpb24gbihlKXsoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuITA7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09aSYmZS5tZXNzYWdlPT09aX0pKGUpfHx0Lm9uVW5leHBlY3RlZEVycm9yKGUpfWZ1bmN0aW9uIHIoZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXR7bmFtZTp0LG1lc3NhZ2U6bn09ZTtyZXR1cm57JGlzRXJyb3I6ITAsbmFtZTp0LG1lc3NhZ2U6bixzdGFjazplLnN0YWNrdHJhY2V8fGUuc3RhY2t9fXJldHVybiBlfWNvbnN0IGk9IkNhbmNlbGVkIjtjbGFzcyBvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcihpKSx0aGlzLm5hbWU9dGhpcy5tZXNzYWdlfX1mdW5jdGlvbiBhKGUpe2NvbnN0IHQ9dGhpcztsZXQgbixyPSExO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByfHwocj0hMCxuPWUuYXBwbHkodCxhcmd1bWVudHMpKSxufX12YXIgcyxsOyFmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlW1N5bWJvbC5pdGVyYXRvcl19O2NvbnN0IHQ9T2JqZWN0LmZyZWV6ZShbXSk7ZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0fSxlLnNpbmdsZT1mdW5jdGlvbiooZSl7eWllbGQgZX0sZS5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybiBlfHx0fSxlLmlzRW1wdHk9ZnVuY3Rpb24oZSl7cmV0dXJuIWV8fCEwPT09ZVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmV9LGUuZmlyc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS52YWx1ZX0sZS5zb21lPWZ1bmN0aW9uKGUsdCl7Zm9yKGNvbnN0IG4gb2YgZSlpZih0KG4pKXJldHVybiEwO3JldHVybiExfSxlLmZpbmQ9ZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiBlKWlmKHQobikpcmV0dXJuIG59LGUuZmlsdGVyPWZ1bmN0aW9uKihlLHQpe2Zvcihjb25zdCBuIG9mIGUpdChuKSYmKHlpZWxkIG4pfSxlLm1hcD1mdW5jdGlvbiooZSx0KXtsZXQgbj0wO2Zvcihjb25zdCByIG9mIGUpeWllbGQgdChyLG4rKyl9LGUuY29uY2F0PWZ1bmN0aW9uKiguLi5lKXtmb3IoY29uc3QgdCBvZiBlKWZvcihjb25zdCBlIG9mIHQpeWllbGQgZX0sZS5jb25jYXROZXN0ZWQ9ZnVuY3Rpb24qKGUpe2Zvcihjb25zdCB0IG9mIGUpZm9yKGNvbnN0IGUgb2YgdCl5aWVsZCBlfSxlLnJlZHVjZT1mdW5jdGlvbihlLHQsbil7bGV0IHI9bjtmb3IoY29uc3QgbiBvZiBlKXI9dChyLG4pO3JldHVybiByfSxlLnNsaWNlPWZ1bmN0aW9uKihlLHQsbj1lLmxlbmd0aCl7Zm9yKHQ8MCYmKHQrPWUubGVuZ3RoKSxuPDA/bis9ZS5sZW5ndGg6bj5lLmxlbmd0aCYmKG49ZS5sZW5ndGgpO3Q8bjt0KyspeWllbGQgZVt0XX0sZS5jb25zdW1lPWZ1bmN0aW9uKHQsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IHI9W107aWYoMD09PW4pcmV0dXJuW3IsdF07Y29uc3QgaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHQ9MDt0PG47dCsrKXtjb25zdCB0PWkubmV4dCgpO2lmKHQuZG9uZSlyZXR1cm5bcixlLmVtcHR5KCldO3IucHVzaCh0LnZhbHVlKX1yZXR1cm5bcix7W1N5bWJvbC5pdGVyYXRvcl06KCk9Pml9XX0sZS5lcXVhbHM9ZnVuY3Rpb24oZSx0LG49KChlLHQpPT5lPT09dCkpe2NvbnN0IHI9ZVtTeW1ib2wuaXRlcmF0b3JdKCksaT10W1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOzspe2NvbnN0IGU9ci5uZXh0KCksdD1pLm5leHQoKTtpZihlLmRvbmUhPT10LmRvbmUpcmV0dXJuITE7aWYoZS5kb25lKXJldHVybiEwO2lmKCFuKGUudmFsdWUsdC52YWx1ZSkpcmV0dXJuITF9fX0oc3x8KHM9e30pKTtjbGFzcyBjIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoYEVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUuIEVycm9yczogWyR7ZS5qb2luKCIsICIpfV1gKSx0aGlzLmVycm9ycz1lfX1mdW5jdGlvbiB1KGUpe2lmKHMuaXMoZSkpe2xldCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpaWYobil0cnl7bi5kaXNwb3NlKCl9Y2F0Y2goZSl7dC5wdXNoKGUpfWlmKDE9PT10Lmxlbmd0aCl0aHJvdyB0WzBdO2lmKHQubGVuZ3RoPjEpdGhyb3cgbmV3IGModCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/W106ZX1pZihlKXJldHVybiBlLmRpc3Bvc2UoKSxlfWZ1bmN0aW9uIGgoZSl7cmV0dXJue2Rpc3Bvc2U6YSgoKCk9PntlKCl9KSl9fWNsYXNzIGZ7Y29uc3RydWN0b3IoKXt0aGlzLl90b0Rpc3Bvc2U9bmV3IFNldCx0aGlzLl9pc0Rpc3Bvc2VkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5faXNEaXNwb3NlZD0hMCx0aGlzLmNsZWFyKCkpfWdldCBpc0Rpc3Bvc2VkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWR9Y2xlYXIoKXt0cnl7dSh0aGlzLl90b0Rpc3Bvc2UudmFsdWVzKCkpfWZpbmFsbHl7dGhpcy5fdG9EaXNwb3NlLmNsZWFyKCl9fWFkZChlKXtpZighZSlyZXR1cm4gZTtpZihlPT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkP2YuRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HfHxjb25zb2xlLndhcm4obmV3IEVycm9yKCJUcnlpbmcgdG8gYWRkIGEgZGlzcG9zYWJsZSB0byBhIERpc3Bvc2FibGVTdG9yZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuIFRoZSBhZGRlZCBvYmplY3Qgd2lsbCBiZSBsZWFrZWQhIikuc3RhY2spOnRoaXMuX3RvRGlzcG9zZS5hZGQoZSksZX19Zi5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkc9ITE7Y2xhc3MgZHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyBmLHRoaXMuX3N0b3JlfWRpc3Bvc2UoKXt0aGlzLl9zdG9yZS5kaXNwb3NlKCl9X3JlZ2lzdGVyKGUpe2lmKGU9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX3N0b3JlLmFkZChlKX19ZC5Ob25lPU9iamVjdC5mcmVlemUoe2Rpc3Bvc2UoKXt9fSk7Y2xhc3MgbXtjb25zdHJ1Y3Rvcigpe3RoaXMuZGlzcG9zZT0oKT0+e30sdGhpcy51bnNldD0oKT0+e30sdGhpcy5pc3NldD0oKT0+ITF9c2V0KGUpe2xldCB0PWU7cmV0dXJuIHRoaXMudW5zZXQ9KCk9PnQ9dm9pZCAwLHRoaXMuaXNzZXQ9KCk9PnZvaWQgMCE9PXQsdGhpcy5kaXNwb3NlPSgpPT57dCYmKHQoKSx0PXZvaWQgMCl9LHRoaXN9fWNsYXNzIGd7Y29uc3RydWN0b3IoZSl7dGhpcy5lbGVtZW50PWUsdGhpcy5uZXh0PWcuVW5kZWZpbmVkLHRoaXMucHJldj1nLlVuZGVmaW5lZH19Zy5VbmRlZmluZWQ9bmV3IGcodm9pZCAwKTtjbGFzcyBwe2NvbnN0cnVjdG9yKCl7dGhpcy5fZmlyc3Q9Zy5VbmRlZmluZWQsdGhpcy5fbGFzdD1nLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1pc0VtcHR5KCl7cmV0dXJuIHRoaXMuX2ZpcnN0PT09Zy5VbmRlZmluZWR9Y2xlYXIoKXtsZXQgZT10aGlzLl9maXJzdDtmb3IoO2UhPT1nLlVuZGVmaW5lZDspe2NvbnN0IHQ9ZS5uZXh0O2UucHJldj1nLlVuZGVmaW5lZCxlLm5leHQ9Zy5VbmRlZmluZWQsZT10fXRoaXMuX2ZpcnN0PWcuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9Zy5VbmRlZmluZWQsdGhpcy5fc2l6ZT0wfXVuc2hpZnQoZSl7cmV0dXJuIHRoaXMuX2luc2VydChlLCExKX1wdXNoKGUpe3JldHVybiB0aGlzLl9pbnNlcnQoZSwhMCl9X2luc2VydChlLHQpe2NvbnN0IG49bmV3IGcoZSk7aWYodGhpcy5fZmlyc3Q9PT1nLlVuZGVmaW5lZCl0aGlzLl9maXJzdD1uLHRoaXMuX2xhc3Q9bjtlbHNlIGlmKHQpe2NvbnN0IGU9dGhpcy5fbGFzdDt0aGlzLl9sYXN0PW4sbi5wcmV2PWUsZS5uZXh0PW59ZWxzZXtjb25zdCBlPXRoaXMuX2ZpcnN0O3RoaXMuX2ZpcnN0PW4sbi5uZXh0PWUsZS5wcmV2PW59dGhpcy5fc2l6ZSs9MTtsZXQgcj0hMTtyZXR1cm4oKT0+e3J8fChyPSEwLHRoaXMuX3JlbW92ZShuKSl9fXNoaWZ0KCl7aWYodGhpcy5fZmlyc3QhPT1nLlVuZGVmaW5lZCl7Y29uc3QgZT10aGlzLl9maXJzdC5lbGVtZW50O3JldHVybiB0aGlzLl9yZW1vdmUodGhpcy5fZmlyc3QpLGV9fXBvcCgpe2lmKHRoaXMuX2xhc3QhPT1nLlVuZGVmaW5lZCl7Y29uc3QgZT10aGlzLl9sYXN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9sYXN0KSxlfX1fcmVtb3ZlKGUpe2lmKGUucHJldiE9PWcuVW5kZWZpbmVkJiZlLm5leHQhPT1nLlVuZGVmaW5lZCl7Y29uc3QgdD1lLnByZXY7dC5uZXh0PWUubmV4dCxlLm5leHQucHJldj10fWVsc2UgZS5wcmV2PT09Zy5VbmRlZmluZWQmJmUubmV4dD09PWcuVW5kZWZpbmVkPyh0aGlzLl9maXJzdD1nLlVuZGVmaW5lZCx0aGlzLl9sYXN0PWcuVW5kZWZpbmVkKTplLm5leHQ9PT1nLlVuZGVmaW5lZD8odGhpcy5fbGFzdD10aGlzLl9sYXN0LnByZXYsdGhpcy5fbGFzdC5uZXh0PWcuVW5kZWZpbmVkKTplLnByZXY9PT1nLlVuZGVmaW5lZCYmKHRoaXMuX2ZpcnN0PXRoaXMuX2ZpcnN0Lm5leHQsdGhpcy5fZmlyc3QucHJldj1nLlVuZGVmaW5lZCk7dGhpcy5fc2l6ZS09MX0qW1N5bWJvbC5pdGVyYXRvcl0oKXtsZXQgZT10aGlzLl9maXJzdDtmb3IoO2UhPT1nLlVuZGVmaW5lZDspeWllbGQgZS5lbGVtZW50LGU9ZS5uZXh0fX1jb25zdCBiPSJlbiI7bGV0IHYseSxDLHc9ITEsXz0hMSxTPSExLEE9ITEsRT1iO2NvbnN0IE49Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiBnbG9iYWw/Z2xvYmFsOnt9O2xldCB4O3ZvaWQgMCE9PU4udnNjb2RlJiZ2b2lkIDAhPT1OLnZzY29kZS5wcm9jZXNzP3g9Ti52c2NvZGUucHJvY2VzczoidW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJih4PXByb2Nlc3MpO2NvbnN0IEw9InN0cmluZyI9PXR5cGVvZihudWxsPT09KGw9bnVsbD09eD92b2lkIDA6eC52ZXJzaW9ucyl8fHZvaWQgMD09PWw/dm9pZCAwOmwuZWxlY3Ryb24pJiYicmVuZGVyZXIiPT09KG51bGw9PXg/dm9pZCAwOngudHlwZSk7aWYoIm9iamVjdCIhPXR5cGVvZiBuYXZpZ2F0b3J8fEwpaWYoIm9iamVjdCI9PXR5cGVvZiB4KXt3PSJ3aW4zMiI9PT14LnBsYXRmb3JtLF89ImRhcndpbiI9PT14LnBsYXRmb3JtLFM9ImxpbnV4Ij09PXgucGxhdGZvcm0sUyYmeC5lbnYuU05BUCYmeC5lbnYuU05BUF9SRVZJU0lPTix4LmVudi5DSXx8eC5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLHY9YixFPWI7Y29uc3QgZT14LmVudi5WU0NPREVfTkxTX0NPTkZJRztpZihlKXRyeXtjb25zdCB0PUpTT04ucGFyc2UoZSksbj10LmF2YWlsYWJsZUxhbmd1YWdlc1siKiJdO3Y9dC5sb2NhbGUsRT1ufHxiLHk9dC5fdHJhbnNsYXRpb25zQ29uZmlnRmlsZX1jYXRjaChlKXt9fWVsc2UgY29uc29sZS5lcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgcGxhdGZvcm0uIik7ZWxzZSBDPW5hdmlnYXRvci51c2VyQWdlbnQsdz1DLmluZGV4T2YoIldpbmRvd3MiKT49MCxfPUMuaW5kZXhPZigiTWFjaW50b3NoIik+PTAsKEMuaW5kZXhPZigiTWFjaW50b3NoIik+PTB8fEMuaW5kZXhPZigiaVBhZCIpPj0wfHxDLmluZGV4T2YoImlQaG9uZSIpPj0wKSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMsUz1DLmluZGV4T2YoIkxpbnV4Iik+PTAsQT0hMCx2PW5hdmlnYXRvci5sYW5ndWFnZSxFPXY7Y29uc3Qgaz13LFQ9XztBJiZOLmltcG9ydFNjcmlwdHM7Y29uc3QgTz1DOygoKT0+e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBOLnBvc3RNZXNzYWdlJiYhTi5pbXBvcnRTY3JpcHRzKXtsZXQgZT1bXTtOLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh0PT57aWYodC5kYXRhJiZ0LmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspZm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXtjb25zdCByPWVbbl07aWYoci5pZD09PXQuZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylyZXR1cm4gZS5zcGxpY2UobiwxKSx2b2lkIHIuY2FsbGJhY2soKX19KSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksTi5wb3N0TWVzc2FnZSh7dnNjb2RlU2NoZWR1bGVBc3luY1dvcms6cn0sIioiKX19fSkoKTtjb25zdCBNPSEhKE8mJk8uaW5kZXhPZigiQ2hyb21lIik+PTApO08mJk8uaW5kZXhPZigiRmlyZWZveCIpLCFNJiZPJiZPLmluZGV4T2YoIlNhZmFyaSIpLE8mJk8uaW5kZXhPZigiRWRnLyIpLE8mJk8uaW5kZXhPZigiQW5kcm9pZCIpO2NvbnN0IEk9Ti5wZXJmb3JtYW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIE4ucGVyZm9ybWFuY2Uubm93O2NsYXNzIFJ7Y29uc3RydWN0b3IoZSl7dGhpcy5faGlnaFJlc29sdXRpb249SSYmZSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RhdGljIGNyZWF0ZShlPSEwKXtyZXR1cm4gbmV3IFIoZSl9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfWVsYXBzZWQoKXtyZXR1cm4tMSE9PXRoaXMuX3N0b3BUaW1lP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9X25vdygpe3JldHVybiB0aGlzLl9oaWdoUmVzb2x1dGlvbj9OLnBlcmZvcm1hbmNlLm5vdygpOkRhdGUubm93KCl9fXZhciBQLEY7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQsbj1udWxsLHIpPT57bGV0IGksbz0hMTtyZXR1cm4gaT1lKChlPT57aWYoIW8pcmV0dXJuIGk/aS5kaXNwb3NlKCk6bz0hMCx0LmNhbGwobixlKX0pLG51bGwsciksbyYmaS5kaXNwb3NlKCksaX19ZnVuY3Rpb24gbihlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+bi5jYWxsKHIsdChlKSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIHIoZSx0LG4pe3JldHVybiBhKCgobixyPW51bGwsaSk9PmUoKGU9Pnt0KGUpLG4uY2FsbChyLGUpfSksbnVsbCxpKSksbil9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIGEoKChuLHI9bnVsbCxpKT0+ZSgoZT0+dChlKSYmbi5jYWxsKHIsZSkpLG51bGwsaSkpLG4pfWZ1bmN0aW9uIG8oZSx0LHIsaSl7bGV0IG89cjtyZXR1cm4gbihlLChlPT4obz10KG8sZSksbykpLGkpfWZ1bmN0aW9uIGEoZSx0KXtsZXQgbjtjb25zdCByPW5ldyBVKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtuPWUoci5maXJlLHIpfSxvbkxhc3RMaXN0ZW5lclJlbW92ZSgpe24uZGlzcG9zZSgpfX0pO3JldHVybiB0JiZ0LmFkZChyKSxyLmV2ZW50fWZ1bmN0aW9uIHMoZSx0LG49MTAwLHI9ITEsaSxvKXtsZXQgYSxzLGwsYz0wO2NvbnN0IHU9bmV3IFUoe2xlYWtXYXJuaW5nVGhyZXNob2xkOmksb25GaXJzdExpc3RlbmVyQWRkKCl7YT1lKChlPT57YysrLHM9dChzLGUpLHImJiFsJiYodS5maXJlKHMpLHM9dm9pZCAwKSxjbGVhclRpbWVvdXQobCksbD1zZXRUaW1lb3V0KCgoKT0+e2NvbnN0IGU9cztzPXZvaWQgMCxsPXZvaWQgMCwoIXJ8fGM+MSkmJnUuZmlyZShlKSxjPTB9KSxuKX0pKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXthLmRpc3Bvc2UoKX19KTtyZXR1cm4gbyYmby5hZGQodSksdS5ldmVudH1mdW5jdGlvbiBsKGUsdD0oKGUsdCk9PmU9PT10KSxuKXtsZXQgcixvPSEwO3JldHVybiBpKGUsKGU9Pntjb25zdCBuPW98fCF0KGUscik7cmV0dXJuIG89ITEscj1lLG59KSxuKX1lLk5vbmU9KCk9PmQuTm9uZSxlLm9uY2U9dCxlLm1hcD1uLGUuZm9yRWFjaD1yLGUuZmlsdGVyPWksZS5zaWduYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGUuYW55PWZ1bmN0aW9uKC4uLmUpe3JldHVybih0LG49bnVsbCxyKT0+ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIGgoKCgpPT51KGUpKSl9KC4uLmUubWFwKChlPT5lKChlPT50LmNhbGwobixlKSksbnVsbCxyKSkpKX0sZS5yZWR1Y2U9byxlLmRlYm91bmNlPXMsZS5sYXRjaD1sLGUuc3BsaXQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybltlLmZpbHRlcih0LG4sciksZS5maWx0ZXIodCwoZT0+IW4oZSkpLHIpXX0sZS5idWZmZXI9ZnVuY3Rpb24oZSx0PSExLG49W10pe2xldCByPW4uc2xpY2UoKSxpPWUoKGU9PntyP3IucHVzaChlKTphLmZpcmUoZSl9KSk7Y29uc3Qgbz0oKT0+e3ImJnIuZm9yRWFjaCgoZT0+YS5maXJlKGUpKSkscj1udWxsfSxhPW5ldyBVKHtvbkZpcnN0TGlzdGVuZXJBZGQoKXtpfHwoaT1lKChlPT5hLmZpcmUoZSkpKSl9LG9uRmlyc3RMaXN0ZW5lckRpZEFkZCgpe3ImJih0P3NldFRpbWVvdXQobyk6bygpKX0sb25MYXN0TGlzdGVuZXJSZW1vdmUoKXtpJiZpLmRpc3Bvc2UoKSxpPW51bGx9fSk7cmV0dXJuIGEuZXZlbnR9O2NsYXNzIGN7Y29uc3RydWN0b3IoZSl7dGhpcy5ldmVudD1lfW1hcChlKXtyZXR1cm4gbmV3IGMobih0aGlzLmV2ZW50LGUpKX1mb3JFYWNoKGUpe3JldHVybiBuZXcgYyhyKHRoaXMuZXZlbnQsZSkpfWZpbHRlcihlKXtyZXR1cm4gbmV3IGMoaSh0aGlzLmV2ZW50LGUpKX1yZWR1Y2UoZSx0KXtyZXR1cm4gbmV3IGMobyh0aGlzLmV2ZW50LGUsdCkpfWxhdGNoKCl7cmV0dXJuIG5ldyBjKGwodGhpcy5ldmVudCkpfWRlYm91bmNlKGUsdD0xMDAsbj0hMSxyKXtyZXR1cm4gbmV3IGMocyh0aGlzLmV2ZW50LGUsdCxuLHIpKX1vbihlLHQsbil7cmV0dXJuIHRoaXMuZXZlbnQoZSx0LG4pfW9uY2UoZSxuLHIpe3JldHVybiB0KHRoaXMuZXZlbnQpKGUsbixyKX19ZS5jaGFpbj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGMoZSl9LGUuZnJvbU5vZGVFdmVudEVtaXR0ZXI9ZnVuY3Rpb24oZSx0LG49KGU9PmUpKXtjb25zdCByPSguLi5lKT0+aS5maXJlKG4oLi4uZSkpLGk9bmV3IFUoe29uRmlyc3RMaXN0ZW5lckFkZDooKT0+ZS5vbih0LHIpLG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT5lLnJlbW92ZUxpc3RlbmVyKHQscil9KTtyZXR1cm4gaS5ldmVudH0sZS5mcm9tRE9NRXZlbnRFbWl0dGVyPWZ1bmN0aW9uKGUsdCxuPShlPT5lKSl7Y29uc3Qgcj0oLi4uZSk9PmkuZmlyZShuKC4uLmUpKSxpPW5ldyBVKHtvbkZpcnN0TGlzdGVuZXJBZGQ6KCk9PmUuYWRkRXZlbnRMaXN0ZW5lcih0LHIpLG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX0pO3JldHVybiBpLmV2ZW50fSxlLnRvUHJvbWlzZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKG49PnQoZSkobikpKX0sZS5ydW5BbmRTdWJzY3JpYmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCh2b2lkIDApLGUoKGU9PnQoZSkpKX0sZS5ydW5BbmRTdWJzY3JpYmVXaXRoU3RvcmU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1udWxsO2Z1bmN0aW9uIHIoZSl7bnVsbD09bnx8bi5kaXNwb3NlKCksbj1uZXcgZix0KGUsbil9cih2b2lkIDApO2NvbnN0IGk9ZSgoZT0+cihlKSkpO3JldHVybiBoKCgoKT0+e2kuZGlzcG9zZSgpLG51bGw9PW58fG4uZGlzcG9zZSgpfSkpfX0oUHx8KFA9e30pKTtjbGFzcyBEe2NvbnN0cnVjdG9yKGUpe3RoaXMuX2xpc3RlbmVyQ291bnQ9MCx0aGlzLl9pbnZvY2F0aW9uQ291bnQ9MCx0aGlzLl9lbGFwc2VkT3ZlcmFsbD0wLHRoaXMuX25hbWU9YCR7ZX1fJHtELl9pZFBvb2wrK31gfXN0YXJ0KGUpe3RoaXMuX3N0b3BXYXRjaD1uZXcgUighMCksdGhpcy5fbGlzdGVuZXJDb3VudD1lfXN0b3AoKXtpZih0aGlzLl9zdG9wV2F0Y2gpe2NvbnN0IGU9dGhpcy5fc3RvcFdhdGNoLmVsYXBzZWQoKTt0aGlzLl9lbGFwc2VkT3ZlcmFsbCs9ZSx0aGlzLl9pbnZvY2F0aW9uQ291bnQrPTEsY29uc29sZS5pbmZvKGBkaWQgRklSRSAke3RoaXMuX25hbWV9OiBlbGFwc2VkX21zOiAke2UudG9GaXhlZCg1KX0sIGxpc3RlbmVyOiAke3RoaXMuX2xpc3RlbmVyQ291bnR9IChlbGFwc2VkX292ZXJhbGw6ICR7dGhpcy5fZWxhcHNlZE92ZXJhbGwudG9GaXhlZCgyKX0sIGludm9jYXRpb25zOiAke3RoaXMuX2ludm9jYXRpb25Db3VudH0pYCksdGhpcy5fc3RvcFdhdGNoPXZvaWQgMH19fUQuX2lkUG9vbD0wO2NsYXNzIFZ7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT1lfXN0YXRpYyBjcmVhdGUoKXt2YXIgZTtyZXR1cm4gbmV3IFYobnVsbCE9PShlPShuZXcgRXJyb3IpLnN0YWNrKSYmdm9pZCAwIT09ZT9lOiIiKX1wcmludCgpe2NvbnNvbGUud2Fybih0aGlzLnZhbHVlLnNwbGl0KCJcbiIpLnNsaWNlKDIpLmpvaW4oIlxuIikpfX1jbGFzcyBLe2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmNhbGxiYWNrPWUsdGhpcy5jYWxsYmFja1RoaXM9dCx0aGlzLnN0YWNrPW4sdGhpcy5zdWJzY3JpcHRpb249bmV3IG19aW52b2tlKGUpe3RoaXMuY2FsbGJhY2suY2FsbCh0aGlzLmNhbGxiYWNrVGhpcyxlKX19Y2xhc3MgVXtjb25zdHJ1Y3RvcihlKXt2YXIgdDt0aGlzLl9kaXNwb3NlZD0hMSx0aGlzLl9vcHRpb25zPWUsdGhpcy5fbGVha2FnZU1vbj12b2lkIDAsdGhpcy5fcGVyZk1vbj0obnVsbD09PSh0PXRoaXMuX29wdGlvbnMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Ll9wcm9mTmFtZSk/bmV3IEQodGhpcy5fb3B0aW9ucy5fcHJvZk5hbWUpOnZvaWQgMH1kaXNwb3NlKCl7dmFyIGUsdCxuLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVycy5jbGVhcigpLG51bGw9PT0oZT10aGlzLl9kZWxpdmVyeVF1ZXVlKXx8dm9pZCAwPT09ZXx8ZS5jbGVhcigpLG51bGw9PT0obj1udWxsPT09KHQ9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQub25MYXN0TGlzdGVuZXJSZW1vdmUpfHx2b2lkIDA9PT1ufHxuLmNhbGwodCksbnVsbD09PShyPXRoaXMuX2xlYWthZ2VNb24pfHx2b2lkIDA9PT1yfHxyLmRpc3Bvc2UoKSl9Z2V0IGV2ZW50KCl7cmV0dXJuIHRoaXMuX2V2ZW50fHwodGhpcy5fZXZlbnQ9KGUsdCxuKT0+e3ZhciByLGksbzt0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9bmV3IHApO2NvbnN0IGE9dGhpcy5fbGlzdGVuZXJzLmlzRW1wdHkoKTtsZXQgcyxsO2EmJihudWxsPT09KHI9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PXI/dm9pZCAwOnIub25GaXJzdExpc3RlbmVyQWRkKSYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQodGhpcyksdGhpcy5fbGVha2FnZU1vbiYmdGhpcy5fbGlzdGVuZXJzLnNpemU+PTMwJiYobD1WLmNyZWF0ZSgpLHM9dGhpcy5fbGVha2FnZU1vbi5jaGVjayhsLHRoaXMuX2xpc3RlbmVycy5zaXplKzEpKTtjb25zdCBjPW5ldyBLKGUsdCxsKSx1PXRoaXMuX2xpc3RlbmVycy5wdXNoKGMpO2EmJihudWxsPT09KGk9dGhpcy5fb3B0aW9ucyl8fHZvaWQgMD09PWk/dm9pZCAwOmkub25GaXJzdExpc3RlbmVyRGlkQWRkKSYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJEaWRBZGQodGhpcyksKG51bGw9PT0obz10aGlzLl9vcHRpb25zKXx8dm9pZCAwPT09bz92b2lkIDA6by5vbkxpc3RlbmVyRGlkQWRkKSYmdGhpcy5fb3B0aW9ucy5vbkxpc3RlbmVyRGlkQWRkKHRoaXMsZSx0KTtjb25zdCBoPWMuc3Vic2NyaXB0aW9uLnNldCgoKCk9PntpZihzJiZzKCksIXRoaXMuX2Rpc3Bvc2VkJiYodSgpLHRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUpKXt0aGlzLl9saXN0ZW5lcnMmJiF0aGlzLl9saXN0ZW5lcnMuaXNFbXB0eSgpfHx0aGlzLl9vcHRpb25zLm9uTGFzdExpc3RlbmVyUmVtb3ZlKHRoaXMpfX0pKTtyZXR1cm4gbiBpbnN0YW5jZW9mIGY/bi5hZGQoaCk6QXJyYXkuaXNBcnJheShuKSYmbi5wdXNoKGgpLGh9KSx0aGlzLl9ldmVudH1maXJlKGUpe3ZhciB0LHI7aWYodGhpcy5fbGlzdGVuZXJzKXt0aGlzLl9kZWxpdmVyeVF1ZXVlfHwodGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgcCk7Zm9yKGxldCB0IG9mIHRoaXMuX2xpc3RlbmVycyl0aGlzLl9kZWxpdmVyeVF1ZXVlLnB1c2goW3QsZV0pO2ZvcihudWxsPT09KHQ9dGhpcy5fcGVyZk1vbil8fHZvaWQgMD09PXR8fHQuc3RhcnQodGhpcy5fZGVsaXZlcnlRdWV1ZS5zaXplKTt0aGlzLl9kZWxpdmVyeVF1ZXVlLnNpemU+MDspe2NvbnN0W2UsdF09dGhpcy5fZGVsaXZlcnlRdWV1ZS5zaGlmdCgpO3RyeXtlLmludm9rZSh0KX1jYXRjaChlKXtuKGUpfX1udWxsPT09KHI9dGhpcy5fcGVyZk1vbil8fHZvaWQgMD09PXJ8fHIuc3RvcCgpfX19ZnVuY3Rpb24gQihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGZ1bmN0aW9uKGUpe2xldCB0PVtdLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PW47KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikpLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0fShlKSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIGooZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1jbGFzcyBxe2NvbnN0cnVjdG9yKGUpe3RoaXMuZXhlY3V0b3I9ZSx0aGlzLl9kaWRSdW49ITF9Z2V0VmFsdWUoKXtpZighdGhpcy5fZGlkUnVuKXRyeXt0aGlzLl92YWx1ZT10aGlzLmV4ZWN1dG9yKCl9Y2F0Y2goZSl7dGhpcy5fZXJyb3I9ZX1maW5hbGx5e3RoaXMuX2RpZFJ1bj0hMH1pZih0aGlzLl9lcnJvcil0aHJvdyB0aGlzLl9lcnJvcjtyZXR1cm4gdGhpcy5fdmFsdWV9Z2V0IHJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiAkKGUsdCxuPTAscj1lLmxlbmd0aCxpPTAsbz10Lmxlbmd0aCl7Zm9yKDtuPHImJmk8bztuKyssaSsrKXtsZXQgcj1lLmNoYXJDb2RlQXQobiksbz10LmNoYXJDb2RlQXQoaSk7aWYocjxvKXJldHVybi0xO2lmKHI+bylyZXR1cm4gMX1jb25zdCBhPXItbixzPW8taTtyZXR1cm4gYTxzPy0xOmE+cz8xOjB9ZnVuY3Rpb24gVyhlKXtyZXR1cm4gZT49OTcmJmU8PTEyMn1mdW5jdGlvbiBIKGUpe3JldHVybiBlPj02NSYmZTw9OTB9ZnVuY3Rpb24geihlLHQpe2NvbnN0IG49dC5sZW5ndGg7cmV0dXJuISh0Lmxlbmd0aD5lLmxlbmd0aCkmJjA9PT1mdW5jdGlvbihlLHQsbj0wLHI9ZS5sZW5ndGgsaT0wLG89dC5sZW5ndGgpe2Zvcig7bjxyJiZpPG87bisrLGkrKyl7bGV0IGE9ZS5jaGFyQ29kZUF0KG4pLHM9dC5jaGFyQ29kZUF0KGkpO2lmKGE9PT1zKWNvbnRpbnVlO2lmKGE+PTEyOHx8cz49MTI4KXJldHVybiAkKGUudG9Mb3dlckNhc2UoKSx0LnRvTG93ZXJDYXNlKCksbixyLGksbyk7VyhhKSYmKGEtPTMyKSxXKHMpJiYocy09MzIpO2NvbnN0IGw9YS1zO2lmKDAhPT1sKXJldHVybiBsfWNvbnN0IGE9ci1uLHM9by1pO3JldHVybiBhPHM/LTE6YT5zPzE6MH0oZSx0LDAsbil9ZnVuY3Rpb24gRyhlKXtyZXR1cm4gNTUyOTY8PWUmJmU8PTU2MzE5fWZ1bmN0aW9uIEooZSx0LG4pe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pO2lmKEcocikmJm4rMTx0KXtjb25zdCB0PWUuY2hhckNvZGVBdChuKzEpO2lmKGZ1bmN0aW9uKGUpe3JldHVybiA1NjMyMDw9ZSYmZTw9NTczNDN9KHQpKXJldHVybiB0LTU2MzIwKyhyLTU1Mjk2PDwxMCkrNjU1MzZ9cmV0dXJuIHJ9Y29uc3QgWD0vXltcdFxuXHJceDIwLVx4N0VdKiQvO2NsYXNzIFp7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeT1lfXN0YXRpYyBnZXRJbnN0YW5jZShlKXtyZXR1cm4gWi5jYWNoZS5nZXQoQXJyYXkuZnJvbShlKSl9c3RhdGljIGdldExvY2FsZXMoKXtyZXR1cm4gWi5fbG9jYWxlcy5nZXRWYWx1ZSgpfWlzQW1iaWd1b3VzKGUpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmhhcyhlKX1nZXRQcmltYXJ5Q29uZnVzYWJsZShlKXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5nZXQoZSl9Z2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKXtyZXR1cm4gbmV3IFNldCh0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmtleXMoKSl9fUY9WixaLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3IHEoKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjVdLCJfZGVmYXVsdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJjcyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZGUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImVzIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImZyIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sIml0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJqYSI6WzgyMTEsNDUsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MjkyLDQ0LDY1MzA3LDU5XSwia28iOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInBsIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInB0LUJSIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInFwcy1wbG9jIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInJ1IjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywzMDUsMTA1LDkyMSw3MywxMDA5LDExMiwyMTUsMTIwLDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwidHIiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiemgtaGFucyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4OCw0MCw2NTI4OSw0MV0sInpoLWhhbnQiOls4MjExLDQ1LDY1Mzc0LDEyNiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUzMDcsNTldfScpKSksWi5jYWNoZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wdXRlRm49ZSx0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQoZSl7Y29uc3QgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09dCYmKHRoaXMubGFzdEFyZ0tleT10LHRoaXMubGFzdENhY2hlPXRoaXMuY29tcHV0ZUZuKGUpKSx0aGlzLmxhc3RDYWNoZX19KChlPT57ZnVuY3Rpb24gdChlKXtjb25zdCB0PW5ldyBNYXA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz0yKXQuc2V0KGVbbl0sZVtuKzFdKTtyZXR1cm4gdH1mdW5jdGlvbiBuKGUsdCl7aWYoIWUpcmV0dXJuIHQ7Y29uc3Qgbj1uZXcgTWFwO2Zvcihjb25zdFtyLGldb2YgZSl0LmhhcyhyKSYmbi5zZXQocixpKTtyZXR1cm4gbn1jb25zdCByPUYuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS5nZXRWYWx1ZSgpO2xldCBpLG89ZS5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSYmZSBpbiByKSk7MD09PW8ubGVuZ3RoJiYobz1bIl9kZWZhdWx0Il0pO2Zvcihjb25zdCBlIG9mIG8pe2k9bihpLHQocltlXSkpfWNvbnN0IGE9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPW5ldyBNYXAoZSk7Zm9yKGNvbnN0W2Uscl1vZiB0KW4uc2V0KGUscik7cmV0dXJuIG59KHQoci5fY29tbW9uKSxpKTtyZXR1cm4gbmV3IFooYSl9KSksWi5fbG9jYWxlcz1uZXcgcSgoKCk9Pk9iamVjdC5rZXlzKFouYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS5nZXRWYWx1ZSgpKS5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpKSk7Y2xhc3MgWXtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KFkuZ2V0UmF3RGF0YSgpKSksdGhpcy5fZGF0YX1zdGF0aWMgaXNJbnZpc2libGVDaGFyYWN0ZXIoZSl7cmV0dXJuIFkuZ2V0RGF0YSgpLmhhcyhlKX1zdGF0aWMgZ2V0IGNvZGVQb2ludHMoKXtyZXR1cm4gWS5nZXREYXRhKCl9fVkuX2RhdGE9dm9pZCAwO2NsYXNzIFF7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy5tZXRob2Q9bix0aGlzLmFyZ3M9cix0aGlzLnR5cGU9MH19Y2xhc3MgZWV7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy52c1dvcmtlcj1lLHRoaXMuc2VxPXQsdGhpcy5yZXM9bix0aGlzLmVycj1yLHRoaXMudHlwZT0xfX1jbGFzcyB0ZXtjb25zdHJ1Y3RvcihlLHQsbixyKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50TmFtZT1uLHRoaXMuYXJnPXIsdGhpcy50eXBlPTJ9fWNsYXNzIG5le2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnZzV29ya2VyPWUsdGhpcy5yZXE9dCx0aGlzLmV2ZW50PW4sdGhpcy50eXBlPTN9fWNsYXNzIHJle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy52c1dvcmtlcj1lLHRoaXMucmVxPXQsdGhpcy50eXBlPTR9fWNsYXNzIGlle2NvbnN0cnVjdG9yKGUpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9ZSx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKGUpe3RoaXMuX3dvcmtlcklkPWV9c2VuZE1lc3NhZ2UoZSx0KXtjb25zdCBuPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbbl09e3Jlc29sdmU6cixyZWplY3Q6aX0sdGhpcy5fc2VuZChuZXcgUSh0aGlzLl93b3JrZXJJZCxuLGUsdCkpfSkpfWxpc3RlbihlLHQpe2xldCBuPW51bGw7Y29uc3Qgcj1uZXcgVSh7b25GaXJzdExpc3RlbmVyQWRkOigpPT57bj1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLnNldChuLHIpLHRoaXMuX3NlbmQobmV3IHRlKHRoaXMuX3dvcmtlcklkLG4sZSx0KSl9LG9uTGFzdExpc3RlbmVyUmVtb3ZlOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShuKSx0aGlzLl9zZW5kKG5ldyByZSh0aGlzLl93b3JrZXJJZCxuKSksbj1udWxsfX0pO3JldHVybiByLmV2ZW50fWhhbmRsZU1lc3NhZ2UoZSl7ZSYmZS52c1dvcmtlciYmKC0xIT09dGhpcy5fd29ya2VySWQmJmUudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZShlKSl9X2hhbmRsZU1lc3NhZ2UoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLl9oYW5kbGVSZXBseU1lc3NhZ2UoZSk7Y2FzZSAwOnJldHVybiB0aGlzLl9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKTtjYXNlIDI6cmV0dXJuIHRoaXMuX2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZShlKTtjYXNlIDM6cmV0dXJuIHRoaXMuX2hhbmRsZUV2ZW50TWVzc2FnZShlKTtjYXNlIDQ6cmV0dXJuIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpfX1faGFuZGxlUmVwbHlNZXNzYWdlKGUpe2lmKCF0aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV0pcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJHb3QgcmVwbHkgdG8gdW5rbm93biBzZXEiKTtsZXQgdD10aGlzLl9wZW5kaW5nUmVwbGllc1tlLnNlcV07aWYoZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXBsaWVzW2Uuc2VxXSxlLmVycil7bGV0IG49ZS5lcnI7cmV0dXJuIGUuZXJyLiRpc0Vycm9yJiYobj1uZXcgRXJyb3Isbi5uYW1lPWUuZXJyLm5hbWUsbi5tZXNzYWdlPWUuZXJyLm1lc3NhZ2Usbi5zdGFjaz1lLmVyci5zdGFjayksdm9pZCB0LnJlamVjdChuKX10LnJlc29sdmUoZS5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZShlKXtsZXQgdD1lLnJlcTt0aGlzLl9oYW5kbGVyLmhhbmRsZU1lc3NhZ2UoZS5tZXRob2QsZS5hcmdzKS50aGVuKChlPT57dGhpcy5fc2VuZChuZXcgZWUodGhpcy5fd29ya2VySWQsdCxlLHZvaWQgMCkpfSksKGU9PntlLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoZS5kZXRhaWw9cihlLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IGVlKHRoaXMuX3dvcmtlcklkLHQsdm9pZCAwLHIoZSkpKX0pKX1faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKGUpe2NvbnN0IHQ9ZS5yZXEsbj10aGlzLl9oYW5kbGVyLmhhbmRsZUV2ZW50KGUuZXZlbnROYW1lLGUuYXJnKSgoZT0+e3RoaXMuX3NlbmQobmV3IG5lKHRoaXMuX3dvcmtlcklkLHQsZSkpfSkpO3RoaXMuX3BlbmRpbmdFdmVudHMuc2V0KHQsbil9X2hhbmRsZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRW1pdHRlcnMuaGFzKGUucmVxKT90aGlzLl9wZW5kaW5nRW1pdHRlcnMuZ2V0KGUucmVxKS5maXJlKGUuZXZlbnQpOmNvbnNvbGUud2FybigiR290IGV2ZW50IGZvciB1bmtub3duIHJlcSIpfV9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZShlKXt0aGlzLl9wZW5kaW5nRXZlbnRzLmhhcyhlLnJlcSk/KHRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KGUucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUoZS5yZXEpKTpjb25zb2xlLndhcm4oIkdvdCB1bnN1YnNjcmliZSBmb3IgdW5rbm93biByZXEiKX1fc2VuZChlKXtsZXQgdD1bXTtpZigwPT09ZS50eXBlKWZvcihsZXQgbj0wO248ZS5hcmdzLmxlbmd0aDtuKyspZS5hcmdzW25daW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmdC5wdXNoKGUuYXJnc1tuXSk7ZWxzZSAxPT09ZS50eXBlJiZlLnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LnB1c2goZS5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UoZSx0KX19ZnVuY3Rpb24gb2UoZSl7cmV0dXJuIm8iPT09ZVswXSYmIm4iPT09ZVsxXSYmSChlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIGFlKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZIKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3Mgc2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9dCx0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBpZSh7c2VuZE1lc3NhZ2U6KHQsbik9PntlKHQsbil9LGhhbmRsZU1lc3NhZ2U6KGUsdCk9PnRoaXMuX2hhbmRsZU1lc3NhZ2UoZSx0KSxoYW5kbGVFdmVudDooZSx0KT0+dGhpcy5faGFuZGxlRXZlbnQoZSx0KX0pfW9ubWVzc2FnZShlKXt0aGlzLl9wcm90b2NvbC5oYW5kbGVNZXNzYWdlKGUpfV9oYW5kbGVNZXNzYWdlKGUsdCl7aWYoIiRpbml0aWFsaXplIj09PWUpcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSh0WzBdLHRbMV0sdFsyXSx0WzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlcltlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbZV0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCkpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19X2hhbmRsZUV2ZW50KGUsdCl7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKGFlKGUpKXtjb25zdCBuPXRoaXMuX3JlcXVlc3RIYW5kbGVyW2VdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHtlfSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIG59aWYob2UoZSkpe2NvbnN0IHQ9dGhpcy5fcmVxdWVzdEhhbmRsZXJbZV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7ZX0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiB0fXRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGV2ZW50IG5hbWUgJHtlfWApfWluaXRpYWxpemUoZSx0LG4scil7dGhpcy5fcHJvdG9jb2wuc2V0V29ya2VySWQoZSk7Y29uc3QgaT1mdW5jdGlvbihlLHQsbil7Y29uc3Qgcj1lPT5mdW5jdGlvbigpe2NvbnN0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KGUsbil9LGk9ZT0+ZnVuY3Rpb24odCl7cmV0dXJuIG4oZSx0KX07bGV0IG89e307Zm9yKGNvbnN0IHQgb2YgZSlhZSh0KT9vW3RdPWkodCk6b2UodCk/b1t0XT1uKHQsdm9pZCAwKTpvW3RdPXIodCk7cmV0dXJuIG99KHIsKChlLHQpPT50aGlzLl9wcm90b2NvbC5zZW5kTWVzc2FnZShlLHQpKSwoKGUsdCk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihlLHQpKSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT8odGhpcy5fcmVxdWVzdEhhbmRsZXI9dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5KGkpLFByb21pc2UucmVzb2x2ZShCKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOih0JiYodm9pZCAwIT09dC5iYXNlVXJsJiZkZWxldGUgdC5iYXNlVXJsLHZvaWQgMCE9PXQucGF0aHMmJnZvaWQgMCE9PXQucGF0aHMudnMmJmRlbGV0ZSB0LnBhdGhzLnZzLHZvaWQgMCE9PXR5cGVvZiB0LnRydXN0ZWRUeXBlc1BvbGljeSYmZGVsZXRlIHQudHJ1c3RlZFR5cGVzUG9saWN5LHQuY2F0Y2hFcnJvcj0hMCxOLnJlcXVpcmUuY29uZmlnKHQpKSxuZXcgUHJvbWlzZSgoKGUsdCk9PnsoMCxOLnJlcXVpcmUpKFtuXSwobj0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyPW4uY3JlYXRlKGkpLHRoaXMuX3JlcXVlc3RIYW5kbGVyP2UoQih0aGlzLl9yZXF1ZXN0SGFuZGxlcikpOnQobmV3IEVycm9yKCJObyBSZXF1ZXN0SGFuZGxlciEiKSl9KSx0KX0pKSl9fWNsYXNzIGxle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMub3JpZ2luYWxTdGFydD1lLHRoaXMub3JpZ2luYWxMZW5ndGg9dCx0aGlzLm1vZGlmaWVkU3RhcnQ9bix0aGlzLm1vZGlmaWVkTGVuZ3RoPXJ9Z2V0T3JpZ2luYWxFbmQoKXtyZXR1cm4gdGhpcy5vcmlnaW5hbFN0YXJ0K3RoaXMub3JpZ2luYWxMZW5ndGh9Z2V0TW9kaWZpZWRFbmQoKXtyZXR1cm4gdGhpcy5tb2RpZmllZFN0YXJ0K3RoaXMubW9kaWZpZWRMZW5ndGh9fWZ1bmN0aW9uIGNlKGUsdCl7cmV0dXJuKHQ8PDUpLXQrZXwwfWZ1bmN0aW9uIHVlKGUsdCl7dD1jZSgxNDk0MTcsdCk7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQ9Y2UoZS5jaGFyQ29kZUF0KG4pLHQpO3JldHVybiB0fWNsYXNzIGhle2NvbnN0cnVjdG9yKGUpe3RoaXMuc291cmNlPWV9Z2V0RWxlbWVudHMoKXtjb25zdCBlPXRoaXMuc291cmNlLHQ9bmV3IEludDMyQXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0W25dPWUuY2hhckNvZGVBdChuKTtyZXR1cm4gdH19ZnVuY3Rpb24gZmUoZSx0LG4pe3JldHVybiBuZXcgcGUobmV3IGhlKGUpLG5ldyBoZSh0KSkuQ29tcHV0ZURpZmYobikuY2hhbmdlc31jbGFzcyBkZXtzdGF0aWMgQXNzZXJ0KGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKHQpfX1jbGFzcyBtZXtzdGF0aWMgQ29weShlLHQsbixyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspbltyK29dPWVbdCtvXX1zdGF0aWMgQ29weTIoZSx0LG4scixpKXtmb3IobGV0IG89MDtvPGk7bysrKW5bcitvXT1lW3Qrb119fWNsYXNzIGdle2NvbnN0cnVjdG9yKCl7dGhpcy5tX2NoYW5nZXM9W10sdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0LHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MH1NYXJrTmV4dENoYW5nZSgpeyh0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5tX2NoYW5nZXMucHVzaChuZXcgbGUodGhpcy5tX29yaWdpbmFsU3RhcnQsdGhpcy5tX29yaWdpbmFsQ291bnQsdGhpcy5tX21vZGlmaWVkU3RhcnQsdGhpcy5tX21vZGlmaWVkQ291bnQpKSx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTAsdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0fUFkZE9yaWdpbmFsRWxlbWVudChlLHQpe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LGUpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LHQpLHRoaXMubV9vcmlnaW5hbENvdW50Kyt9QWRkTW9kaWZpZWRFbGVtZW50KGUsdCl7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsZSksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkQ291bnQrK31nZXRDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXN9Z2V0UmV2ZXJzZUNoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlcy5yZXZlcnNlKCksdGhpcy5tX2NoYW5nZXN9fWNsYXNzIHBle2NvbnN0cnVjdG9yKGUsdCxuPW51bGwpe3RoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlPW4sdGhpcy5fb3JpZ2luYWxTZXF1ZW5jZT1lLHRoaXMuX21vZGlmaWVkU2VxdWVuY2U9dDtjb25zdFtyLGksb109cGUuX2dldEVsZW1lbnRzKGUpLFthLHMsbF09cGUuX2dldEVsZW1lbnRzKHQpO3RoaXMuX2hhc1N0cmluZ3M9byYmbCx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1pLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9YSx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPXMsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkoZSl7cmV0dXJuIGUubGVuZ3RoPjAmJiJzdHJpbmciPT10eXBlb2YgZVswXX1zdGF0aWMgX2dldEVsZW1lbnRzKGUpe2NvbnN0IHQ9ZS5nZXRFbGVtZW50cygpO2lmKHBlLl9pc1N0cmluZ0FycmF5KHQpKXtjb25zdCBlPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZVtuXT11ZSh0W25dLDApO3JldHVyblt0LGUsITBdfXJldHVybiB0IGluc3RhbmNlb2YgSW50MzJBcnJheT9bW10sdCwhMV06W1tdLG5ldyBJbnQzMkFycmF5KHQpLCExXX1FbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1FbGVtZW50c0FyZVN0cmljdEVxdWFsKGUsdCl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlLHQpKXJldHVybiExO3JldHVybiBwZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLGUpPT09cGUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSx0KX1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQoZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRTdHJpY3RFbGVtZW50P2UuZ2V0U3RyaWN0RWxlbWVudCh0KTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChlLHQpe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW2VdPT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSYmKCF0aGlzLl9oYXNTdHJpbmdzfHx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGUsdCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbZV09PT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdJiYoIXRoaXMuX2hhc1N0cmluZ3N8fHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1Db21wdXRlRGlmZihlKXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSxlKX1fQ29tcHV0ZURpZmYoZSx0LG4scixpKXtjb25zdCBvPVshMV07bGV0IGE9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShlLHQsbixyLG8pO3JldHVybiBpJiYoYT10aGlzLlByZXR0aWZ5Q2hhbmdlcyhhKSkse3F1aXRFYXJseTpvWzBdLGNoYW5nZXM6YX19Q29tcHV0ZURpZmZSZWN1cnNpdmUoZSx0LG4scixpKXtmb3IoaVswXT0hMTtlPD10JiZuPD1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwoZSxuKTspZSsrLG4rKztmb3IoO3Q+PWUmJnI+PW4mJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LHIpOyl0LS0sci0tO2lmKGU+dHx8bj5yKXtsZXQgaTtyZXR1cm4gbjw9cj8oZGUuQXNzZXJ0KGU9PT10KzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGk9W25ldyBsZShlLDAsbixyLW4rMSldKTplPD10PyhkZS5Bc3NlcnQobj09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaT1bbmV3IGxlKGUsdC1lKzEsbiwwKV0pOihkZS5Bc3NlcnQoZT09PXQrMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksZGUuQXNzZXJ0KG49PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGk9W10pLGl9Y29uc3Qgbz1bMF0sYT1bMF0scz10aGlzLkNvbXB1dGVSZWN1cnNpb25Qb2ludChlLHQsbixyLG8sYSxpKSxsPW9bMF0sYz1hWzBdO2lmKG51bGwhPT1zKXJldHVybiBzO2lmKCFpWzBdKXtjb25zdCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUoZSxsLG4sYyxpKTtsZXQgYT1bXTtyZXR1cm4gYT1pWzBdP1tuZXcgbGUobCsxLHQtKGwrMSkrMSxjKzEsci0oYysxKSsxKV06dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZShsKzEsdCxjKzEscixpKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhvLGEpfXJldHVybltuZXcgbGUoZSx0LWUrMSxuLHItbisxKV19V0FMS1RSQUNFKGUsdCxuLHIsaSxvLGEscyxsLGMsdSxoLGYsZCxtLGcscCxiKXtsZXQgdj1udWxsLHk9bnVsbCxDPW5ldyBnZSx3PXQsXz1uLFM9ZlswXS1nWzBdLXIsQT0tMTA3Mzc0MTgyNCxFPXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCB0PVMrZTt0PT09d3x8dDxfJiZsW3QtMV08bFt0KzFdPyhkPSh1PWxbdCsxXSktUy1yLHU8QSYmQy5NYXJrTmV4dENoYW5nZSgpLEE9dSxDLkFkZE1vZGlmaWVkRWxlbWVudCh1KzEsZCksUz10KzEtZSk6KGQ9KHU9bFt0LTFdKzEpLVMtcix1PEEmJkMuTWFya05leHRDaGFuZ2UoKSxBPXUtMSxDLkFkZE9yaWdpbmFsRWxlbWVudCh1LGQrMSksUz10LTEtZSksRT49MCYmKGU9KGw9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W0VdKVswXSx3PTEsXz1sLmxlbmd0aC0xKX13aGlsZSgtLUU+PS0xKTtpZih2PUMuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxiWzBdKXtsZXQgZT1mWzBdKzEsdD1nWzBdKzE7aWYobnVsbCE9PXYmJnYubGVuZ3RoPjApe2NvbnN0IG49dlt2Lmxlbmd0aC0xXTtlPU1hdGgubWF4KGUsbi5nZXRPcmlnaW5hbEVuZCgpKSx0PU1hdGgubWF4KHQsbi5nZXRNb2RpZmllZEVuZCgpKX15PVtuZXcgbGUoZSxoLWUrMSx0LG0tdCsxKV19ZWxzZXtDPW5ldyBnZSx3PW8sXz1hLFM9ZlswXS1nWzBdLXMsQT0xMDczNzQxODI0LEU9cD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IGU9UytpO2U9PT13fHxlPF8mJmNbZS0xXT49Y1tlKzFdPyhkPSh1PWNbZSsxXS0xKS1TLXMsdT5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11KzEsQy5BZGRPcmlnaW5hbEVsZW1lbnQodSsxLGQrMSksUz1lKzEtaSk6KGQ9KHU9Y1tlLTFdKS1TLXMsdT5BJiZDLk1hcmtOZXh0Q2hhbmdlKCksQT11LEMuQWRkTW9kaWZpZWRFbGVtZW50KHUrMSxkKzEpLFM9ZS0xLWkpLEU+PTAmJihpPShjPXRoaXMubV9yZXZlcnNlSGlzdG9yeVtFXSlbMF0sdz0xLF89Yy5sZW5ndGgtMSl9d2hpbGUoLS1FPj0tMSk7eT1DLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXModix5KX1Db21wdXRlUmVjdXJzaW9uUG9pbnQoZSx0LG4scixpLG8sYSl7bGV0IHM9MCxsPTAsYz0wLHU9MCxoPTAsZj0wO2UtLSxuLS0saVswXT0wLG9bMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IGQ9dC1lKyhyLW4pLG09ZCsxLGc9bmV3IEludDMyQXJyYXkobSkscD1uZXcgSW50MzJBcnJheShtKSxiPXItbix2PXQtZSx5PWUtbixDPXQtcix3PSh2LWIpJTI9PTA7Z1tiXT1lLHBbdl09dCxhWzBdPSExO2ZvcihsZXQgXz0xO188PWQvMisxO18rKyl7bGV0IGQ9MCxTPTA7Yz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGItXyxfLGIsbSksdT10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGIrXyxfLGIsbSk7Zm9yKGxldCBlPWM7ZTw9dTtlKz0yKXtzPWU9PT1jfHxlPHUmJmdbZS0xXTxnW2UrMV0/Z1tlKzFdOmdbZS0xXSsxLGw9cy0oZS1iKS15O2NvbnN0IG49cztmb3IoO3M8dCYmbDxyJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwocysxLGwrMSk7KXMrKyxsKys7aWYoZ1tlXT1zLHMrbD5kK1MmJihkPXMsUz1sKSwhdyYmTWF0aC5hYnMoZS12KTw9Xy0xJiZzPj1wW2VdKXJldHVybiBpWzBdPXMsb1swXT1sLG48PXBbZV0mJl88PTE0NDg/dGhpcy5XQUxLVFJBQ0UoYixjLHUseSx2LGgsZixDLGcscCxzLHQsaSxsLHIsbyx3LGEpOm51bGx9Y29uc3QgQT0oZC1lKyhTLW4pLV8pLzI7aWYobnVsbCE9PXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoZCxBKSlyZXR1cm4gYVswXT0hMCxpWzBdPWQsb1swXT1TLEE+MCYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGMsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGwscixvLHcsYSk6KGUrKyxuKyssW25ldyBsZShlLHQtZSsxLG4sci1uKzEpXSk7aD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYtXyxfLHYsbSksZj10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHYrXyxfLHYsbSk7Zm9yKGxldCBkPWg7ZDw9ZjtkKz0yKXtzPWQ9PT1ofHxkPGYmJnBbZC0xXT49cFtkKzFdP3BbZCsxXS0xOnBbZC0xXSxsPXMtKGQtdiktQztjb25zdCBtPXM7Zm9yKDtzPmUmJmw+biYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHMsbCk7KXMtLSxsLS07aWYocFtkXT1zLHcmJk1hdGguYWJzKGQtYik8PV8mJnM8PWdbZF0pcmV0dXJuIGlbMF09cyxvWzBdPWwsbT49Z1tkXSYmXzw9MTQ0OD90aGlzLldBTEtUUkFDRShiLGMsdSx5LHYsaCxmLEMsZyxwLHMsdCxpLGwscixvLHcsYSk6bnVsbH1pZihfPD0xNDQ3KXtsZXQgZT1uZXcgSW50MzJBcnJheSh1LWMrMik7ZVswXT1iLWMrMSxtZS5Db3B5MihnLGMsZSwxLHUtYysxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaChlKSxlPW5ldyBJbnQzMkFycmF5KGYtaCsyKSxlWzBdPXYtaCsxLG1lLkNvcHkyKHAsaCxlLDEsZi1oKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKGUpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0UoYixjLHUseSx2LGgsZixDLGcscCxzLHQsaSxsLHIsbyx3LGEpfVByZXR0aWZ5Q2hhbmdlcyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgbj1lW3RdLHI9dDxlLmxlbmd0aC0xP2VbdCsxXS5vcmlnaW5hbFN0YXJ0OnRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLGk9dDxlLmxlbmd0aC0xP2VbdCsxXS5tb2RpZmllZFN0YXJ0OnRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLG89bi5vcmlnaW5hbExlbmd0aD4wLGE9bi5tb2RpZmllZExlbmd0aD4wO2Zvcig7bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGg8ciYmbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGg8aSYmKCFvfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpKSYmKCFhfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpKTspe2NvbnN0IGU9dGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKG4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkU3RhcnQpO2lmKHRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCkmJiFlKWJyZWFrO24ub3JpZ2luYWxTdGFydCsrLG4ubW9kaWZpZWRTdGFydCsrfWxldCBzPVtudWxsXTt0PGUubGVuZ3RoLTEmJnRoaXMuQ2hhbmdlc092ZXJsYXAoZVt0XSxlW3QrMV0scykmJihlW3RdPXNbMF0sZS5zcGxpY2UodCsxLDEpLHQtLSl9Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDt0LS0pe2NvbnN0IG49ZVt0XTtsZXQgcj0wLGk9MDtpZih0PjApe2NvbnN0IG49ZVt0LTFdO3I9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgsaT1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aH1jb25zdCBvPW4ub3JpZ2luYWxMZW5ndGg+MCxhPW4ubW9kaWZpZWRMZW5ndGg+MDtsZXQgcz0wLGw9dGhpcy5fYm91bmRhcnlTY29yZShuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbExlbmd0aCxuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZExlbmd0aCk7Zm9yKGxldCBlPTE7O2UrKyl7Y29uc3QgdD1uLm9yaWdpbmFsU3RhcnQtZSxjPW4ubW9kaWZpZWRTdGFydC1lO2lmKHQ8cnx8YzxpKWJyZWFrO2lmKG8mJiF0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbCh0LHQrbi5vcmlnaW5hbExlbmd0aCkpYnJlYWs7aWYoYSYmIXRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGMsYytuLm1vZGlmaWVkTGVuZ3RoKSlicmVhaztjb25zdCB1PSh0PT09ciYmYz09PWk/NTowKSt0aGlzLl9ib3VuZGFyeVNjb3JlKHQsbi5vcmlnaW5hbExlbmd0aCxjLG4ubW9kaWZpZWRMZW5ndGgpO3U+bCYmKGw9dSxzPWUpfW4ub3JpZ2luYWxTdGFydC09cyxuLm1vZGlmaWVkU3RhcnQtPXM7Y29uc3QgYz1bbnVsbF07dD4wJiZ0aGlzLkNoYW5nZXNPdmVybGFwKGVbdC0xXSxlW3RdLGMpJiYoZVt0LTFdPWNbMF0sZS5zcGxpY2UodCwxKSx0KyspfWlmKHRoaXMuX2hhc1N0cmluZ3MpZm9yKGxldCB0PTEsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWVbdC0xXSxyPWVbdF0saT1yLm9yaWdpbmFsU3RhcnQtbi5vcmlnaW5hbFN0YXJ0LW4ub3JpZ2luYWxMZW5ndGgsbz1uLm9yaWdpbmFsU3RhcnQsYT1yLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aCxzPWEtbyxsPW4ubW9kaWZpZWRTdGFydCxjPXIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoLHU9Yy1sO2lmKGk8NSYmczwyMCYmdTwyMCl7Y29uc3QgZT10aGlzLl9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKG8scyxsLHUsaSk7aWYoZSl7Y29uc3RbdCxvXT1lO3Q9PT1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCYmbz09PW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RofHwobi5vcmlnaW5hbExlbmd0aD10LW4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkTGVuZ3RoPW8tbi5tb2RpZmllZFN0YXJ0LHIub3JpZ2luYWxTdGFydD10K2ksci5tb2RpZmllZFN0YXJ0PW8raSxyLm9yaWdpbmFsTGVuZ3RoPWEtci5vcmlnaW5hbFN0YXJ0LHIubW9kaWZpZWRMZW5ndGg9Yy1yLm1vZGlmaWVkU3RhcnQpfX19cmV0dXJuIGV9X2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UoZSx0LG4scixpKXtpZih0PGl8fHI8aSlyZXR1cm4gbnVsbDtjb25zdCBvPWUrdC1pKzEsYT1uK3ItaSsxO2xldCBzPTAsbD0wLGM9MDtmb3IobGV0IHQ9ZTt0PG87dCsrKWZvcihsZXQgZT1uO2U8YTtlKyspe2NvbnN0IG49dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxlLGkpO24+MCYmbj5zJiYocz1uLGw9dCxjPWUpfXJldHVybiBzPjA/W2wsY106bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUoZSx0LG4pe2xldCByPTA7Zm9yKGxldCBpPTA7aTxuO2krKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbChlK2ksdCtpKSlyZXR1cm4gMDtyKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2UraV0ubGVuZ3RofXJldHVybiByfV9PcmlnaW5hbElzQm91bmRhcnkoZSl7cmV0dXJuIGU8PTB8fGU+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTF8fHRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW2VdKX1fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCl7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGUpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoZS0xKSlyZXR1cm4hMDtpZih0PjApe2NvbnN0IG49ZSt0O2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShuLTEpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkobikpcmV0dXJuITB9cmV0dXJuITF9X01vZGlmaWVkSXNCb3VuZGFyeShlKXtyZXR1cm4gZTw9MHx8ZT49dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMXx8dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbZV0pfV9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkoZSx0KXtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoZSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShlLTEpKXJldHVybiEwO2lmKHQ+MCl7Y29uc3Qgbj1lK3Q7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KG4tMSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShuKSlyZXR1cm4hMH1yZXR1cm4hMX1fYm91bmRhcnlTY29yZShlLHQsbixyKXtyZXR1cm4odGhpcy5fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KGUsdCk/MTowKSsodGhpcy5fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KG4scik/MTowKX1Db25jYXRlbmF0ZUNoYW5nZXMoZSx0KXtsZXQgbj1bXTtpZigwPT09ZS5sZW5ndGh8fDA9PT10Lmxlbmd0aClyZXR1cm4gdC5sZW5ndGg+MD90OmU7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcChlW2UubGVuZ3RoLTFdLHRbMF0sbikpe2NvbnN0IHI9bmV3IEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoLTEpO3JldHVybiBtZS5Db3B5KGUsMCxyLDAsZS5sZW5ndGgtMSkscltlLmxlbmd0aC0xXT1uWzBdLG1lLkNvcHkodCwxLHIsZS5sZW5ndGgsdC5sZW5ndGgtMSkscn17Y29uc3Qgbj1uZXcgQXJyYXkoZS5sZW5ndGgrdC5sZW5ndGgpO3JldHVybiBtZS5Db3B5KGUsMCxuLDAsZS5sZW5ndGgpLG1lLkNvcHkodCwwLG4sZS5sZW5ndGgsdC5sZW5ndGgpLG59fUNoYW5nZXNPdmVybGFwKGUsdCxuKXtpZihkZS5Bc3NlcnQoZS5vcmlnaW5hbFN0YXJ0PD10Lm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZGUuQXNzZXJ0KGUubW9kaWZpZWRTdGFydDw9dC5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLGUub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoPj10Lm9yaWdpbmFsU3RhcnR8fGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoPj10Lm1vZGlmaWVkU3RhcnQpe2NvbnN0IHI9ZS5vcmlnaW5hbFN0YXJ0O2xldCBpPWUub3JpZ2luYWxMZW5ndGg7Y29uc3Qgbz1lLm1vZGlmaWVkU3RhcnQ7bGV0IGE9ZS5tb2RpZmllZExlbmd0aDtyZXR1cm4gZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGg+PXQub3JpZ2luYWxTdGFydCYmKGk9dC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtZS5vcmlnaW5hbFN0YXJ0KSxlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aD49dC5tb2RpZmllZFN0YXJ0JiYoYT10Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC1lLm1vZGlmaWVkU3RhcnQpLG5bMF09bmV3IGxlKHIsaSxvLGEpLCEwfXJldHVybiBuWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQoZSx0LG4scil7aWYoZT49MCYmZTxyKXJldHVybiBlO2NvbnN0IGk9dCUyPT0wO2lmKGU8MCl7cmV0dXJuIGk9PT0obiUyPT0wKT8wOjF9cmV0dXJuIGk9PT0oKHItbi0xKSUyPT0wKT9yLTE6ci0yfX1sZXQgYmU7aWYodm9pZCAwIT09Ti52c2NvZGUmJnZvaWQgMCE9PU4udnNjb2RlLnByb2Nlc3Mpe2NvbnN0IGU9Ti52c2NvZGUucHJvY2VzcztiZT17Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGUucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIGUuYXJjaH0sZ2V0IGVudigpe3JldHVybiBlLmVudn0sY3dkOigpPT5lLmN3ZCgpfX1lbHNlIGJlPSJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2Vzcz97Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIHByb2Nlc3MucGxhdGZvcm19LGdldCBhcmNoKCl7cmV0dXJuIHByb2Nlc3MuYXJjaH0sZ2V0IGVudigpe3JldHVybiBwcm9jZXNzLmVudn0sY3dkOigpPT5wcm9jZXNzLmVudi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfTp7Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIGs/IndpbjMyIjpUPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZDooKT0+Ii8ifTtjb25zdCB2ZT1iZS5jd2QseWU9YmUuZW52LENlPWJlLnBsYXRmb3JtLHdlPTQ2LF9lPTQ3LFNlPTkyLEFlPTU4O2NsYXNzIEVlIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LG4pe2xldCByOyJzdHJpbmciPT10eXBlb2YgdCYmMD09PXQuaW5kZXhPZigibm90ICIpPyhyPSJtdXN0IG5vdCBiZSIsdD10LnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IGk9LTEhPT1lLmluZGV4T2YoIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IG89YFRoZSAiJHtlfSIgJHtpfSAke3J9IG9mIHR5cGUgJHt0fWA7bys9Ii4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBuLHN1cGVyKG8pLHRoaXMuY29kZT0iRVJSX0lOVkFMSURfQVJHX1RZUEUifX1mdW5jdGlvbiBOZShlLHQpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRWUodCwic3RyaW5nIixlKX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4gZT09PV9lfHxlPT09U2V9ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIGU9PT1fZX1mdW5jdGlvbiBrZShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfHxlPj05NyYmZTw9MTIyfWZ1bmN0aW9uIFRlKGUsdCxuLHIpe2xldCBpPSIiLG89MCxhPS0xLHM9MCxsPTA7Zm9yKGxldCBjPTA7Yzw9ZS5sZW5ndGg7KytjKXtpZihjPGUubGVuZ3RoKWw9ZS5jaGFyQ29kZUF0KGMpO2Vsc2V7aWYocihsKSlicmVhaztsPV9lfWlmKHIobCkpe2lmKGE9PT1jLTF8fDE9PT1zKTtlbHNlIGlmKDI9PT1zKXtpZihpLmxlbmd0aDwyfHwyIT09b3x8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09d2V8fGkuY2hhckNvZGVBdChpLmxlbmd0aC0yKSE9PXdlKXtpZihpLmxlbmd0aD4yKXtjb25zdCBlPWkubGFzdEluZGV4T2Yobik7LTE9PT1lPyhpPSIiLG89MCk6KGk9aS5zbGljZSgwLGUpLG89aS5sZW5ndGgtMS1pLmxhc3RJbmRleE9mKG4pKSxhPWMscz0wO2NvbnRpbnVlfWlmKDAhPT1pLmxlbmd0aCl7aT0iIixvPTAsYT1jLHM9MDtjb250aW51ZX19dCYmKGkrPWkubGVuZ3RoPjA/YCR7bn0uLmA6Ii4uIixvPTIpfWVsc2UgaS5sZW5ndGg+MD9pKz1gJHtufSR7ZS5zbGljZShhKzEsYyl9YDppPWUuc2xpY2UoYSsxLGMpLG89Yy1hLTE7YT1jLHM9MH1lbHNlIGw9PT13ZSYmLTEhPT1zPysrczpzPS0xfXJldHVybiBpfWZ1bmN0aW9uIE9lKGUsdCl7aWYobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCl0aHJvdyBuZXcgRWUoInBhdGhPYmplY3QiLCJPYmplY3QiLHQpO2NvbnN0IG49dC5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8YCR7dC5uYW1lfHwiIn0ke3QuZXh0fHwiIn1gO3JldHVybiBuP249PT10LnJvb3Q/YCR7bn0ke3J9YDpgJHtufSR7ZX0ke3J9YDpyfWNvbnN0IE1lPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIscj0hMTtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0tMTtpLS0pe2xldCBvO2lmKGk+PTApe2lmKG89ZVtpXSxOZShvLCJwYXRoIiksMD09PW8ubGVuZ3RoKWNvbnRpbnVlfWVsc2UgMD09PXQubGVuZ3RoP289dmUoKToobz15ZVtgPSR7dH1gXXx8dmUoKSwodm9pZCAwPT09b3x8by5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJm8uY2hhckNvZGVBdCgyKT09PVNlKSYmKG89YCR7dH1cXGApKTtjb25zdCBhPW8ubGVuZ3RoO2xldCBzPTAsbD0iIixjPSExO2NvbnN0IHU9by5jaGFyQ29kZUF0KDApO2lmKDE9PT1hKXhlKHUpJiYocz0xLGM9ITApO2Vsc2UgaWYoeGUodSkpaWYoYz0hMCx4ZShvLmNoYXJDb2RlQXQoMSkpKXtsZXQgZT0yLHQ9ZTtmb3IoO2U8YSYmIXhlKG8uY2hhckNvZGVBdChlKSk7KWUrKztpZihlPGEmJmUhPT10KXtjb25zdCBuPW8uc2xpY2UodCxlKTtmb3IodD1lO2U8YSYmeGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2lmKGU8YSYmZSE9PXQpe2Zvcih0PWU7ZTxhJiYheGUoby5jaGFyQ29kZUF0KGUpKTspZSsrO2UhPT1hJiZlPT09dHx8KGw9YFxcXFwke259XFwke28uc2xpY2UodCxlKX1gLHM9ZSl9fX1lbHNlIHM9MTtlbHNlIGtlKHUpJiZvLmNoYXJDb2RlQXQoMSk9PT1BZSYmKGw9by5zbGljZSgwLDIpLHM9MixhPjImJnhlKG8uY2hhckNvZGVBdCgyKSkmJihjPSEwLHM9MykpO2lmKGwubGVuZ3RoPjApaWYodC5sZW5ndGg+MCl7aWYobC50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWVsc2UgdD1sO2lmKHIpe2lmKHQubGVuZ3RoPjApYnJlYWt9ZWxzZSBpZihuPWAke28uc2xpY2Uocyl9XFwke259YCxyPWMsYyYmdC5sZW5ndGg+MClicmVha31yZXR1cm4gbj1UZShuLCFyLCJcXCIseGUpLHI/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe05lKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKDA9PT10KXJldHVybiIuIjtsZXQgbixyPTAsaT0hMTtjb25zdCBvPWUuY2hhckNvZGVBdCgwKTtpZigxPT09dClyZXR1cm4gTGUobyk/IlxcIjplO2lmKHhlKG8pKWlmKGk9ITAseGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiF4ZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Y29uc3QgYT1lLnNsaWNlKG8saSk7Zm9yKG89aTtpPHQmJnhlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIXhlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm5gXFxcXCR7YX1cXCR7ZS5zbGljZShvKX1cXGA7aSE9PW8mJihuPWBcXFxcJHthfVxcJHtlLnNsaWNlKG8saSl9YCxyPWkpfX19ZWxzZSByPTE7ZWxzZSBrZShvKSYmZS5jaGFyQ29kZUF0KDEpPT09QWUmJihuPWUuc2xpY2UoMCwyKSxyPTIsdD4yJiZ4ZShlLmNoYXJDb2RlQXQoMikpJiYoaT0hMCxyPTMpKTtsZXQgYT1yPHQ/VGUoZS5zbGljZShyKSwhaSwiXFwiLHhlKToiIjtyZXR1cm4gMCE9PWEubGVuZ3RofHxpfHwoYT0iLiIpLGEubGVuZ3RoPjAmJnhlKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHZvaWQgMD09PW4/aT9gXFwke2F9YDphOmk/YCR7bn1cXCR7YX1gOmAke259JHthfWB9LGlzQWJzb2x1dGUoZSl7TmUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHhlKG4pfHx0PjImJmtlKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT1BZSYmeGUoZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCByPTA7cjxlLmxlbmd0aDsrK3Ipe2NvbnN0IGk9ZVtyXTtOZShpLCJwYXRoIiksaS5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1uPWk6dCs9YFxcJHtpfWApfWlmKHZvaWQgMD09PXQpcmV0dXJuIi4iO2xldCByPSEwLGk9MDtpZigic3RyaW5nIj09dHlwZW9mIG4mJnhlKG4uY2hhckNvZGVBdCgwKSkpeysraTtjb25zdCBlPW4ubGVuZ3RoO2U+MSYmeGUobi5jaGFyQ29kZUF0KDEpKSYmKCsraSxlPjImJih4ZShuLmNoYXJDb2RlQXQoMikpPysraTpyPSExKSl9aWYocil7Zm9yKDtpPHQubGVuZ3RoJiZ4ZSh0LmNoYXJDb2RlQXQoaSkpOylpKys7aT49MiYmKHQ9YFxcJHt0LnNsaWNlKGkpfWApfXJldHVybiBNZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoTmUoZSwiZnJvbSIpLE5lKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1NZS5yZXNvbHZlKGUpLHI9TWUucmVzb2x2ZSh0KTtpZihuPT09cilyZXR1cm4iIjtpZigoZT1uLnRvTG93ZXJDYXNlKCkpPT09KHQ9ci50b0xvd2VyQ2FzZSgpKSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09U2U7KWkrKztsZXQgbz1lLmxlbmd0aDtmb3IoO28tMT5pJiZlLmNoYXJDb2RlQXQoby0xKT09PVNlOylvLS07Y29uc3QgYT1vLWk7bGV0IHM9MDtmb3IoO3M8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChzKT09PVNlOylzKys7bGV0IGw9dC5sZW5ndGg7Zm9yKDtsLTE+cyYmdC5jaGFyQ29kZUF0KGwtMSk9PT1TZTspbC0tO2NvbnN0IGM9bC1zLHU9YTxjP2E6YztsZXQgaD0tMSxmPTA7Zm9yKDtmPHU7ZisrKXtjb25zdCBuPWUuY2hhckNvZGVBdChpK2YpO2lmKG4hPT10LmNoYXJDb2RlQXQocytmKSlicmVhaztuPT09U2UmJihoPWYpfWlmKGYhPT11KXtpZigtMT09PWgpcmV0dXJuIHJ9ZWxzZXtpZihjPnUpe2lmKHQuY2hhckNvZGVBdChzK2YpPT09U2UpcmV0dXJuIHIuc2xpY2UocytmKzEpO2lmKDI9PT1mKXJldHVybiByLnNsaWNlKHMrZil9YT51JiYoZS5jaGFyQ29kZUF0KGkrZik9PT1TZT9oPWY6Mj09PWYmJihoPTMpKSwtMT09PWgmJihoPTApfWxldCBkPSIiO2ZvcihmPWkraCsxO2Y8PW87KytmKWYhPT1vJiZlLmNoYXJDb2RlQXQoZikhPT1TZXx8KGQrPTA9PT1kLmxlbmd0aD8iLi4iOiJcXC4uIik7cmV0dXJuIHMrPWgsZC5sZW5ndGg+MD9gJHtkfSR7ci5zbGljZShzLGwpfWA6KHIuY2hhckNvZGVBdChzKT09PVNlJiYrK3Msci5zbGljZShzLGwpKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGU7aWYoMD09PWUubGVuZ3RoKXJldHVybiIiO2NvbnN0IHQ9TWUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1TZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09U2Upe2NvbnN0IGU9dC5jaGFyQ29kZUF0KDIpO2lmKDYzIT09ZSYmZSE9PXdlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihrZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT1BZSYmdC5jaGFyQ29kZUF0KDIpPT09U2UpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtOZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT10KXJldHVybiB4ZShpKT9lOiIuIjtpZih4ZShpKSl7aWYobj1yPTEseGUoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGk9MixvPWk7Zm9yKDtpPHQmJiF4ZShlLmNoYXJDb2RlQXQoaSkpOylpKys7aWYoaTx0JiZpIT09byl7Zm9yKG89aTtpPHQmJnhlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPHQmJmkhPT1vKXtmb3Iobz1pO2k8dCYmIXhlKGUuY2hhckNvZGVBdChpKSk7KWkrKztpZihpPT09dClyZXR1cm4gZTtpIT09byYmKG49cj1pKzEpfX19fWVsc2Uga2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PUFlJiYobj10PjImJnhlKGUuY2hhckNvZGVBdCgyKSk/MzoyLHI9bik7bGV0IG89LTEsYT0hMDtmb3IobGV0IG49dC0xO24+PXI7LS1uKWlmKHhlKGUuY2hhckNvZGVBdChuKSkpe2lmKCFhKXtvPW47YnJlYWt9fWVsc2UgYT0hMTtpZigtMT09PW8pe2lmKC0xPT09bilyZXR1cm4iLiI7bz1ufXJldHVybiBlLnNsaWNlKDAsbyl9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYmTmUodCwiZXh0IiksTmUoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYoZS5sZW5ndGg+PTImJmtlKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PUFlJiYocj0yKSx2b2lkIDAhPT10JiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEscz0tMTtmb3Iobj1lLmxlbmd0aC0xO24+PXI7LS1uKXtjb25zdCBsPWUuY2hhckNvZGVBdChuKTtpZih4ZShsKSl7aWYoIW8pe3I9bisxO2JyZWFrfX1lbHNlLTE9PT1zJiYobz0hMSxzPW4rMSksYT49MCYmKGw9PT10LmNoYXJDb2RlQXQoYSk/LTE9PS0tYSYmKGk9bik6KGE9LTEsaT1zKSl9cmV0dXJuIHI9PT1pP2k9czotMT09PWkmJihpPWUubGVuZ3RoKSxlLnNsaWNlKHIsaSl9Zm9yKG49ZS5sZW5ndGgtMTtuPj1yOy0tbilpZih4ZShlLmNoYXJDb2RlQXQobikpKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe05lKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEsbz0hMCxhPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PUFlJiZrZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PXQ7LS1zKXtjb25zdCB0PWUuY2hhckNvZGVBdChzKTtpZih4ZSh0KSl7aWYoIW8pe3I9cysxO2JyZWFrfX1lbHNlLTE9PT1pJiYobz0hMSxpPXMrMSksdD09PXdlPy0xPT09bj9uPXM6MSE9PWEmJihhPTEpOi0xIT09biYmKGE9LTEpfXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6T2UuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe05lKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgcj0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKDE9PT1uKXJldHVybiB4ZShpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZih4ZShpKSl7aWYocj0xLHhlKGUuY2hhckNvZGVBdCgxKSkpe2xldCB0PTIsaT10O2Zvcig7dDxuJiYheGUoZS5jaGFyQ29kZUF0KHQpKTspdCsrO2lmKHQ8biYmdCE9PWkpe2ZvcihpPXQ7dDxuJiZ4ZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7aWYodDxuJiZ0IT09aSl7Zm9yKGk9dDt0PG4mJiF4ZShlLmNoYXJDb2RlQXQodCkpOyl0Kys7dD09PW4/cj10OnQhPT1pJiYocj10KzEpfX19fWVsc2UgaWYoa2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PUFlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKHI9Mix4ZShlLmNoYXJDb2RlQXQoMikpKXtpZigzPT09bilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBvPS0xLGE9cixzPS0xLGw9ITAsYz1lLmxlbmd0aC0xLHU9MDtmb3IoO2M+PXI7LS1jKWlmKGk9ZS5jaGFyQ29kZUF0KGMpLHhlKGkpKXtpZighbCl7YT1jKzE7YnJlYWt9fWVsc2UtMT09PXMmJihsPSExLHM9YysxKSxpPT09d2U/LTE9PT1vP289YzoxIT09dSYmKHU9MSk6LTEhPT1vJiYodT0tMSk7cmV0dXJuLTEhPT1zJiYoLTE9PT1vfHwwPT09dXx8MT09PXUmJm89PT1zLTEmJm89PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGEscyk6KHQubmFtZT1lLnNsaWNlKGEsbyksdC5iYXNlPWUuc2xpY2UoYSxzKSx0LmV4dD1lLnNsaWNlKG8scykpKSx0LmRpcj1hPjAmJmEhPT1yP2Uuc2xpY2UoMCxhLTEpOnQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sSWU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTp2ZSgpO05lKGksInBhdGgiKSwwIT09aS5sZW5ndGgmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09X2UpfXJldHVybiB0PVRlKHQsIW4sIi8iLExlKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKE5lKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09X2Usbj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT1fZTtyZXR1cm4gMD09PShlPVRlKGUsIXQsIi8iLExlKSkubGVuZ3RoP3Q/Ii8iOm4/Ii4vIjoiLiI6KG4mJihlKz0iLyIpLHQ/YC8ke2V9YDplKX0saXNBYnNvbHV0ZTplPT4oTmUoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PV9lKSxqb2luKC4uLmUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDsrK24pe2NvbnN0IHI9ZVtuXTtOZShyLCJwYXRoIiksci5sZW5ndGg+MCYmKHZvaWQgMD09PXQ/dD1yOnQrPWAvJHtyfWApfXJldHVybiB2b2lkIDA9PT10PyIuIjpJZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoTmUoZSwiZnJvbSIpLE5lKHQsInRvIiksZT09PXQpcmV0dXJuIiI7aWYoKGU9SWUucmVzb2x2ZShlKSk9PT0odD1JZS5yZXNvbHZlKHQpKSlyZXR1cm4iIjtjb25zdCBuPWUubGVuZ3RoLHI9bi0xLGk9dC5sZW5ndGgtMSxvPXI8aT9yOmk7bGV0IGE9LTEscz0wO2Zvcig7czxvO3MrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMStzKTtpZihuIT09dC5jaGFyQ29kZUF0KDErcykpYnJlYWs7bj09PV9lJiYoYT1zKX1pZihzPT09bylpZihpPm8pe2lmKHQuY2hhckNvZGVBdCgxK3MpPT09X2UpcmV0dXJuIHQuc2xpY2UoMStzKzEpO2lmKDA9PT1zKXJldHVybiB0LnNsaWNlKDErcyl9ZWxzZSByPm8mJihlLmNoYXJDb2RlQXQoMStzKT09PV9lP2E9czowPT09cyYmKGE9MCkpO2xldCBsPSIiO2ZvcihzPTErYSsxO3M8PW47KytzKXMhPT1uJiZlLmNoYXJDb2RlQXQocykhPT1fZXx8KGwrPTA9PT1sLmxlbmd0aD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtsfSR7dC5zbGljZSgxK2EpfWB9LHRvTmFtZXNwYWNlZFBhdGg6ZT0+ZSxkaXJuYW1lKGUpe2lmKE5lKGUsInBhdGgiKSwwPT09ZS5sZW5ndGgpcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09X2U7bGV0IG49LTEscj0hMDtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0xOy0tdClpZihlLmNoYXJDb2RlQXQodCk9PT1fZSl7aWYoIXIpe249dDticmVha319ZWxzZSByPSExO3JldHVybi0xPT09bj90PyIvIjoiLiI6dCYmMT09PW4/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dm9pZCAwIT09dCYmTmUodCwiZXh0IiksTmUoZSwicGF0aCIpO2xldCBuLHI9MCxpPS0xLG89ITA7aWYodm9pZCAwIT09dCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLHM9LTE7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7Y29uc3QgbD1lLmNoYXJDb2RlQXQobik7aWYobD09PV9lKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PXMmJihvPSExLHM9bisxKSxhPj0wJiYobD09PXQuY2hhckNvZGVBdChhKT8tMT09LS1hJiYoaT1uKTooYT0tMSxpPXMpKX1yZXR1cm4gcj09PWk/aT1zOi0xPT09aSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UocixpKX1mb3Iobj1lLmxlbmd0aC0xO24+PTA7LS1uKWlmKGUuY2hhckNvZGVBdChuKT09PV9lKXtpZighbyl7cj1uKzE7YnJlYWt9fWVsc2UtMT09PWkmJihvPSExLGk9bisxKTtyZXR1cm4tMT09PWk/IiI6ZS5zbGljZShyLGkpfSxleHRuYW1lKGUpe05lKGUsInBhdGgiKTtsZXQgdD0tMSxuPTAscj0tMSxpPSEwLG89MDtmb3IobGV0IGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7aWYocyE9PV9lKS0xPT09ciYmKGk9ITEscj1hKzEpLHM9PT13ZT8tMT09PXQ/dD1hOjEhPT1vJiYobz0xKTotMSE9PXQmJihvPS0xKTtlbHNlIGlmKCFpKXtuPWErMTticmVha319cmV0dXJuLTE9PT10fHwtMT09PXJ8fDA9PT1vfHwxPT09byYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpPZS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtOZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09X2U7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxvPTAsYT0tMSxzPSEwLGw9ZS5sZW5ndGgtMSxjPTA7Zm9yKDtsPj1yOy0tbCl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobCk7aWYodCE9PV9lKS0xPT09YSYmKHM9ITEsYT1sKzEpLHQ9PT13ZT8tMT09PWk/aT1sOjEhPT1jJiYoYz0xKTotMSE9PWkmJihjPS0xKTtlbHNlIGlmKCFzKXtvPWwrMTticmVha319aWYoLTEhPT1hKXtjb25zdCByPTA9PT1vJiZuPzE6bzstMT09PWl8fDA9PT1jfHwxPT09YyYmaT09PWEtMSYmaT09PW8rMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocixhKToodC5uYW1lPWUuc2xpY2UocixpKSx0LmJhc2U9ZS5zbGljZShyLGEpLHQuZXh0PWUuc2xpY2UoaSxhKSl9cmV0dXJuIG8+MD90LmRpcj1lLnNsaWNlKDAsby0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtJZS53aW4zMj1NZS53aW4zMj1NZSxJZS5wb3NpeD1NZS5wb3NpeD1JZSwid2luMzIiPT09Q2U/TWUubm9ybWFsaXplOkllLm5vcm1hbGl6ZSwid2luMzIiPT09Q2U/TWUucmVzb2x2ZTpJZS5yZXNvbHZlLCJ3aW4zMiI9PT1DZT9NZS5yZWxhdGl2ZTpJZS5yZWxhdGl2ZSwid2luMzIiPT09Q2U/TWUuZGlybmFtZTpJZS5kaXJuYW1lLCJ3aW4zMiI9PT1DZT9NZS5iYXNlbmFtZTpJZS5iYXNlbmFtZSwid2luMzIiPT09Q2U/TWUuZXh0bmFtZTpJZS5leHRuYW1lLCJ3aW4zMiI9PT1DZT9NZS5zZXA6SWUuc2VwO2NvbnN0IFJlPS9eXHdbXHdcZCsuLV0qJC8sUGU9L15cLy8sRmU9L15cL1wvLztmdW5jdGlvbiBEZShlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVJlLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpaWYoZS5hdXRob3JpdHkpe2lmKCFQZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihGZS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9Y29uc3QgVmU9IiIsS2U9Ii8iLFVlPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2NsYXNzIEJle2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvPSExKXsib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHxWZSx0aGlzLmF1dGhvcml0eT1lLmF1dGhvcml0eXx8VmUsdGhpcy5wYXRoPWUucGF0aHx8VmUsdGhpcy5xdWVyeT1lLnF1ZXJ5fHxWZSx0aGlzLmZyYWdtZW50PWUuZnJhZ21lbnR8fFZlKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXx8dD9lOiJmaWxlIn0oZSxvKSx0aGlzLmF1dGhvcml0eT10fHxWZSx0aGlzLnBhdGg9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOnQ/dFswXSE9PUtlJiYodD1LZSt0KTp0PUtlfXJldHVybiB0fSh0aGlzLnNjaGVtZSxufHxWZSksdGhpcy5xdWVyeT1yfHxWZSx0aGlzLmZyYWdtZW50PWl8fFZlLERlKHRoaXMsbykpfXN0YXRpYyBpc1VyaShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEJlfHwhIWUmJigic3RyaW5nIj09dHlwZW9mIGUuYXV0aG9yaXR5JiYic3RyaW5nIj09dHlwZW9mIGUuZnJhZ21lbnQmJiJzdHJpbmciPT10eXBlb2YgZS5wYXRoJiYic3RyaW5nIj09dHlwZW9mIGUucXVlcnkmJiJzdHJpbmciPT10eXBlb2YgZS5zY2hlbWUmJiJzdHJpbmciPT10eXBlb2YgZS5mc1BhdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLndpdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvU3RyaW5nKX1nZXQgZnNQYXRoKCl7cmV0dXJuIHplKHRoaXMsITEpfXdpdGgoZSl7aWYoIWUpcmV0dXJuIHRoaXM7bGV0e3NjaGVtZTp0LGF1dGhvcml0eTpuLHBhdGg6cixxdWVyeTppLGZyYWdtZW50Om99PWU7cmV0dXJuIHZvaWQgMD09PXQ/dD10aGlzLnNjaGVtZTpudWxsPT09dCYmKHQ9VmUpLHZvaWQgMD09PW4/bj10aGlzLmF1dGhvcml0eTpudWxsPT09biYmKG49VmUpLHZvaWQgMD09PXI/cj10aGlzLnBhdGg6bnVsbD09PXImJihyPVZlKSx2b2lkIDA9PT1pP2k9dGhpcy5xdWVyeTpudWxsPT09aSYmKGk9VmUpLHZvaWQgMD09PW8/bz10aGlzLmZyYWdtZW50Om51bGw9PT1vJiYobz1WZSksdD09PXRoaXMuc2NoZW1lJiZuPT09dGhpcy5hdXRob3JpdHkmJnI9PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZvPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBxZSh0LG4scixpLG8pfXN0YXRpYyBwYXJzZShlLHQ9ITEpe2NvbnN0IG49VWUuZXhlYyhlKTtyZXR1cm4gbj9uZXcgcWUoblsyXXx8VmUsWmUobls0XXx8VmUpLFplKG5bNV18fFZlKSxaZShuWzddfHxWZSksWmUobls5XXx8VmUpLHQpOm5ldyBxZShWZSxWZSxWZSxWZSxWZSl9c3RhdGljIGZpbGUoZSl7bGV0IHQ9VmU7aWYoayYmKGU9ZS5yZXBsYWNlKC9cXC9nLEtlKSksZVswXT09PUtlJiZlWzFdPT09S2Upe2NvbnN0IG49ZS5pbmRleE9mKEtlLDIpOy0xPT09bj8odD1lLnN1YnN0cmluZygyKSxlPUtlKToodD1lLnN1YnN0cmluZygyLG4pLGU9ZS5zdWJzdHJpbmcobil8fEtlKX1yZXR1cm4gbmV3IHFlKCJmaWxlIix0LGUsVmUsVmUpfXN0YXRpYyBmcm9tKGUpe2NvbnN0IHQ9bmV3IHFlKGUuc2NoZW1lLGUuYXV0aG9yaXR5LGUucGF0aCxlLnF1ZXJ5LGUuZnJhZ21lbnQpO3JldHVybiBEZSh0LCEwKSx0fXN0YXRpYyBqb2luUGF0aChlLC4uLnQpe2lmKCFlLnBhdGgpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBjYW5ub3QgY2FsbCBqb2luUGF0aCBvbiBVUkkgd2l0aG91dCBwYXRoIik7bGV0IG47cmV0dXJuIG49ayYmImZpbGUiPT09ZS5zY2hlbWU/QmUuZmlsZShNZS5qb2luKHplKGUsITApLC4uLnQpKS5wYXRoOkllLmpvaW4oZS5wYXRoLC4uLnQpLGUud2l0aCh7cGF0aDpufSl9dG9TdHJpbmcoZT0hMSl7cmV0dXJuIEdlKHRoaXMsZSl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZShlKXtpZihlKXtpZihlIGluc3RhbmNlb2YgQmUpcmV0dXJuIGU7e2NvbnN0IHQ9bmV3IHFlKGUpO3JldHVybiB0Ll9mb3JtYXR0ZWQ9ZS5leHRlcm5hbCx0Ll9mc1BhdGg9ZS5fc2VwPT09amU/ZS5mc1BhdGg6bnVsbCx0fX1yZXR1cm4gZX19Y29uc3QgamU9az8xOnZvaWQgMDtjbGFzcyBxZSBleHRlbmRzIEJle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb3JtYXR0ZWQ9bnVsbCx0aGlzLl9mc1BhdGg9bnVsbH1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD16ZSh0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKGU9ITEpe3JldHVybiBlP0dlKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9R2UodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgZT17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoZS5mc1BhdGg9dGhpcy5fZnNQYXRoLGUuX3NlcD1qZSksdGhpcy5fZm9ybWF0dGVkJiYoZS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGUucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoZS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoZS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihlLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihlLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGV9fWNvbnN0ICRlPXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gV2UoZSx0KXtsZXQgbixyPS0xO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBvPWUuY2hhckNvZGVBdChpKTtpZihvPj05NyYmbzw9MTIyfHxvPj02NSYmbzw9OTB8fG8+PTQ4JiZvPD01N3x8NDU9PT1vfHw0Nj09PW98fDk1PT09b3x8MTI2PT09b3x8dCYmNDc9PT1vKS0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSx2b2lkIDAhPT1uJiYobis9ZS5jaGFyQXQoaSkpO2Vsc2V7dm9pZCAwPT09biYmKG49ZS5zdWJzdHIoMCxpKSk7Y29uc3QgdD0kZVtvXTt2b2lkIDAhPT10PygtMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSksbis9dCk6LTE9PT1yJiYocj1pKX19cmV0dXJuLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIpKSksdm9pZCAwIT09bj9uOmV9ZnVuY3Rpb24gSGUoZSl7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pOzM1PT09cnx8NjM9PT1yPyh2b2lkIDA9PT10JiYodD1lLnN1YnN0cigwLG4pKSx0Kz0kZVtyXSk6dm9pZCAwIT09dCYmKHQrPWVbbl0pfXJldHVybiB2b2lkIDAhPT10P3Q6ZX1mdW5jdGlvbiB6ZShlLHQpe2xldCBuO3JldHVybiBuPWUuYXV0aG9yaXR5JiZlLnBhdGgubGVuZ3RoPjEmJiJmaWxlIj09PWUuc2NoZW1lP2AvLyR7ZS5hdXRob3JpdHl9JHtlLnBhdGh9YDo0Nz09PWUucGF0aC5jaGFyQ29kZUF0KDApJiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJjU4PT09ZS5wYXRoLmNoYXJDb2RlQXQoMik/dD9lLnBhdGguc3Vic3RyKDEpOmUucGF0aFsxXS50b0xvd2VyQ2FzZSgpK2UucGF0aC5zdWJzdHIoMik6ZS5wYXRoLGsmJihuPW4ucmVwbGFjZSgvXC8vZywiXFwiKSksbn1mdW5jdGlvbiBHZShlLHQpe2NvbnN0IG49dD9IZTpXZTtsZXQgcj0iIix7c2NoZW1lOmksYXV0aG9yaXR5Om8scGF0aDphLHF1ZXJ5OnMsZnJhZ21lbnQ6bH09ZTtpZihpJiYocis9aSxyKz0iOiIpLChvfHwiZmlsZSI9PT1pKSYmKHIrPUtlLHIrPUtlKSxvKXtsZXQgZT1vLmluZGV4T2YoIkAiKTtpZigtMSE9PWUpe2NvbnN0IHQ9by5zdWJzdHIoMCxlKTtvPW8uc3Vic3RyKGUrMSksZT10LmluZGV4T2YoIjoiKSwtMT09PWU/cis9bih0LCExKToocis9bih0LnN1YnN0cigwLGUpLCExKSxyKz0iOiIscis9bih0LnN1YnN0cihlKzEpLCExKSkscis9IkAifW89by50b0xvd2VyQ2FzZSgpLGU9by5pbmRleE9mKCI6IiksLTE9PT1lP3IrPW4obywhMSk6KHIrPW4oby5zdWJzdHIoMCxlKSwhMSkscis9by5zdWJzdHIoZSkpfWlmKGEpe2lmKGEubGVuZ3RoPj0zJiY0Nz09PWEuY2hhckNvZGVBdCgwKSYmNTg9PT1hLmNoYXJDb2RlQXQoMikpe2NvbnN0IGU9YS5jaGFyQ29kZUF0KDEpO2U+PTY1JiZlPD05MCYmKGE9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoZSszMil9OiR7YS5zdWJzdHIoMyl9YCl9ZWxzZSBpZihhLmxlbmd0aD49MiYmNTg9PT1hLmNoYXJDb2RlQXQoMSkpe2NvbnN0IGU9YS5jaGFyQ29kZUF0KDApO2U+PTY1JiZlPD05MCYmKGE9YCR7U3RyaW5nLmZyb21DaGFyQ29kZShlKzMyKX06JHthLnN1YnN0cigyKX1gKX1yKz1uKGEsITApfXJldHVybiBzJiYocis9Ij8iLHIrPW4ocywhMSkpLGwmJihyKz0iIyIscis9dD9sOldlKGwsITEpKSxyfWZ1bmN0aW9uIEplKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrSmUoZS5zdWJzdHIoMykpOmV9fWNvbnN0IFhlPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIFplKGUpe3JldHVybiBlLm1hdGNoKFhlKT9lLnJlcGxhY2UoWGUsKGU9PkplKGUpKSk6ZX1jbGFzcyBZZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGluZU51bWJlcj1lLHRoaXMuY29sdW1uPXR9d2l0aChlPXRoaXMubGluZU51bWJlcix0PXRoaXMuY29sdW1uKXtyZXR1cm4gZT09PXRoaXMubGluZU51bWJlciYmdD09PXRoaXMuY29sdW1uP3RoaXM6bmV3IFllKGUsdCl9ZGVsdGEoZT0wLHQ9MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrZSx0aGlzLmNvbHVtbit0KX1lcXVhbHMoZSl7cmV0dXJuIFllLmVxdWFscyh0aGlzLGUpfXN0YXRpYyBlcXVhbHMoZSx0KXtyZXR1cm4hZSYmIXR8fCEhZSYmISF0JiZlLmxpbmVOdW1iZXI9PT10LmxpbmVOdW1iZXImJmUuY29sdW1uPT09dC5jb2x1bW59aXNCZWZvcmUoZSl7cmV0dXJuIFllLmlzQmVmb3JlKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlKGUsdCl7cmV0dXJuIGUubGluZU51bWJlcjx0LmxpbmVOdW1iZXJ8fCEodC5saW5lTnVtYmVyPGUubGluZU51bWJlcikmJmUuY29sdW1uPHQuY29sdW1ufWlzQmVmb3JlT3JFcXVhbChlKXtyZXR1cm4gWWUuaXNCZWZvcmVPckVxdWFsKHRoaXMsZSl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbChlLHQpe3JldHVybiBlLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyfHwhKHQubGluZU51bWJlcjxlLmxpbmVOdW1iZXIpJiZlLmNvbHVtbjw9dC5jb2x1bW59c3RhdGljIGNvbXBhcmUoZSx0KXtjb25zdCBuPTB8ZS5saW5lTnVtYmVyLHI9MHx0LmxpbmVOdW1iZXI7aWYobj09PXIpe3JldHVybigwfGUuY29sdW1uKS0oMHx0LmNvbHVtbil9cmV0dXJuIG4tcn1jbG9uZSgpe3JldHVybiBuZXcgWWUodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdChlKXtyZXR1cm4gbmV3IFllKGUubGluZU51bWJlcixlLmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKGUpe3JldHVybiBlJiYibnVtYmVyIj09dHlwZW9mIGUubGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmNvbHVtbn19Y2xhc3MgUWV7Y29uc3RydWN0b3IoZSx0LG4scil7ZT5ufHxlPT09biYmdD5yPyh0aGlzLnN0YXJ0TGluZU51bWJlcj1uLHRoaXMuc3RhcnRDb2x1bW49cix0aGlzLmVuZExpbmVOdW1iZXI9ZSx0aGlzLmVuZENvbHVtbj10KToodGhpcy5zdGFydExpbmVOdW1iZXI9ZSx0aGlzLnN0YXJ0Q29sdW1uPXQsdGhpcy5lbmRMaW5lTnVtYmVyPW4sdGhpcy5lbmRDb2x1bW49cil9aXNFbXB0eSgpe3JldHVybiBRZS5pc0VtcHR5KHRoaXMpfXN0YXRpYyBpc0VtcHR5KGUpe3JldHVybiBlLnN0YXJ0TGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PWUuZW5kQ29sdW1ufWNvbnRhaW5zUG9zaXRpb24oZSl7cmV0dXJuIFFlLmNvbnRhaW5zUG9zaXRpb24odGhpcyxlKX1zdGF0aWMgY29udGFpbnNQb3NpdGlvbihlLHQpe3JldHVybiEodC5saW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmxpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5saW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuY29sdW1uPGUuc3RhcnRDb2x1bW4pJiYhKHQubGluZU51bWJlcj09PWUuZW5kTGluZU51bWJlciYmdC5jb2x1bW4+ZS5lbmRDb2x1bW4pKX1zdGF0aWMgc3RyaWN0Q29udGFpbnNQb3NpdGlvbihlLHQpe3JldHVybiEodC5saW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmxpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyKSYmKCEodC5saW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuY29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmxpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuY29sdW1uPj1lLmVuZENvbHVtbikpfWNvbnRhaW5zUmFuZ2UoZSl7cmV0dXJuIFFlLmNvbnRhaW5zUmFuZ2UodGhpcyxlKX1zdGF0aWMgY29udGFpbnNSYW5nZShlLHQpe3JldHVybiEodC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPmUuZW5kTGluZU51bWJlcikmJighKHQuc3RhcnRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW48ZS5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPT09ZS5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj5lLmVuZENvbHVtbikpKX1zdHJpY3RDb250YWluc1JhbmdlKGUpe3JldHVybiBRZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsZSl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UoZSx0KXtyZXR1cm4hKHQuc3RhcnRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXJ8fHQuZW5kTGluZU51bWJlcj5lLmVuZExpbmVOdW1iZXIpJiYoISh0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPD1lLnN0YXJ0Q29sdW1uKSYmISh0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPj1lLmVuZENvbHVtbikpKX1wbHVzUmFuZ2UoZSl7cmV0dXJuIFFlLnBsdXNSYW5nZSh0aGlzLGUpfXN0YXRpYyBwbHVzUmFuZ2UoZSx0KXtsZXQgbixyLGksbztyZXR1cm4gdC5zdGFydExpbmVOdW1iZXI8ZS5zdGFydExpbmVOdW1iZXI/KG49dC5zdGFydExpbmVOdW1iZXIscj10LnN0YXJ0Q29sdW1uKTp0LnN0YXJ0TGluZU51bWJlcj09PWUuc3RhcnRMaW5lTnVtYmVyPyhuPXQuc3RhcnRMaW5lTnVtYmVyLHI9TWF0aC5taW4odC5zdGFydENvbHVtbixlLnN0YXJ0Q29sdW1uKSk6KG49ZS5zdGFydExpbmVOdW1iZXIscj1lLnN0YXJ0Q29sdW1uKSx0LmVuZExpbmVOdW1iZXI+ZS5lbmRMaW5lTnVtYmVyPyhpPXQuZW5kTGluZU51bWJlcixvPXQuZW5kQ29sdW1uKTp0LmVuZExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXI/KGk9dC5lbmRMaW5lTnVtYmVyLG89TWF0aC5tYXgodC5lbmRDb2x1bW4sZS5lbmRDb2x1bW4pKTooaT1lLmVuZExpbmVOdW1iZXIsbz1lLmVuZENvbHVtbiksbmV3IFFlKG4scixpLG8pfWludGVyc2VjdFJhbmdlcyhlKXtyZXR1cm4gUWUuaW50ZXJzZWN0UmFuZ2VzKHRoaXMsZSl9c3RhdGljIGludGVyc2VjdFJhbmdlcyhlLHQpe2xldCBuPWUuc3RhcnRMaW5lTnVtYmVyLHI9ZS5zdGFydENvbHVtbixpPWUuZW5kTGluZU51bWJlcixvPWUuZW5kQ29sdW1uLGE9dC5zdGFydExpbmVOdW1iZXIscz10LnN0YXJ0Q29sdW1uLGw9dC5lbmRMaW5lTnVtYmVyLGM9dC5lbmRDb2x1bW47cmV0dXJuIG48YT8obj1hLHI9cyk6bj09PWEmJihyPU1hdGgubWF4KHIscykpLGk+bD8oaT1sLG89Yyk6aT09PWwmJihvPU1hdGgubWluKG8sYykpLG4+aXx8bj09PWkmJnI+bz9udWxsOm5ldyBRZShuLHIsaSxvKX1lcXVhbHNSYW5nZShlKXtyZXR1cm4gUWUuZXF1YWxzUmFuZ2UodGhpcyxlKX1zdGF0aWMgZXF1YWxzUmFuZ2UoZSx0KXtyZXR1cm4hIWUmJiEhdCYmZS5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmZS5zdGFydENvbHVtbj09PXQuc3RhcnRDb2x1bW4mJmUuZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmZS5lbmRDb2x1bW49PT10LmVuZENvbHVtbn1nZXRFbmRQb3NpdGlvbigpe3JldHVybiBRZS5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24oZSl7cmV0dXJuIG5ldyBZZShlLmVuZExpbmVOdW1iZXIsZS5lbmRDb2x1bW4pfWdldFN0YXJ0UG9zaXRpb24oKXtyZXR1cm4gUWUuZ2V0U3RhcnRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0U3RhcnRQb3NpdGlvbihlKXtyZXR1cm4gbmV3IFllKGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLmVuZExpbmVOdW1iZXIrIiwiK3RoaXMuZW5kQ29sdW1uKyJdIn1zZXRFbmRQb3NpdGlvbihlLHQpe3JldHVybiBuZXcgUWUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbixlLHQpfXNldFN0YXJ0UG9zaXRpb24oZSx0KXtyZXR1cm4gbmV3IFFlKGUsdCx0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiBRZS5jb2xsYXBzZVRvU3RhcnQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9TdGFydChlKXtyZXR1cm4gbmV3IFFlKGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4sZS5zdGFydExpbmVOdW1iZXIsZS5zdGFydENvbHVtbil9c3RhdGljIGZyb21Qb3NpdGlvbnMoZSx0PWUpe3JldHVybiBuZXcgUWUoZS5saW5lTnVtYmVyLGUuY29sdW1uLHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGxpZnQoZSl7cmV0dXJuIGU/bmV3IFFlKGUuc3RhcnRMaW5lTnVtYmVyLGUuc3RhcnRDb2x1bW4sZS5lbmRMaW5lTnVtYmVyLGUuZW5kQ29sdW1uKTpudWxsfXN0YXRpYyBpc0lSYW5nZShlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLnN0YXJ0TGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnN0YXJ0Q29sdW1uJiYibnVtYmVyIj09dHlwZW9mIGUuZW5kTGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLmVuZENvbHVtbn1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nT3JUb3VjaGluZyhlLHQpe3JldHVybiEoZS5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxlLmVuZExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmZS5lbmRDb2x1bW48dC5zdGFydENvbHVtbikmJiEodC5lbmRMaW5lTnVtYmVyPGUuc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1lLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48ZS5zdGFydENvbHVtbil9c3RhdGljIGFyZUludGVyc2VjdGluZyhlLHQpe3JldHVybiEoZS5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxlLmVuZExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmZS5lbmRDb2x1bW48PXQuc3RhcnRDb2x1bW4pJiYhKHQuZW5kTGluZU51bWJlcjxlLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09ZS5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPD1lLnN0YXJ0Q29sdW1uKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKGUsdCl7aWYoZSYmdCl7Y29uc3Qgbj0wfGUuc3RhcnRMaW5lTnVtYmVyLHI9MHx0LnN0YXJ0TGluZU51bWJlcjtpZihuPT09cil7Y29uc3Qgbj0wfGUuc3RhcnRDb2x1bW4scj0wfHQuc3RhcnRDb2x1bW47aWYobj09PXIpe2NvbnN0IG49MHxlLmVuZExpbmVOdW1iZXIscj0wfHQuZW5kTGluZU51bWJlcjtpZihuPT09cil7cmV0dXJuKDB8ZS5lbmRDb2x1bW4pLSgwfHQuZW5kQ29sdW1uKX1yZXR1cm4gbi1yfXJldHVybiBuLXJ9cmV0dXJuIG4tcn1yZXR1cm4oZT8xOjApLSh0PzE6MCl9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ0VuZHMoZSx0KXtyZXR1cm4gZS5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyP2UuZW5kQ29sdW1uPT09dC5lbmRDb2x1bW4/ZS5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlcj9lLnN0YXJ0Q29sdW1uLXQuc3RhcnRDb2x1bW46ZS5zdGFydExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXI6ZS5lbmRDb2x1bW4tdC5lbmRDb2x1bW46ZS5lbmRMaW5lTnVtYmVyLXQuZW5kTGluZU51bWJlcn1zdGF0aWMgc3BhbnNNdWx0aXBsZUxpbmVzKGUpe3JldHVybiBlLmVuZExpbmVOdW1iZXI+ZS5zdGFydExpbmVOdW1iZXJ9dG9KU09OKCl7cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIGV0KGUsdCxuLHIpe3JldHVybiBuZXcgcGUoZSx0LG4pLkNvbXB1dGVEaWZmKHIpfWNsYXNzIHR0e2NvbnN0cnVjdG9yKGUpe2NvbnN0IHQ9W10sbj1bXTtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspdFtyXT1hdChlW3JdLDEpLG5bcl09c3QoZVtyXSwxKTt0aGlzLmxpbmVzPWUsdGhpcy5fc3RhcnRDb2x1bW5zPXQsdGhpcy5fZW5kQ29sdW1ucz1ufWdldEVsZW1lbnRzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxuPXRoaXMubGluZXMubGVuZ3RoO3Q8bjt0KyspZVt0XT10aGlzLmxpbmVzW3RdLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbdF0tMSx0aGlzLl9lbmRDb2x1bW5zW3RdLTEpO3JldHVybiBlfWdldFN0cmljdEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMubGluZXNbZV19Z2V0U3RhcnRMaW5lTnVtYmVyKGUpe3JldHVybiBlKzF9Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4gZSsxfWNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQsbil7Y29uc3Qgcj1bXSxpPVtdLG89W107bGV0IGE9MDtmb3IobGV0IHM9dDtzPD1uO3MrKyl7Y29uc3QgdD10aGlzLmxpbmVzW3NdLG49ZT90aGlzLl9zdGFydENvbHVtbnNbc106MSxsPWU/dGhpcy5fZW5kQ29sdW1uc1tzXTp0Lmxlbmd0aCsxO2ZvcihsZXQgZT1uO2U8bDtlKyspclthXT10LmNoYXJDb2RlQXQoZS0xKSxpW2FdPXMrMSxvW2FdPWUsYSsrfXJldHVybiBuZXcgbnQocixpLG8pfX1jbGFzcyBudHtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5fY2hhckNvZGVzPWUsdGhpcy5fbGluZU51bWJlcnM9dCx0aGlzLl9jb2x1bW5zPW59Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fY2hhckNvZGVzfWdldFN0YXJ0TGluZU51bWJlcihlKXtyZXR1cm4gdGhpcy5fbGluZU51bWJlcnNbZV19Z2V0U3RhcnRDb2x1bW4oZSl7cmV0dXJuIHRoaXMuX2NvbHVtbnNbZV19Z2V0RW5kTGluZU51bWJlcihlKXtyZXR1cm4gdGhpcy5fbGluZU51bWJlcnNbZV19Z2V0RW5kQ29sdW1uKGUpe3JldHVybiB0aGlzLl9jb2x1bW5zW2VdKzF9fWNsYXNzIHJ0e2NvbnN0cnVjdG9yKGUsdCxuLHIsaSxvLGEscyl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj1lLHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1yLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9aSx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49byx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1hLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49c31zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UoZSx0LG4pe2xldCByLGksbyxhLHMsbCxjLHU7cmV0dXJuIDA9PT1lLm9yaWdpbmFsTGVuZ3RoPyhyPTAsaT0wLG89MCxhPTApOihyPXQuZ2V0U3RhcnRMaW5lTnVtYmVyKGUub3JpZ2luYWxTdGFydCksaT10LmdldFN0YXJ0Q29sdW1uKGUub3JpZ2luYWxTdGFydCksbz10LmdldEVuZExpbmVOdW1iZXIoZS5vcmlnaW5hbFN0YXJ0K2Uub3JpZ2luYWxMZW5ndGgtMSksYT10LmdldEVuZENvbHVtbihlLm9yaWdpbmFsU3RhcnQrZS5vcmlnaW5hbExlbmd0aC0xKSksMD09PWUubW9kaWZpZWRMZW5ndGg/KHM9MCxsPTAsYz0wLHU9MCk6KHM9bi5nZXRTdGFydExpbmVOdW1iZXIoZS5tb2RpZmllZFN0YXJ0KSxsPW4uZ2V0U3RhcnRDb2x1bW4oZS5tb2RpZmllZFN0YXJ0KSxjPW4uZ2V0RW5kTGluZU51bWJlcihlLm1vZGlmaWVkU3RhcnQrZS5tb2RpZmllZExlbmd0aC0xKSx1PW4uZ2V0RW5kQ29sdW1uKGUubW9kaWZpZWRTdGFydCtlLm1vZGlmaWVkTGVuZ3RoLTEpKSxuZXcgcnQocixpLG8sYSxzLGwsYyx1KX19Y2xhc3MgaXR7Y29uc3RydWN0b3IoZSx0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9dCx0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KGUsdCxuLHIsaSxvLGEpe2xldCBzLGwsYyx1LGg7aWYoMD09PXQub3JpZ2luYWxMZW5ndGg/KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KS0xLGw9MCk6KHM9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxsPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSksMD09PXQubW9kaWZpZWRMZW5ndGg/KGM9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KS0xLHU9MCk6KGM9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSx1PXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSksbyYmdC5vcmlnaW5hbExlbmd0aD4wJiZ0Lm9yaWdpbmFsTGVuZ3RoPDIwJiZ0Lm1vZGlmaWVkTGVuZ3RoPjAmJnQubW9kaWZpZWRMZW5ndGg8MjAmJmkoKSl7Y29uc3Qgbz1uLmNyZWF0ZUNoYXJTZXF1ZW5jZShlLHQub3JpZ2luYWxTdGFydCx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxzPXIuY3JlYXRlQ2hhclNlcXVlbmNlKGUsdC5tb2RpZmllZFN0YXJ0LHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO2xldCBsPWV0KG8scyxpLCEwKS5jaGFuZ2VzO2EmJihsPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IHQ9W2VbMF1dO2xldCBuPXRbMF07Zm9yKGxldCByPTEsaT1lLmxlbmd0aDtyPGk7cisrKXtjb25zdCBpPWVbcl0sbz1pLm9yaWdpbmFsU3RhcnQtKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoKSxhPWkubW9kaWZpZWRTdGFydC0obi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpO01hdGgubWluKG8sYSk8Mz8obi5vcmlnaW5hbExlbmd0aD1pLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1pLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aC1uLm1vZGlmaWVkU3RhcnQpOih0LnB1c2goaSksbj1pKX1yZXR1cm4gdH0obCkpLGg9W107Zm9yKGxldCBlPTAsdD1sLmxlbmd0aDtlPHQ7ZSsrKWgucHVzaChydC5jcmVhdGVGcm9tRGlmZkNoYW5nZShsW2VdLG8scykpfXJldHVybiBuZXcgaXQocyxsLGMsdSxoKX19Y2xhc3Mgb3R7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzPW4uc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcz1uLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZT1uLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmY9bi5zaG91bGRNYWtlUHJldHR5RGlmZix0aGlzLm9yaWdpbmFsTGluZXM9ZSx0aGlzLm1vZGlmaWVkTGluZXM9dCx0aGlzLm9yaWdpbmFsPW5ldyB0dChlKSx0aGlzLm1vZGlmaWVkPW5ldyB0dCh0KSx0aGlzLmNvbnRpbnVlTGluZURpZmY9bHQobi5tYXhDb21wdXRhdGlvblRpbWUpLHRoaXMuY29udGludWVDaGFyRGlmZj1sdCgwPT09bi5tYXhDb21wdXRhdGlvblRpbWU/MDpNYXRoLm1pbihuLm1heENvbXB1dGF0aW9uVGltZSw1ZTMpKX1jb21wdXRlRGlmZigpe2lmKDE9PT10aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCYmMD09PXRoaXMub3JpZ2luYWwubGluZXNbMF0ubGVuZ3RoKXJldHVybiAxPT09dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD97cXVpdEVhcmx5OiExLGNoYW5nZXM6W119OntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjEsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgsY2hhckNoYW5nZXM6W3ttb2RpZmllZEVuZENvbHVtbjowLG1vZGlmaWVkRW5kTGluZU51bWJlcjowLG1vZGlmaWVkU3RhcnRDb2x1bW46MCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjowLG9yaWdpbmFsRW5kQ29sdW1uOjAsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjAsb3JpZ2luYWxTdGFydENvbHVtbjowLG9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjB9XX1dfTtpZigxPT09dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgmJjA9PT10aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aClyZXR1cm57cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjp0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjoxLGNoYXJDaGFuZ2VzOlt7bW9kaWZpZWRFbmRDb2x1bW46MCxtb2RpZmllZEVuZExpbmVOdW1iZXI6MCxtb2RpZmllZFN0YXJ0Q29sdW1uOjAsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MCxvcmlnaW5hbEVuZENvbHVtbjowLG9yaWdpbmFsRW5kTGluZU51bWJlcjowLG9yaWdpbmFsU3RhcnRDb2x1bW46MCxvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjowfV19XX07Y29uc3QgZT1ldCh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLHQ9ZS5jaGFuZ2VzLG49ZS5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3QgZT1bXTtmb3IobGV0IG49MCxyPXQubGVuZ3RoO248cjtuKyspZS5wdXNoKGl0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdFtuXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6bixjaGFuZ2VzOmV9fWNvbnN0IHI9W107bGV0IGk9MCxvPTA7Zm9yKGxldCBlPS0xLG49dC5sZW5ndGg7ZTxuO2UrKyl7Y29uc3QgYT1lKzE8bj90W2UrMV06bnVsbCxzPWE/YS5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsbD1hP2EubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7aTxzJiZvPGw7KXtjb25zdCBlPXRoaXMub3JpZ2luYWxMaW5lc1tpXSx0PXRoaXMubW9kaWZpZWRMaW5lc1tvXTtpZihlIT09dCl7e2xldCBuPWF0KGUsMSksYT1hdCh0LDEpO2Zvcig7bj4xJiZhPjE7KXtpZihlLmNoYXJDb2RlQXQobi0yKSE9PXQuY2hhckNvZGVBdChhLTIpKWJyZWFrO24tLSxhLS19KG4+MXx8YT4xKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGkrMSwxLG4sbysxLDEsYSl9e2xldCBuPXN0KGUsMSksYT1zdCh0LDEpO2NvbnN0IHM9ZS5sZW5ndGgrMSxsPXQubGVuZ3RoKzE7Zm9yKDtuPHMmJmE8bDspe2lmKGUuY2hhckNvZGVBdChuLTEpIT09ZS5jaGFyQ29kZUF0KGEtMSkpYnJlYWs7bisrLGErK30objxzfHxhPGwpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIsaSsxLG4scyxvKzEsYSxsKX19aSsrLG8rK31hJiYoci5wdXNoKGl0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsYSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLGkrPWEub3JpZ2luYWxMZW5ndGgsbys9YS5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTpuLGNoYW5nZXM6cn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSl7aWYodGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoZSx0LG4scixpLG8sYSkpcmV0dXJuO2xldCBzO3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiYocz1bbmV3IHJ0KHQsbix0LHIsaSxvLGksYSldKSxlLnB1c2gobmV3IGl0KHQsdCxpLGkscykpfV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShlLHQsbixyLGksbyxhKXtjb25zdCBzPWUubGVuZ3RoO2lmKDA9PT1zKXJldHVybiExO2NvbnN0IGw9ZVtzLTFdO3JldHVybiAwIT09bC5vcmlnaW5hbEVuZExpbmVOdW1iZXImJjAhPT1sLm1vZGlmaWVkRW5kTGluZU51bWJlciYmKGwub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzE9PT10JiZsLm1vZGlmaWVkRW5kTGluZU51bWJlcisxPT09aSYmKGwub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXQsbC5tb2RpZmllZEVuZExpbmVOdW1iZXI9aSx0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcyYmbC5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBydCh0LG4sdCxyLGksbyxpLGEpKSwhMCkpfX1mdW5jdGlvbiBhdChlLHQpe2NvbnN0IG49ZnVuY3Rpb24oZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWUuY2hhckNvZGVBdCh0KTtpZigzMiE9PW4mJjkhPT1uKXJldHVybiB0fXJldHVybi0xfShlKTtyZXR1cm4tMT09PW4/dDpuKzF9ZnVuY3Rpb24gc3QoZSx0KXtjb25zdCBuPWZ1bmN0aW9uKGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IG49dDtuPj0wO24tLSl7Y29uc3QgdD1lLmNoYXJDb2RlQXQobik7aWYoMzIhPT10JiY5IT09dClyZXR1cm4gbn1yZXR1cm4tMX0oZSk7cmV0dXJuLTE9PT1uP3Q6bisyfWZ1bmN0aW9uIGx0KGUpe2lmKDA9PT1lKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfWZ1bmN0aW9uIGN0KGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6MHxlfWZ1bmN0aW9uIHV0KGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTowfGV9Y2xhc3MgaHR7Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZXM9ZSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkoZS5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKGUsdCl7ZT11dChlKTtjb25zdCBuPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW0saT10Lmxlbmd0aDtyZXR1cm4gMCE9PWkmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgraSksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlKSxlK2kpLHRoaXMudmFsdWVzLnNldCh0LGUpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9c2V0VmFsdWUoZSx0KXtyZXR1cm4gZT11dChlKSx0PXV0KHQpLHRoaXMudmFsdWVzW2VdIT09dCYmKHRoaXMudmFsdWVzW2VdPXQsZS0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1lLTEpLCEwKX1yZW1vdmVWYWx1ZXMoZSx0KXtlPXV0KGUpLHQ9dXQodCk7Y29uc3Qgbj10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtO2lmKGU+PW4ubGVuZ3RoKXJldHVybiExO2NvbnN0IGk9bi5sZW5ndGgtZTtyZXR1cm4gdD49aSYmKHQ9aSksMCE9PXQmJih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgtdCksdGhpcy52YWx1ZXMuc2V0KG4uc3ViYXJyYXkoMCxlKSwwKSx0aGlzLnZhbHVlcy5zZXQobi5zdWJhcnJheShlK3QpLGUpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLGUtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09ZS0xKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9Z2V0VG90YWxTdW0oKXtyZXR1cm4gMD09PXRoaXMudmFsdWVzLmxlbmd0aD8wOnRoaXMuX2dldFByZWZpeFN1bSh0aGlzLnZhbHVlcy5sZW5ndGgtMSl9Z2V0UHJlZml4U3VtKGUpe3JldHVybiBlPDA/MDooZT11dChlKSx0aGlzLl9nZXRQcmVmaXhTdW0oZSkpfV9nZXRQcmVmaXhTdW0oZSl7aWYoZTw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKXJldHVybiB0aGlzLnByZWZpeFN1bVtlXTtsZXQgdD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMTswPT09dCYmKHRoaXMucHJlZml4U3VtWzBdPXRoaXMudmFsdWVzWzBdLHQrKyksZT49dGhpcy52YWx1ZXMubGVuZ3RoJiYoZT10aGlzLnZhbHVlcy5sZW5ndGgtMSk7Zm9yKGxldCBuPXQ7bjw9ZTtuKyspdGhpcy5wcmVmaXhTdW1bbl09dGhpcy5wcmVmaXhTdW1bbi0xXSt0aGlzLnZhbHVlc1tuXTtyZXR1cm4gdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPU1hdGgubWF4KHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSxlKSx0aGlzLnByZWZpeFN1bVtlXX1nZXRJbmRleE9mKGUpe2U9TWF0aC5mbG9vcihlKSx0aGlzLmdldFRvdGFsU3VtKCk7bGV0IHQ9MCxuPXRoaXMudmFsdWVzLmxlbmd0aC0xLHI9MCxpPTAsbz0wO2Zvcig7dDw9bjspaWYocj10KyhuLXQpLzJ8MCxpPXRoaXMucHJlZml4U3VtW3JdLG89aS10aGlzLnZhbHVlc1tyXSxlPG8pbj1yLTE7ZWxzZXtpZighKGU+PWkpKWJyZWFrO3Q9cisxfXJldHVybiBuZXcgZnQocixlLW8pfX1jbGFzcyBmdHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaW5kZXg9ZSx0aGlzLnJlbWFpbmRlcj10LHRoaXMuX3ByZWZpeFN1bUluZGV4T2ZSZXN1bHRCcmFuZD12b2lkIDAsdGhpcy5pbmRleD1lLHRoaXMucmVtYWluZGVyPXR9fWNvbnN0IGR0PWZ1bmN0aW9uKGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgbiBvZiJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iKWUuaW5kZXhPZihuKT49MHx8KHQrPSJcXCIrbik7cmV0dXJuIHQrPSJcXHNdKykiLG5ldyBSZWdFeHAodCwiZyIpfSgpO2NvbnN0IG10PXttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9O2Z1bmN0aW9uIGd0KGUsdCxuLHIsaT1tdCl7aWYobi5sZW5ndGg+aS5tYXhMZW4pe2xldCBvPWUtaS5tYXhMZW4vMjtyZXR1cm4gbzwwP289MDpyKz1vLGd0KGUsdCxuPW4uc3Vic3RyaW5nKG8sZStpLm1heExlbi8yKSxyLGkpfWNvbnN0IG89RGF0ZS5ub3coKSxhPWUtMS1yO2xldCBzPS0xLGw9bnVsbDtmb3IobGV0IGU9MTshKERhdGUubm93KCktbz49aS50aW1lQnVkZ2V0KTtlKyspe2NvbnN0IHI9YS1pLndpbmRvd1NpemUqZTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLHIpO2NvbnN0IG89cHQodCxuLGEscyk7aWYoIW8mJmwpYnJlYWs7aWYobD1vLHI8PTApYnJlYWs7cz1yfWlmKGwpe2NvbnN0IGU9e3dvcmQ6bFswXSxzdGFydENvbHVtbjpyKzErbC5pbmRleCxlbmRDb2x1bW46cisxK2wuaW5kZXgrbFswXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcHQoZSx0LG4scil7bGV0IGk7Zm9yKDtpPWUuZXhlYyh0KTspe2NvbnN0IHQ9aS5pbmRleHx8MDtpZih0PD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gaTtpZihyPjAmJnQ+cilyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH1jbGFzcyBidHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PWN0KGUpO3RoaXMuX2RlZmF1bHRWYWx1ZT10LHRoaXMuX2FzY2lpTWFwPWJ0Ll9jcmVhdGVBc2NpaU1hcCh0KSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKGUpe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IG49MDtuPDI1NjtuKyspdFtuXT1lO3JldHVybiB0fXNldChlLHQpe2NvbnN0IG49Y3QodCk7ZT49MCYmZTwyNTY/dGhpcy5fYXNjaWlNYXBbZV09bjp0aGlzLl9tYXAuc2V0KGUsbil9Z2V0KGUpe3JldHVybiBlPj0wJiZlPDI1Nj90aGlzLl9hc2NpaU1hcFtlXTp0aGlzLl9tYXAuZ2V0KGUpfHx0aGlzLl9kZWZhdWx0VmFsdWV9fWNsYXNzIHZ0e2NvbnN0cnVjdG9yKGUsdCxuKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBpPTAsbz1lKnQ7aTxvO2krKylyW2ldPW47dGhpcy5fZGF0YT1yLHRoaXMucm93cz1lLHRoaXMuY29scz10fWdldChlLHQpe3JldHVybiB0aGlzLl9kYXRhW2UqdGhpcy5jb2xzK3RdfXNldChlLHQsbil7dGhpcy5fZGF0YVtlKnRoaXMuY29scyt0XT1ufX1jbGFzcyB5dHtjb25zdHJ1Y3RvcihlKXtsZXQgdD0wLG49MDtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0W2ksbyxhXT1lW3JdO28+dCYmKHQ9byksaT5uJiYobj1pKSxhPm4mJihuPWEpfXQrKyxuKys7Y29uc3Qgcj1uZXcgdnQobix0LDApO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7Y29uc3RbbixpLG9dPWVbdF07ci5zZXQobixpLG8pfXRoaXMuX3N0YXRlcz1yLHRoaXMuX21heENoYXJDb2RlPXR9bmV4dFN0YXRlKGUsdCl7cmV0dXJuIHQ8MHx8dD49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KGUsdCl9fWxldCBDdD1udWxsO2xldCB3dD1udWxsO2NsYXNzIF90e3N0YXRpYyBfY3JlYXRlTGluayhlLHQsbixyLGkpe2xldCBvPWktMTtkb3tjb25zdCBuPXQuY2hhckNvZGVBdChvKTtpZigyIT09ZS5nZXQobikpYnJlYWs7by0tfXdoaWxlKG8+cik7aWYocj4wKXtjb25zdCBlPXQuY2hhckNvZGVBdChyLTEpLG49dC5jaGFyQ29kZUF0KG8pOyg0MD09PWUmJjQxPT09bnx8OTE9PT1lJiY5Mz09PW58fDEyMz09PWUmJjEyNT09PW4pJiZvLS19cmV0dXJue3JhbmdlOntzdGFydExpbmVOdW1iZXI6bixzdGFydENvbHVtbjpyKzEsZW5kTGluZU51bWJlcjpuLGVuZENvbHVtbjpvKzJ9LHVybDp0LnN1YnN0cmluZyhyLG8rMSl9fXN0YXRpYyBjb21wdXRlTGlua3MoZSx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT1DdCYmKEN0PW5ldyB5dChbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSksQ3R9KCkpe2NvbnN0IG49ZnVuY3Rpb24oKXtpZihudWxsPT09d3Qpe3d0PW5ldyBidCgwKTtjb25zdCBlPSIgXHQ8PidcIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApiI7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspd3Quc2V0KGUuY2hhckNvZGVBdCh0KSwxKTtjb25zdCB0PSIuLDsiO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXd0LnNldCh0LmNoYXJDb2RlQXQoZSksMil9cmV0dXJuIHd0fSgpLHI9W107Zm9yKGxldCBpPTEsbz1lLmdldExpbmVDb3VudCgpO2k8PW87aSsrKXtjb25zdCBvPWUuZ2V0TGluZUNvbnRlbnQoaSksYT1vLmxlbmd0aDtsZXQgcz0wLGw9MCxjPTAsdT0xLGg9ITEsZj0hMSxkPSExLG09ITE7Zm9yKDtzPGE7KXtsZXQgZT0hMTtjb25zdCBhPW8uY2hhckNvZGVBdChzKTtpZigxMz09PXUpe2xldCB0O3N3aXRjaChhKXtjYXNlIDQwOmg9ITAsdD0wO2JyZWFrO2Nhc2UgNDE6dD1oPzA6MTticmVhaztjYXNlIDkxOmQ9ITAsZj0hMCx0PTA7YnJlYWs7Y2FzZSA5MzpkPSExLHQ9Zj8wOjE7YnJlYWs7Y2FzZSAxMjM6bT0hMCx0PTA7YnJlYWs7Y2FzZSAxMjU6dD1tPzA6MTticmVhaztjYXNlIDM5OnQ9MzQ9PT1jfHw5Nj09PWM/MDoxO2JyZWFrO2Nhc2UgMzQ6dD0zOT09PWN8fDk2PT09Yz8wOjE7YnJlYWs7Y2FzZSA5Njp0PTM5PT09Y3x8MzQ9PT1jPzA6MTticmVhaztjYXNlIDQyOnQ9NDI9PT1jPzE6MDticmVhaztjYXNlIDEyNDp0PTEyND09PWM/MTowO2JyZWFrO2Nhc2UgMzI6dD1kPzA6MTticmVhaztkZWZhdWx0OnQ9bi5nZXQoYSl9MT09PXQmJihyLnB1c2goX3QuX2NyZWF0ZUxpbmsobixvLGksbCxzKSksZT0hMCl9ZWxzZSBpZigxMj09PXUpe2xldCB0OzkxPT09YT8oZj0hMCx0PTApOnQ9bi5nZXQoYSksMT09PXQ/ZT0hMDp1PTEzfWVsc2UgdT10Lm5leHRTdGF0ZSh1LGEpLDA9PT11JiYoZT0hMCk7ZSYmKHU9MSxoPSExLGY9ITEsbT0hMSxsPXMrMSxjPWEpLHMrK30xMz09PXUmJnIucHVzaChfdC5fY3JlYXRlTGluayhuLG8saSxsLGEpKX1yZXR1cm4gcn19Y2xhc3MgU3R7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VmFsdWVTZXQ9W1sidHJ1ZSIsImZhbHNlIl0sWyJUcnVlIiwiRmFsc2UiXSxbIlByaXZhdGUiLCJQdWJsaWMiLCJGcmllbmQiLCJSZWFkT25seSIsIlBhcnRpYWwiLCJQcm90ZWN0ZWQiLCJXcml0ZU9ubHkiXSxbInB1YmxpYyIsInByb3RlY3RlZCIsInByaXZhdGUiXV19bmF2aWdhdGVWYWx1ZVNldChlLHQsbixyLGkpe2lmKGUmJnQpe2NvbnN0IG49dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQodCxpKTtpZihuKXJldHVybntyYW5nZTplLHZhbHVlOm59fWlmKG4mJnIpe2NvbnN0IGU9dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQocixpKTtpZihlKXJldHVybntyYW5nZTpuLHZhbHVlOmV9fXJldHVybiBudWxsfWRvTmF2aWdhdGVWYWx1ZVNldChlLHQpe2NvbnN0IG49dGhpcy5udW1iZXJSZXBsYWNlKGUsdCk7cmV0dXJuIG51bGwhPT1uP246dGhpcy50ZXh0UmVwbGFjZShlLHQpfW51bWJlclJlcGxhY2UoZSx0KXtjb25zdCBuPU1hdGgucG93KDEwLGUubGVuZ3RoLShlLmxhc3RJbmRleE9mKCIuIikrMSkpO2xldCByPU51bWJlcihlKSxpPXBhcnNlRmxvYXQoZSk7cmV0dXJuIGlzTmFOKHIpfHxpc05hTihpKXx8ciE9PWk/bnVsbDowIT09cnx8dD8ocj1NYXRoLmZsb29yKHIqbikscis9dD9uOi1uLFN0cmluZyhyL24pKTpudWxsfXRleHRSZXBsYWNlKGUsdCl7cmV0dXJuIHRoaXMudmFsdWVTZXRzUmVwbGFjZSh0aGlzLl9kZWZhdWx0VmFsdWVTZXQsZSx0KX12YWx1ZVNldHNSZXBsYWNlKGUsdCxuKXtsZXQgcj1udWxsO2ZvcihsZXQgaT0wLG89ZS5sZW5ndGg7bnVsbD09PXImJmk8bztpKyspcj10aGlzLnZhbHVlU2V0UmVwbGFjZShlW2ldLHQsbik7cmV0dXJuIHJ9dmFsdWVTZXRSZXBsYWNlKGUsdCxuKXtsZXQgcj1lLmluZGV4T2YodCk7cmV0dXJuIHI+PTA/KHIrPW4/MTotMSxyPDA/cj1lLmxlbmd0aC0xOnIlPWUubGVuZ3RoLGVbcl0pOm51bGx9fVN0LklOU1RBTkNFPW5ldyBTdDtjb25zdCBBdD1PYmplY3QuZnJlZXplKChmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pKTt2YXIgRXQ7IWZ1bmN0aW9uKGUpe2UuaXNDYW5jZWxsYXRpb25Ub2tlbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuTm9uZXx8dD09PWUuQ2FuY2VsbGVkfHwodCBpbnN0YW5jZW9mIE50fHwhKCF0fHwib2JqZWN0IiE9dHlwZW9mIHQpJiYoImJvb2xlYW4iPT10eXBlb2YgdC5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCYmImZ1bmN0aW9uIj09dHlwZW9mIHQub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQpKX0sZS5Ob25lPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiExLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOlAuTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOkF0fSl9KEV0fHwoRXQ9e30pKTtjbGFzcyBOdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/QXQ6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBVKSx0aGlzLl9lbWl0dGVyLmV2ZW50KX1kaXNwb3NlKCl7dGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZGlzcG9zZSgpLHRoaXMuX2VtaXR0ZXI9bnVsbCl9fWNsYXNzIHh0e2NvbnN0cnVjdG9yKGUpe3RoaXMuX3Rva2VuPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9ZSYmZS5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCh0aGlzLmNhbmNlbCx0aGlzKX1nZXQgdG9rZW4oKXtyZXR1cm4gdGhpcy5fdG9rZW58fCh0aGlzLl90b2tlbj1uZXcgTnQpLHRoaXMuX3Rva2VufWNhbmNlbCgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgTnQmJnRoaXMuX3Rva2VuLmNhbmNlbCgpOnRoaXMuX3Rva2VuPUV0LkNhbmNlbGxlZH1kaXNwb3NlKGU9ITEpe2UmJnRoaXMuY2FuY2VsKCksdGhpcy5fcGFyZW50TGlzdGVuZXImJnRoaXMuX3BhcmVudExpc3RlbmVyLmRpc3Bvc2UoKSx0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIE50JiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49RXQuTm9uZX19Y2xhc3MgTHR7Y29uc3RydWN0b3IoKXt0aGlzLl9rZXlDb2RlVG9TdHI9W10sdGhpcy5fc3RyVG9LZXlDb2RlPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVmaW5lKGUsdCl7dGhpcy5fa2V5Q29kZVRvU3RyW2VdPXQsdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV09ZX1rZXlDb2RlVG9TdHIoZSl7cmV0dXJuIHRoaXMuX2tleUNvZGVUb1N0cltlXX1zdHJUb0tleUNvZGUoZSl7cmV0dXJuIHRoaXMuX3N0clRvS2V5Q29kZVtlLnRvTG93ZXJDYXNlKCldfHwwfX1jb25zdCBrdD1uZXcgTHQsVHQ9bmV3IEx0LE90PW5ldyBMdCxNdD1uZXcgQXJyYXkoMjMwKSxJdD1PYmplY3QuY3JlYXRlKG51bGwpLFJ0PU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIFB0OyFmdW5jdGlvbigpe2NvbnN0IGU9IiIsdD1bWzAsMSwwLCJOb25lIiwwLCJ1bmtub3duIiwwLCJWS19VTktOT1dOIixlLGVdLFswLDEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDIsIlN1cGVyIiwwLGUsMCxlLGUsZV0sWzAsMSwzLCJGbiIsMCxlLDAsZSxlLGVdLFswLDEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzAsMSw1LCJTdXNwZW5kIiwwLGUsMCxlLGUsZV0sWzAsMSw2LCJSZXN1bWUiLDAsZSwwLGUsZSxlXSxbMCwxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzAsMSw4LCJTbGVlcCIsMCxlLDAsIlZLX1NMRUVQIixlLGVdLFswLDEsOSwiV2FrZVVwIiwwLGUsMCxlLGUsZV0sWzMxLDAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsZSxlXSxbMzIsMCwxMSwiS2V5QiIsMzIsIkIiLDY2LCJWS19CIixlLGVdLFszMywwLDEyLCJLZXlDIiwzMywiQyIsNjcsIlZLX0MiLGUsZV0sWzM0LDAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsZSxlXSxbMzUsMCwxNCwiS2V5RSIsMzUsIkUiLDY5LCJWS19FIixlLGVdLFszNiwwLDE1LCJLZXlGIiwzNiwiRiIsNzAsIlZLX0YiLGUsZV0sWzM3LDAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsZSxlXSxbMzgsMCwxNywiS2V5SCIsMzgsIkgiLDcyLCJWS19IIixlLGVdLFszOSwwLDE4LCJLZXlJIiwzOSwiSSIsNzMsIlZLX0kiLGUsZV0sWzQwLDAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsZSxlXSxbNDEsMCwyMCwiS2V5SyIsNDEsIksiLDc1LCJWS19LIixlLGVdLFs0MiwwLDIxLCJLZXlMIiw0MiwiTCIsNzYsIlZLX0wiLGUsZV0sWzQzLDAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsZSxlXSxbNDQsMCwyMywiS2V5TiIsNDQsIk4iLDc4LCJWS19OIixlLGVdLFs0NSwwLDI0LCJLZXlPIiw0NSwiTyIsNzksIlZLX08iLGUsZV0sWzQ2LDAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsZSxlXSxbNDcsMCwyNiwiS2V5USIsNDcsIlEiLDgxLCJWS19RIixlLGVdLFs0OCwwLDI3LCJLZXlSIiw0OCwiUiIsODIsIlZLX1IiLGUsZV0sWzQ5LDAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsZSxlXSxbNTAsMCwyOSwiS2V5VCIsNTAsIlQiLDg0LCJWS19UIixlLGVdLFs1MSwwLDMwLCJLZXlVIiw1MSwiVSIsODUsIlZLX1UiLGUsZV0sWzUyLDAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsZSxlXSxbNTMsMCwzMiwiS2V5VyIsNTMsIlciLDg3LCJWS19XIixlLGVdLFs1NCwwLDMzLCJLZXlYIiw1NCwiWCIsODgsIlZLX1giLGUsZV0sWzU1LDAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsZSxlXSxbNTYsMCwzNSwiS2V5WiIsNTYsIloiLDkwLCJWS19aIixlLGVdLFsyMiwwLDM2LCJEaWdpdDEiLDIyLCIxIiw0OSwiVktfMSIsZSxlXSxbMjMsMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLGUsZV0sWzI0LDAsMzgsIkRpZ2l0MyIsMjQsIjMiLDUxLCJWS18zIixlLGVdLFsyNSwwLDM5LCJEaWdpdDQiLDI1LCI0Iiw1MiwiVktfNCIsZSxlXSxbMjYsMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLGUsZV0sWzI3LDAsNDEsIkRpZ2l0NiIsMjcsIjYiLDU0LCJWS182IixlLGVdLFsyOCwwLDQyLCJEaWdpdDciLDI4LCI3Iiw1NSwiVktfNyIsZSxlXSxbMjksMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLGUsZV0sWzMwLDAsNDQsIkRpZ2l0OSIsMzAsIjkiLDU3LCJWS185IixlLGVdLFsyMSwwLDQ1LCJEaWdpdDAiLDIxLCIwIiw0OCwiVktfMCIsZSxlXSxbMywxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzksMSw0NywiRXNjYXBlIiw5LCJFc2NhcGUiLDI3LCJWS19FU0NBUEUiLGUsZV0sWzEsMSw0OCwiQmFja3NwYWNlIiwxLCJCYWNrc3BhY2UiLDgsIlZLX0JBQ0siLGUsZV0sWzIsMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMTAsMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFs4MywwLDUxLCJNaW51cyIsODMsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFs4MSwwLDUyLCJFcXVhbCIsODEsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbODcsMCw1MywiQnJhY2tldExlZnQiLDg3LCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzg5LDAsNTQsIkJyYWNrZXRSaWdodCIsODksIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbODgsMCw1NSwiQmFja3NsYXNoIiw4OCwiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsMCw1NiwiSW50bEhhc2giLDAsZSwwLGUsZSxlXSxbODAsMCw1NywiU2VtaWNvbG9uIiw4MCwiOyIsMTg2LCJWS19PRU1fMSIsIjsiLCJPRU1fMSJdLFs5MCwwLDU4LCJRdW90ZSIsOTAsIiciLDIyMiwiVktfT0VNXzciLCInIiwiT0VNXzciXSxbODYsMCw1OSwiQmFja3F1b3RlIiw4NiwiYCIsMTkyLCJWS19PRU1fMyIsImAiLCJPRU1fMyJdLFs4MiwwLDYwLCJDb21tYSIsODIsIiwiLDE4OCwiVktfT0VNX0NPTU1BIiwiLCIsIk9FTV9DT01NQSJdLFs4NCwwLDYxLCJQZXJpb2QiLDg0LCIuIiwxOTAsIlZLX09FTV9QRVJJT0QiLCIuIiwiT0VNX1BFUklPRCJdLFs4NSwwLDYyLCJTbGFzaCIsODUsIi8iLDE5MSwiVktfT0VNXzIiLCIvIiwiT0VNXzIiXSxbOCwxLDYzLCJDYXBzTG9jayIsOCwiQ2Fwc0xvY2siLDIwLCJWS19DQVBJVEFMIixlLGVdLFs1OSwxLDY0LCJGMSIsNTksIkYxIiwxMTIsIlZLX0YxIixlLGVdLFs2MCwxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIixlLGVdLFs2MSwxLDY2LCJGMyIsNjEsIkYzIiwxMTQsIlZLX0YzIixlLGVdLFs2MiwxLDY3LCJGNCIsNjIsIkY0IiwxMTUsIlZLX0Y0IixlLGVdLFs2MywxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IixlLGVdLFs2NCwxLDY5LCJGNiIsNjQsIkY2IiwxMTcsIlZLX0Y2IixlLGVdLFs2NSwxLDcwLCJGNyIsNjUsIkY3IiwxMTgsIlZLX0Y3IixlLGVdLFs2NiwxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IixlLGVdLFs2NywxLDcyLCJGOSIsNjcsIkY5IiwxMjAsIlZLX0Y5IixlLGVdLFs2OCwxLDczLCJGMTAiLDY4LCJGMTAiLDEyMSwiVktfRjEwIixlLGVdLFs2OSwxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIixlLGVdLFs3MCwxLDc1LCJGMTIiLDcwLCJGMTIiLDEyMywiVktfRjEyIixlLGVdLFswLDEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzc5LDEsNzcsIlNjcm9sbExvY2siLDc5LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbNywxLDc4LCJQYXVzZSIsNywiUGF1c2VCcmVhayIsMTksIlZLX1BBVVNFIixlLGVdLFsxOSwxLDc5LCJJbnNlcnQiLDE5LCJJbnNlcnQiLDQ1LCJWS19JTlNFUlQiLGUsZV0sWzE0LDEsODAsIkhvbWUiLDE0LCJIb21lIiwzNiwiVktfSE9NRSIsZSxlXSxbMTEsMSw4MSwiUGFnZVVwIiwxMSwiUGFnZVVwIiwzMywiVktfUFJJT1IiLGUsZV0sWzIwLDEsODIsIkRlbGV0ZSIsMjAsIkRlbGV0ZSIsNDYsIlZLX0RFTEVURSIsZSxlXSxbMTMsMSw4MywiRW5kIiwxMywiRW5kIiwzNSwiVktfRU5EIixlLGVdLFsxMiwxLDg0LCJQYWdlRG93biIsMTIsIlBhZ2VEb3duIiwzNCwiVktfTkVYVCIsZSxlXSxbMTcsMSw4NSwiQXJyb3dSaWdodCIsMTcsIlJpZ2h0QXJyb3ciLDM5LCJWS19SSUdIVCIsIlJpZ2h0IixlXSxbMTUsMSw4NiwiQXJyb3dMZWZ0IiwxNSwiTGVmdEFycm93IiwzNywiVktfTEVGVCIsIkxlZnQiLGVdLFsxOCwxLDg3LCJBcnJvd0Rvd24iLDE4LCJEb3duQXJyb3ciLDQwLCJWS19ET1dOIiwiRG93biIsZV0sWzE2LDEsODgsIkFycm93VXAiLDE2LCJVcEFycm93IiwzOCwiVktfVVAiLCJVcCIsZV0sWzc4LDEsODksIk51bUxvY2siLDc4LCJOdW1Mb2NrIiwxNDQsIlZLX05VTUxPQ0siLGUsZV0sWzEwOCwxLDkwLCJOdW1wYWREaXZpZGUiLDEwOCwiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEwMywxLDkxLCJOdW1wYWRNdWx0aXBseSIsMTAzLCJOdW1QYWRfTXVsdGlwbHkiLDEwNiwiVktfTVVMVElQTFkiLGUsZV0sWzEwNiwxLDkyLCJOdW1wYWRTdWJ0cmFjdCIsMTA2LCJOdW1QYWRfU3VidHJhY3QiLDEwOSwiVktfU1VCVFJBQ1QiLGUsZV0sWzEwNCwxLDkzLCJOdW1wYWRBZGQiLDEwNCwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzMsMSw5NCwiTnVtcGFkRW50ZXIiLDMsZSwwLGUsZSxlXSxbOTQsMSw5NSwiTnVtcGFkMSIsOTQsIk51bVBhZDEiLDk3LCJWS19OVU1QQUQxIixlLGVdLFs5NSwxLDk2LCJOdW1wYWQyIiw5NSwiTnVtUGFkMiIsOTgsIlZLX05VTVBBRDIiLGUsZV0sWzk2LDEsOTcsIk51bXBhZDMiLDk2LCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbOTcsMSw5OCwiTnVtcGFkNCIsOTcsIk51bVBhZDQiLDEwMCwiVktfTlVNUEFENCIsZSxlXSxbOTgsMSw5OSwiTnVtcGFkNSIsOTgsIk51bVBhZDUiLDEwMSwiVktfTlVNUEFENSIsZSxlXSxbOTksMSwxMDAsIk51bXBhZDYiLDk5LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEwMCwxLDEwMSwiTnVtcGFkNyIsMTAwLCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLGUsZV0sWzEwMSwxLDEwMiwiTnVtcGFkOCIsMTAxLCJOdW1QYWQ4IiwxMDQsIlZLX05VTVBBRDgiLGUsZV0sWzEwMiwxLDEwMywiTnVtcGFkOSIsMTAyLCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzkzLDEsMTA0LCJOdW1wYWQwIiw5MywiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEwNywxLDEwNSwiTnVtcGFkRGVjaW1hbCIsMTA3LCJOdW1QYWRfRGVjaW1hbCIsMTEwLCJWS19ERUNJTUFMIixlLGVdLFs5MiwwLDEwNiwiSW50bEJhY2tzbGFzaCIsOTIsIk9FTV8xMDIiLDIyNiwiVktfT0VNXzEwMiIsZSxlXSxbNTgsMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLGUsZSxlXSxbMCwxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMCwxLDEwOSwiTnVtcGFkRXF1YWwiLDAsZSwwLGUsZSxlXSxbNzEsMSwxMTAsIkYxMyIsNzEsIkYxMyIsMTI0LCJWS19GMTMiLGUsZV0sWzcyLDEsMTExLCJGMTQiLDcyLCJGMTQiLDEyNSwiVktfRjE0IixlLGVdLFs3MywxLDExMiwiRjE1Iiw3MywiRjE1IiwxMjYsIlZLX0YxNSIsZSxlXSxbNzQsMSwxMTMsIkYxNiIsNzQsIkYxNiIsMTI3LCJWS19GMTYiLGUsZV0sWzc1LDEsMTE0LCJGMTciLDc1LCJGMTciLDEyOCwiVktfRjE3IixlLGVdLFs3NiwxLDExNSwiRjE4Iiw3NiwiRjE4IiwxMjksIlZLX0YxOCIsZSxlXSxbNzcsMSwxMTYsIkYxOSIsNzcsIkYxOSIsMTMwLCJWS19GMTkiLGUsZV0sWzAsMSwxMTcsIkYyMCIsMCxlLDAsIlZLX0YyMCIsZSxlXSxbMCwxLDExOCwiRjIxIiwwLGUsMCwiVktfRjIxIixlLGVdLFswLDEsMTE5LCJGMjIiLDAsZSwwLCJWS19GMjIiLGUsZV0sWzAsMSwxMjAsIkYyMyIsMCxlLDAsIlZLX0YyMyIsZSxlXSxbMCwxLDEyMSwiRjI0IiwwLGUsMCwiVktfRjI0IixlLGVdLFswLDEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjMsIkhlbHAiLDAsZSwwLGUsZSxlXSxbMCwxLDEyNCwiU2VsZWN0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzAsMSwxMjYsIlVuZG8iLDAsZSwwLGUsZSxlXSxbMCwxLDEyNywiQ3V0IiwwLGUsMCxlLGUsZV0sWzAsMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMCwxLDEyOSwiUGFzdGUiLDAsZSwwLGUsZSxlXSxbMCwxLDEzMCwiRmluZCIsMCxlLDAsZSxlLGVdLFswLDEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExMiwiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFswLDEsMTMyLCJBdWRpb1ZvbHVtZVVwIiwxMTMsIkF1ZGlvVm9sdW1lVXAiLDE3NSwiVktfVk9MVU1FX1VQIixlLGVdLFswLDEsMTMzLCJBdWRpb1ZvbHVtZURvd24iLDExNCwiQXVkaW9Wb2x1bWVEb3duIiwxNzQsIlZLX1ZPTFVNRV9ET1dOIixlLGVdLFsxMDUsMSwxMzQsIk51bXBhZENvbW1hIiwxMDUsIk51bVBhZF9TZXBhcmF0b3IiLDEwOCwiVktfU0VQQVJBVE9SIixlLGVdLFsxMTAsMCwxMzUsIkludGxSbyIsMTEwLCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzAsMSwxMzYsIkthbmFNb2RlIiwwLGUsMCxlLGUsZV0sWzAsMCwxMzcsIkludGxZZW4iLDAsZSwwLGUsZSxlXSxbMCwxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFswLDEsMTM5LCJOb25Db252ZXJ0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDAsIkxhbmcxIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDIsIkxhbmczIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDMsIkxhbmc0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDUsIkFib3J0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDYsIlByb3BzIiwwLGUsMCxlLGUsZV0sWzAsMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFswLDEsMTQ4LCJOdW1wYWRQYXJlblJpZ2h0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCxlLDAsZSxlLGVdLFswLDEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFswLDEsMTUxLCJOdW1wYWRNZW1vcnlSZWNhbGwiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsZSwwLGUsZSxlXSxbMCwxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzAsMSwxNTQsIk51bXBhZE1lbW9yeVN1YnRyYWN0IiwwLGUsMCxlLGUsZV0sWzAsMSwxNTUsIk51bXBhZENsZWFyIiwxMjYsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLGUsZV0sWzAsMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbNSwxLDAsZSw1LCJDdHJsIiwxNywiVktfQ09OVFJPTCIsZSxlXSxbNCwxLDAsZSw0LCJTaGlmdCIsMTYsIlZLX1NISUZUIixlLGVdLFs2LDEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzU3LDEsMCxlLDU3LCJNZXRhIiwwLCJWS19DT01NQU5EIixlLGVdLFs1LDEsMTU3LCJDb250cm9sTGVmdCIsNSxlLDAsIlZLX0xDT05UUk9MIixlLGVdLFs0LDEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzYsMSwxNTksIkFsdExlZnQiLDYsZSwwLCJWS19MTUVOVSIsZSxlXSxbNTcsMSwxNjAsIk1ldGFMZWZ0Iiw1NyxlLDAsIlZLX0xXSU4iLGUsZV0sWzUsMSwxNjEsIkNvbnRyb2xSaWdodCIsNSxlLDAsIlZLX1JDT05UUk9MIixlLGVdLFs0LDEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFs2LDEsMTYzLCJBbHRSaWdodCIsNixlLDAsIlZLX1JNRU5VIixlLGVdLFs1NywxLDE2NCwiTWV0YVJpZ2h0Iiw1NyxlLDAsIlZLX1JXSU4iLGUsZV0sWzAsMSwxNjUsIkJyaWdodG5lc3NVcCIsMCxlLDAsZSxlLGVdLFswLDEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFswLDEsMTY3LCJNZWRpYVBsYXkiLDAsZSwwLGUsZSxlXSxbMCwxLDE2OCwiTWVkaWFSZWNvcmQiLDAsZSwwLGUsZSxlXSxbMCwxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFswLDEsMTcwLCJNZWRpYVJld2luZCIsMCxlLDAsZSxlLGVdLFsxMTQsMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMTksIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzExNSwxLDE3MiwiTWVkaWFUcmFja1ByZXZpb3VzIiwxMjAsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTc3LCJWS19NRURJQV9QUkVWX1RSQUNLIixlLGVdLFsxMTYsMSwxNzMsIk1lZGlhU3RvcCIsMTIxLCJNZWRpYVN0b3AiLDE3OCwiVktfTUVESUFfU1RPUCIsZSxlXSxbMCwxLDE3NCwiRWplY3QiLDAsZSwwLGUsZSxlXSxbMTE3LDEsMTc1LCJNZWRpYVBsYXlQYXVzZSIsMTIyLCJNZWRpYVBsYXlQYXVzZSIsMTc5LCJWS19NRURJQV9QTEFZX1BBVVNFIixlLGVdLFswLDEsMTc2LCJNZWRpYVNlbGVjdCIsMTIzLCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIixlLGVdLFswLDEsMTc3LCJMYXVuY2hNYWlsIiwxMjQsIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzAsMSwxNzgsIkxhdW5jaEFwcDIiLDEyNSwiTGF1bmNoQXBwMiIsMTgzLCJWS19NRURJQV9MQVVOQ0hfQVBQMiIsZSxlXSxbMCwxLDE3OSwiTGF1bmNoQXBwMSIsMCxlLDAsIlZLX01FRElBX0xBVU5DSF9BUFAxIixlLGVdLFswLDEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzAsMSwxODEsIkxhdW5jaFNjcmVlblNhdmVyIiwwLGUsMCxlLGUsZV0sWzAsMSwxODIsIkJyb3dzZXJTZWFyY2giLDExNSwiQnJvd3NlclNlYXJjaCIsMTcwLCJWS19CUk9XU0VSX1NFQVJDSCIsZSxlXSxbMCwxLDE4MywiQnJvd3NlckhvbWUiLDExNiwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxMTIsMSwxODQsIkJyb3dzZXJCYWNrIiwxMTcsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsZSxlXSxbMTEzLDEsMTg1LCJCcm93c2VyRm9yd2FyZCIsMTE4LCJCcm93c2VyRm9yd2FyZCIsMTY3LCJWS19CUk9XU0VSX0ZPUldBUkQiLGUsZV0sWzAsMSwxODYsIkJyb3dzZXJTdG9wIiwwLGUsMCwiVktfQlJPV1NFUl9TVE9QIixlLGVdLFswLDEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMCwxLDE4OCwiQnJvd3NlckZhdm9yaXRlcyIsMCxlLDAsIlZLX0JST1dTRVJfRkFWT1JJVEVTIixlLGVdLFswLDEsMTg5LCJab29tVG9nZ2xlIiwwLGUsMCxlLGUsZV0sWzAsMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFswLDEsMTkxLCJNYWlsRm9yd2FyZCIsMCxlLDAsZSxlLGVdLFswLDEsMTkyLCJNYWlsU2VuZCIsMCxlLDAsZSxlLGVdLFsxMDksMSwwLGUsMTA5LCJLZXlJbkNvbXBvc2l0aW9uIiwyMjksZSxlLGVdLFsxMTEsMSwwLGUsMTExLCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzkxLDEsMCxlLDkxLCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfS0FOQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEFOR1VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfRklOQUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0hBTkpBIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQ09OVkVSVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTk9OQ09OVkVSVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19NT0RFQ0hBTkdFIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19TRUxFQ1QiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FWEVDVVRFIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19TTkFQU0hPVCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQVBQUyIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUFJPQ0VTU0tFWSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19EQkVfU0JDU0NIQVIiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0RCRV9EQkNTQ0hBUiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfQ1JTRUwiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX0VYU0VMIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfUExBWSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfWk9PTSIsZSxlXSxbMCwxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFswLDEsMCxlLDAsZSwwLCJWS19QQTEiLGUsZV0sWzAsMSwwLGUsMCxlLDAsIlZLX09FTV9DTEVBUiIsZSxlXV07bGV0IG49W10scj1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdFt0LGksbyxhLHMsbCxjLHUsaCxmXT1lO2lmKHJbb118fChyW29dPSEwLEl0W2FdPW8sUnRbYS50b0xvd2VyQ2FzZSgpXT1vKSwhbltzXSl7aWYobltzXT0hMCwhbCl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke3N9IGFyb3VuZCBzY2FuIGNvZGUgJHthfWApO2t0LmRlZmluZShzLGwpLFR0LmRlZmluZShzLGh8fGwpLE90LmRlZmluZShzLGZ8fGh8fGwpfWMmJihNdFtjXT1zKX19KCksZnVuY3Rpb24oZSl7ZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4ga3Qua2V5Q29kZVRvU3RyKGUpfSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGt0LnN0clRvS2V5Q29kZShlKX0sZS50b1VzZXJTZXR0aW5nc1VTPWZ1bmN0aW9uKGUpe3JldHVybiBUdC5rZXlDb2RlVG9TdHIoZSl9LGUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWZ1bmN0aW9uKGUpe3JldHVybiBPdC5rZXlDb2RlVG9TdHIoZSl9LGUuZnJvbVVzZXJTZXR0aW5ncz1mdW5jdGlvbihlKXtyZXR1cm4gVHQuc3RyVG9LZXlDb2RlKGUpfHxPdC5zdHJUb0tleUNvZGUoZSl9LGUudG9FbGVjdHJvbkFjY2VsZXJhdG9yPWZ1bmN0aW9uKGUpe2lmKGU+PTkzJiZlPD0xMDgpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgMTY6cmV0dXJuIlVwIjtjYXNlIDE4OnJldHVybiJEb3duIjtjYXNlIDE1OnJldHVybiJMZWZ0IjtjYXNlIDE3OnJldHVybiJSaWdodCJ9cmV0dXJuIGt0LmtleUNvZGVUb1N0cihlKX19KFB0fHwoUHQ9e30pKTtjbGFzcyBGdCBleHRlbmRzIFFle2NvbnN0cnVjdG9yKGUsdCxuLHIpe3N1cGVyKGUsdCxuLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPWUsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj10LHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPW4sdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKGUpe3JldHVybiBGdC5zZWxlY3Rpb25zRXF1YWwodGhpcyxlKX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKGUsdCl7cmV0dXJuIGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJmUuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10LnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZlLnBvc2l0aW9uTGluZU51bWJlcj09PXQucG9zaXRpb25MaW5lTnVtYmVyJiZlLnBvc2l0aW9uQ29sdW1uPT09dC5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKGUsdCl7cmV0dXJuIDA9PT10aGlzLmdldERpcmVjdGlvbigpP25ldyBGdCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLGUsdCk6bmV3IEZ0KGUsdCx0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgWWUodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IFllKHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24oZSx0KXtyZXR1cm4gMD09PXRoaXMuZ2V0RGlyZWN0aW9uKCk/bmV3IEZ0KGUsdCx0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyBGdCh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sZSx0KX1zdGF0aWMgZnJvbVBvc2l0aW9ucyhlLHQ9ZSl7cmV0dXJuIG5ldyBGdChlLmxpbmVOdW1iZXIsZS5jb2x1bW4sdC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKGUsdCl7cmV0dXJuIDA9PT10P25ldyBGdChlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uLGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbik6bmV3IEZ0KGUuZW5kTGluZU51bWJlcixlLmVuZENvbHVtbixlLnN0YXJ0TGluZU51bWJlcixlLnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbihlKXtyZXR1cm4gbmV3IEZ0KGUuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLGUuc2VsZWN0aW9uU3RhcnRDb2x1bW4sZS5wb3NpdGlvbkxpbmVOdW1iZXIsZS5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbChlLHQpe2lmKGUmJiF0fHwhZSYmdClyZXR1cm4hMTtpZighZSYmIXQpcmV0dXJuITA7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbihlKXtyZXR1cm4gZSYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmIm51bWJlciI9PXR5cGVvZiBlLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25MaW5lTnVtYmVyJiYibnVtYmVyIj09dHlwZW9mIGUucG9zaXRpb25Db2x1bW59c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gMD09PWk/bmV3IEZ0KGUsdCxuLHIpOm5ldyBGdChuLHIsZSx0KX19dmFyIER0LFZ0LEt0LFV0LEJ0LGp0LHF0LCR0LFd0LEh0LHp0LEd0LEp0LFh0LFp0LFl0LFF0LGVuLHRuLG5uLHJuLG9uLGFuLHNuLGxuLGNuLHVuLGhuLGZuLGRuLG1uLGduLHBuLGJuLHZuLHluLENuLHduLF9uLFNuLEFuLEVuLE5uLHhuLExuLGtuLFRuLE9uLE1uLEluLFJuLFBuLEZuLERuLFZuLEtuLFVuLEJuLGpuLHFuLCRuLFduLEhuLHpuLEduLEpuLFhuPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2woci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtsKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9bCgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBabiBleHRlbmRzIGR7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5fcmVnaXN0cnk9ZSx0aGlzLl9sYW5ndWFnZUlkPXQsdGhpcy5fZmFjdG9yeT1uLHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5fcmVzb2x2ZVByb21pc2U9bnVsbCx0aGlzLl9pc1Jlc29sdmVkPSExfWdldCBpc1Jlc29sdmVkKCl7cmV0dXJuIHRoaXMuX2lzUmVzb2x2ZWR9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWQ9ITAsc3VwZXIuZGlzcG9zZSgpfXJlc29sdmUoKXtyZXR1cm4gWG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVByb21pc2V8fCh0aGlzLl9yZXNvbHZlUHJvbWlzZT10aGlzLl9jcmVhdGUoKSksdGhpcy5fcmVzb2x2ZVByb21pc2V9KSl9X2NyZWF0ZSgpe3JldHVybiBYbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZhY3RvcnkuY3JlYXRlVG9rZW5pemF0aW9uU3VwcG9ydCgpKTt0aGlzLl9pc1Jlc29sdmVkPSEwLGUmJiF0aGlzLl9pc0Rpc3Bvc2VkJiZ0aGlzLl9yZWdpc3Rlcih0aGlzLl9yZWdpc3RyeS5yZWdpc3Rlcih0aGlzLl9sYW5ndWFnZUlkLGUpKX0pKX19Y2xhc3MgWW57Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuaWQ9ZSx0aGlzLmRlZmluaXRpb249dCx0aGlzLmRlc2NyaXB0aW9uPW4sWW4uX2FsbENvZGljb25zLnB1c2godGhpcyl9Z2V0IGNsYXNzTmFtZXMoKXtyZXR1cm4iY29kaWNvbiBjb2RpY29uLSIrdGhpcy5pZH1nZXQgY2xhc3NOYW1lc0FycmF5KCl7cmV0dXJuWyJjb2RpY29uIiwiY29kaWNvbi0iK3RoaXMuaWRdfWdldCBjc3NTZWxlY3Rvcigpe3JldHVybiIuY29kaWNvbi5jb2RpY29uLSIrdGhpcy5pZH1zdGF0aWMgZ2V0QWxsKCl7cmV0dXJuIFluLl9hbGxDb2RpY29uc319WW4uX2FsbENvZGljb25zPVtdLFluLmFkZD1uZXcgWW4oImFkZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MCJ9KSxZbi5wbHVzPW5ldyBZbigicGx1cyIsWW4uYWRkLmRlZmluaXRpb24pLFluLmdpc3ROZXc9bmV3IFluKCJnaXN0LW5ldyIsWW4uYWRkLmRlZmluaXRpb24pLFluLnJlcG9DcmVhdGU9bmV3IFluKCJyZXBvLWNyZWF0ZSIsWW4uYWRkLmRlZmluaXRpb24pLFluLmxpZ2h0YnVsYj1uZXcgWW4oImxpZ2h0YnVsYiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MSJ9KSxZbi5saWdodEJ1bGI9bmV3IFluKCJsaWdodC1idWxiIix7Zm9udENoYXJhY3RlcjoiXFxlYTYxIn0pLFluLnJlcG89bmV3IFluKCJyZXBvIix7Zm9udENoYXJhY3RlcjoiXFxlYTYyIn0pLFluLnJlcG9EZWxldGU9bmV3IFluKCJyZXBvLWRlbGV0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MiJ9KSxZbi5naXN0Rm9yaz1uZXcgWW4oImdpc3QtZm9yayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2MyJ9KSxZbi5yZXBvRm9ya2VkPW5ldyBZbigicmVwby1mb3JrZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjMifSksWW4uZ2l0UHVsbFJlcXVlc3Q9bmV3IFluKCJnaXQtcHVsbC1yZXF1ZXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTY0In0pLFluLmdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkPW5ldyBZbigiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjQifSksWW4ucmVjb3JkS2V5cz1uZXcgWW4oInJlY29yZC1rZXlzIix7Zm9udENoYXJhY3RlcjoiXFxlYTY1In0pLFluLmtleWJvYXJkPW5ldyBZbigia2V5Ym9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjUifSksWW4udGFnPW5ldyBZbigidGFnIix7Zm9udENoYXJhY3RlcjoiXFxlYTY2In0pLFluLnRhZ0FkZD1uZXcgWW4oInRhZy1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjYifSksWW4udGFnUmVtb3ZlPW5ldyBZbigidGFnLXJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NiJ9KSxZbi5wZXJzb249bmV3IFluKCJwZXJzb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksWW4ucGVyc29uRm9sbG93PW5ldyBZbigicGVyc29uLWZvbGxvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxZbi5wZXJzb25PdXRsaW5lPW5ldyBZbigicGVyc29uLW91dGxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjcifSksWW4ucGVyc29uRmlsbGVkPW5ldyBZbigicGVyc29uLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2NyJ9KSxZbi5naXRCcmFuY2g9bmV3IFluKCJnaXQtYnJhbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLFluLmdpdEJyYW5jaENyZWF0ZT1uZXcgWW4oImdpdC1icmFuY2gtY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLFluLmdpdEJyYW5jaERlbGV0ZT1uZXcgWW4oImdpdC1icmFuY2gtZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTY4In0pLFluLnNvdXJjZUNvbnRyb2w9bmV3IFluKCJzb3VyY2UtY29udHJvbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OCJ9KSxZbi5taXJyb3I9bmV3IFluKCJtaXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGVhNjkifSksWW4ubWlycm9yUHVibGljPW5ldyBZbigibWlycm9yLXB1YmxpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2OSJ9KSxZbi5zdGFyPW5ldyBZbigic3RhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2YSJ9KSxZbi5zdGFyQWRkPW5ldyBZbigic3Rhci1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksWW4uc3RhckRlbGV0ZT1uZXcgWW4oInN0YXItZGVsZXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTZhIn0pLFluLnN0YXJFbXB0eT1uZXcgWW4oInN0YXItZW1wdHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmEifSksWW4uY29tbWVudD1uZXcgWW4oImNvbW1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmIifSksWW4uY29tbWVudEFkZD1uZXcgWW4oImNvbW1lbnQtYWRkIix7Zm9udENoYXJhY3RlcjoiXFxlYTZiIn0pLFluLmFsZXJ0PW5ldyBZbigiYWxlcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksWW4ud2FybmluZz1uZXcgWW4oIndhcm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGVhNmMifSksWW4uc2VhcmNoPW5ldyBZbigic2VhcmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYTZkIn0pLFluLnNlYXJjaFNhdmU9bmV3IFluKCJzZWFyY2gtc2F2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZCJ9KSxZbi5sb2dPdXQ9bmV3IFluKCJsb2ctb3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTZlIn0pLFluLnNpZ25PdXQ9bmV3IFluKCJzaWduLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZSJ9KSxZbi5sb2dJbj1uZXcgWW4oImxvZy1pbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE2ZiJ9KSxZbi5zaWduSW49bmV3IFluKCJzaWduLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYTZmIn0pLFluLmV5ZT1uZXcgWW4oImV5ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MCJ9KSxZbi5leWVVbndhdGNoPW5ldyBZbigiZXllLXVud2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksWW4uZXllV2F0Y2g9bmV3IFluKCJleWUtd2F0Y2giLHtmb250Q2hhcmFjdGVyOiJcXGVhNzAifSksWW4uY2lyY2xlRmlsbGVkPW5ldyBZbigiY2lyY2xlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxZbi5wcmltaXRpdmVEb3Q9bmV3IFluKCJwcmltaXRpdmUtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLFluLmNsb3NlRGlydHk9bmV3IFluKCJjbG9zZS1kaXJ0eSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnQ9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLFluLmRlYnVnQnJlYWtwb2ludERpc2FibGVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3MSJ9KSxZbi5kZWJ1Z0hpbnQ9bmV3IFluKCJkZWJ1Zy1oaW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYTcxIn0pLFluLnByaW1pdGl2ZVNxdWFyZT1uZXcgWW4oInByaW1pdGl2ZS1zcXVhcmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzIifSksWW4uZWRpdD1uZXcgWW4oImVkaXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzMifSksWW4ucGVuY2lsPW5ldyBZbigicGVuY2lsIix7Zm9udENoYXJhY3RlcjoiXFxlYTczIn0pLFluLmluZm89bmV3IFluKCJpbmZvIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLFluLmlzc3VlT3BlbmVkPW5ldyBZbigiaXNzdWUtb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYTc0In0pLFluLmdpc3RQcml2YXRlPW5ldyBZbigiZ2lzdC1wcml2YXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc1In0pLFluLmdpdEZvcmtQcml2YXRlPW5ldyBZbigiZ2l0LWZvcmstcHJpdmF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxZbi5sb2NrPW5ldyBZbigibG9jayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NSJ9KSxZbi5taXJyb3JQcml2YXRlPW5ldyBZbigibWlycm9yLXByaXZhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzUifSksWW4uY2xvc2U9bmV3IFluKCJjbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxZbi5yZW1vdmVDbG9zZT1uZXcgWW4oInJlbW92ZS1jbG9zZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxZbi54PW5ldyBZbigieCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NiJ9KSxZbi5yZXBvU3luYz1uZXcgWW4oInJlcG8tc3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxZbi5zeW5jPW5ldyBZbigic3luYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3NyJ9KSxZbi5jbG9uZT1uZXcgWW4oImNsb25lIix7Zm9udENoYXJhY3RlcjoiXFxlYTc4In0pLFluLmRlc2t0b3BEb3dubG9hZD1uZXcgWW4oImRlc2t0b3AtZG93bmxvYWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhNzgifSksWW4uYmVha2VyPW5ldyBZbigiYmVha2VyIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLFluLm1pY3Jvc2NvcGU9bmV3IFluKCJtaWNyb3Njb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYTc5In0pLFluLnZtPW5ldyBZbigidm0iLHtmb250Q2hhcmFjdGVyOiJcXGVhN2EifSksWW4uZGV2aWNlRGVza3RvcD1uZXcgWW4oImRldmljZS1kZXNrdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTdhIn0pLFluLmZpbGU9bmV3IFluKCJmaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLFluLmZpbGVUZXh0PW5ldyBZbigiZmlsZS10ZXh0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdiIn0pLFluLm1vcmU9bmV3IFluKCJtb3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYTdjIn0pLFluLmVsbGlwc2lzPW5ldyBZbigiZWxsaXBzaXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2MifSksWW4ua2ViYWJIb3Jpem9udGFsPW5ldyBZbigia2ViYWItaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3YyJ9KSxZbi5tYWlsUmVwbHk9bmV3IFluKCJtYWlsLXJlcGx5Iix7Zm9udENoYXJhY3RlcjoiXFxlYTdkIn0pLFluLnJlcGx5PW5ldyBZbigicmVwbHkiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2QifSksWW4ub3JnYW5pemF0aW9uPW5ldyBZbigib3JnYW5pemF0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLFluLm9yZ2FuaXphdGlvbkZpbGxlZD1uZXcgWW4oIm9yZ2FuaXphdGlvbi1maWxsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2UifSksWW4ub3JnYW5pemF0aW9uT3V0bGluZT1uZXcgWW4oIm9yZ2FuaXphdGlvbi1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYTdlIn0pLFluLm5ld0ZpbGU9bmV3IFluKCJuZXctZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE3ZiJ9KSxZbi5maWxlQWRkPW5ldyBZbigiZmlsZS1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGVhN2YifSksWW4ubmV3Rm9sZGVyPW5ldyBZbigibmV3LWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MCJ9KSxZbi5maWxlRGlyZWN0b3J5Q3JlYXRlPW5ldyBZbigiZmlsZS1kaXJlY3RvcnktY3JlYXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYTgwIn0pLFluLnRyYXNoPW5ldyBZbigidHJhc2giLHtmb250Q2hhcmFjdGVyOiJcXGVhODEifSksWW4udHJhc2hjYW49bmV3IFluKCJ0cmFzaGNhbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MSJ9KSxZbi5oaXN0b3J5PW5ldyBZbigiaGlzdG9yeSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MiJ9KSxZbi5jbG9jaz1uZXcgWW4oImNsb2NrIix7Zm9udENoYXJhY3RlcjoiXFxlYTgyIn0pLFluLmZvbGRlcj1uZXcgWW4oImZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxZbi5maWxlRGlyZWN0b3J5PW5ldyBZbigiZmlsZS1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhODMifSksWW4uc3ltYm9sRm9sZGVyPW5ldyBZbigic3ltYm9sLWZvbGRlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4MyJ9KSxZbi5sb2dvR2l0aHViPW5ldyBZbigibG9nby1naXRodWIiLHtmb250Q2hhcmFjdGVyOiJcXGVhODQifSksWW4ubWFya0dpdGh1Yj1uZXcgWW4oIm1hcmstZ2l0aHViIix7Zm9udENoYXJhY3RlcjoiXFxlYTg0In0pLFluLmdpdGh1Yj1uZXcgWW4oImdpdGh1YiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NCJ9KSxZbi50ZXJtaW5hbD1uZXcgWW4oInRlcm1pbmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLFluLmNvbnNvbGU9bmV3IFluKCJjb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLFluLnJlcGw9bmV3IFluKCJyZXBsIix7Zm9udENoYXJhY3RlcjoiXFxlYTg1In0pLFluLnphcD1uZXcgWW4oInphcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxZbi5zeW1ib2xFdmVudD1uZXcgWW4oInN5bWJvbC1ldmVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4NiJ9KSxZbi5lcnJvcj1uZXcgWW4oImVycm9yIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLFluLnN0b3A9bmV3IFluKCJzdG9wIix7Zm9udENoYXJhY3RlcjoiXFxlYTg3In0pLFluLnZhcmlhYmxlPW5ldyBZbigidmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksWW4uc3ltYm9sVmFyaWFibGU9bmV3IFluKCJzeW1ib2wtdmFyaWFibGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhODgifSksWW4uYXJyYXk9bmV3IFluKCJhcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxZbi5zeW1ib2xBcnJheT1uZXcgWW4oInN5bWJvbC1hcnJheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YSJ9KSxZbi5zeW1ib2xNb2R1bGU9bmV3IFluKCJzeW1ib2wtbW9kdWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLFluLnN5bWJvbFBhY2thZ2U9bmV3IFluKCJzeW1ib2wtcGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YiJ9KSxZbi5zeW1ib2xOYW1lc3BhY2U9bmV3IFluKCJzeW1ib2wtbmFtZXNwYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYThiIn0pLFluLnN5bWJvbE9iamVjdD1uZXcgWW4oInN5bWJvbC1vYmplY3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhOGIifSksWW4uc3ltYm9sTWV0aG9kPW5ldyBZbigic3ltYm9sLW1ldGhvZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxZbi5zeW1ib2xGdW5jdGlvbj1uZXcgWW4oInN5bWJvbC1mdW5jdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxZbi5zeW1ib2xDb25zdHJ1Y3Rvcj1uZXcgWW4oInN5bWJvbC1jb25zdHJ1Y3RvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE4YyJ9KSxZbi5zeW1ib2xCb29sZWFuPW5ldyBZbigic3ltYm9sLWJvb2xlYW4iLHtmb250Q2hhcmFjdGVyOiJcXGVhOGYifSksWW4uc3ltYm9sTnVsbD1uZXcgWW4oInN5bWJvbC1udWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYThmIn0pLFluLnN5bWJvbE51bWVyaWM9bmV3IFluKCJzeW1ib2wtbnVtZXJpYyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MCJ9KSxZbi5zeW1ib2xOdW1iZXI9bmV3IFluKCJzeW1ib2wtbnVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkwIn0pLFluLnN5bWJvbFN0cnVjdHVyZT1uZXcgWW4oInN5bWJvbC1zdHJ1Y3R1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTEifSksWW4uc3ltYm9sU3RydWN0PW5ldyBZbigic3ltYm9sLXN0cnVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MSJ9KSxZbi5zeW1ib2xQYXJhbWV0ZXI9bmV3IFluKCJzeW1ib2wtcGFyYW1ldGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTkyIn0pLFluLnN5bWJvbFR5cGVQYXJhbWV0ZXI9bmV3IFluKCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTIifSksWW4uc3ltYm9sS2V5PW5ldyBZbigic3ltYm9sLWtleSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5MyJ9KSxZbi5zeW1ib2xUZXh0PW5ldyBZbigic3ltYm9sLXRleHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTMifSksWW4uc3ltYm9sUmVmZXJlbmNlPW5ldyBZbigic3ltYm9sLXJlZmVyZW5jZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NCJ9KSxZbi5nb1RvRmlsZT1uZXcgWW4oImdvLXRvLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTQifSksWW4uc3ltYm9sRW51bT1uZXcgWW4oInN5bWJvbC1lbnVtIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLFluLnN5bWJvbFZhbHVlPW5ldyBZbigic3ltYm9sLXZhbHVlIix7Zm9udENoYXJhY3RlcjoiXFxlYTk1In0pLFluLnN5bWJvbFJ1bGVyPW5ldyBZbigic3ltYm9sLXJ1bGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYTk2In0pLFluLnN5bWJvbFVuaXQ9bmV3IFluKCJzeW1ib2wtdW5pdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5NiJ9KSxZbi5hY3RpdmF0ZUJyZWFrcG9pbnRzPW5ldyBZbigiYWN0aXZhdGUtYnJlYWtwb2ludHMiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTcifSksWW4uYXJjaGl2ZT1uZXcgWW4oImFyY2hpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhOTgifSksWW4uYXJyb3dCb3RoPW5ldyBZbigiYXJyb3ctYm90aCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5OSJ9KSxZbi5hcnJvd0Rvd249bmV3IFluKCJhcnJvdy1kb3duIix7Zm9udENoYXJhY3RlcjoiXFxlYTlhIn0pLFluLmFycm93TGVmdD1uZXcgWW4oImFycm93LWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWIifSksWW4uYXJyb3dSaWdodD1uZXcgWW4oImFycm93LXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYTljIn0pLFluLmFycm93U21hbGxEb3duPW5ldyBZbigiYXJyb3ctc21hbGwtZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWE5ZCJ9KSxZbi5hcnJvd1NtYWxsTGVmdD1uZXcgWW4oImFycm93LXNtYWxsLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWUifSksWW4uYXJyb3dTbWFsbFJpZ2h0PW5ldyBZbigiYXJyb3ctc21hbGwtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGVhOWYifSksWW4uYXJyb3dTbWFsbFVwPW5ldyBZbigiYXJyb3ctc21hbGwtdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTAifSksWW4uYXJyb3dVcD1uZXcgWW4oImFycm93LXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYWExIn0pLFluLmJlbGw9bmV3IFluKCJiZWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWEyIn0pLFluLmJvbGQ9bmV3IFluKCJib2xkIix7Zm9udENoYXJhY3RlcjoiXFxlYWEzIn0pLFluLmJvb2s9bmV3IFluKCJib29rIix7Zm9udENoYXJhY3RlcjoiXFxlYWE0In0pLFluLmJvb2ttYXJrPW5ldyBZbigiYm9va21hcmsiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTUifSksWW4uZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE2In0pLFluLmRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC1kaXNhYmxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhNyJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZD1uZXcgWW4oImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE4In0pLFluLmRlYnVnQnJlYWtwb2ludERhdGE9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLHtmb250Q2hhcmFjdGVyOiJcXGVhYTkifSksWW4uZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1kYXRhLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWE5In0pLFluLmRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWFhIn0pLFluLmRlYnVnQnJlYWtwb2ludExvZz1uZXcgWW4oImRlYnVnLWJyZWFrcG9pbnQtbG9nIix7Zm9udENoYXJhY3RlcjoiXFxlYWFiIn0pLFluLmRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC1sb2ctZGlzYWJsZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYWIifSksWW4uYnJpZWZjYXNlPW5ldyBZbigiYnJpZWZjYXNlIix7Zm9udENoYXJhY3RlcjoiXFxlYWFjIn0pLFluLmJyb2FkY2FzdD1uZXcgWW4oImJyb2FkY2FzdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZCJ9KSxZbi5icm93c2VyPW5ldyBZbigiYnJvd3NlciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFhZSJ9KSxZbi5idWc9bmV3IFluKCJidWciLHtmb250Q2hhcmFjdGVyOiJcXGVhYWYifSksWW4uY2FsZW5kYXI9bmV3IFluKCJjYWxlbmRhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMCJ9KSxZbi5jYXNlU2Vuc2l0aXZlPW5ldyBZbigiY2FzZS1zZW5zaXRpdmUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjEifSksWW4uY2hlY2s9bmV3IFluKCJjaGVjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiMiJ9KSxZbi5jaGVja2xpc3Q9bmV3IFluKCJjaGVja2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjMifSksWW4uY2hldnJvbkRvd249bmV3IFluKCJjaGV2cm9uLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhYjQifSksWW4uZHJvcERvd25CdXR0b249bmV3IFluKCJkcm9wLWRvd24tYnV0dG9uIixZbi5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxZbi5jaGV2cm9uTGVmdD1uZXcgWW4oImNoZXZyb24tbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiNSJ9KSxZbi5jaGV2cm9uUmlnaHQ9bmV3IFluKCJjaGV2cm9uLXJpZ2h0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWI2In0pLFluLmNoZXZyb25VcD1uZXcgWW4oImNoZXZyb24tdXAiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjcifSksWW4uY2hyb21lQ2xvc2U9bmV3IFluKCJjaHJvbWUtY2xvc2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjgifSksWW4uY2hyb21lTWF4aW1pemU9bmV3IFluKCJjaHJvbWUtbWF4aW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYjkifSksWW4uY2hyb21lTWluaW1pemU9bmV3IFluKCJjaHJvbWUtbWluaW1pemUiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmEifSksWW4uY2hyb21lUmVzdG9yZT1uZXcgWW4oImNocm9tZS1yZXN0b3JlIix7Zm9udENoYXJhY3RlcjoiXFxlYWJiIn0pLFluLmNpcmNsZU91dGxpbmU9bmV3IFluKCJjaXJjbGUtb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFiYyJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkPW5ldyBZbigiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYWJjIn0pLFluLmNpcmNsZVNsYXNoPW5ldyBZbigiY2lyY2xlLXNsYXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYWJkIn0pLFluLmNpcmN1aXRCb2FyZD1uZXcgWW4oImNpcmN1aXQtYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmUifSksWW4uY2xlYXJBbGw9bmV3IFluKCJjbGVhci1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGVhYmYifSksWW4uY2xpcHB5PW5ldyBZbigiY2xpcHB5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWMwIn0pLFluLmNsb3NlQWxsPW5ldyBZbigiY2xvc2UtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYWMxIn0pLFluLmNsb3VkRG93bmxvYWQ9bmV3IFluKCJjbG91ZC1kb3dubG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMiJ9KSxZbi5jbG91ZFVwbG9hZD1uZXcgWW4oImNsb3VkLXVwbG9hZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjMyJ9KSxZbi5jb2RlPW5ldyBZbigiY29kZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNCJ9KSxZbi5jb2xsYXBzZUFsbD1uZXcgWW4oImNvbGxhcHNlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjNSJ9KSxZbi5jb2xvck1vZGU9bmV3IFluKCJjb2xvci1tb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWM2In0pLFluLmNvbW1lbnREaXNjdXNzaW9uPW5ldyBZbigiY29tbWVudC1kaXNjdXNzaW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYWM3In0pLFluLmNvbXBhcmVDaGFuZ2VzPW5ldyBZbigiY29tcGFyZS1jaGFuZ2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLFluLmNyZWRpdENhcmQ9bmV3IFluKCJjcmVkaXQtY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjOSJ9KSxZbi5kYXNoPW5ldyBZbigiZGFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjYyJ9KSxZbi5kYXNoYm9hcmQ9bmV3IFluKCJkYXNoYm9hcmQiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2QifSksWW4uZGF0YWJhc2U9bmV3IFluKCJkYXRhYmFzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFjZSJ9KSxZbi5kZWJ1Z0NvbnRpbnVlPW5ldyBZbigiZGVidWctY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhY2YifSksWW4uZGVidWdEaXNjb25uZWN0PW5ldyBZbigiZGVidWctZGlzY29ubmVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMCJ9KSxZbi5kZWJ1Z1BhdXNlPW5ldyBZbigiZGVidWctcGF1c2UiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDEifSksWW4uZGVidWdSZXN0YXJ0PW5ldyBZbigiZGVidWctcmVzdGFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkMiJ9KSxZbi5kZWJ1Z1N0YXJ0PW5ldyBZbigiZGVidWctc3RhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDMifSksWW4uZGVidWdTdGVwSW50bz1uZXcgWW4oImRlYnVnLXN0ZXAtaW50byIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNCJ9KSxZbi5kZWJ1Z1N0ZXBPdXQ9bmV3IFluKCJkZWJ1Zy1zdGVwLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkNSJ9KSxZbi5kZWJ1Z1N0ZXBPdmVyPW5ldyBZbigiZGVidWctc3RlcC1vdmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWQ2In0pLFluLmRlYnVnU3RvcD1uZXcgWW4oImRlYnVnLXN0b3AiLHtmb250Q2hhcmFjdGVyOiJcXGVhZDcifSksWW4uZGVidWc9bmV3IFluKCJkZWJ1ZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkOCJ9KSxZbi5kZXZpY2VDYW1lcmFWaWRlbz1uZXcgWW4oImRldmljZS1jYW1lcmEtdmlkZW8iLHtmb250Q2hhcmFjdGVyOiJcXGVhZDkifSksWW4uZGV2aWNlQ2FtZXJhPW5ldyBZbigiZGV2aWNlLWNhbWVyYSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkYSJ9KSxZbi5kZXZpY2VNb2JpbGU9bmV3IFluKCJkZXZpY2UtbW9iaWxlIix7Zm9udENoYXJhY3RlcjoiXFxlYWRiIn0pLFluLmRpZmZBZGRlZD1uZXcgWW4oImRpZmYtYWRkZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGMifSksWW4uZGlmZklnbm9yZWQ9bmV3IFluKCJkaWZmLWlnbm9yZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZGQifSksWW4uZGlmZk1vZGlmaWVkPW5ldyBZbigiZGlmZi1tb2RpZmllZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZSJ9KSxZbi5kaWZmUmVtb3ZlZD1uZXcgWW4oImRpZmYtcmVtb3ZlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFkZiJ9KSxZbi5kaWZmUmVuYW1lZD1uZXcgWW4oImRpZmYtcmVuYW1lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMCJ9KSxZbi5kaWZmPW5ldyBZbigiZGlmZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMSJ9KSxZbi5kaXNjYXJkPW5ldyBZbigiZGlzY2FyZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlMiJ9KSxZbi5lZGl0b3JMYXlvdXQ9bmV3IFluKCJlZGl0b3ItbGF5b3V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWUzIn0pLFluLmVtcHR5V2luZG93PW5ldyBZbigiZW1wdHktd2luZG93Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU0In0pLFluLmV4Y2x1ZGU9bmV3IFluKCJleGNsdWRlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU1In0pLFluLmV4dGVuc2lvbnM9bmV3IFluKCJleHRlbnNpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYWU2In0pLFluLmV5ZUNsb3NlZD1uZXcgWW4oImV5ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZTcifSksWW4uZmlsZUJpbmFyeT1uZXcgWW4oImZpbGUtYmluYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYWU4In0pLFluLmZpbGVDb2RlPW5ldyBZbigiZmlsZS1jb2RlIix7Zm9udENoYXJhY3RlcjoiXFxlYWU5In0pLFluLmZpbGVNZWRpYT1uZXcgWW4oImZpbGUtbWVkaWEiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWEifSksWW4uZmlsZVBkZj1uZXcgWW4oImZpbGUtcGRmIix7Zm9udENoYXJhY3RlcjoiXFxlYWViIn0pLFluLmZpbGVTdWJtb2R1bGU9bmV3IFluKCJmaWxlLXN1Ym1vZHVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFlYyJ9KSxZbi5maWxlU3ltbGlua0RpcmVjdG9yeT1uZXcgWW4oImZpbGUtc3ltbGluay1kaXJlY3RvcnkiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWQifSksWW4uZmlsZVN5bWxpbmtGaWxlPW5ldyBZbigiZmlsZS1zeW1saW5rLWZpbGUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZWUifSksWW4uZmlsZVppcD1uZXcgWW4oImZpbGUtemlwIix7Zm9udENoYXJhY3RlcjoiXFxlYWVmIn0pLFluLmZpbGVzPW5ldyBZbigiZmlsZXMiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjAifSksWW4uZmlsdGVyPW5ldyBZbigiZmlsdGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYWYxIn0pLFluLmZsYW1lPW5ldyBZbigiZmxhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjIifSksWW4uZm9sZERvd249bmV3IFluKCJmb2xkLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZjMifSksWW4uZm9sZFVwPW5ldyBZbigiZm9sZC11cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNCJ9KSxZbi5mb2xkPW5ldyBZbigiZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWFmNSJ9KSxZbi5mb2xkZXJBY3RpdmU9bmV3IFluKCJmb2xkZXItYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYWY2In0pLFluLmZvbGRlck9wZW5lZD1uZXcgWW4oImZvbGRlci1vcGVuZWQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjcifSksWW4uZ2Vhcj1uZXcgWW4oImdlYXIiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjgifSksWW4uZ2lmdD1uZXcgWW4oImdpZnQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZjkifSksWW4uZ2lzdFNlY3JldD1uZXcgWW4oImdpc3Qtc2VjcmV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZhIn0pLFluLmdpc3Q9bmV3IFluKCJnaXN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYWZiIn0pLFluLmdpdENvbW1pdD1uZXcgWW4oImdpdC1jb21taXQiLHtmb250Q2hhcmFjdGVyOiJcXGVhZmMifSksWW4uZ2l0Q29tcGFyZT1uZXcgWW4oImdpdC1jb21wYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZkIn0pLFluLmdpdE1lcmdlPW5ldyBZbigiZ2l0LW1lcmdlIix7Zm9udENoYXJhY3RlcjoiXFxlYWZlIn0pLFluLmdpdGh1YkFjdGlvbj1uZXcgWW4oImdpdGh1Yi1hY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGVhZmYifSksWW4uZ2l0aHViQWx0PW5ldyBZbigiZ2l0aHViLWFsdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwMCJ9KSxZbi5nbG9iZT1uZXcgWW4oImdsb2JlIix7Zm9udENoYXJhY3RlcjoiXFxlYjAxIn0pLFluLmdyYWJiZXI9bmV3IFluKCJncmFiYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjAyIn0pLFluLmdyYXBoPW5ldyBZbigiZ3JhcGgiLHtmb250Q2hhcmFjdGVyOiJcXGViMDMifSksWW4uZ3JpcHBlcj1uZXcgWW4oImdyaXBwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMDQifSksWW4uaGVhcnQ9bmV3IFluKCJoZWFydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNSJ9KSxZbi5ob21lPW5ldyBZbigiaG9tZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNiJ9KSxZbi5ob3Jpem9udGFsUnVsZT1uZXcgWW4oImhvcml6b250YWwtcnVsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwNyJ9KSxZbi5odWJvdD1uZXcgWW4oImh1Ym90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjA4In0pLFluLmluYm94PW5ldyBZbigiaW5ib3giLHtmb250Q2hhcmFjdGVyOiJcXGViMDkifSksWW4uaXNzdWVDbG9zZWQ9bmV3IFluKCJpc3N1ZS1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksWW4uaXNzdWVSZW9wZW5lZD1uZXcgWW4oImlzc3VlLXJlb3BlbmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjBiIn0pLFluLmlzc3Vlcz1uZXcgWW4oImlzc3VlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIwYyJ9KSxZbi5pdGFsaWM9bmV3IFluKCJpdGFsaWMiLHtmb250Q2hhcmFjdGVyOiJcXGViMGQifSksWW4uamVyc2V5PW5ldyBZbigiamVyc2V5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjBlIn0pLFluLmpzb249bmV3IFluKCJqc29uIix7Zm9udENoYXJhY3RlcjoiXFxlYjBmIn0pLFluLmtlYmFiVmVydGljYWw9bmV3IFluKCJrZWJhYi12ZXJ0aWNhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMCJ9KSxZbi5rZXk9bmV3IFluKCJrZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViMTEifSksWW4ubGF3PW5ldyBZbigibGF3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjEyIn0pLFluLmxpZ2h0YnVsYkF1dG9maXg9bmV3IFluKCJsaWdodGJ1bGItYXV0b2ZpeCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxMyJ9KSxZbi5saW5rRXh0ZXJuYWw9bmV3IFluKCJsaW5rLWV4dGVybmFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjE0In0pLFluLmxpbms9bmV3IFluKCJsaW5rIix7Zm9udENoYXJhY3RlcjoiXFxlYjE1In0pLFluLmxpc3RPcmRlcmVkPW5ldyBZbigibGlzdC1vcmRlcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjE2In0pLFluLmxpc3RVbm9yZGVyZWQ9bmV3IFluKCJsaXN0LXVub3JkZXJlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxNyJ9KSxZbi5saXZlU2hhcmU9bmV3IFluKCJsaXZlLXNoYXJlIix7Zm9udENoYXJhY3RlcjoiXFxlYjE4In0pLFluLmxvYWRpbmc9bmV3IFluKCJsb2FkaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjE5In0pLFluLmxvY2F0aW9uPW5ldyBZbigibG9jYXRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWEifSksWW4ubWFpbFJlYWQ9bmV3IFluKCJtYWlsLXJlYWQiLHtmb250Q2hhcmFjdGVyOiJcXGViMWIifSksWW4ubWFpbD1uZXcgWW4oIm1haWwiLHtmb250Q2hhcmFjdGVyOiJcXGViMWMifSksWW4ubWFya2Rvd249bmV3IFluKCJtYXJrZG93biIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIxZCJ9KSxZbi5tZWdhcGhvbmU9bmV3IFluKCJtZWdhcGhvbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViMWUifSksWW4ubWVudGlvbj1uZXcgWW4oIm1lbnRpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMWYifSksWW4ubWlsZXN0b25lPW5ldyBZbigibWlsZXN0b25lIix7Zm9udENoYXJhY3RlcjoiXFxlYjIwIn0pLFluLm1vcnRhckJvYXJkPW5ldyBZbigibW9ydGFyLWJvYXJkIix7Zm9udENoYXJhY3RlcjoiXFxlYjIxIn0pLFluLm1vdmU9bmV3IFluKCJtb3ZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjIyIn0pLFluLm11bHRpcGxlV2luZG93cz1uZXcgWW4oIm11bHRpcGxlLXdpbmRvd3MiLHtmb250Q2hhcmFjdGVyOiJcXGViMjMifSksWW4ubXV0ZT1uZXcgWW4oIm11dGUiLHtmb250Q2hhcmFjdGVyOiJcXGViMjQifSksWW4ubm9OZXdsaW5lPW5ldyBZbigibm8tbmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNSJ9KSxZbi5ub3RlPW5ldyBZbigibm90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyNiJ9KSxZbi5vY3RvZmFjZT1uZXcgWW4oIm9jdG9mYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjI3In0pLFluLm9wZW5QcmV2aWV3PW5ldyBZbigib3Blbi1wcmV2aWV3Iix7Zm9udENoYXJhY3RlcjoiXFxlYjI4In0pLFluLnBhY2thZ2VfPW5ldyBZbigicGFja2FnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyOSJ9KSxZbi5wYWludGNhbj1uZXcgWW4oInBhaW50Y2FuIix7Zm9udENoYXJhY3RlcjoiXFxlYjJhIn0pLFluLnBpbj1uZXcgWW4oInBpbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYiJ9KSxZbi5wbGF5PW5ldyBZbigicGxheSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyYyJ9KSxZbi5ydW49bmV3IFluKCJydW4iLHtmb250Q2hhcmFjdGVyOiJcXGViMmMifSksWW4ucGx1Zz1uZXcgWW4oInBsdWciLHtmb250Q2hhcmFjdGVyOiJcXGViMmQifSksWW4ucHJlc2VydmVDYXNlPW5ldyBZbigicHJlc2VydmUtY2FzZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZSJ9KSxZbi5wcmV2aWV3PW5ldyBZbigicHJldmlldyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIyZiJ9KSxZbi5wcm9qZWN0PW5ldyBZbigicHJvamVjdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMCJ9KSxZbi5wdWxzZT1uZXcgWW4oInB1bHNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjMxIn0pLFluLnF1ZXN0aW9uPW5ldyBZbigicXVlc3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViMzIifSksWW4ucXVvdGU9bmV3IFluKCJxdW90ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzMyJ9KSxZbi5yYWRpb1Rvd2VyPW5ldyBZbigicmFkaW8tdG93ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzQifSksWW4ucmVhY3Rpb25zPW5ldyBZbigicmVhY3Rpb25zIix7Zm9udENoYXJhY3RlcjoiXFxlYjM1In0pLFluLnJlZmVyZW5jZXM9bmV3IFluKCJyZWZlcmVuY2VzIix7Zm9udENoYXJhY3RlcjoiXFxlYjM2In0pLFluLnJlZnJlc2g9bmV3IFluKCJyZWZyZXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjM3In0pLFluLnJlZ2V4PW5ldyBZbigicmVnZXgiLHtmb250Q2hhcmFjdGVyOiJcXGViMzgifSksWW4ucmVtb3RlRXhwbG9yZXI9bmV3IFluKCJyZW1vdGUtZXhwbG9yZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViMzkifSksWW4ucmVtb3RlPW5ldyBZbigicmVtb3RlIix7Zm9udENoYXJhY3RlcjoiXFxlYjNhIn0pLFluLnJlbW92ZT1uZXcgWW4oInJlbW92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzYiJ9KSxZbi5yZXBsYWNlQWxsPW5ldyBZbigicmVwbGFjZS1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViM2MifSksWW4ucmVwbGFjZT1uZXcgWW4oInJlcGxhY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViM2QifSksWW4ucmVwb0Nsb25lPW5ldyBZbigicmVwby1jbG9uZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWIzZSJ9KSxZbi5yZXBvRm9yY2VQdXNoPW5ldyBZbigicmVwby1mb3JjZS1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjNmIn0pLFluLnJlcG9QdWxsPW5ldyBZbigicmVwby1wdWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjQwIn0pLFluLnJlcG9QdXNoPW5ldyBZbigicmVwby1wdXNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjQxIn0pLFluLnJlcG9ydD1uZXcgWW4oInJlcG9ydCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MiJ9KSxZbi5yZXF1ZXN0Q2hhbmdlcz1uZXcgWW4oInJlcXVlc3QtY2hhbmdlcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0MyJ9KSxZbi5yb2NrZXQ9bmV3IFluKCJyb2NrZXQiLHtmb250Q2hhcmFjdGVyOiJcXGViNDQifSksWW4ucm9vdEZvbGRlck9wZW5lZD1uZXcgWW4oInJvb3QtZm9sZGVyLW9wZW5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0NSJ9KSxZbi5yb290Rm9sZGVyPW5ldyBZbigicm9vdC1mb2xkZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNDYifSksWW4ucnNzPW5ldyBZbigicnNzIix7Zm9udENoYXJhY3RlcjoiXFxlYjQ3In0pLFluLnJ1Ynk9bmV3IFluKCJydWJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjQ4In0pLFluLnNhdmVBbGw9bmV3IFluKCJzYXZlLWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0OSJ9KSxZbi5zYXZlQXM9bmV3IFluKCJzYXZlLWFzIix7Zm9udENoYXJhY3RlcjoiXFxlYjRhIn0pLFluLnNhdmU9bmV3IFluKCJzYXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjRiIn0pLFluLnNjcmVlbkZ1bGw9bmV3IFluKCJzY3JlZW4tZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0YyJ9KSxZbi5zY3JlZW5Ob3JtYWw9bmV3IFluKCJzY3JlZW4tbm9ybWFsIix7Zm9udENoYXJhY3RlcjoiXFxlYjRkIn0pLFluLnNlYXJjaFN0b3A9bmV3IFluKCJzZWFyY2gtc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI0ZSJ9KSxZbi5zZXJ2ZXI9bmV3IFluKCJzZXJ2ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViNTAifSksWW4uc2V0dGluZ3NHZWFyPW5ldyBZbigic2V0dGluZ3MtZ2VhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MSJ9KSxZbi5zZXR0aW5ncz1uZXcgWW4oInNldHRpbmdzIix7Zm9udENoYXJhY3RlcjoiXFxlYjUyIn0pLFluLnNoaWVsZD1uZXcgWW4oInNoaWVsZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1MyJ9KSxZbi5zbWlsZXk9bmV3IFluKCJzbWlsZXkiLHtmb250Q2hhcmFjdGVyOiJcXGViNTQifSksWW4uc29ydFByZWNlZGVuY2U9bmV3IFluKCJzb3J0LXByZWNlZGVuY2UiLHtmb250Q2hhcmFjdGVyOiJcXGViNTUifSksWW4uc3BsaXRIb3Jpem9udGFsPW5ldyBZbigic3BsaXQtaG9yaXpvbnRhbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1NiJ9KSxZbi5zcGxpdFZlcnRpY2FsPW5ldyBZbigic3BsaXQtdmVydGljYWwiLHtmb250Q2hhcmFjdGVyOiJcXGViNTcifSksWW4uc3F1aXJyZWw9bmV3IFluKCJzcXVpcnJlbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OCJ9KSxZbi5zdGFyRnVsbD1uZXcgWW4oInN0YXItZnVsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1OSJ9KSxZbi5zdGFySGFsZj1uZXcgWW4oInN0YXItaGFsZiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YSJ9KSxZbi5zeW1ib2xDbGFzcz1uZXcgWW4oInN5bWJvbC1jbGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YiJ9KSxZbi5zeW1ib2xDb2xvcj1uZXcgWW4oInN5bWJvbC1jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxZbi5zeW1ib2xDdXN0b21Db2xvcj1uZXcgWW4oInN5bWJvbC1jdXN0b21jb2xvciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1YyJ9KSxZbi5zeW1ib2xDb25zdGFudD1uZXcgWW4oInN5bWJvbC1jb25zdGFudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI1ZCJ9KSxZbi5zeW1ib2xFbnVtTWVtYmVyPW5ldyBZbigic3ltYm9sLWVudW0tbWVtYmVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjVlIn0pLFluLnN5bWJvbEZpZWxkPW5ldyBZbigic3ltYm9sLWZpZWxkIix7Zm9udENoYXJhY3RlcjoiXFxlYjVmIn0pLFluLnN5bWJvbEZpbGU9bmV3IFluKCJzeW1ib2wtZmlsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MCJ9KSxZbi5zeW1ib2xJbnRlcmZhY2U9bmV3IFluKCJzeW1ib2wtaW50ZXJmYWNlIix7Zm9udENoYXJhY3RlcjoiXFxlYjYxIn0pLFluLnN5bWJvbEtleXdvcmQ9bmV3IFluKCJzeW1ib2wta2V5d29yZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2MiJ9KSxZbi5zeW1ib2xNaXNjPW5ldyBZbigic3ltYm9sLW1pc2MiLHtmb250Q2hhcmFjdGVyOiJcXGViNjMifSksWW4uc3ltYm9sT3BlcmF0b3I9bmV3IFluKCJzeW1ib2wtb3BlcmF0b3IiLHtmb250Q2hhcmFjdGVyOiJcXGViNjQifSksWW4uc3ltYm9sUHJvcGVydHk9bmV3IFluKCJzeW1ib2wtcHJvcGVydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksWW4ud3JlbmNoPW5ldyBZbigid3JlbmNoIix7Zm9udENoYXJhY3RlcjoiXFxlYjY1In0pLFluLndyZW5jaFN1YmFjdGlvbj1uZXcgWW4oIndyZW5jaC1zdWJhY3Rpb24iLHtmb250Q2hhcmFjdGVyOiJcXGViNjUifSksWW4uc3ltYm9sU25pcHBldD1uZXcgWW4oInN5bWJvbC1zbmlwcGV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYjY2In0pLFluLnRhc2tsaXN0PW5ldyBZbigidGFza2xpc3QiLHtmb250Q2hhcmFjdGVyOiJcXGViNjcifSksWW4udGVsZXNjb3BlPW5ldyBZbigidGVsZXNjb3BlIix7Zm9udENoYXJhY3RlcjoiXFxlYjY4In0pLFluLnRleHRTaXplPW5ldyBZbigidGV4dC1zaXplIix7Zm9udENoYXJhY3RlcjoiXFxlYjY5In0pLFluLnRocmVlQmFycz1uZXcgWW4oInRocmVlLWJhcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViNmEifSksWW4udGh1bWJzZG93bj1uZXcgWW4oInRodW1ic2Rvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmIifSksWW4udGh1bWJzdXA9bmV3IFluKCJ0aHVtYnN1cCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2YyJ9KSxZbi50b29scz1uZXcgWW4oInRvb2xzIix7Zm9udENoYXJhY3RlcjoiXFxlYjZkIn0pLFluLnRyaWFuZ2xlRG93bj1uZXcgWW4oInRyaWFuZ2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViNmUifSksWW4udHJpYW5nbGVMZWZ0PW5ldyBZbigidHJpYW5nbGUtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI2ZiJ9KSxZbi50cmlhbmdsZVJpZ2h0PW5ldyBZbigidHJpYW5nbGUtcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzAifSksWW4udHJpYW5nbGVVcD1uZXcgWW4oInRyaWFuZ2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYjcxIn0pLFluLnR3aXR0ZXI9bmV3IFluKCJ0d2l0dGVyIix7Zm9udENoYXJhY3RlcjoiXFxlYjcyIn0pLFluLnVuZm9sZD1uZXcgWW4oInVuZm9sZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3MyJ9KSxZbi51bmxvY2s9bmV3IFluKCJ1bmxvY2siLHtmb250Q2hhcmFjdGVyOiJcXGViNzQifSksWW4udW5tdXRlPW5ldyBZbigidW5tdXRlIix7Zm9udENoYXJhY3RlcjoiXFxlYjc1In0pLFluLnVudmVyaWZpZWQ9bmV3IFluKCJ1bnZlcmlmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjc2In0pLFluLnZlcmlmaWVkPW5ldyBZbigidmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViNzcifSksWW4udmVyc2lvbnM9bmV3IFluKCJ2ZXJzaW9ucyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OCJ9KSxZbi52bUFjdGl2ZT1uZXcgWW4oInZtLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3OSJ9KSxZbi52bU91dGxpbmU9bmV3IFluKCJ2bS1vdXRsaW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYjdhIn0pLFluLnZtUnVubmluZz1uZXcgWW4oInZtLXJ1bm5pbmciLHtmb250Q2hhcmFjdGVyOiJcXGViN2IifSksWW4ud2F0Y2g9bmV3IFluKCJ3YXRjaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3YyJ9KSxZbi53aGl0ZXNwYWNlPW5ldyBZbigid2hpdGVzcGFjZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZCJ9KSxZbi53aG9sZVdvcmQ9bmV3IFluKCJ3aG9sZS13b3JkIix7Zm9udENoYXJhY3RlcjoiXFxlYjdlIn0pLFluLndpbmRvdz1uZXcgWW4oIndpbmRvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI3ZiJ9KSxZbi53b3JkV3JhcD1uZXcgWW4oIndvcmQtd3JhcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MCJ9KSxZbi56b29tSW49bmV3IFluKCJ6b29tLWluIix7Zm9udENoYXJhY3RlcjoiXFxlYjgxIn0pLFluLnpvb21PdXQ9bmV3IFluKCJ6b29tLW91dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4MiJ9KSxZbi5saXN0RmlsdGVyPW5ldyBZbigibGlzdC1maWx0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViODMifSksWW4ubGlzdEZsYXQ9bmV3IFluKCJsaXN0LWZsYXQiLHtmb250Q2hhcmFjdGVyOiJcXGViODQifSksWW4ubGlzdFNlbGVjdGlvbj1uZXcgWW4oImxpc3Qtc2VsZWN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg1In0pLFluLnNlbGVjdGlvbj1uZXcgWW4oInNlbGVjdGlvbiIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NSJ9KSxZbi5saXN0VHJlZT1uZXcgWW4oImxpc3QtdHJlZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4NiJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvblVudmVyaWZpZWQ9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViODcifSksWW4uZGVidWdCcmVha3BvaW50RnVuY3Rpb249bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLFluLmRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ9bmV3IFluKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjg4In0pLFluLmRlYnVnU3RhY2tmcmFtZUFjdGl2ZT1uZXcgWW4oImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYjg5In0pLFluLmRlYnVnU3RhY2tmcmFtZURvdD1uZXcgWW4oImRlYnVnLXN0YWNrZnJhbWUtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYjhhIn0pLFluLmRlYnVnU3RhY2tmcmFtZT1uZXcgWW4oImRlYnVnLXN0YWNrZnJhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGIifSksWW4uZGVidWdTdGFja2ZyYW1lRm9jdXNlZD1uZXcgWW4oImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4YiJ9KSxZbi5kZWJ1Z0JyZWFrcG9pbnRVbnN1cHBvcnRlZD1uZXcgWW4oImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViOGMifSksWW4uc3ltYm9sU3RyaW5nPW5ldyBZbigic3ltYm9sLXN0cmluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZCJ9KSxZbi5kZWJ1Z1JldmVyc2VDb250aW51ZT1uZXcgWW4oImRlYnVnLXJldmVyc2UtY29udGludWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOGUifSksWW4uZGVidWdTdGVwQmFjaz1uZXcgWW4oImRlYnVnLXN0ZXAtYmFjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI4ZiJ9KSxZbi5kZWJ1Z1Jlc3RhcnRGcmFtZT1uZXcgWW4oImRlYnVnLXJlc3RhcnQtZnJhbWUiLHtmb250Q2hhcmFjdGVyOiJcXGViOTAifSksWW4uY2FsbEluY29taW5nPW5ldyBZbigiY2FsbC1pbmNvbWluZyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MiJ9KSxZbi5jYWxsT3V0Z29pbmc9bmV3IFluKCJjYWxsLW91dGdvaW5nIix7Zm9udENoYXJhY3RlcjoiXFxlYjkzIn0pLFluLm1lbnU9bmV3IFluKCJtZW51Iix7Zm9udENoYXJhY3RlcjoiXFxlYjk0In0pLFluLmV4cGFuZEFsbD1uZXcgWW4oImV4cGFuZC1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViOTUifSksWW4uZmVlZGJhY2s9bmV3IFluKCJmZWVkYmFjayIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5NiJ9KSxZbi5ncm91cEJ5UmVmVHlwZT1uZXcgWW4oImdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk3In0pLFluLnVuZ3JvdXBCeVJlZlR5cGU9bmV3IFluKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIix7Zm9udENoYXJhY3RlcjoiXFxlYjk4In0pLFluLmFjY291bnQ9bmV3IFluKCJhY2NvdW50Iix7Zm9udENoYXJhY3RlcjoiXFxlYjk5In0pLFluLmJlbGxEb3Q9bmV3IFluKCJiZWxsLWRvdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5YSJ9KSxZbi5kZWJ1Z0NvbnNvbGU9bmV3IFluKCJkZWJ1Zy1jb25zb2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYjliIn0pLFluLmxpYnJhcnk9bmV3IFluKCJsaWJyYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYjljIn0pLFluLm91dHB1dD1uZXcgWW4oIm91dHB1dCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5ZCJ9KSxZbi5ydW5BbGw9bmV3IFluKCJydW4tYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYjllIn0pLFluLnN5bmNJZ25vcmVkPW5ldyBZbigic3luYy1pZ25vcmVkIix7Zm9udENoYXJhY3RlcjoiXFxlYjlmIn0pLFluLnBpbm5lZD1uZXcgWW4oInBpbm5lZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMCJ9KSxZbi5naXRodWJJbnZlcnRlZD1uZXcgWW4oImdpdGh1Yi1pbnZlcnRlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhMSJ9KSxZbi5kZWJ1Z0FsdD1uZXcgWW4oImRlYnVnLWFsdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWI5MSJ9KSxZbi5zZXJ2ZXJQcm9jZXNzPW5ldyBZbigic2VydmVyLXByb2Nlc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViYTIifSksWW4uc2VydmVyRW52aXJvbm1lbnQ9bmV3IFluKCJzZXJ2ZXItZW52aXJvbm1lbnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTMifSksWW4ucGFzcz1uZXcgWW4oInBhc3MiLHtmb250Q2hhcmFjdGVyOiJcXGViYTQifSksWW4uc3RvcENpcmNsZT1uZXcgWW4oInN0b3AtY2lyY2xlIix7Zm9udENoYXJhY3RlcjoiXFxlYmE1In0pLFluLnBsYXlDaXJjbGU9bmV3IFluKCJwbGF5LWNpcmNsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhNiJ9KSxZbi5yZWNvcmQ9bmV3IFluKCJyZWNvcmQiLHtmb250Q2hhcmFjdGVyOiJcXGViYTcifSksWW4uZGVidWdBbHRTbWFsbD1uZXcgWW4oImRlYnVnLWFsdC1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhOCJ9KSxZbi52bUNvbm5lY3Q9bmV3IFluKCJ2bS1jb25uZWN0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmE5In0pLFluLmNsb3VkPW5ldyBZbigiY2xvdWQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWEifSksWW4ubWVyZ2U9bmV3IFluKCJtZXJnZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJhYiJ9KSxZbi5leHBvcnRJY29uPW5ldyBZbigiZXhwb3J0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFjIn0pLFluLmdyYXBoTGVmdD1uZXcgWW4oImdyYXBoLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViYWQifSksWW4ubWFnbmV0PW5ldyBZbigibWFnbmV0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmFlIn0pLFluLm5vdGVib29rPW5ldyBZbigibm90ZWJvb2siLHtmb250Q2hhcmFjdGVyOiJcXGViYWYifSksWW4ucmVkbz1uZXcgWW4oInJlZG8iLHtmb250Q2hhcmFjdGVyOiJcXGViYjAifSksWW4uY2hlY2tBbGw9bmV3IFluKCJjaGVjay1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViYjEifSksWW4ucGlubmVkRGlydHk9bmV3IFluKCJwaW5uZWQtZGlydHkiLHtmb250Q2hhcmFjdGVyOiJcXGViYjIifSksWW4ucGFzc0ZpbGxlZD1uZXcgWW4oInBhc3MtZmlsbGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmIzIn0pLFluLmNpcmNsZUxhcmdlRmlsbGVkPW5ldyBZbigiY2lyY2xlLWxhcmdlLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNCJ9KSxZbi5jaXJjbGVMYXJnZU91dGxpbmU9bmV3IFluKCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNSJ9KSxZbi5jb21iaW5lPW5ldyBZbigiY29tYmluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNiJ9KSxZbi5nYXRoZXI9bmV3IFluKCJnYXRoZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViYjYifSksWW4udGFibGU9bmV3IFluKCJ0YWJsZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiNyJ9KSxZbi52YXJpYWJsZUdyb3VwPW5ldyBZbigidmFyaWFibGUtZ3JvdXAiLHtmb250Q2hhcmFjdGVyOiJcXGViYjgifSksWW4udHlwZUhpZXJhcmNoeT1uZXcgWW4oInR5cGUtaGllcmFyY2h5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmI5In0pLFluLnR5cGVIaWVyYXJjaHlTdWI9bmV3IFluKCJ0eXBlLWhpZXJhcmNoeS1zdWIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmEifSksWW4udHlwZUhpZXJhcmNoeVN1cGVyPW5ldyBZbigidHlwZS1oaWVyYXJjaHktc3VwZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViYmIifSksWW4uZ2l0UHVsbFJlcXVlc3RDcmVhdGU9bmV3IFluKCJnaXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiYyJ9KSxZbi5ydW5BYm92ZT1uZXcgWW4oInJ1bi1hYm92ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZCJ9KSxZbi5ydW5CZWxvdz1uZXcgWW4oInJ1bi1iZWxvdyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJiZSJ9KSxZbi5ub3RlYm9va1RlbXBsYXRlPW5ldyBZbigibm90ZWJvb2stdGVtcGxhdGUiLHtmb250Q2hhcmFjdGVyOiJcXGViYmYifSksWW4uZGVidWdSZXJ1bj1uZXcgWW4oImRlYnVnLXJlcnVuIix7Zm9udENoYXJhY3RlcjoiXFxlYmMwIn0pLFluLndvcmtzcGFjZVRydXN0ZWQ9bmV3IFluKCJ3b3Jrc3BhY2UtdHJ1c3RlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjMSJ9KSxZbi53b3Jrc3BhY2VVbnRydXN0ZWQ9bmV3IFluKCJ3b3Jrc3BhY2UtdW50cnVzdGVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMyIn0pLFluLndvcmtzcGFjZVVuc3BlY2lmaWVkPW5ldyBZbigid29ya3NwYWNlLXVuc3BlY2lmaWVkIix7Zm9udENoYXJhY3RlcjoiXFxlYmMzIn0pLFluLnRlcm1pbmFsQ21kPW5ldyBZbigidGVybWluYWwtY21kIix7Zm9udENoYXJhY3RlcjoiXFxlYmM0In0pLFluLnRlcm1pbmFsRGViaWFuPW5ldyBZbigidGVybWluYWwtZGViaWFuIix7Zm9udENoYXJhY3RlcjoiXFxlYmM1In0pLFluLnRlcm1pbmFsTGludXg9bmV3IFluKCJ0ZXJtaW5hbC1saW51eCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjNiJ9KSxZbi50ZXJtaW5hbFBvd2Vyc2hlbGw9bmV3IFluKCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmM3In0pLFluLnRlcm1pbmFsVG11eD1uZXcgWW4oInRlcm1pbmFsLXRtdXgiLHtmb250Q2hhcmFjdGVyOiJcXGViYzgifSksWW4udGVybWluYWxVYnVudHU9bmV3IFluKCJ0ZXJtaW5hbC11YnVudHUiLHtmb250Q2hhcmFjdGVyOiJcXGViYzkifSksWW4udGVybWluYWxCYXNoPW5ldyBZbigidGVybWluYWwtYmFzaCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjYSJ9KSxZbi5hcnJvd1N3YXA9bmV3IFluKCJhcnJvdy1zd2FwIix7Zm9udENoYXJhY3RlcjoiXFxlYmNiIn0pLFluLmNvcHk9bmV3IFluKCJjb3B5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmNjIn0pLFluLnBlcnNvbkFkZD1uZXcgWW4oInBlcnNvbi1hZGQiLHtmb250Q2hhcmFjdGVyOiJcXGViY2QifSksWW4uZmlsdGVyRmlsbGVkPW5ldyBZbigiZmlsdGVyLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZSJ9KSxZbi53YW5kPW5ldyBZbigid2FuZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJjZiJ9KSxZbi5kZWJ1Z0xpbmVCeUxpbmU9bmV3IFluKCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDAifSksWW4uaW5zcGVjdD1uZXcgWW4oImluc3BlY3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDEifSksWW4ubGF5ZXJzPW5ldyBZbigibGF5ZXJzIix7Zm9udENoYXJhY3RlcjoiXFxlYmQyIn0pLFluLmxheWVyc0RvdD1uZXcgWW4oImxheWVycy1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDMifSksWW4ubGF5ZXJzQWN0aXZlPW5ldyBZbigibGF5ZXJzLWFjdGl2ZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNCJ9KSxZbi5jb21wYXNzPW5ldyBZbigiY29tcGFzcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJkNSJ9KSxZbi5jb21wYXNzRG90PW5ldyBZbigiY29tcGFzcy1kb3QiLHtmb250Q2hhcmFjdGVyOiJcXGViZDYifSksWW4uY29tcGFzc0FjdGl2ZT1uZXcgWW4oImNvbXBhc3MtYWN0aXZlIix7Zm9udENoYXJhY3RlcjoiXFxlYmQ3In0pLFluLmF6dXJlPW5ldyBZbigiYXp1cmUiLHtmb250Q2hhcmFjdGVyOiJcXGViZDgifSksWW4uaXNzdWVEcmFmdD1uZXcgWW4oImlzc3VlLWRyYWZ0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmQ5In0pLFluLmdpdFB1bGxSZXF1ZXN0Q2xvc2VkPW5ldyBZbigiZ2l0LXB1bGwtcmVxdWVzdC1jbG9zZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGEifSksWW4uZ2l0UHVsbFJlcXVlc3REcmFmdD1uZXcgWW4oImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZGIifSksWW4uZGVidWdBbGw9bmV3IFluKCJkZWJ1Zy1hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZGMifSksWW4uZGVidWdDb3ZlcmFnZT1uZXcgWW4oImRlYnVnLWNvdmVyYWdlIix7Zm9udENoYXJhY3RlcjoiXFxlYmRkIn0pLFluLnJ1bkVycm9ycz1uZXcgWW4oInJ1bi1lcnJvcnMiLHtmb250Q2hhcmFjdGVyOiJcXGViZGUifSksWW4uZm9sZGVyTGlicmFyeT1uZXcgWW4oImZvbGRlci1saWJyYXJ5Iix7Zm9udENoYXJhY3RlcjoiXFxlYmRmIn0pLFluLmRlYnVnQ29udGludWVTbWFsbD1uZXcgWW4oImRlYnVnLWNvbnRpbnVlLXNtYWxsIix7Zm9udENoYXJhY3RlcjoiXFxlYmUwIn0pLFluLmJlYWtlclN0b3A9bmV3IFluKCJiZWFrZXItc3RvcCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlMSJ9KSxZbi5ncmFwaExpbmU9bmV3IFluKCJncmFwaC1saW5lIix7Zm9udENoYXJhY3RlcjoiXFxlYmUyIn0pLFluLmdyYXBoU2NhdHRlcj1uZXcgWW4oImdyYXBoLXNjYXR0ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZTMifSksWW4ucGllQ2hhcnQ9bmV3IFluKCJwaWUtY2hhcnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZTQifSksWW4uYnJhY2tldD1uZXcgWW4oImJyYWNrZXQiLFluLmpzb24uZGVmaW5pdGlvbiksWW4uYnJhY2tldERvdD1uZXcgWW4oImJyYWNrZXQtZG90Iix7Zm9udENoYXJhY3RlcjoiXFxlYmU1In0pLFluLmJyYWNrZXRFcnJvcj1uZXcgWW4oImJyYWNrZXQtZXJyb3IiLHtmb250Q2hhcmFjdGVyOiJcXGViZTYifSksWW4ubG9ja1NtYWxsPW5ldyBZbigibG9jay1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlNyJ9KSxZbi5henVyZURldm9wcz1uZXcgWW4oImF6dXJlLWRldm9wcyIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlOCJ9KSxZbi52ZXJpZmllZEZpbGxlZD1uZXcgWW4oInZlcmlmaWVkLWZpbGxlZCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlOSJ9KSxZbi5uZXdMaW5lPW5ldyBZbigibmV3bGluZSIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlYSJ9KSxZbi5sYXlvdXQ9bmV3IFluKCJsYXlvdXQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWIifSksWW4ubGF5b3V0QWN0aXZpdHliYXJMZWZ0PW5ldyBZbigibGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZWMifSksWW4ubGF5b3V0QWN0aXZpdHliYXJSaWdodD1uZXcgWW4oImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZCJ9KSxZbi5sYXlvdXRQYW5lbExlZnQ9bmV3IFluKCJsYXlvdXQtcGFuZWwtbGVmdCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJlZSJ9KSxZbi5sYXlvdXRQYW5lbENlbnRlcj1uZXcgWW4oImxheW91dC1wYW5lbC1jZW50ZXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZWYifSksWW4ubGF5b3V0UGFuZWxKdXN0aWZ5PW5ldyBZbigibGF5b3V0LXBhbmVsLWp1c3RpZnkiLHtmb250Q2hhcmFjdGVyOiJcXGViZjAifSksWW4ubGF5b3V0UGFuZWxSaWdodD1uZXcgWW4oImxheW91dC1wYW5lbC1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMSJ9KSxZbi5sYXlvdXRQYW5lbD1uZXcgWW4oImxheW91dC1wYW5lbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmMiJ9KSxZbi5sYXlvdXRTaWRlYmFyTGVmdD1uZXcgWW4oImxheW91dC1zaWRlYmFyLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjMifSksWW4ubGF5b3V0U2lkZWJhclJpZ2h0PW5ldyBZbigibGF5b3V0LXNpZGViYXItcmlnaHQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjQifSksWW4ubGF5b3V0U3RhdHVzYmFyPW5ldyBZbigibGF5b3V0LXN0YXR1c2JhciIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmNSJ9KSxZbi5sYXlvdXRNZW51YmFyPW5ldyBZbigibGF5b3V0LW1lbnViYXIiLHtmb250Q2hhcmFjdGVyOiJcXGViZjYifSksWW4ubGF5b3V0Q2VudGVyZWQ9bmV3IFluKCJsYXlvdXQtY2VudGVyZWQiLHtmb250Q2hhcmFjdGVyOiJcXGViZjcifSksWW4udGFyZ2V0PW5ldyBZbigidGFyZ2V0Iix7Zm9udENoYXJhY3RlcjoiXFxlYmY4In0pLFluLmluZGVudD1uZXcgWW4oImluZGVudCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmOSJ9KSxZbi5yZWNvcmRTbWFsbD1uZXcgWW4oInJlY29yZC1zbWFsbCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmYSJ9KSxZbi5lcnJvclNtYWxsPW5ldyBZbigiZXJyb3Itc21hbGwiLHtmb250Q2hhcmFjdGVyOiJcXGViZmIifSksWW4uYXJyb3dDaXJjbGVEb3duPW5ldyBZbigiYXJyb3ctY2lyY2xlLWRvd24iLHtmb250Q2hhcmFjdGVyOiJcXGViZmMifSksWW4uYXJyb3dDaXJjbGVMZWZ0PW5ldyBZbigiYXJyb3ctY2lyY2xlLWxlZnQiLHtmb250Q2hhcmFjdGVyOiJcXGViZmQifSksWW4uYXJyb3dDaXJjbGVSaWdodD1uZXcgWW4oImFycm93LWNpcmNsZS1yaWdodCIse2ZvbnRDaGFyYWN0ZXI6IlxcZWJmZSJ9KSxZbi5hcnJvd0NpcmNsZVVwPW5ldyBZbigiYXJyb3ctY2lyY2xlLXVwIix7Zm9udENoYXJhY3RlcjoiXFxlYmZmIn0pLFluLmRpYWxvZ0Vycm9yPW5ldyBZbigiZGlhbG9nLWVycm9yIixZbi5lcnJvci5kZWZpbml0aW9uKSxZbi5kaWFsb2dXYXJuaW5nPW5ldyBZbigiZGlhbG9nLXdhcm5pbmciLFluLndhcm5pbmcuZGVmaW5pdGlvbiksWW4uZGlhbG9nSW5mbz1uZXcgWW4oImRpYWxvZy1pbmZvIixZbi5pbmZvLmRlZmluaXRpb24pLFluLmRpYWxvZ0Nsb3NlPW5ldyBZbigiZGlhbG9nLWNsb3NlIixZbi5jbG9zZS5kZWZpbml0aW9uKSxZbi50cmVlSXRlbUV4cGFuZGVkPW5ldyBZbigidHJlZS1pdGVtLWV4cGFuZGVkIixZbi5jaGV2cm9uRG93bi5kZWZpbml0aW9uKSxZbi50cmVlRmlsdGVyT25UeXBlT249bmV3IFluKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIixZbi5saXN0RmlsdGVyLmRlZmluaXRpb24pLFluLnRyZWVGaWx0ZXJPblR5cGVPZmY9bmV3IFluKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9mZiIsWW4ubGlzdFNlbGVjdGlvbi5kZWZpbml0aW9uKSxZbi50cmVlRmlsdGVyQ2xlYXI9bmV3IFluKCJ0cmVlLWZpbHRlci1jbGVhciIsWW4uY2xvc2UuZGVmaW5pdGlvbiksWW4udHJlZUl0ZW1Mb2FkaW5nPW5ldyBZbigidHJlZS1pdGVtLWxvYWRpbmciLFluLmxvYWRpbmcuZGVmaW5pdGlvbiksWW4ubWVudVNlbGVjdGlvbj1uZXcgWW4oIm1lbnUtc2VsZWN0aW9uIixZbi5jaGVjay5kZWZpbml0aW9uKSxZbi5tZW51U3VibWVudT1uZXcgWW4oIm1lbnUtc3VibWVudSIsWW4uY2hldnJvblJpZ2h0LmRlZmluaXRpb24pLFluLm1lbnVCYXJNb3JlPW5ldyBZbigibWVudWJhci1tb3JlIixZbi5tb3JlLmRlZmluaXRpb24pLFluLnNjcm9sbGJhckJ1dHRvbkxlZnQ9bmV3IFluKCJzY3JvbGxiYXItYnV0dG9uLWxlZnQiLFluLnRyaWFuZ2xlTGVmdC5kZWZpbml0aW9uKSxZbi5zY3JvbGxiYXJCdXR0b25SaWdodD1uZXcgWW4oInNjcm9sbGJhci1idXR0b24tcmlnaHQiLFluLnRyaWFuZ2xlUmlnaHQuZGVmaW5pdGlvbiksWW4uc2Nyb2xsYmFyQnV0dG9uVXA9bmV3IFluKCJzY3JvbGxiYXItYnV0dG9uLXVwIixZbi50cmlhbmdsZVVwLmRlZmluaXRpb24pLFluLnNjcm9sbGJhckJ1dHRvbkRvd249bmV3IFluKCJzY3JvbGxiYXItYnV0dG9uLWRvd24iLFluLnRyaWFuZ2xlRG93bi5kZWZpbml0aW9uKSxZbi50b29sQmFyTW9yZT1uZXcgWW4oInRvb2xiYXItbW9yZSIsWW4ubW9yZS5kZWZpbml0aW9uKSxZbi5xdWlja0lucHV0QmFjaz1uZXcgWW4oInF1aWNrLWlucHV0LWJhY2siLFluLmFycm93TGVmdC5kZWZpbml0aW9uKSxmdW5jdGlvbihlKXtlLmljb25OYW1lU2VnbWVudD0iW0EtWmEtejAtOV0rIixlLmljb25OYW1lRXhwcmVzc2lvbj0iW0EtWmEtejAtOS1dKyIsZS5pY29uTW9kaWZpZXJFeHByZXNzaW9uPSJ+W0EtWmEtel0rIixlLmljb25OYW1lQ2hhcmFjdGVyPSJbQS1aYS16MC05fi1dIjtjb25zdCB0PW5ldyBSZWdFeHAoYF4oJHtlLmljb25OYW1lRXhwcmVzc2lvbn0pKCR7ZS5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/JGApO2Z1bmN0aW9uIG4oZSl7aWYoZSBpbnN0YW5jZW9mIFluKXJldHVyblsiY29kaWNvbiIsImNvZGljb24tIitlLmlkXTtjb25zdCByPXQuZXhlYyhlLmlkKTtpZighcilyZXR1cm4gbihZbi5lcnJvcik7bGV0WyxpLG9dPXI7Y29uc3QgYT1bImNvZGljb24iLCJjb2RpY29uLSIraV07cmV0dXJuIG8mJmEucHVzaCgiY29kaWNvbi1tb2RpZmllci0iK28uc3Vic3RyKDEpKSxhfWUuYXNDbGFzc05hbWVBcnJheT1uLGUuYXNDbGFzc05hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSkuam9pbigiICIpfSxlLmFzQ1NTU2VsZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIi4iK24oZSkuam9pbigiLiIpfX0oRHR8fChEdD17fSkpO2NsYXNzIFFue2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLl90b2tlbkJyYW5kPXZvaWQgMCx0aGlzLm9mZnNldD1lLHRoaXMudHlwZT10LHRoaXMubGFuZ3VhZ2U9bn10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fWNsYXNzIGVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fdG9rZW5pemF0aW9uUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMudG9rZW5zPWUsdGhpcy5lbmRTdGF0ZT10fX1jbGFzcyB0cntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2VuY29kZWRUb2tlbml6YXRpb25SZXN1bHRCcmFuZD12b2lkIDAsdGhpcy50b2tlbnM9ZSx0aGlzLmVuZFN0YXRlPXR9fSFmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxZbi5zeW1ib2xNZXRob2QpLHQuc2V0KDEsWW4uc3ltYm9sRnVuY3Rpb24pLHQuc2V0KDIsWW4uc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMsWW4uc3ltYm9sRmllbGQpLHQuc2V0KDQsWW4uc3ltYm9sVmFyaWFibGUpLHQuc2V0KDUsWW4uc3ltYm9sQ2xhc3MpLHQuc2V0KDYsWW4uc3ltYm9sU3RydWN0KSx0LnNldCg3LFluLnN5bWJvbEludGVyZmFjZSksdC5zZXQoOCxZbi5zeW1ib2xNb2R1bGUpLHQuc2V0KDksWW4uc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLFluLnN5bWJvbEV2ZW50KSx0LnNldCgxMSxZbi5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIsWW4uc3ltYm9sVW5pdCksdC5zZXQoMTMsWW4uc3ltYm9sVmFsdWUpLHQuc2V0KDE1LFluLnN5bWJvbEVudW0pLHQuc2V0KDE0LFluLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSxZbi5zeW1ib2xFbnVtKSx0LnNldCgxNixZbi5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyxZbi5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyxZbi5zeW1ib2xTbmlwcGV0KSx0LnNldCgxOCxZbi5zeW1ib2xUZXh0KSx0LnNldCgxOSxZbi5zeW1ib2xDb2xvciksdC5zZXQoMjAsWW4uc3ltYm9sRmlsZSksdC5zZXQoMjEsWW4uc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMixZbi5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsWW4uc3ltYm9sRm9sZGVyKSx0LnNldCgyNCxZbi5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSxZbi5hY2NvdW50KSx0LnNldCgyNixZbi5pc3N1ZXMpLGUudG9JY29uPWZ1bmN0aW9uKGUpe2xldCBuPXQuZ2V0KGUpO3JldHVybiBufHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitlKSxuPVluLnN5bWJvbFByb3BlcnR5KSxufTtjb25zdCBuPW5ldyBNYXA7bi5zZXQoIm1ldGhvZCIsMCksbi5zZXQoImZ1bmN0aW9uIiwxKSxuLnNldCgiY29uc3RydWN0b3IiLDIpLG4uc2V0KCJmaWVsZCIsMyksbi5zZXQoInZhcmlhYmxlIiw0KSxuLnNldCgiY2xhc3MiLDUpLG4uc2V0KCJzdHJ1Y3QiLDYpLG4uc2V0KCJpbnRlcmZhY2UiLDcpLG4uc2V0KCJtb2R1bGUiLDgpLG4uc2V0KCJwcm9wZXJ0eSIsOSksbi5zZXQoImV2ZW50IiwxMCksbi5zZXQoIm9wZXJhdG9yIiwxMSksbi5zZXQoInVuaXQiLDEyKSxuLnNldCgidmFsdWUiLDEzKSxuLnNldCgiY29uc3RhbnQiLDE0KSxuLnNldCgiZW51bSIsMTUpLG4uc2V0KCJlbnVtLW1lbWJlciIsMTYpLG4uc2V0KCJlbnVtTWVtYmVyIiwxNiksbi5zZXQoImtleXdvcmQiLDE3KSxuLnNldCgic25pcHBldCIsMjcpLG4uc2V0KCJ0ZXh0IiwxOCksbi5zZXQoImNvbG9yIiwxOSksbi5zZXQoImZpbGUiLDIwKSxuLnNldCgicmVmZXJlbmNlIiwyMSksbi5zZXQoImN1c3RvbWNvbG9yIiwyMiksbi5zZXQoImZvbGRlciIsMjMpLG4uc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLG4uc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCksbi5zZXQoImFjY291bnQiLDI1KSxuLnNldCgiaXNzdWUiLDI2KSxlLmZyb21TdHJpbmc9ZnVuY3Rpb24oZSx0KXtsZXQgcj1uLmdldChlKTtyZXR1cm4gdm9pZCAwIT09cnx8dHx8KHI9OSkscn19KFZ0fHwoVnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifShLdHx8KEt0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifShVdHx8KFV0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0oQnR8fChCdD17fSkpLGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLFluLnN5bWJvbEZpbGUpLHQuc2V0KDEsWW4uc3ltYm9sTW9kdWxlKSx0LnNldCgyLFluLnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyxZbi5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LFluLnN5bWJvbENsYXNzKSx0LnNldCg1LFluLnN5bWJvbE1ldGhvZCksdC5zZXQoNixZbi5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyxZbi5zeW1ib2xGaWVsZCksdC5zZXQoOCxZbi5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSxZbi5zeW1ib2xFbnVtKSx0LnNldCgxMCxZbi5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDExLFluLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMixZbi5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsWW4uc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE0LFluLnN5bWJvbFN0cmluZyksdC5zZXQoMTUsWW4uc3ltYm9sTnVtYmVyKSx0LnNldCgxNixZbi5zeW1ib2xCb29sZWFuKSx0LnNldCgxNyxZbi5zeW1ib2xBcnJheSksdC5zZXQoMTgsWW4uc3ltYm9sT2JqZWN0KSx0LnNldCgxOSxZbi5zeW1ib2xLZXkpLHQuc2V0KDIwLFluLnN5bWJvbE51bGwpLHQuc2V0KDIxLFluLnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLFluLnN5bWJvbFN0cnVjdCksdC5zZXQoMjMsWW4uc3ltYm9sRXZlbnQpLHQuc2V0KDI0LFluLnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSxZbi5zeW1ib2xUeXBlUGFyYW1ldGVyKSxlLnRvSWNvbj1mdW5jdGlvbihlKXtsZXQgbj10LmdldChlKTtyZXR1cm4gbnx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK2UpLG49WW4uc3ltYm9sUHJvcGVydHkpLG59fShqdHx8KGp0PXt9KSksZnVuY3Rpb24oZSl7ZS5pcz1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpJiYoInN0cmluZyI9PXR5cGVvZiBlLmlkJiYic3RyaW5nIj09dHlwZW9mIGUudGl0bGUpfX0ocXR8fChxdD17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSgkdHx8KCR0PXt9KSksbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXAsdGhpcy5fZmFjdG9yaWVzPW5ldyBNYXAsdGhpcy5fb25EaWRDaGFuZ2U9bmV3IFUsdGhpcy5vbkRpZENoYW5nZT10aGlzLl9vbkRpZENoYW5nZS5ldmVudCx0aGlzLl9jb2xvck1hcD1udWxsfWZpcmUoZSl7dGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczplLGNoYW5nZWRDb2xvck1hcDohMX0pfXJlZ2lzdGVyKGUsdCl7cmV0dXJuIHRoaXMuX21hcC5zZXQoZSx0KSx0aGlzLmZpcmUoW2VdKSxoKCgoKT0+e3RoaXMuX21hcC5nZXQoZSk9PT10JiYodGhpcy5fbWFwLmRlbGV0ZShlKSx0aGlzLmZpcmUoW2VdKSl9KSl9cmVnaXN0ZXJGYWN0b3J5KGUsdCl7dmFyIG47bnVsbD09PShuPXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSkpfHx2b2lkIDA9PT1ufHxuLmRpc3Bvc2UoKTtjb25zdCByPW5ldyBabih0aGlzLGUsdCk7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQoZSxyKSxoKCgoKT0+e2NvbnN0IHQ9dGhpcy5fZmFjdG9yaWVzLmdldChlKTt0JiZ0PT09ciYmKHRoaXMuX2ZhY3Rvcmllcy5kZWxldGUoZSksdC5kaXNwb3NlKCkpfSkpfWdldE9yQ3JlYXRlKGUpe3JldHVybiBYbih0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9dGhpcy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBuPXRoaXMuX2ZhY3Rvcmllcy5nZXQoZSk7cmV0dXJuIW58fG4uaXNSZXNvbHZlZD9udWxsOih5aWVsZCBuLnJlc29sdmUoKSx0aGlzLmdldChlKSl9KSl9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUpfHxudWxsfWlzUmVzb2x2ZWQoZSl7aWYodGhpcy5nZXQoZSkpcmV0dXJuITA7Y29uc3QgdD10aGlzLl9mYWN0b3JpZXMuZ2V0KGUpO3JldHVybiEodCYmIXQuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAoZSl7dGhpcy5fY29sb3JNYXA9ZSx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fbWFwLmtleXMoKSksY2hhbmdlZENvbG9yTWFwOiEwfSl9Z2V0Q29sb3JNYXAoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXB9Z2V0RGVmYXVsdEJhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5fY29sb3JNYXAmJnRoaXMuX2NvbG9yTWFwLmxlbmd0aD4yP3RoaXMuX2NvbG9yTWFwWzJdOm51bGx9fSxmdW5jdGlvbihlKXtlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkRpc2FibGVkPTFdPSJEaXNhYmxlZCIsZVtlLkVuYWJsZWQ9Ml09IkVuYWJsZWQifShXdHx8KFd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5EZWZhdWx0Rm9yZWdyb3VuZD0xXT0iRGVmYXVsdEZvcmVncm91bmQiLGVbZS5EZWZhdWx0QmFja2dyb3VuZD0yXT0iRGVmYXVsdEJhY2tncm91bmQifShIdHx8KEh0PXt9KSksZnVuY3Rpb24oZSl7ZS5EQVJLPSJkYXJrIixlLkxJR0hUPSJsaWdodCIsZS5ISUdIX0NPTlRSQVNUPSJoYyJ9KHp0fHwoenQ9e30pKSxmdW5jdGlvbihlKXtlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifShHdHx8KEd0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KEp0fHwoSnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KFh0fHwoWHQ9e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KFp0fHwoWnQ9e30pKSxmdW5jdGlvbihlKXtlW2UuQVBQTElDQVRJT049MV09IkFQUExJQ0FUSU9OIixlW2UuTUFDSElORT0yXT0iTUFDSElORSIsZVtlLldJTkRPVz0zXT0iV0lORE9XIixlW2UuUkVTT1VSQ0U9NF09IlJFU09VUkNFIixlW2UuTEFOR1VBR0VfT1ZFUlJJREFCTEU9NV09IkxBTkdVQUdFX09WRVJSSURBQkxFIixlW2UuTUFDSElORV9PVkVSUklEQUJMRT02XT0iTUFDSElORV9PVkVSUklEQUJMRSJ9KFl0fHwoWXQ9e30pKSxmdW5jdGlvbihlKXtlW2UuVVNFUj0xXT0iVVNFUiIsZVtlLlVTRVJfTE9DQUw9Ml09IlVTRVJfTE9DQUwiLGVbZS5VU0VSX1JFTU9URT0zXT0iVVNFUl9SRU1PVEUiLGVbZS5XT1JLU1BBQ0U9NF09IldPUktTUEFDRSIsZVtlLldPUktTUEFDRV9GT0xERVI9NV09IldPUktTUEFDRV9GT0xERVIiLGVbZS5ERUZBVUxUPTZdPSJERUZBVUxUIixlW2UuTUVNT1JZPTddPSJNRU1PUlkifShRdHx8KFF0PXt9KSksZnVuY3Rpb24oZSl7ZVtlLkVYQUNUPTBdPSJFWEFDVCIsZVtlLkFCT1ZFPTFdPSJBQk9WRSIsZVtlLkJFTE9XPTJdPSJCRUxPVyJ9KGVufHwoZW49e30pKSxmdW5jdGlvbihlKXtlW2UuRmFsc2U9MF09IkZhbHNlIixlW2UuVHJ1ZT0xXT0iVHJ1ZSIsZVtlLkRlZmluZWQ9Ml09IkRlZmluZWQiLGVbZS5Ob3Q9M109Ik5vdCIsZVtlLkVxdWFscz00XT0iRXF1YWxzIixlW2UuTm90RXF1YWxzPTVdPSJOb3RFcXVhbHMiLGVbZS5BbmQ9Nl09IkFuZCIsZVtlLlJlZ2V4PTddPSJSZWdleCIsZVtlLk5vdFJlZ2V4PThdPSJOb3RSZWdleCIsZVtlLk9yPTldPSJPciIsZVtlLkluPTEwXT0iSW4iLGVbZS5Ob3RJbj0xMV09Ik5vdEluIixlW2UuR3JlYXRlcj0xMl09IkdyZWF0ZXIiLGVbZS5HcmVhdGVyRXF1YWxzPTEzXT0iR3JlYXRlckVxdWFscyIsZVtlLlNtYWxsZXI9MTRdPSJTbWFsbGVyIixlW2UuU21hbGxlckVxdWFscz0xNV09IlNtYWxsZXJFcXVhbHMifSh0bnx8KHRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0obm58fChubj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0ocm58fChybj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KG9ufHwob249e30pKSxmdW5jdGlvbihlKXtlLk11bHRpbGluZT0ibXVsdGlsaW5lVGV4dCIsZS5TaW5nbGVsaW5lPSJzaW5nbGVsaW5lVGV4dCJ9KGFufHwoYW49e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0oc258fChzbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hdXRvQ2xvc2luZ0JyYWNrZXRzPTVdPSJhdXRvQ2xvc2luZ0JyYWNrZXRzIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9Nl09ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT03XT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPThdPSJhdXRvQ2xvc2luZ1F1b3RlcyIsZVtlLmF1dG9JbmRlbnQ9OV09ImF1dG9JbmRlbnQiLGVbZS5hdXRvbWF0aWNMYXlvdXQ9MTBdPSJhdXRvbWF0aWNMYXlvdXQiLGVbZS5hdXRvU3Vycm91bmQ9MTFdPSJhdXRvU3Vycm91bmQiLGVbZS5icmFja2V0UGFpckNvbG9yaXphdGlvbj0xMl09ImJyYWNrZXRQYWlyQ29sb3JpemF0aW9uIixlW2UuZ3VpZGVzPTEzXT0iZ3VpZGVzIixlW2UuY29kZUxlbnM9MTRdPSJjb2RlTGVucyIsZVtlLmNvZGVMZW5zRm9udEZhbWlseT0xNV09ImNvZGVMZW5zRm9udEZhbWlseSIsZVtlLmNvZGVMZW5zRm9udFNpemU9MTZdPSJjb2RlTGVuc0ZvbnRTaXplIixlW2UuY29sb3JEZWNvcmF0b3JzPTE3XT0iY29sb3JEZWNvcmF0b3JzIixlW2UuY29sdW1uU2VsZWN0aW9uPTE4XT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MTldPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTIwXT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yMV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjJdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTIzXT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yNF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yNV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MjZdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0yN109ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0yOF09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0yOV09ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzBdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTMxXT0iZHJhZ0FuZERyb3AiLGVbZS5lbXB0eVNlbGVjdGlvbkNsaXBib2FyZD0zMl09ImVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzNdPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT0zNF09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9MzVdPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9MzZdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9MzddPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTM4XT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD0zOV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00MF09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQxXT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQyXT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00M109ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz00NF09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz00NV09ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT00Nl09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD00N109ImZvbnRXZWlnaHQiLGVbZS5mb3JtYXRPblBhc3RlPTQ4XT0iZm9ybWF0T25QYXN0ZSIsZVtlLmZvcm1hdE9uVHlwZT00OV09ImZvcm1hdE9uVHlwZSIsZVtlLmdseXBoTWFyZ2luPTUwXT0iZ2x5cGhNYXJnaW4iLGVbZS5nb3RvTG9jYXRpb249NTFdPSJnb3RvTG9jYXRpb24iLGVbZS5oaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyPTUyXT0iaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlciIsZVtlLmhvdmVyPTUzXT0iaG92ZXIiLGVbZS5pbkRpZmZFZGl0b3I9NTRdPSJpbkRpZmZFZGl0b3IiLGVbZS5pbmxpbmVTdWdnZXN0PTU1XT0iaW5saW5lU3VnZ2VzdCIsZVtlLmxldHRlclNwYWNpbmc9NTZdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTU3XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NThdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NTldPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjBdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjFdPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz02Ml09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz02M109ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz02NF09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTY1XT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NjZdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTY3XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NjhdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz02OV09Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzBdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03MV09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5vY2N1cnJlbmNlc0hpZ2hsaWdodD03Ml09Im9jY3VycmVuY2VzSGlnaGxpZ2h0IixlW2Uub3ZlcnZpZXdSdWxlckJvcmRlcj03M109Im92ZXJ2aWV3UnVsZXJCb3JkZXIiLGVbZS5vdmVydmlld1J1bGVyTGFuZXM9NzRdPSJvdmVydmlld1J1bGVyTGFuZXMiLGVbZS5wYWRkaW5nPTc1XT0icGFkZGluZyIsZVtlLnBhcmFtZXRlckhpbnRzPTc2XT0icGFyYW1ldGVySGludHMiLGVbZS5wZWVrV2lkZ2V0RGVmYXVsdEZvY3VzPTc3XT0icGVla1dpZGdldERlZmF1bHRGb2N1cyIsZVtlLmRlZmluaXRpb25MaW5rT3BlbnNJblBlZWs9NzhdPSJkZWZpbml0aW9uTGlua09wZW5zSW5QZWVrIixlW2UucXVpY2tTdWdnZXN0aW9ucz03OV09InF1aWNrU3VnZ2VzdGlvbnMiLGVbZS5xdWlja1N1Z2dlc3Rpb25zRGVsYXk9ODBdPSJxdWlja1N1Z2dlc3Rpb25zRGVsYXkiLGVbZS5yZWFkT25seT04MV09InJlYWRPbmx5IixlW2UucmVuYW1lT25UeXBlPTgyXT0icmVuYW1lT25UeXBlIixlW2UucmVuZGVyQ29udHJvbENoYXJhY3RlcnM9ODNdPSJyZW5kZXJDb250cm9sQ2hhcmFjdGVycyIsZVtlLnJlbmRlckZpbmFsTmV3bGluZT04NF09InJlbmRlckZpbmFsTmV3bGluZSIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHQ9ODVdPSJyZW5kZXJMaW5lSGlnaGxpZ2h0IixlW2UucmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXM9ODZdPSJyZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cyIsZVtlLnJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucz04N109InJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucyIsZVtlLnJlbmRlcldoaXRlc3BhY2U9ODhdPSJyZW5kZXJXaGl0ZXNwYWNlIixlW2UucmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZz04OV09InJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmciLGVbZS5yb3VuZGVkU2VsZWN0aW9uPTkwXT0icm91bmRlZFNlbGVjdGlvbiIsZVtlLnJ1bGVycz05MV09InJ1bGVycyIsZVtlLnNjcm9sbGJhcj05Ml09InNjcm9sbGJhciIsZVtlLnNjcm9sbEJleW9uZExhc3RDb2x1bW49OTNdPSJzY3JvbGxCZXlvbmRMYXN0Q29sdW1uIixlW2Uuc2Nyb2xsQmV5b25kTGFzdExpbmU9OTRdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz05NV09InNjcm9sbFByZWRvbWluYW50QXhpcyIsZVtlLnNlbGVjdGlvbkNsaXBib2FyZD05Nl09InNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLnNlbGVjdGlvbkhpZ2hsaWdodD05N109InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9OThdPSJzZWxlY3RPbkxpbmVOdW1iZXJzIixlW2Uuc2hvd0ZvbGRpbmdDb250cm9scz05OV09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTEwMF09InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTAxXT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTAyXT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTAzXT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTA0XT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTEwNV09InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTEwNl09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTA3XT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTA4XT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMDldPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTEwXT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTExXT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTExMl09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMTNdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMTRdPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTExNV09InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTExNl09InVzZVRhYlN0b3BzIixlW2Uud29yZFNlcGFyYXRvcnM9MTE3XT0id29yZFNlcGFyYXRvcnMiLGVbZS53b3JkV3JhcD0xMThdPSJ3b3JkV3JhcCIsZVtlLndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnM9MTE5XT0id29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzPTEyMF09IndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBDb2x1bW49MTIxXT0id29yZFdyYXBDb2x1bW4iLGVbZS53b3JkV3JhcE92ZXJyaWRlMT0xMjJdPSJ3b3JkV3JhcE92ZXJyaWRlMSIsZVtlLndvcmRXcmFwT3ZlcnJpZGUyPTEyM109IndvcmRXcmFwT3ZlcnJpZGUyIixlW2Uud3JhcHBpbmdJbmRlbnQ9MTI0XT0id3JhcHBpbmdJbmRlbnQiLGVbZS53cmFwcGluZ1N0cmF0ZWd5PTEyNV09IndyYXBwaW5nU3RyYXRlZ3kiLGVbZS5zaG93RGVwcmVjYXRlZD0xMjZdPSJzaG93RGVwcmVjYXRlZCIsZVtlLmlubGF5SGludHM9MTI3XT0iaW5sYXlIaW50cyIsZVtlLmVkaXRvckNsYXNzTmFtZT0xMjhdPSJlZGl0b3JDbGFzc05hbWUiLGVbZS5waXhlbFJhdGlvPTEyOV09InBpeGVsUmF0aW8iLGVbZS50YWJGb2N1c01vZGU9MTMwXT0idGFiRm9jdXNNb2RlIixlW2UubGF5b3V0SW5mbz0xMzFdPSJsYXlvdXRJbmZvIixlW2Uud3JhcHBpbmdJbmZvPTEzMl09IndyYXBwaW5nSW5mbyJ9KGxufHwobG49e30pKSxmdW5jdGlvbihlKXtlW2UuVGV4dERlZmluZWQ9MF09IlRleHREZWZpbmVkIixlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KGNufHwoY249e30pKSxmdW5jdGlvbihlKXtlW2UuTEY9MF09IkxGIixlW2UuQ1JMRj0xXT0iQ1JMRiJ9KHVufHwodW49e30pKSxmdW5jdGlvbihlKXtlW2UuU3lzdGVtPTBdPSJTeXN0ZW0iLGVbZS5Vc2VyPTFdPSJVc2VyIn0oaG58fChobj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuSW5kZW50PTFdPSJJbmRlbnQiLGVbZS5JbmRlbnRPdXRkZW50PTJdPSJJbmRlbnRPdXRkZW50IixlW2UuT3V0ZGVudD0zXT0iT3V0ZGVudCJ9KGZufHwoZm49e30pKSxmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0oZG58fChkbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifShtbnx8KG1uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0oZ258fChnbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5EZXBlbmRzT25LYkxheW91dD0tMV09IkRlcGVuZHNPbktiTGF5b3V0IixlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkJhY2tzcGFjZT0xXT0iQmFja3NwYWNlIixlW2UuVGFiPTJdPSJUYWIiLGVbZS5FbnRlcj0zXT0iRW50ZXIiLGVbZS5TaGlmdD00XT0iU2hpZnQiLGVbZS5DdHJsPTVdPSJDdHJsIixlW2UuQWx0PTZdPSJBbHQiLGVbZS5QYXVzZUJyZWFrPTddPSJQYXVzZUJyZWFrIixlW2UuQ2Fwc0xvY2s9OF09IkNhcHNMb2NrIixlW2UuRXNjYXBlPTldPSJFc2NhcGUiLGVbZS5TcGFjZT0xMF09IlNwYWNlIixlW2UuUGFnZVVwPTExXT0iUGFnZVVwIixlW2UuUGFnZURvd249MTJdPSJQYWdlRG93biIsZVtlLkVuZD0xM109IkVuZCIsZVtlLkhvbWU9MTRdPSJIb21lIixlW2UuTGVmdEFycm93PTE1XT0iTGVmdEFycm93IixlW2UuVXBBcnJvdz0xNl09IlVwQXJyb3ciLGVbZS5SaWdodEFycm93PTE3XT0iUmlnaHRBcnJvdyIsZVtlLkRvd25BcnJvdz0xOF09IkRvd25BcnJvdyIsZVtlLkluc2VydD0xOV09Ikluc2VydCIsZVtlLkRlbGV0ZT0yMF09IkRlbGV0ZSIsZVtlLkRpZ2l0MD0yMV09IkRpZ2l0MCIsZVtlLkRpZ2l0MT0yMl09IkRpZ2l0MSIsZVtlLkRpZ2l0Mj0yM109IkRpZ2l0MiIsZVtlLkRpZ2l0Mz0yNF09IkRpZ2l0MyIsZVtlLkRpZ2l0ND0yNV09IkRpZ2l0NCIsZVtlLkRpZ2l0NT0yNl09IkRpZ2l0NSIsZVtlLkRpZ2l0Nj0yN109IkRpZ2l0NiIsZVtlLkRpZ2l0Nz0yOF09IkRpZ2l0NyIsZVtlLkRpZ2l0OD0yOV09IkRpZ2l0OCIsZVtlLkRpZ2l0OT0zMF09IkRpZ2l0OSIsZVtlLktleUE9MzFdPSJLZXlBIixlW2UuS2V5Qj0zMl09IktleUIiLGVbZS5LZXlDPTMzXT0iS2V5QyIsZVtlLktleUQ9MzRdPSJLZXlEIixlW2UuS2V5RT0zNV09IktleUUiLGVbZS5LZXlGPTM2XT0iS2V5RiIsZVtlLktleUc9MzddPSJLZXlHIixlW2UuS2V5SD0zOF09IktleUgiLGVbZS5LZXlJPTM5XT0iS2V5SSIsZVtlLktleUo9NDBdPSJLZXlKIixlW2UuS2V5Sz00MV09IktleUsiLGVbZS5LZXlMPTQyXT0iS2V5TCIsZVtlLktleU09NDNdPSJLZXlNIixlW2UuS2V5Tj00NF09IktleU4iLGVbZS5LZXlPPTQ1XT0iS2V5TyIsZVtlLktleVA9NDZdPSJLZXlQIixlW2UuS2V5UT00N109IktleVEiLGVbZS5LZXlSPTQ4XT0iS2V5UiIsZVtlLktleVM9NDldPSJLZXlTIixlW2UuS2V5VD01MF09IktleVQiLGVbZS5LZXlVPTUxXT0iS2V5VSIsZVtlLktleVY9NTJdPSJLZXlWIixlW2UuS2V5Vz01M109IktleVciLGVbZS5LZXlYPTU0XT0iS2V5WCIsZVtlLktleVk9NTVdPSJLZXlZIixlW2UuS2V5Wj01Nl09IktleVoiLGVbZS5NZXRhPTU3XT0iTWV0YSIsZVtlLkNvbnRleHRNZW51PTU4XT0iQ29udGV4dE1lbnUiLGVbZS5GMT01OV09IkYxIixlW2UuRjI9NjBdPSJGMiIsZVtlLkYzPTYxXT0iRjMiLGVbZS5GND02Ml09IkY0IixlW2UuRjU9NjNdPSJGNSIsZVtlLkY2PTY0XT0iRjYiLGVbZS5GNz02NV09IkY3IixlW2UuRjg9NjZdPSJGOCIsZVtlLkY5PTY3XT0iRjkiLGVbZS5GMTA9NjhdPSJGMTAiLGVbZS5GMTE9NjldPSJGMTEiLGVbZS5GMTI9NzBdPSJGMTIiLGVbZS5GMTM9NzFdPSJGMTMiLGVbZS5GMTQ9NzJdPSJGMTQiLGVbZS5GMTU9NzNdPSJGMTUiLGVbZS5GMTY9NzRdPSJGMTYiLGVbZS5GMTc9NzVdPSJGMTciLGVbZS5GMTg9NzZdPSJGMTgiLGVbZS5GMTk9NzddPSJGMTkiLGVbZS5OdW1Mb2NrPTc4XT0iTnVtTG9jayIsZVtlLlNjcm9sbExvY2s9NzldPSJTY3JvbGxMb2NrIixlW2UuU2VtaWNvbG9uPTgwXT0iU2VtaWNvbG9uIixlW2UuRXF1YWw9ODFdPSJFcXVhbCIsZVtlLkNvbW1hPTgyXT0iQ29tbWEiLGVbZS5NaW51cz04M109Ik1pbnVzIixlW2UuUGVyaW9kPTg0XT0iUGVyaW9kIixlW2UuU2xhc2g9ODVdPSJTbGFzaCIsZVtlLkJhY2txdW90ZT04Nl09IkJhY2txdW90ZSIsZVtlLkJyYWNrZXRMZWZ0PTg3XT0iQnJhY2tldExlZnQiLGVbZS5CYWNrc2xhc2g9ODhdPSJCYWNrc2xhc2giLGVbZS5CcmFja2V0UmlnaHQ9ODldPSJCcmFja2V0UmlnaHQiLGVbZS5RdW90ZT05MF09IlF1b3RlIixlW2UuT0VNXzg9OTFdPSJPRU1fOCIsZVtlLkludGxCYWNrc2xhc2g9OTJdPSJJbnRsQmFja3NsYXNoIixlW2UuTnVtcGFkMD05M109Ik51bXBhZDAiLGVbZS5OdW1wYWQxPTk0XT0iTnVtcGFkMSIsZVtlLk51bXBhZDI9OTVdPSJOdW1wYWQyIixlW2UuTnVtcGFkMz05Nl09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTk3XT0iTnVtcGFkNCIsZVtlLk51bXBhZDU9OThdPSJOdW1wYWQ1IixlW2UuTnVtcGFkNj05OV09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwMF09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwMV09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwMl09Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDNdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDRdPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTEwNV09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMDZdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTA3XT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMDhdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTA5XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTBdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTFdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExMl09IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTEzXT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTRdPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTExNV09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMTZdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTExN109IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTE4XT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMTldPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjBdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTIxXT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTIyXT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjNdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI0XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTI1XT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEyNl09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEyN109Ik1BWF9WQUxVRSJ9KHBufHwocG49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVmYXVsdD0xXT0iRGVmYXVsdCIsZVtlLlVzZXI9Ml09IlVzZXIifShibnx8KGJuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkVkaXRvckNvcmU9MF09IkVkaXRvckNvcmUiLGVbZS5FZGl0b3JDb250cmliPTEwMF09IkVkaXRvckNvbnRyaWIiLGVbZS5Xb3JrYmVuY2hDb250cmliPTIwMF09IldvcmtiZW5jaENvbnRyaWIiLGVbZS5CdWlsdGluRXh0ZW5zaW9uPTMwMF09IkJ1aWx0aW5FeHRlbnNpb24iLGVbZS5FeHRlcm5hbEV4dGVuc2lvbj00MDBdPSJFeHRlcm5hbEV4dGVuc2lvbiJ9KHZufHwodm49e30pKSxmdW5jdGlvbihlKXtlW2UuTnVsbD0wXT0iTnVsbCIsZVtlLlBsYWluVGV4dD0xXT0iUGxhaW5UZXh0In0oeW58fCh5bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5UcmFjZT0wXT0iVHJhY2UiLGVbZS5EZWJ1Zz0xXT0iRGVidWciLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz0zXT0iV2FybmluZyIsZVtlLkVycm9yPTRdPSJFcnJvciIsZVtlLkNyaXRpY2FsPTVdPSJDcml0aWNhbCIsZVtlLk9mZj02XT0iT2ZmIn0oQ258fChDbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5QYXJhZ3JhcGg9MF09IlBhcmFncmFwaCIsZVtlLkJyZWFrPTFdPSJCcmVhayJ9KHdufHwod249e30pKSxmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0oX258fChfbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0oU258fChTbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0oQW58fChBbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPSJVTktOT1dOIixlW2UuVEVYVEFSRUE9MV09IlRFWFRBUkVBIixlW2UuR1VUVEVSX0dMWVBIX01BUkdJTj0yXT0iR1VUVEVSX0dMWVBIX01BUkdJTiIsZVtlLkdVVFRFUl9MSU5FX05VTUJFUlM9M109IkdVVFRFUl9MSU5FX05VTUJFUlMiLGVbZS5HVVRURVJfTElORV9ERUNPUkFUSU9OUz00XT0iR1VUVEVSX0xJTkVfREVDT1JBVElPTlMiLGVbZS5HVVRURVJfVklFV19aT05FPTVdPSJHVVRURVJfVklFV19aT05FIixlW2UuQ09OVEVOVF9URVhUPTZdPSJDT05URU5UX1RFWFQiLGVbZS5DT05URU5UX0VNUFRZPTddPSJDT05URU5UX0VNUFRZIixlW2UuQ09OVEVOVF9WSUVXX1pPTkU9OF09IkNPTlRFTlRfVklFV19aT05FIixlW2UuQ09OVEVOVF9XSURHRVQ9OV09IkNPTlRFTlRfV0lER0VUIixlW2UuT1ZFUlZJRVdfUlVMRVI9MTBdPSJPVkVSVklFV19SVUxFUiIsZVtlLlNDUk9MTEJBUj0xMV09IlNDUk9MTEJBUiIsZVtlLk9WRVJMQVlfV0lER0VUPTEyXT0iT1ZFUkxBWV9XSURHRVQiLGVbZS5PVVRTSURFX0VESVRPUj0xM109Ik9VVFNJREVfRURJVE9SIn0oRW58fChFbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5XaW5kb3dzPTFdPSJXaW5kb3dzIixlW2UuTWFjaW50b3NoPTJdPSJNYWNpbnRvc2giLGVbZS5MaW51eD0zXT0iTGludXgifShObnx8KE5uPXt9KSksZnVuY3Rpb24oZSl7ZVtlLlRPUF9SSUdIVF9DT1JORVI9MF09IlRPUF9SSUdIVF9DT1JORVIiLGVbZS5CT1RUT01fUklHSFRfQ09STkVSPTFdPSJCT1RUT01fUklHSFRfQ09STkVSIixlW2UuVE9QX0NFTlRFUj0yXT0iVE9QX0NFTlRFUiJ9KHhufHwoeG49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KExufHwoTG49e30pKSxmdW5jdGlvbihlKXtlW2UuTGVmdD0wXT0iTGVmdCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLk5vbmU9Ml09Ik5vbmUifShrbnx8KGtuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkV4cGxvcmVyPTFdPSJFeHBsb3JlciIsZVtlLlNjbT0zXT0iU2NtIixlW2UuRXh0ZW5zaW9ucz01XT0iRXh0ZW5zaW9ucyIsZVtlLldpbmRvdz0xMF09IldpbmRvdyIsZVtlLk5vdGlmaWNhdGlvbj0xNV09Ik5vdGlmaWNhdGlvbiIsZVtlLkRpYWxvZz0yMF09IkRpYWxvZyJ9KFRufHwoVG49e30pKSxmdW5jdGlvbihlKXtlW2UuT2ZmPTBdPSJPZmYiLGVbZS5Pbj0xXT0iT24iLGVbZS5SZWxhdGl2ZT0yXT0iUmVsYXRpdmUiLGVbZS5JbnRlcnZhbD0zXT0iSW50ZXJ2YWwiLGVbZS5DdXN0b209NF09IkN1c3RvbSJ9KE9ufHwoT249e30pKSxmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlRleHQ9MV09IlRleHQiLGVbZS5CbG9ja3M9Ml09IkJsb2NrcyJ9KE1ufHwoTW49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5IeXBlcj0xXT0iSHlwZXIiLGVbZS5TdXBlcj0yXT0iU3VwZXIiLGVbZS5Gbj0zXT0iRm4iLGVbZS5GbkxvY2s9NF09IkZuTG9jayIsZVtlLlN1c3BlbmQ9NV09IlN1c3BlbmQiLGVbZS5SZXN1bWU9Nl09IlJlc3VtZSIsZVtlLlR1cmJvPTddPSJUdXJibyIsZVtlLlNsZWVwPThdPSJTbGVlcCIsZVtlLldha2VVcD05XT0iV2FrZVVwIixlW2UuS2V5QT0xMF09IktleUEiLGVbZS5LZXlCPTExXT0iS2V5QiIsZVtlLktleUM9MTJdPSJLZXlDIixlW2UuS2V5RD0xM109IktleUQiLGVbZS5LZXlFPTE0XT0iS2V5RSIsZVtlLktleUY9MTVdPSJLZXlGIixlW2UuS2V5Rz0xNl09IktleUciLGVbZS5LZXlIPTE3XT0iS2V5SCIsZVtlLktleUk9MThdPSJLZXlJIixlW2UuS2V5Sj0xOV09IktleUoiLGVbZS5LZXlLPTIwXT0iS2V5SyIsZVtlLktleUw9MjFdPSJLZXlMIixlW2UuS2V5TT0yMl09IktleU0iLGVbZS5LZXlOPTIzXT0iS2V5TiIsZVtlLktleU89MjRdPSJLZXlPIixlW2UuS2V5UD0yNV09IktleVAiLGVbZS5LZXlRPTI2XT0iS2V5USIsZVtlLktleVI9MjddPSJLZXlSIixlW2UuS2V5Uz0yOF09IktleVMiLGVbZS5LZXlUPTI5XT0iS2V5VCIsZVtlLktleVU9MzBdPSJLZXlVIixlW2UuS2V5Vj0zMV09IktleVYiLGVbZS5LZXlXPTMyXT0iS2V5VyIsZVtlLktleVg9MzNdPSJLZXlYIixlW2UuS2V5WT0zNF09IktleVkiLGVbZS5LZXlaPTM1XT0iS2V5WiIsZVtlLkRpZ2l0MT0zNl09IkRpZ2l0MSIsZVtlLkRpZ2l0Mj0zN109IkRpZ2l0MiIsZVtlLkRpZ2l0Mz0zOF09IkRpZ2l0MyIsZVtlLkRpZ2l0ND0zOV09IkRpZ2l0NCIsZVtlLkRpZ2l0NT00MF09IkRpZ2l0NSIsZVtlLkRpZ2l0Nj00MV09IkRpZ2l0NiIsZVtlLkRpZ2l0Nz00Ml09IkRpZ2l0NyIsZVtlLkRpZ2l0OD00M109IkRpZ2l0OCIsZVtlLkRpZ2l0OT00NF09IkRpZ2l0OSIsZVtlLkRpZ2l0MD00NV09IkRpZ2l0MCIsZVtlLkVudGVyPTQ2XT0iRW50ZXIiLGVbZS5Fc2NhcGU9NDddPSJFc2NhcGUiLGVbZS5CYWNrc3BhY2U9NDhdPSJCYWNrc3BhY2UiLGVbZS5UYWI9NDldPSJUYWIiLGVbZS5TcGFjZT01MF09IlNwYWNlIixlW2UuTWludXM9NTFdPSJNaW51cyIsZVtlLkVxdWFsPTUyXT0iRXF1YWwiLGVbZS5CcmFja2V0TGVmdD01M109IkJyYWNrZXRMZWZ0IixlW2UuQnJhY2tldFJpZ2h0PTU0XT0iQnJhY2tldFJpZ2h0IixlW2UuQmFja3NsYXNoPTU1XT0iQmFja3NsYXNoIixlW2UuSW50bEhhc2g9NTZdPSJJbnRsSGFzaCIsZVtlLlNlbWljb2xvbj01N109IlNlbWljb2xvbiIsZVtlLlF1b3RlPTU4XT0iUXVvdGUiLGVbZS5CYWNrcXVvdGU9NTldPSJCYWNrcXVvdGUiLGVbZS5Db21tYT02MF09IkNvbW1hIixlW2UuUGVyaW9kPTYxXT0iUGVyaW9kIixlW2UuU2xhc2g9NjJdPSJTbGFzaCIsZVtlLkNhcHNMb2NrPTYzXT0iQ2Fwc0xvY2siLGVbZS5GMT02NF09IkYxIixlW2UuRjI9NjVdPSJGMiIsZVtlLkYzPTY2XT0iRjMiLGVbZS5GND02N109IkY0IixlW2UuRjU9NjhdPSJGNSIsZVtlLkY2PTY5XT0iRjYiLGVbZS5GNz03MF09IkY3IixlW2UuRjg9NzFdPSJGOCIsZVtlLkY5PTcyXT0iRjkiLGVbZS5GMTA9NzNdPSJGMTAiLGVbZS5GMTE9NzRdPSJGMTEiLGVbZS5GMTI9NzVdPSJGMTIiLGVbZS5QcmludFNjcmVlbj03Nl09IlByaW50U2NyZWVuIixlW2UuU2Nyb2xsTG9jaz03N109IlNjcm9sbExvY2siLGVbZS5QYXVzZT03OF09IlBhdXNlIixlW2UuSW5zZXJ0PTc5XT0iSW5zZXJ0IixlW2UuSG9tZT04MF09IkhvbWUiLGVbZS5QYWdlVXA9ODFdPSJQYWdlVXAiLGVbZS5EZWxldGU9ODJdPSJEZWxldGUiLGVbZS5FbmQ9ODNdPSJFbmQiLGVbZS5QYWdlRG93bj04NF09IlBhZ2VEb3duIixlW2UuQXJyb3dSaWdodD04NV09IkFycm93UmlnaHQiLGVbZS5BcnJvd0xlZnQ9ODZdPSJBcnJvd0xlZnQiLGVbZS5BcnJvd0Rvd249ODddPSJBcnJvd0Rvd24iLGVbZS5BcnJvd1VwPTg4XT0iQXJyb3dVcCIsZVtlLk51bUxvY2s9ODldPSJOdW1Mb2NrIixlW2UuTnVtcGFkRGl2aWRlPTkwXT0iTnVtcGFkRGl2aWRlIixlW2UuTnVtcGFkTXVsdGlwbHk9OTFdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZFN1YnRyYWN0PTkyXT0iTnVtcGFkU3VidHJhY3QiLGVbZS5OdW1wYWRBZGQ9OTNdPSJOdW1wYWRBZGQiLGVbZS5OdW1wYWRFbnRlcj05NF09Ik51bXBhZEVudGVyIixlW2UuTnVtcGFkMT05NV09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTk2XT0iTnVtcGFkMiIsZVtlLk51bXBhZDM9OTddPSJOdW1wYWQzIixlW2UuTnVtcGFkND05OF09Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTk5XT0iTnVtcGFkNSIsZVtlLk51bXBhZDY9MTAwXT0iTnVtcGFkNiIsZVtlLk51bXBhZDc9MTAxXT0iTnVtcGFkNyIsZVtlLk51bXBhZDg9MTAyXT0iTnVtcGFkOCIsZVtlLk51bXBhZDk9MTAzXT0iTnVtcGFkOSIsZVtlLk51bXBhZDA9MTA0XT0iTnVtcGFkMCIsZVtlLk51bXBhZERlY2ltYWw9MTA1XT0iTnVtcGFkRGVjaW1hbCIsZVtlLkludGxCYWNrc2xhc2g9MTA2XT0iSW50bEJhY2tzbGFzaCIsZVtlLkNvbnRleHRNZW51PTEwN109IkNvbnRleHRNZW51IixlW2UuUG93ZXI9MTA4XT0iUG93ZXIiLGVbZS5OdW1wYWRFcXVhbD0xMDldPSJOdW1wYWRFcXVhbCIsZVtlLkYxMz0xMTBdPSJGMTMiLGVbZS5GMTQ9MTExXT0iRjE0IixlW2UuRjE1PTExMl09IkYxNSIsZVtlLkYxNj0xMTNdPSJGMTYiLGVbZS5GMTc9MTE0XT0iRjE3IixlW2UuRjE4PTExNV09IkYxOCIsZVtlLkYxOT0xMTZdPSJGMTkiLGVbZS5GMjA9MTE3XT0iRjIwIixlW2UuRjIxPTExOF09IkYyMSIsZVtlLkYyMj0xMTldPSJGMjIiLGVbZS5GMjM9MTIwXT0iRjIzIixlW2UuRjI0PTEyMV09IkYyNCIsZVtlLk9wZW49MTIyXT0iT3BlbiIsZVtlLkhlbHA9MTIzXT0iSGVscCIsZVtlLlNlbGVjdD0xMjRdPSJTZWxlY3QiLGVbZS5BZ2Fpbj0xMjVdPSJBZ2FpbiIsZVtlLlVuZG89MTI2XT0iVW5kbyIsZVtlLkN1dD0xMjddPSJDdXQiLGVbZS5Db3B5PTEyOF09IkNvcHkiLGVbZS5QYXN0ZT0xMjldPSJQYXN0ZSIsZVtlLkZpbmQ9MTMwXT0iRmluZCIsZVtlLkF1ZGlvVm9sdW1lTXV0ZT0xMzFdPSJBdWRpb1ZvbHVtZU11dGUiLGVbZS5BdWRpb1ZvbHVtZVVwPTEzMl09IkF1ZGlvVm9sdW1lVXAiLGVbZS5BdWRpb1ZvbHVtZURvd249MTMzXT0iQXVkaW9Wb2x1bWVEb3duIixlW2UuTnVtcGFkQ29tbWE9MTM0XT0iTnVtcGFkQ29tbWEiLGVbZS5JbnRsUm89MTM1XT0iSW50bFJvIixlW2UuS2FuYU1vZGU9MTM2XT0iS2FuYU1vZGUiLGVbZS5JbnRsWWVuPTEzN109IkludGxZZW4iLGVbZS5Db252ZXJ0PTEzOF09IkNvbnZlcnQiLGVbZS5Ob25Db252ZXJ0PTEzOV09Ik5vbkNvbnZlcnQiLGVbZS5MYW5nMT0xNDBdPSJMYW5nMSIsZVtlLkxhbmcyPTE0MV09IkxhbmcyIixlW2UuTGFuZzM9MTQyXT0iTGFuZzMiLGVbZS5MYW5nND0xNDNdPSJMYW5nNCIsZVtlLkxhbmc1PTE0NF09Ikxhbmc1IixlW2UuQWJvcnQ9MTQ1XT0iQWJvcnQiLGVbZS5Qcm9wcz0xNDZdPSJQcm9wcyIsZVtlLk51bXBhZFBhcmVuTGVmdD0xNDddPSJOdW1wYWRQYXJlbkxlZnQiLGVbZS5OdW1wYWRQYXJlblJpZ2h0PTE0OF09Ik51bXBhZFBhcmVuUmlnaHQiLGVbZS5OdW1wYWRCYWNrc3BhY2U9MTQ5XT0iTnVtcGFkQmFja3NwYWNlIixlW2UuTnVtcGFkTWVtb3J5U3RvcmU9MTUwXT0iTnVtcGFkTWVtb3J5U3RvcmUiLGVbZS5OdW1wYWRNZW1vcnlSZWNhbGw9MTUxXT0iTnVtcGFkTWVtb3J5UmVjYWxsIixlW2UuTnVtcGFkTWVtb3J5Q2xlYXI9MTUyXT0iTnVtcGFkTWVtb3J5Q2xlYXIiLGVbZS5OdW1wYWRNZW1vcnlBZGQ9MTUzXT0iTnVtcGFkTWVtb3J5QWRkIixlW2UuTnVtcGFkTWVtb3J5U3VidHJhY3Q9MTU0XT0iTnVtcGFkTWVtb3J5U3VidHJhY3QiLGVbZS5OdW1wYWRDbGVhcj0xNTVdPSJOdW1wYWRDbGVhciIsZVtlLk51bXBhZENsZWFyRW50cnk9MTU2XT0iTnVtcGFkQ2xlYXJFbnRyeSIsZVtlLkNvbnRyb2xMZWZ0PTE1N109IkNvbnRyb2xMZWZ0IixlW2UuU2hpZnRMZWZ0PTE1OF09IlNoaWZ0TGVmdCIsZVtlLkFsdExlZnQ9MTU5XT0iQWx0TGVmdCIsZVtlLk1ldGFMZWZ0PTE2MF09Ik1ldGFMZWZ0IixlW2UuQ29udHJvbFJpZ2h0PTE2MV09IkNvbnRyb2xSaWdodCIsZVtlLlNoaWZ0UmlnaHQ9MTYyXT0iU2hpZnRSaWdodCIsZVtlLkFsdFJpZ2h0PTE2M109IkFsdFJpZ2h0IixlW2UuTWV0YVJpZ2h0PTE2NF09Ik1ldGFSaWdodCIsZVtlLkJyaWdodG5lc3NVcD0xNjVdPSJCcmlnaHRuZXNzVXAiLGVbZS5CcmlnaHRuZXNzRG93bj0xNjZdPSJCcmlnaHRuZXNzRG93biIsZVtlLk1lZGlhUGxheT0xNjddPSJNZWRpYVBsYXkiLGVbZS5NZWRpYVJlY29yZD0xNjhdPSJNZWRpYVJlY29yZCIsZVtlLk1lZGlhRmFzdEZvcndhcmQ9MTY5XT0iTWVkaWFGYXN0Rm9yd2FyZCIsZVtlLk1lZGlhUmV3aW5kPTE3MF09Ik1lZGlhUmV3aW5kIixlW2UuTWVkaWFUcmFja05leHQ9MTcxXT0iTWVkaWFUcmFja05leHQiLGVbZS5NZWRpYVRyYWNrUHJldmlvdXM9MTcyXT0iTWVkaWFUcmFja1ByZXZpb3VzIixlW2UuTWVkaWFTdG9wPTE3M109Ik1lZGlhU3RvcCIsZVtlLkVqZWN0PTE3NF09IkVqZWN0IixlW2UuTWVkaWFQbGF5UGF1c2U9MTc1XT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5NZWRpYVNlbGVjdD0xNzZdPSJNZWRpYVNlbGVjdCIsZVtlLkxhdW5jaE1haWw9MTc3XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTc4XT0iTGF1bmNoQXBwMiIsZVtlLkxhdW5jaEFwcDE9MTc5XT0iTGF1bmNoQXBwMSIsZVtlLlNlbGVjdFRhc2s9MTgwXT0iU2VsZWN0VGFzayIsZVtlLkxhdW5jaFNjcmVlblNhdmVyPTE4MV09IkxhdW5jaFNjcmVlblNhdmVyIixlW2UuQnJvd3NlclNlYXJjaD0xODJdPSJCcm93c2VyU2VhcmNoIixlW2UuQnJvd3NlckhvbWU9MTgzXT0iQnJvd3NlckhvbWUiLGVbZS5Ccm93c2VyQmFjaz0xODRdPSJCcm93c2VyQmFjayIsZVtlLkJyb3dzZXJGb3J3YXJkPTE4NV09IkJyb3dzZXJGb3J3YXJkIixlW2UuQnJvd3NlclN0b3A9MTg2XT0iQnJvd3NlclN0b3AiLGVbZS5Ccm93c2VyUmVmcmVzaD0xODddPSJCcm93c2VyUmVmcmVzaCIsZVtlLkJyb3dzZXJGYXZvcml0ZXM9MTg4XT0iQnJvd3NlckZhdm9yaXRlcyIsZVtlLlpvb21Ub2dnbGU9MTg5XT0iWm9vbVRvZ2dsZSIsZVtlLk1haWxSZXBseT0xOTBdPSJNYWlsUmVwbHkiLGVbZS5NYWlsRm9yd2FyZD0xOTFdPSJNYWlsRm9yd2FyZCIsZVtlLk1haWxTZW5kPTE5Ml09Ik1haWxTZW5kIixlW2UuTUFYX1ZBTFVFPTE5M109Ik1BWF9WQUxVRSJ9KElufHwoSW49e30pKSxmdW5jdGlvbihlKXtlW2UuU21vb3RoPTBdPSJTbW9vdGgiLGVbZS5JbW1lZGlhdGU9MV09IkltbWVkaWF0ZSJ9KFJufHwoUm49e30pKSxmdW5jdGlvbihlKXtlW2UuQXV0bz0xXT0iQXV0byIsZVtlLkhpZGRlbj0yXT0iSGlkZGVuIixlW2UuVmlzaWJsZT0zXT0iVmlzaWJsZSJ9KFBufHwoUG49e30pKSxmdW5jdGlvbihlKXtlW2UuTFRSPTBdPSJMVFIiLGVbZS5SVEw9MV09IlJUTCJ9KEZufHwoRm49e30pKSxmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KERufHwoRG49e30pKSxmdW5jdGlvbihlKXtlW2UuVG9wPTBdPSJUb3AiLGVbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkJvdHRvbT0yXT0iQm90dG9tIn0oVm58fChWbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Vc2VyPTFdPSJVc2VyIixlW2UuV29ya3NwYWNlPTJdPSJXb3Jrc3BhY2UiLGVbZS5FeHRlbnNpb249M109IkV4dGVuc2lvbiJ9KEtufHwoS249e30pKSxmdW5jdGlvbihlKXtlW2UuT3RoZXI9MF09Ik90aGVyIixlW2UuQ29tbWVudD0xXT0iQ29tbWVudCIsZVtlLlN0cmluZz0yXT0iU3RyaW5nIixlW2UuUmVnRXg9M109IlJlZ0V4In0oVW58fChVbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KEJufHwoQm49e30pKSxmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KGpufHwoam49e30pKSxmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0ocW58fChxbj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifSgkbnx8KCRuPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkNlbnRlcj0wXT0iQ2VudGVyIixlW2UuQ2VudGVySWZPdXRzaWRlVmlld3BvcnQ9MV09IkNlbnRlcklmT3V0c2lkZVZpZXdwb3J0IixlW2UuTmVhclRvcD0yXT0iTmVhclRvcCIsZVtlLk5lYXJUb3BJZk91dHNpZGVWaWV3cG9ydD0zXT0iTmVhclRvcElmT3V0c2lkZVZpZXdwb3J0In0oV258fChXbj17fSkpLGZ1bmN0aW9uKGUpe2UuUFJPR1JBTU1BVElDPSJhcGkiLGUuTkFWSUdBVElPTj0iY29kZS5uYXZpZ2F0aW9uIixlLkpVTVA9ImNvZGUuanVtcCJ9KEhufHwoSG49e30pKSxmdW5jdGlvbihlKXtlW2UuQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0wXT0iQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLk5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0xXT0iTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZT0yXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZSIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdBZnRlcj0zXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyIn0oem58fCh6bj17fSkpLGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuU2FtZT0xXT0iU2FtZSIsZVtlLkluZGVudD0yXT0iSW5kZW50IixlW2UuRGVlcEluZGVudD0zXT0iRGVlcEluZGVudCJ9KEdufHwoR249e30pKTtjbGFzcyBucntjb25zdHJ1Y3Rvcigpe3RoaXNbSm5dPSJMaW5rZWRNYXAiLHRoaXMuX21hcD1uZXcgTWFwLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZT0wfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCksdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDAsdGhpcy5fc2l6ZT0wLHRoaXMuX3N0YXRlKyt9aXNFbXB0eSgpe3JldHVybiF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWdldCBmaXJzdCgpe3ZhciBlO3JldHVybiBudWxsPT09KGU9dGhpcy5faGVhZCl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmFsdWV9Z2V0IGxhc3QoKXt2YXIgZTtyZXR1cm4gbnVsbD09PShlPXRoaXMuX3RhaWwpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnZhbHVlfWhhcyhlKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhlKX1nZXQoZSx0PTApe2NvbnN0IG49dGhpcy5fbWFwLmdldChlKTtpZihuKXJldHVybiAwIT09dCYmdGhpcy50b3VjaChuLHQpLG4udmFsdWV9c2V0KGUsdCxuPTApe2xldCByPXRoaXMuX21hcC5nZXQoZSk7aWYocilyLnZhbHVlPXQsMCE9PW4mJnRoaXMudG91Y2gocixuKTtlbHNle3N3aXRjaChyPXtrZXk6ZSx2YWx1ZTp0LG5leHQ6dm9pZCAwLHByZXZpb3VzOnZvaWQgMH0sbil7Y2FzZSAwOmNhc2UgMjpkZWZhdWx0OnRoaXMuYWRkSXRlbUxhc3Qocik7YnJlYWs7Y2FzZSAxOnRoaXMuYWRkSXRlbUZpcnN0KHIpfXRoaXMuX21hcC5zZXQoZSxyKSx0aGlzLl9zaXplKyt9cmV0dXJuIHRoaXN9ZGVsZXRlKGUpe3JldHVybiEhdGhpcy5yZW1vdmUoZSl9cmVtb3ZlKGUpe2NvbnN0IHQ9dGhpcy5fbWFwLmdldChlKTtpZih0KXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKGUpLHRoaXMucmVtb3ZlSXRlbSh0KSx0aGlzLl9zaXplLS0sdC52YWx1ZX1zaGlmdCgpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbClyZXR1cm47aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7Y29uc3QgZT10aGlzLl9oZWFkO3JldHVybiB0aGlzLl9tYXAuZGVsZXRlKGUua2V5KSx0aGlzLnJlbW92ZUl0ZW0oZSksdGhpcy5fc2l6ZS0tLGUudmFsdWV9Zm9yRWFjaChlLHQpe2NvbnN0IG49dGhpcy5fc3RhdGU7bGV0IHI9dGhpcy5faGVhZDtmb3IoO3I7KXtpZih0P2UuYmluZCh0KShyLnZhbHVlLHIua2V5LHRoaXMpOmUoci52YWx1ZSxyLmtleSx0aGlzKSx0aGlzLl9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7cj1yLm5leHR9fWtleXMoKXtjb25zdCBlPXRoaXMsdD10aGlzLl9zdGF0ZTtsZXQgbj10aGlzLl9oZWFkO2NvbnN0IHI9e1tTeW1ib2wuaXRlcmF0b3JdOigpPT5yLG5leHQoKXtpZihlLl9zdGF0ZSE9PXQpdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYobil7Y29uc3QgZT17dmFsdWU6bi5rZXksZG9uZTohMX07cmV0dXJuIG49bi5uZXh0LGV9cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfXZhbHVlcygpe2NvbnN0IGU9dGhpcyx0PXRoaXMuX3N0YXRlO2xldCBuPXRoaXMuX2hlYWQ7Y29uc3Qgcj17W1N5bWJvbC5pdGVyYXRvcl06KCk9PnIsbmV4dCgpe2lmKGUuX3N0YXRlIT09dCl0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihuKXtjb25zdCBlPXt2YWx1ZTpuLnZhbHVlLGRvbmU6ITF9O3JldHVybiBuPW4ubmV4dCxlfXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fTtyZXR1cm4gcn1lbnRyaWVzKCl7Y29uc3QgZT10aGlzLHQ9dGhpcy5fc3RhdGU7bGV0IG49dGhpcy5faGVhZDtjb25zdCByPXtbU3ltYm9sLml0ZXJhdG9yXTooKT0+cixuZXh0KCl7aWYoZS5fc3RhdGUhPT10KXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKG4pe2NvbnN0IGU9e3ZhbHVlOltuLmtleSxuLnZhbHVlXSxkb25lOiExfTtyZXR1cm4gbj1uLm5leHQsZX1yZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIHJ9WyhKbj1TeW1ib2wudG9TdHJpbmdUYWcsU3ltYm9sLml0ZXJhdG9yKV0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9dHJpbU9sZChlKXtpZihlPj10aGlzLnNpemUpcmV0dXJuO2lmKDA9PT1lKXJldHVybiB2b2lkIHRoaXMuY2xlYXIoKTtsZXQgdD10aGlzLl9oZWFkLG49dGhpcy5zaXplO2Zvcig7dCYmbj5lOyl0aGlzLl9tYXAuZGVsZXRlKHQua2V5KSx0PXQubmV4dCxuLS07dGhpcy5faGVhZD10LHRoaXMuX3NpemU9bix0JiYodC5wcmV2aW91cz12b2lkIDApLHRoaXMuX3N0YXRlKyt9YWRkSXRlbUZpcnN0KGUpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl9oZWFkKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz1lfWVsc2UgdGhpcy5fdGFpbD1lO3RoaXMuX2hlYWQ9ZSx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1MYXN0KGUpe2lmKHRoaXMuX2hlYWR8fHRoaXMuX3RhaWwpe2lmKCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD1lfWVsc2UgdGhpcy5faGVhZD1lO3RoaXMuX3RhaWw9ZSx0aGlzLl9zdGF0ZSsrfXJlbW92ZUl0ZW0oZSl7aWYoZT09PXRoaXMuX2hlYWQmJmU9PT10aGlzLl90YWlsKXRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwO2Vsc2UgaWYoZT09PXRoaXMuX2hlYWQpe2lmKCFlLm5leHQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtlLm5leHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9ZS5uZXh0fWVsc2UgaWYoZT09PXRoaXMuX3RhaWwpe2lmKCFlLnByZXZpb3VzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7ZS5wcmV2aW91cy5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPWUucHJldmlvdXN9ZWxzZXtjb25zdCB0PWUubmV4dCxuPWUucHJldmlvdXM7aWYoIXR8fCFuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dC5wcmV2aW91cz1uLG4ubmV4dD10fWUubmV4dD12b2lkIDAsZS5wcmV2aW91cz12b2lkIDAsdGhpcy5fc3RhdGUrK310b3VjaChlLHQpe2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2lmKDE9PT10fHwyPT09dClpZigxPT09dCl7aWYoZT09PXRoaXMuX2hlYWQpcmV0dXJuO2NvbnN0IHQ9ZS5uZXh0LG49ZS5wcmV2aW91cztlPT09dGhpcy5fdGFpbD8obi5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPW4pOih0LnByZXZpb3VzPW4sbi5uZXh0PXQpLGUucHJldmlvdXM9dm9pZCAwLGUubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9ZSx0aGlzLl9oZWFkPWUsdGhpcy5fc3RhdGUrK31lbHNlIGlmKDI9PT10KXtpZihlPT09dGhpcy5fdGFpbClyZXR1cm47Y29uc3QgdD1lLm5leHQsbj1lLnByZXZpb3VzO2U9PT10aGlzLl9oZWFkPyh0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPXQpOih0LnByZXZpb3VzPW4sbi5uZXh0PXQpLGUubmV4dD12b2lkIDAsZS5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD1lLHRoaXMuX3RhaWw9ZSx0aGlzLl9zdGF0ZSsrfX10b0pTT04oKXtjb25zdCBlPVtdO3JldHVybiB0aGlzLmZvckVhY2goKCh0LG4pPT57ZS5wdXNoKFtuLHRdKX0pKSxlfWZyb21KU09OKGUpe3RoaXMuY2xlYXIoKTtmb3IoY29uc3RbdCxuXW9mIGUpdGhpcy5zZXQodCxuKX19ZnVuY3Rpb24gcnIoZSx0LG4pe2lmKCFufHxuLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcjtyZXR1cm4gcj1lP3oobix0KTowPT09bi5pbmRleE9mKHQpLHI/dC5sZW5ndGg+MD9be3N0YXJ0OjAsZW5kOnQubGVuZ3RofV06W106bnVsbH1yci5iaW5kKHZvaWQgMCwhMSkscnIuYmluZCh2b2lkIDAsITApO2NvbnN0IGlyPW5ldyBTZXQ7IigpW117fTw+YCdcIi0vOzosLj8hIi5zcGxpdCgiIikuZm9yRWFjaCgoZT0+aXIuYWRkKGUuY2hhckNvZGVBdCgwKSkpKSxuZXcgY2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3RvcihlLHQ9MSl7c3VwZXIoKSx0aGlzLl9saW1pdD1lLHRoaXMuX3JhdGlvPU1hdGgubWluKE1hdGgubWF4KDAsdCksMSl9Z2V0IGxpbWl0KCl7cmV0dXJuIHRoaXMuX2xpbWl0fXNldCBsaW1pdChlKXt0aGlzLl9saW1pdD1lLHRoaXMuY2hlY2tUcmltKCl9Z2V0KGUsdD0yKXtyZXR1cm4gc3VwZXIuZ2V0KGUsdCl9cGVlayhlKXtyZXR1cm4gc3VwZXIuZ2V0KGUsMCl9c2V0KGUsdCl7cmV0dXJuIHN1cGVyLnNldChlLHQsMiksdGhpcy5jaGVja1RyaW0oKSx0aGlzfWNoZWNrVHJpbSgpe3RoaXMuc2l6ZT50aGlzLl9saW1pdCYmdGhpcy50cmltT2xkKE1hdGgucm91bmQodGhpcy5fbGltaXQqdGhpcy5fcmF0aW8pKX19KDFlNCk7ZnVuY3Rpb24gb3IoKXtjb25zdCBlPVtdLHQ9W107Zm9yKGxldCBlPTA7ZTw9MTI4O2UrKyl0W2VdPTA7Zm9yKGxldCBuPTA7bjw9MTI4O24rKyllLnB1c2godC5zbGljZSgwKSk7cmV0dXJuIGV9dmFyIGFyO29yKCksb3IoKSxvcigpLGZ1bmN0aW9uKGUpe2UuRGVmYXVsdD1bLTEwMCwwXSxlLmlzRGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4hZXx8Mj09PWUubGVuZ3RoJiYtMTAwPT09ZVswXSYmMD09PWVbMV19fShhcnx8KGFyPXt9KSk7Y29uc3Qgc3I9bmV3IFJlZ0V4cChgXFwkXFwoJHtEdC5pY29uTmFtZUV4cHJlc3Npb259KD86JHtEdC5pY29uTW9kaWZpZXJFeHByZXNzaW9ufSk/XFwpYCwiZyIpO25ldyBSZWdFeHAoRHQuaWNvbk5hbWVDaGFyYWN0ZXIpO2NvbnN0IGxyPW5ldyBSZWdFeHAoYChcXFxcKT8ke3NyLnNvdXJjZX1gLCJnIik7bmV3IFJlZ0V4cChgXFxcXCR7c3Iuc291cmNlfWAsImciKSxuZXcgUmVnRXhwKGAoXFxzKT8oXFxcXCk/JHtzci5zb3VyY2V9KFxccyk/YCwiZyIpO2NsYXNzIGNye2NvbnN0cnVjdG9yKGU9IiIsdD0hMSl7dmFyIG4scixpLG87aWYodGhpcy52YWx1ZT1lLCJzdHJpbmciIT10eXBlb2YgdGhpcy52YWx1ZSl0aHJvdyhvPSJ2YWx1ZSIpP25ldyBFcnJvcihgSWxsZWdhbCBhcmd1bWVudDogJHtvfWApOm5ldyBFcnJvcigiSWxsZWdhbCBhcmd1bWVudCIpOyJib29sZWFuIj09dHlwZW9mIHQ/KHRoaXMuaXNUcnVzdGVkPXQsdGhpcy5zdXBwb3J0VGhlbWVJY29ucz0hMSx0aGlzLnN1cHBvcnRIdG1sPSExKToodGhpcy5pc1RydXN0ZWQ9bnVsbCE9PShuPXQuaXNUcnVzdGVkKSYmdm9pZCAwIT09bj9uOnZvaWQgMCx0aGlzLnN1cHBvcnRUaGVtZUljb25zPW51bGwhPT0ocj10LnN1cHBvcnRUaGVtZUljb25zKSYmdm9pZCAwIT09ciYmcix0aGlzLnN1cHBvcnRIdG1sPW51bGwhPT0oaT10LnN1cHBvcnRIdG1sKSYmdm9pZCAwIT09aSYmaSl9YXBwZW5kVGV4dChlLHQ9MCl7dmFyIG47cmV0dXJuIHRoaXMudmFsdWUrPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtIV0vZywiXFwkJiIpfSh0aGlzLnN1cHBvcnRUaGVtZUljb25zPyhuPWUsbi5yZXBsYWNlKGxyLCgoZSx0KT0+dD9lOmBcXCR7ZX1gKSkpOmUpLnJlcGxhY2UoLyhbIFx0XSspL2csKChlLHQpPT4iJm5ic3A7Ii5yZXBlYXQodC5sZW5ndGgpKSkucmVwbGFjZSgvXD4vZ20sIlxcPiIpLnJlcGxhY2UoL1xuL2csMT09PXQ/IlxcXG4iOiJcblxuIiksdGhpc31hcHBlbmRNYXJrZG93bihlKXtyZXR1cm4gdGhpcy52YWx1ZSs9ZSx0aGlzfWFwcGVuZENvZGVibG9jayhlLHQpe3JldHVybiB0aGlzLnZhbHVlKz0iXG5gYGAiLHRoaXMudmFsdWUrPWUsdGhpcy52YWx1ZSs9IlxuIix0aGlzLnZhbHVlKz10LHRoaXMudmFsdWUrPSJcbmBgYFxuIix0aGlzfX12YXIgdXIsaHI7ZnVuY3Rpb24gZnIoZSx0LG4pe3RbdXIuRElfVEFSR0VUXT09PXQ/dFt1ci5ESV9ERVBFTkRFTkNJRVNdLnB1c2goe2lkOmUsaW5kZXg6bn0pOih0W3VyLkRJX0RFUEVOREVOQ0lFU109W3tpZDplLGluZGV4Om59XSx0W3VyLkRJX1RBUkdFVF09dCl9ZnVuY3Rpb24gZHIoZSl7aWYodXIuc2VydmljZUlkcy5oYXMoZSkpcmV0dXJuIHVyLnNlcnZpY2VJZHMuZ2V0KGUpO2NvbnN0IHQ9ZnVuY3Rpb24oZSxuLHIpe2lmKDMhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQElTZXJ2aWNlTmFtZS1kZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCB0byBkZWNvcmF0ZSBhIHBhcmFtZXRlciIpO2ZyKHQsZSxyKX07cmV0dXJuIHQudG9TdHJpbmc9KCk9PmUsdXIuc2VydmljZUlkcy5zZXQoZSx0KSx0fSFmdW5jdGlvbihlKXtlLnNlcnZpY2VJZHM9bmV3IE1hcCxlLkRJX1RBUkdFVD0iJGRpJHRhcmdldCIsZS5ESV9ERVBFTkRFTkNJRVM9IiRkaSRkZXBlbmRlbmNpZXMiLGUuZ2V0U2VydmljZURlcGVuZGVuY2llcz1mdW5jdGlvbih0KXtyZXR1cm4gdFtlLkRJX0RFUEVOREVOQ0lFU118fFtdfX0odXJ8fCh1cj17fSkpLGRyKCJpbnN0YW50aWF0aW9uU2VydmljZSIpLGRyKCJsb2dTZXJ2aWNlIiksZHIoImxvZ2dlclNlcnZpY2UiKSxmdW5jdGlvbihlKXtlW2UuVHJhY2U9MF09IlRyYWNlIixlW2UuRGVidWc9MV09IkRlYnVnIixlW2UuSW5mbz0yXT0iSW5mbyIsZVtlLldhcm5pbmc9M109Ildhcm5pbmciLGVbZS5FcnJvcj00XT0iRXJyb3IiLGVbZS5Dcml0aWNhbD01XT0iQ3JpdGljYWwiLGVbZS5PZmY9Nl09Ik9mZiJ9KGhyfHwoaHI9e30pKTtjb25zdCBtcj1oci5JbmZvO2NsYXNzIGdyIGV4dGVuZHMgZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sZXZlbD1tcix0aGlzLl9vbkRpZENoYW5nZUxvZ0xldmVsPXRoaXMuX3JlZ2lzdGVyKG5ldyBVKSx0aGlzLm9uRGlkQ2hhbmdlTG9nTGV2ZWw9dGhpcy5fb25EaWRDaGFuZ2VMb2dMZXZlbC5ldmVudH1zZXRMZXZlbChlKXt0aGlzLmxldmVsIT09ZSYmKHRoaXMubGV2ZWw9ZSx0aGlzLl9vbkRpZENoYW5nZUxvZ0xldmVsLmZpcmUodGhpcy5sZXZlbCkpfWdldExldmVsKCl7cmV0dXJuIHRoaXMubGV2ZWx9fWNsYXNzIHByIGV4dGVuZHMgZ3J7Y29uc3RydWN0b3IoZT1tcil7c3VwZXIoKSx0aGlzLnNldExldmVsKGUpfXRyYWNlKGUsLi4udCl7dGhpcy5nZXRMZXZlbCgpPD1oci5UcmFjZSYmY29uc29sZS5sb2coIiVjVFJBQ0UiLCJjb2xvcjogIzg4OCIsZSwuLi50KX1kZWJ1ZyhlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9aHIuRGVidWcmJmNvbnNvbGUubG9nKCIlY0RFQlVHIiwiYmFja2dyb3VuZDogI2VlZTsgY29sb3I6ICM4ODgiLGUsLi4udCl9aW5mbyhlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9aHIuSW5mbyYmY29uc29sZS5sb2coIiVjIElORk8iLCJjb2xvcjogIzMzZiIsZSwuLi50KX13YXJuKGUsLi4udCl7dGhpcy5nZXRMZXZlbCgpPD1oci5XYXJuaW5nJiZjb25zb2xlLmxvZygiJWMgV0FSTiIsImNvbG9yOiAjOTkzIixlLC4uLnQpfWVycm9yKGUsLi4udCl7dGhpcy5nZXRMZXZlbCgpPD1oci5FcnJvciYmY29uc29sZS5sb2coIiVjICBFUlIiLCJjb2xvcjogI2YzMyIsZSwuLi50KX1jcml0aWNhbChlLC4uLnQpe3RoaXMuZ2V0TGV2ZWwoKTw9aHIuQ3JpdGljYWwmJmNvbnNvbGUubG9nKCIlY0NSSVRJIiwiYmFja2dyb3VuZDogI2YzMzsgY29sb3I6IHdoaXRlIixlLC4uLnQpfWRpc3Bvc2UoKXt9Zmx1c2goKXt9fWNsYXNzIGJye3N0YXRpYyBjaG9yZChlLHQpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybihlfCg2NTUzNSZ0KTw8MTY+Pj4wKT4+PjB9KGUsdCl9fXZhciB2cix5cixDcjtmdW5jdGlvbiB3cihlLHQsbixyLGkpe3JldHVybiBmdW5jdGlvbihlLHQsbixyLGkpe2lmKDA9PT1yKXJldHVybiEwO2NvbnN0IG89dC5jaGFyQ29kZUF0KHItMSk7aWYoMCE9PWUuZ2V0KG8pKXJldHVybiEwO2lmKDEzPT09b3x8MTA9PT1vKXJldHVybiEwO2lmKGk+MCl7Y29uc3Qgbj10LmNoYXJDb2RlQXQocik7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsMCxyLGkpJiZmdW5jdGlvbihlLHQsbixyLGkpe2lmKHIraT09PW4pcmV0dXJuITA7Y29uc3Qgbz10LmNoYXJDb2RlQXQocitpKTtpZigwIT09ZS5nZXQobykpcmV0dXJuITA7aWYoMTM9PT1vfHwxMD09PW8pcmV0dXJuITA7aWYoaT4wKXtjb25zdCBuPXQuY2hhckNvZGVBdChyK2ktMSk7aWYoMCE9PWUuZ2V0KG4pKXJldHVybiEwfXJldHVybiExfShlLHQsbixyLGkpfWJyLkN0cmxDbWQ9MjA0OCxici5TaGlmdD0xMDI0LGJyLkFsdD01MTIsYnIuV2luQ3RybD0yNTYsZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSh2cnx8KHZyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifSh5cnx8KHlyPXt9KSksZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KENyfHwoQ3I9e30pKTtjbGFzcyBfcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX3dvcmRTZXBhcmF0b3JzPWUsdGhpcy5fc2VhcmNoUmVnZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KGUpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD1lLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dChlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBuO2Rve2lmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgrdGhpcy5fcHJldk1hdGNoTGVuZ3RoPT09dClyZXR1cm4gbnVsbDtpZihuPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWMoZSksIW4pcmV0dXJuIG51bGw7Y29uc3Qgcj1uLmluZGV4LGk9blswXS5sZW5ndGg7aWYocj09PXRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgmJmk9PT10aGlzLl9wcmV2TWF0Y2hMZW5ndGgpe2lmKDA9PT1pKXtKKGUsdCx0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpPjY1NTM1P3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTE7Y29udGludWV9cmV0dXJuIG51bGx9aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1yLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1pLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8d3IodGhpcy5fd29yZFNlcGFyYXRvcnMsZSx0LHIsaSkpcmV0dXJuIG59d2hpbGUobik7cmV0dXJuIG51bGx9fWNsYXNzIFNye2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldChlLmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9Wi5nZXRJbnN0YW5jZShuZXcgU2V0KGUuYWxsb3dlZExvY2FsZXMpKX1nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCl7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuImFsbE5vbkJhc2ljQXNjaWkiO2NvbnN0IGU9bmV3IFNldDtpZih0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiBZLmNvZGVQb2ludHMpQXIoU3RyaW5nLmZyb21Db2RlUG9pbnQodCkpfHxlLmFkZCh0KTtpZih0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycylmb3IoY29uc3QgdCBvZiB0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0Q29uZnVzYWJsZUNvZGVQb2ludHMoKSllLmFkZCh0KTtmb3IoY29uc3QgdCBvZiB0aGlzLmFsbG93ZWRDb2RlUG9pbnRzKWUuZGVsZXRlKHQpO3JldHVybiBlfXNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSx0KXtjb25zdCBuPWUuY29kZVBvaW50QXQoMCk7aWYodGhpcy5hbGxvd2VkQ29kZVBvaW50cy5oYXMobikpcmV0dXJuIDA7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuIDE7bGV0IHI9ITEsaT0hMTtpZih0KWZvcihsZXQgZSBvZiB0KXtjb25zdCB0PWUuY29kZVBvaW50QXQoMCksbj0obz1lLFgudGVzdChvKSk7cj1yfHxuLG58fHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyh0KXx8WS5pc0ludmlzaWJsZUNoYXJhY3Rlcih0KXx8KGk9ITApfXZhciBvO3JldHVybiFyJiZpPzA6dGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMmJiFBcihlKSYmWS5pc0ludmlzaWJsZUNoYXJhY3RlcihuKT8yOnRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzJiZ0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMobik/MzowfX1mdW5jdGlvbiBBcihlKXtyZXR1cm4iICI9PT1lfHwiXG4iPT09ZXx8Ilx0Ij09PWV9dmFyIEVyPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2woci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtsKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGwoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGEscyl9bCgocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfTtjbGFzcyBOciBleHRlbmRzIGNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xpbmVzPXQsdGhpcy5fZW9sPW4sdGhpcy5fdmVyc2lvbklkPXIsdGhpcy5fbGluZVN0YXJ0cz1udWxsLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9saW5lcy5sZW5ndGg9MH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9uSWR9Z2V0VGV4dCgpe3JldHVybiBudWxsPT09dGhpcy5fY2FjaGVkVGV4dFZhbHVlJiYodGhpcy5fY2FjaGVkVGV4dFZhbHVlPXRoaXMuX2xpbmVzLmpvaW4odGhpcy5fZW9sKSksdGhpcy5fY2FjaGVkVGV4dFZhbHVlfW9uRXZlbnRzKGUpe2UuZW9sJiZlLmVvbCE9PXRoaXMuX2VvbCYmKHRoaXMuX2VvbD1lLmVvbCx0aGlzLl9saW5lU3RhcnRzPW51bGwpO2NvbnN0IHQ9ZS5jaGFuZ2VzO2Zvcihjb25zdCBlIG9mIHQpdGhpcy5fYWNjZXB0RGVsZXRlUmFuZ2UoZS5yYW5nZSksdGhpcy5fYWNjZXB0SW5zZXJ0VGV4dChuZXcgWWUoZS5yYW5nZS5zdGFydExpbmVOdW1iZXIsZS5yYW5nZS5zdGFydENvbHVtbiksZS50ZXh0KTt0aGlzLl92ZXJzaW9uSWQ9ZS52ZXJzaW9uSWQsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9X2Vuc3VyZUxpbmVTdGFydHMoKXtpZighdGhpcy5fbGluZVN0YXJ0cyl7Y29uc3QgZT10aGlzLl9lb2wubGVuZ3RoLHQ9dGhpcy5fbGluZXMubGVuZ3RoLG49bmV3IFVpbnQzMkFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDtyKyspbltyXT10aGlzLl9saW5lc1tyXS5sZW5ndGgrZTt0aGlzLl9saW5lU3RhcnRzPW5ldyBodChuKX19X3NldExpbmVUZXh0KGUsdCl7dGhpcy5fbGluZXNbZV09dCx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnNldFZhbHVlKGUsdGhpcy5fbGluZXNbZV0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGgpfV9hY2NlcHREZWxldGVSYW5nZShlKXtpZihlLnN0YXJ0TGluZU51bWJlciE9PWUuZW5kTGluZU51bWJlcil0aGlzLl9zZXRMaW5lVGV4dChlLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbZS5lbmRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmVuZENvbHVtbi0xKSksdGhpcy5fbGluZXMuc3BsaWNlKGUuc3RhcnRMaW5lTnVtYmVyLGUuZW5kTGluZU51bWJlci1lLnN0YXJ0TGluZU51bWJlciksdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5yZW1vdmVWYWx1ZXMoZS5zdGFydExpbmVOdW1iZXIsZS5lbmRMaW5lTnVtYmVyLWUuc3RhcnRMaW5lTnVtYmVyKTtlbHNle2lmKGUuc3RhcnRDb2x1bW49PT1lLmVuZENvbHVtbilyZXR1cm47dGhpcy5fc2V0TGluZVRleHQoZS5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCxlLnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmVuZENvbHVtbi0xKSl9fV9hY2NlcHRJbnNlcnRUZXh0KGUsdCl7aWYoMD09PXQubGVuZ3RoKXJldHVybjtjb25zdCBuPXQuc3BsaXQoL1xyXG58XHJ8XG4vKTtpZigxPT09bi5sZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy5fc2V0TGluZVRleHQoZS5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLGUuY29sdW1uLTEpK25bMF0rdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmNvbHVtbi0xKSk7bltuLmxlbmd0aC0xXSs9dGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLmNvbHVtbi0xKSx0aGlzLl9zZXRMaW5lVGV4dChlLmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1tlLmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsZS5jb2x1bW4tMSkrblswXSk7Y29uc3Qgcj1uZXcgVWludDMyQXJyYXkobi5sZW5ndGgtMSk7Zm9yKGxldCB0PTE7dDxuLmxlbmd0aDt0KyspdGhpcy5fbGluZXMuc3BsaWNlKGUubGluZU51bWJlcit0LTEsMCxuW3RdKSxyW3QtMV09blt0XS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aDt0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLmluc2VydFZhbHVlcyhlLmxpbmVOdW1iZXIscil9fXtnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudChlKXtyZXR1cm4gdGhpcy5fbGluZXNbZS0xXX1nZXRXb3JkQXRQb3NpdGlvbihlLHQpe2NvbnN0IG49Z3QoZS5jb2x1bW4sZnVuY3Rpb24oZSl7bGV0IHQ9ZHQ7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH0odCksdGhpcy5fbGluZXNbZS5saW5lTnVtYmVyLTFdLDApO3JldHVybiBuP25ldyBRZShlLmxpbmVOdW1iZXIsbi5zdGFydENvbHVtbixlLmxpbmVOdW1iZXIsbi5lbmRDb2x1bW4pOm51bGx9d29yZHMoZSl7Y29uc3QgdD10aGlzLl9saW5lcyxuPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCByPTAsaT0iIixvPTAsYT1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKG88YS5sZW5ndGgpe2NvbnN0IGU9aS5zdWJzdHJpbmcoYVtvXS5zdGFydCxhW29dLmVuZCk7bys9MSx5aWVsZCBlfWVsc2V7aWYoIShyPHQubGVuZ3RoKSlicmVhaztpPXRbcl0sYT1uKGksZSksbz0wLHIrPTF9fX19Z2V0TGluZVdvcmRzKGUsdCl7Y29uc3Qgbj10aGlzLl9saW5lc1tlLTFdLHI9dGhpcy5fd29yZGVuaXplKG4sdCksaT1bXTtmb3IoY29uc3QgZSBvZiByKWkucHVzaCh7d29yZDpuLnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kKSxzdGFydENvbHVtbjplLnN0YXJ0KzEsZW5kQ29sdW1uOmUuZW5kKzF9KTtyZXR1cm4gaX1fd29yZGVuaXplKGUsdCl7Y29uc3Qgbj1bXTtsZXQgcjtmb3IodC5sYXN0SW5kZXg9MDsocj10LmV4ZWMoZSkpJiYwIT09clswXS5sZW5ndGg7KW4ucHVzaCh7c3RhcnQ6ci5pbmRleCxlbmQ6ci5pbmRleCtyWzBdLmxlbmd0aH0pO3JldHVybiBufWdldFZhbHVlSW5SYW5nZShlKXtpZigoZT10aGlzLl92YWxpZGF0ZVJhbmdlKGUpKS5zdGFydExpbmVOdW1iZXI9PT1lLmVuZExpbmVOdW1iZXIpcmV0dXJuIHRoaXMuX2xpbmVzW2Uuc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyhlLnN0YXJ0Q29sdW1uLTEsZS5lbmRDb2x1bW4tMSk7Y29uc3QgdD10aGlzLl9lb2wsbj1lLnN0YXJ0TGluZU51bWJlci0xLHI9ZS5lbmRMaW5lTnVtYmVyLTEsaT1bXTtpLnB1c2godGhpcy5fbGluZXNbbl0uc3Vic3RyaW5nKGUuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgZT1uKzE7ZTxyO2UrKylpLnB1c2godGhpcy5fbGluZXNbZV0pO3JldHVybiBpLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKDAsZS5lbmRDb2x1bW4tMSkpLGkuam9pbih0KX1vZmZzZXRBdChlKXtyZXR1cm4gZT10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKGUpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bShlLmxpbmVOdW1iZXItMikrKGUuY29sdW1uLTEpfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoMCxlKSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7Y29uc3QgdD10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YoZSksbj10aGlzLl9saW5lc1t0LmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MSt0LmluZGV4LGNvbHVtbjoxK01hdGgubWluKHQucmVtYWluZGVyLG4pfX1fdmFsaWRhdGVSYW5nZShlKXtjb25zdCB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5zdGFydExpbmVOdW1iZXIsY29sdW1uOmUuc3RhcnRDb2x1bW59KSxuPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6ZS5lbmRMaW5lTnVtYmVyLGNvbHVtbjplLmVuZENvbHVtbn0pO3JldHVybiB0LmxpbmVOdW1iZXIhPT1lLnN0YXJ0TGluZU51bWJlcnx8dC5jb2x1bW4hPT1lLnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXIhPT1lLmVuZExpbmVOdW1iZXJ8fG4uY29sdW1uIT09ZS5lbmRDb2x1bW4/e3N0YXJ0TGluZU51bWJlcjp0LmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5jb2x1bW4sZW5kTGluZU51bWJlcjpuLmxpbmVOdW1iZXIsZW5kQ29sdW1uOm4uY29sdW1ufTplfV92YWxpZGF0ZVBvc2l0aW9uKGUpe2lmKCFZZS5pc0lQb3NpdGlvbihlKSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOnQsY29sdW1uOm59PWUscj0hMTtpZih0PDEpdD0xLG49MSxyPSEwO2Vsc2UgaWYodD50aGlzLl9saW5lcy5sZW5ndGgpdD10aGlzLl9saW5lcy5sZW5ndGgsbj10aGlzLl9saW5lc1t0LTFdLmxlbmd0aCsxLHI9ITA7ZWxzZXtjb25zdCBlPXRoaXMuX2xpbmVzW3QtMV0ubGVuZ3RoKzE7bjwxPyhuPTEscj0hMCk6bj5lJiYobj1lLHI9ITApfXJldHVybiByP3tsaW5lTnVtYmVyOnQsY29sdW1uOm59OmV9fWNsYXNzIHhye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faG9zdD1lLHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PXQsdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwoZSl7cmV0dXJuIHRoaXMuX21vZGVsc1tlXX1fZ2V0TW9kZWxzKCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKCh0PT5lLnB1c2godGhpcy5fbW9kZWxzW3RdKSkpLGV9YWNjZXB0TmV3TW9kZWwoZSl7dGhpcy5fbW9kZWxzW2UudXJsXT1uZXcgTnIoQmUucGFyc2UoZS51cmwpLGUubGluZXMsZS5FT0wsZS52ZXJzaW9uSWQpfWFjY2VwdE1vZGVsQ2hhbmdlZChlLHQpe2lmKCF0aGlzLl9tb2RlbHNbZV0pcmV0dXJuO3RoaXMuX21vZGVsc1tlXS5vbkV2ZW50cyh0KX1hY2NlcHRSZW1vdmVkTW9kZWwoZSl7dGhpcy5fbW9kZWxzW2VdJiZkZWxldGUgdGhpcy5fbW9kZWxzW2VdfWNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhlLHQsbil7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gcj9jbGFzc3tzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGUsdCxuKXtjb25zdCByPW4/bi5zdGFydExpbmVOdW1iZXI6MSxpPW4/bi5lbmRMaW5lTnVtYmVyOmUuZ2V0TGluZUNvdW50KCksbz1uZXcgU3IodCksYT1vLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgczt2YXIgbDtzPSJhbGxOb25CYXNpY0FzY2lpIj09PWE/bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bmV3IFJlZ0V4cChgWyR7bD1BcnJheS5mcm9tKGEpLm1hcCgoZT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpKS5qb2luKCIiKSxsLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9XWAsImciKTtjb25zdCBjPW5ldyBfcihudWxsLHMpLHU9W107bGV0IGgsZj0hMSxkPTAsbT0wLGc9MDtlOmZvcihsZXQgdD1yLG49aTt0PD1uO3QrKyl7Y29uc3Qgbj1lLmdldExpbmVDb250ZW50KHQpLHI9bi5sZW5ndGg7Yy5yZXNldCgwKTtkb3tpZihoPWMubmV4dChuKSxoKXtsZXQgZT1oLmluZGV4LGk9aC5pbmRleCtoWzBdLmxlbmd0aDtlPjAmJkcobi5jaGFyQ29kZUF0KGUtMSkpJiZlLS0saSsxPHImJkcobi5jaGFyQ29kZUF0KGktMSkpJiZpKys7Y29uc3QgYT1uLnN1YnN0cmluZyhlLGkpLHM9Z3QoZSsxLGR0LG4sMCksbD1vLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoYSxzP3Mud29yZDpudWxsKTtpZigwIT09bCl7Mz09PWw/ZCsrOjI9PT1sP20rKzoxPT09bD9nKys6aigpO2NvbnN0IG49MWUzO2lmKHUubGVuZ3RoPj1uKXtmPSEwO2JyZWFrIGV9dS5wdXNoKG5ldyBRZSh0LGUrMSx0LGkrMSkpfX19d2hpbGUoaCl9cmV0dXJue3Jhbmdlczp1LGhhc01vcmU6ZixhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDpkLGludmlzaWJsZUNoYXJhY3RlckNvdW50Om0sbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50Omd9fXN0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodFJlYXNvbihlLHQpe2NvbnN0IG49bmV3IFNyKHQpO3N3aXRjaChuLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoZSxudWxsKSl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMjpyZXR1cm57a2luZDoxfTtjYXNlIDM6e2NvbnN0IHI9ZS5jb2RlUG9pbnRBdCgwKSxpPW4uYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRQcmltYXJ5Q29uZnVzYWJsZShyKSxvPVouZ2V0TG9jYWxlcygpLmZpbHRlcigoZT0+IVouZ2V0SW5zdGFuY2UobmV3IFNldChbLi4udC5hbGxvd2VkTG9jYWxlcyxlXSkpLmlzQW1iaWd1b3VzKHIpKSk7cmV0dXJue2tpbmQ6MCxjb25mdXNhYmxlV2l0aDpTdHJpbmcuZnJvbUNvZGVQb2ludChpKSxub3RBbWJpZ3VvdXNJbkxvY2FsZXM6b319Y2FzZSAxOnJldHVybntraW5kOjJ9fX19LmNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhyLHQsbik6e3JhbmdlczpbXSxoYXNNb3JlOiExLGFtYmlndW91c0NoYXJhY3RlckNvdW50OjAsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6MCxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6MH19KSl9Y29tcHV0ZURpZmYoZSx0LG4scil7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKSxvPXRoaXMuX2dldE1vZGVsKHQpO2lmKCFpfHwhbylyZXR1cm4gbnVsbDtjb25zdCBhPWkuZ2V0TGluZXNDb250ZW50KCkscz1vLmdldExpbmVzQ29udGVudCgpLGw9bmV3IG90KGEscyx7c2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITAsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6bixzaG91bGRNYWtlUHJldHR5RGlmZjohMCxtYXhDb21wdXRhdGlvblRpbWU6cn0pLmNvbXB1dGVEaWZmKCksYz0hKGwuY2hhbmdlcy5sZW5ndGg+MCkmJnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbChpLG8pO3JldHVybntxdWl0RWFybHk6bC5xdWl0RWFybHksaWRlbnRpY2FsOmMsY2hhbmdlczpsLmNoYW5nZXN9fSkpfV9tb2RlbHNBcmVJZGVudGljYWwoZSx0KXtjb25zdCBuPWUuZ2V0TGluZUNvdW50KCk7aWYobiE9PXQuZ2V0TGluZUNvdW50KCkpcmV0dXJuITE7Zm9yKGxldCByPTE7cjw9bjtyKyspe2lmKGUuZ2V0TGluZUNvbnRlbnQocikhPT10LmdldExpbmVDb250ZW50KHIpKXJldHVybiExfXJldHVybiEwfWNvbXB1dGVNb3JlTWluaW1hbEVkaXRzKGUsdCl7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj10aGlzLl9nZXRNb2RlbChlKTtpZighbilyZXR1cm4gdDtjb25zdCByPVtdO2xldCBpO3Q9dC5zbGljZSgwKS5zb3J0KCgoZSx0KT0+e2lmKGUucmFuZ2UmJnQucmFuZ2UpcmV0dXJuIFFlLmNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyhlLnJhbmdlLHQucmFuZ2UpO3JldHVybihlLnJhbmdlPzA6MSktKHQucmFuZ2U/MDoxKX0pKTtmb3IobGV0e3JhbmdlOmUsdGV4dDpvLGVvbDphfW9mIHQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmKGk9YSksUWUuaXNFbXB0eShlKSYmIW8pY29udGludWU7Y29uc3QgdD1uLmdldFZhbHVlSW5SYW5nZShlKTtpZihvPW8ucmVwbGFjZSgvXHJcbnxcbnxcci9nLG4uZW9sKSx0PT09byljb250aW51ZTtpZihNYXRoLm1heChvLmxlbmd0aCx0Lmxlbmd0aCk+eHIuX2RpZmZMaW1pdCl7ci5wdXNoKHtyYW5nZTplLHRleHQ6b30pO2NvbnRpbnVlfWNvbnN0IHM9ZmUodCxvLCExKSxsPW4ub2Zmc2V0QXQoUWUubGlmdChlKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBlIG9mIHMpe2NvbnN0IHQ9bi5wb3NpdGlvbkF0KGwrZS5vcmlnaW5hbFN0YXJ0KSxpPW4ucG9zaXRpb25BdChsK2Uub3JpZ2luYWxTdGFydCtlLm9yaWdpbmFsTGVuZ3RoKSxhPXt0ZXh0Om8uc3Vic3RyKGUubW9kaWZpZWRTdGFydCxlLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnQubGluZU51bWJlcixzdGFydENvbHVtbjp0LmNvbHVtbixlbmRMaW5lTnVtYmVyOmkubGluZU51bWJlcixlbmRDb2x1bW46aS5jb2x1bW59fTtuLmdldFZhbHVlSW5SYW5nZShhLnJhbmdlKSE9PWEudGV4dCYmci5wdXNoKGEpfX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIGkmJnIucHVzaCh7ZW9sOmksdGV4dDoiIixyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOjAsc3RhcnRDb2x1bW46MCxlbmRMaW5lTnVtYmVyOjAsZW5kQ29sdW1uOjB9fSkscn0pKX1jb21wdXRlTGlua3MoZSl7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD10aGlzLl9nZXRNb2RlbChlKTtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0TGluZUNvdW50JiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRMaW5lQ29udGVudD9fdC5jb21wdXRlTGlua3MoZSk6W119KHQpOm51bGx9KSl9dGV4dHVhbFN1Z2dlc3QoZSx0LG4scil7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT1uZXcgUighMCksbz1uZXcgUmVnRXhwKG4sciksYT1uZXcgU2V0O2U6Zm9yKGxldCBuIG9mIGUpe2NvbnN0IGU9dGhpcy5fZ2V0TW9kZWwobik7aWYoZSlmb3IobGV0IG4gb2YgZS53b3JkcyhvKSlpZihuIT09dCYmaXNOYU4oTnVtYmVyKG4pKSYmKGEuYWRkKG4pLGEuc2l6ZT54ci5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShhKSxkdXJhdGlvbjppLmVsYXBzZWQoKX19KSl9Y29tcHV0ZVdvcmRSYW5nZXMoZSx0LG4scil7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT10aGlzLl9nZXRNb2RlbChlKTtpZighaSlyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBvPW5ldyBSZWdFeHAobixyKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPXQuc3RhcnRMaW5lTnVtYmVyO2U8dC5lbmRMaW5lTnVtYmVyO2UrKyl7Y29uc3QgdD1pLmdldExpbmVXb3JkcyhlLG8pO2Zvcihjb25zdCBuIG9mIHQpe2lmKCFpc05hTihOdW1iZXIobi53b3JkKSkpY29udGludWU7bGV0IHQ9YVtuLndvcmRdO3R8fCh0PVtdLGFbbi53b3JkXT10KSx0LnB1c2goe3N0YXJ0TGluZU51bWJlcjplLHN0YXJ0Q29sdW1uOm4uc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjplLGVuZENvbHVtbjpuLmVuZENvbHVtbn0pfX1yZXR1cm4gYX0pKX1uYXZpZ2F0ZVZhbHVlU2V0KGUsdCxuLHIsaSl7cmV0dXJuIEVyKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbz10aGlzLl9nZXRNb2RlbChlKTtpZighbylyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyBSZWdFeHAocixpKTt0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW4mJih0PXtzdGFydExpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46dC5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixlbmRDb2x1bW46dC5lbmRDb2x1bW4rMX0pO2NvbnN0IHM9by5nZXRWYWx1ZUluUmFuZ2UodCksbD1vLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSxhKTtpZighbClyZXR1cm4gbnVsbDtjb25zdCBjPW8uZ2V0VmFsdWVJblJhbmdlKGwpO3JldHVybiBTdC5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KHQscyxsLGMsbil9KSl9bG9hZEZvcmVpZ25Nb2R1bGUoZSx0LG4pe2NvbnN0IHI9ZnVuY3Rpb24oZSx0KXtjb25zdCBuPWU9PmZ1bmN0aW9uKCl7Y29uc3Qgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoZSxuKX07bGV0IHI9e307Zm9yKGNvbnN0IHQgb2YgZSlyW3RdPW4odCk7cmV0dXJuIHJ9KG4sKChlLHQpPT50aGlzLl9ob3N0LmZocihlLHQpKSksaT17aG9zdDpyLGdldE1pcnJvck1vZGVsczooKT0+dGhpcy5fZ2V0TW9kZWxzKCl9O3JldHVybiB0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT8odGhpcy5fZm9yZWlnbk1vZHVsZT10aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeShpLHQpLFByb21pc2UucmVzb2x2ZShCKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcihlLHQpe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVtlXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIitlKSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVtlXS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLHQpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fX14ci5fZGlmZkxpbWl0PTFlNSx4ci5fc3VnZ2VzdGlvbnNMaW1pdD0xZTQsImZ1bmN0aW9uIj09dHlwZW9mIGltcG9ydFNjcmlwdHMmJihOLm1vbmFjbz17ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLGV4dHJhOnZvaWQgMCxDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTp4dCxFbWl0dGVyOlUsS2V5Q29kZTpwbixLZXlNb2Q6YnIsUG9zaXRpb246WWUsUmFuZ2U6UWUsU2VsZWN0aW9uOkZ0LFVyaTpCZSxUb2tlbjpRbixNYXJrZG93blN0cmluZzpjcixNYXJrZG93blN0cmluZ1RleHROZXdsaW5lU3R5bGU6d24sRGlzcG9zYWJsZTpkLERpc3Bvc2FibGVTdG9yZTpmLEVycm9ySGFuZGxlcjplLEFic3RyYWN0TG9nZ2VyOmdyLENvbnNvbGVMb2dnZXI6cHIsVG9rZW5pemF0aW9uUmVzdWx0OmVyLEVuY29kZWRUb2tlbml6YXRpb25SZXN1bHQ6dHIsU2VsZWN0aW9uRGlyZWN0aW9uOkZuLE1hcmtlclNldmVyaXR5Ol9uLE1hcmtlclRhZzpTbixMb2dMZXZlbDpDbixlcnJvckhhbmRsZXI6dH0pO2xldCBMcj0hMTtmdW5jdGlvbiBrcihlKXtpZihMcilyZXR1cm47THI9ITA7Y29uc3QgdD1uZXcgc2UoKGU9PntzZWxmLnBvc3RNZXNzYWdlKGUpfSksKHQ9Pm5ldyB4cih0LGUpKSk7c2VsZi5vbm1lc3NhZ2U9ZT0+e3Qub25tZXNzYWdlKGUuZGF0YSl9fQovKiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICAgKiBWZXJzaW9uOiAwLjMzLjAoYWM5YjYzNTk0ZmE0OWRiODQyNWU0M2FmNmY4OGJmZDA0OTlkZTM1NCkKICAgICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9tb25hY28tZWRpdG9yL2Jsb2IvbWFpbi9MSUNFTlNFLnR4dAogICAgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmZ1bmN0aW9uIFRyKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBuPWUubGVuZ3RoLHI9MCxpPSIiLG89MCxhPTE2LHM9MCxsPTAsYz0wLHU9MCxoPTA7ZnVuY3Rpb24gZih0LG4pe2Zvcih2YXIgaT0wLG89MDtpPHR8fCFuOyl7dmFyIGE9ZS5jaGFyQ29kZUF0KHIpO2lmKGE+PTQ4JiZhPD01NylvPTE2Km8rYS00ODtlbHNlIGlmKGE+PTY1JiZhPD03MClvPTE2Km8rYS02NSsxMDtlbHNle2lmKCEoYT49OTcmJmE8PTEwMikpYnJlYWs7bz0xNipvK2EtOTcrMTB9cisrLGkrK31yZXR1cm4gaTx0JiYobz0tMSksb31mdW5jdGlvbiBkKCl7aWYoaT0iIixoPTAsbz1yLGw9cyx1PWMscj49bilyZXR1cm4gbz1uLGE9MTc7dmFyIHQ9ZS5jaGFyQ29kZUF0KHIpO2lmKE9yKHQpKXtkb3tyKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSx0PWUuY2hhckNvZGVBdChyKX13aGlsZShPcih0KSk7cmV0dXJuIGE9MTV9aWYoTXIodCkpcmV0dXJuIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLDEzPT09dCYmMTA9PT1lLmNoYXJDb2RlQXQocikmJihyKyssaSs9IlxuIikscysrLGM9cixhPTE0O3N3aXRjaCh0KXtjYXNlIDEyMzpyZXR1cm4gcisrLGE9MTtjYXNlIDEyNTpyZXR1cm4gcisrLGE9MjtjYXNlIDkxOnJldHVybiByKyssYT0zO2Nhc2UgOTM6cmV0dXJuIHIrKyxhPTQ7Y2FzZSA1ODpyZXR1cm4gcisrLGE9NjtjYXNlIDQ0OnJldHVybiByKyssYT01O2Nhc2UgMzQ6cmV0dXJuIHIrKyxpPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSIiLGk9cjs7KXtpZihyPj1uKXt0Kz1lLnN1YnN0cmluZyhpLHIpLGg9MjticmVha312YXIgbz1lLmNoYXJDb2RlQXQocik7aWYoMzQ9PT1vKXt0Kz1lLnN1YnN0cmluZyhpLHIpLHIrKzticmVha31pZig5MiE9PW8pe2lmKG8+PTAmJm88PTMxKXtpZihNcihvKSl7dCs9ZS5zdWJzdHJpbmcoaSxyKSxoPTI7YnJlYWt9aD02fXIrK31lbHNle2lmKHQrPWUuc3Vic3RyaW5nKGksciksKytyPj1uKXtoPTI7YnJlYWt9c3dpdGNoKGUuY2hhckNvZGVBdChyKyspKXtjYXNlIDM0OnQrPSciJzticmVhaztjYXNlIDkyOnQrPSJcXCI7YnJlYWs7Y2FzZSA0Nzp0Kz0iLyI7YnJlYWs7Y2FzZSA5ODp0Kz0iXGIiO2JyZWFrO2Nhc2UgMTAyOnQrPSJcZiI7YnJlYWs7Y2FzZSAxMTA6dCs9IlxuIjticmVhaztjYXNlIDExNDp0Kz0iXHIiO2JyZWFrO2Nhc2UgMTE2OnQrPSJcdCI7YnJlYWs7Y2FzZSAxMTc6dmFyIGE9Zig0LCEwKTthPj0wP3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk6aD00O2JyZWFrO2RlZmF1bHQ6aD01fWk9cn19cmV0dXJuIHR9KCksYT0xMDtjYXNlIDQ3OnZhciBkPXItMTtpZig0Nz09PWUuY2hhckNvZGVBdChyKzEpKXtmb3Iocis9MjtyPG4mJiFNcihlLmNoYXJDb2RlQXQocikpOylyKys7cmV0dXJuIGk9ZS5zdWJzdHJpbmcoZCxyKSxhPTEyfWlmKDQyPT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTI7Zm9yKHZhciBnPW4tMSxwPSExO3I8Zzspe3ZhciBiPWUuY2hhckNvZGVBdChyKTtpZig0Mj09PWImJjQ3PT09ZS5jaGFyQ29kZUF0KHIrMSkpe3IrPTIscD0hMDticmVha31yKyssTXIoYikmJigxMz09PWImJjEwPT09ZS5jaGFyQ29kZUF0KHIpJiZyKysscysrLGM9cil9cmV0dXJuIHB8fChyKyssaD0xKSxpPWUuc3Vic3RyaW5nKGQsciksYT0xM31yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKyssYT0xNjtjYXNlIDQ1OmlmKGkrPVN0cmluZy5mcm9tQ2hhckNvZGUodCksKytyPT09bnx8IUlyKGUuY2hhckNvZGVBdChyKSkpcmV0dXJuIGE9MTY7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gaSs9ZnVuY3Rpb24oKXt2YXIgdD1yO2lmKDQ4PT09ZS5jaGFyQ29kZUF0KHIpKXIrKztlbHNlIGZvcihyKys7cjxlLmxlbmd0aCYmSXIoZS5jaGFyQ29kZUF0KHIpKTspcisrO2lmKHI8ZS5sZW5ndGgmJjQ2PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighKCsrcjxlLmxlbmd0aCYmSXIoZS5jaGFyQ29kZUF0KHIpKSkpcmV0dXJuIGg9MyxlLnN1YnN0cmluZyh0LHIpO2ZvcihyKys7cjxlLmxlbmd0aCYmSXIoZS5jaGFyQ29kZUF0KHIpKTspcisrfXZhciBuPXI7aWYocjxlLmxlbmd0aCYmKDY5PT09ZS5jaGFyQ29kZUF0KHIpfHwxMDE9PT1lLmNoYXJDb2RlQXQocikpKWlmKCgrK3I8ZS5sZW5ndGgmJjQzPT09ZS5jaGFyQ29kZUF0KHIpfHw0NT09PWUuY2hhckNvZGVBdChyKSkmJnIrKyxyPGUubGVuZ3RoJiZJcihlLmNoYXJDb2RlQXQocikpKXtmb3IocisrO3I8ZS5sZW5ndGgmJklyKGUuY2hhckNvZGVBdChyKSk7KXIrKztuPXJ9ZWxzZSBoPTM7cmV0dXJuIGUuc3Vic3RyaW5nKHQsbil9KCksYT0xMTtkZWZhdWx0OmZvcig7cjxuJiZtKHQpOylyKyssdD1lLmNoYXJDb2RlQXQocik7aWYobyE9PXIpe3N3aXRjaChpPWUuc3Vic3RyaW5nKG8scikpe2Nhc2UidHJ1ZSI6cmV0dXJuIGE9ODtjYXNlImZhbHNlIjpyZXR1cm4gYT05O2Nhc2UibnVsbCI6cmV0dXJuIGE9N31yZXR1cm4gYT0xNn1yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxyKyssYT0xNn19ZnVuY3Rpb24gbShlKXtpZihPcihlKXx8TXIoZSkpcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2UgMTI1OmNhc2UgOTM6Y2FzZSAxMjM6Y2FzZSA5MTpjYXNlIDM0OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDQ3OnJldHVybiExfXJldHVybiEwfXJldHVybntzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXtyPWUsaT0iIixvPTAsYT0xNixoPTB9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNjYW46dD9mdW5jdGlvbigpe3ZhciBlO2Rve2U9ZCgpfXdoaWxlKGU+PTEyJiZlPD0xNSk7cmV0dXJuIGV9OmQsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBpfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBvfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiByLW99LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gby11fSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGh9fX1mdW5jdGlvbiBPcihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTE9PT1lfHwxMj09PWV8fDE2MD09PWV8fDU3NjA9PT1lfHxlPj04MTkyJiZlPD04MjAzfHw4MjM5PT09ZXx8ODI4Nz09PWV8fDEyMjg4PT09ZXx8NjUyNzk9PT1lfWZ1bmN0aW9uIE1yKGUpe3JldHVybiAxMD09PWV8fDEzPT09ZXx8ODIzMj09PWV8fDgyMzM9PT1lfWZ1bmN0aW9uIElyKGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gUnIoZSx0LG4pe3ZhciByLGksbyxhLHM7aWYodCl7Zm9yKGE9dC5vZmZzZXQscz1hK3QubGVuZ3RoLG89YTtvPjAmJiFGcihlLG8tMSk7KW8tLTtmb3IodmFyIGw9cztsPGUubGVuZ3RoJiYhRnIoZSxsKTspbCsrO2k9ZS5zdWJzdHJpbmcobyxsKSxyPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPTAsaT10LnRhYlNpemV8fDQ7Zm9yKDtuPGUubGVuZ3RoOyl7dmFyIG89ZS5jaGFyQXQobik7aWYoIiAiPT09bylyKys7ZWxzZXtpZigiXHQiIT09bylicmVhaztyKz1pfW4rK31yZXR1cm4gTWF0aC5mbG9vcihyL2kpfShpLG4pfWVsc2UgaT1lLHI9MCxvPTAsYT0wLHM9ZS5sZW5ndGg7dmFyIGMsdT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10LmNoYXJBdChuKTtpZigiXHIiPT09cilyZXR1cm4gbisxPHQubGVuZ3RoJiYiXG4iPT09dC5jaGFyQXQobisxKT8iXHJcbiI6IlxyIjtpZigiXG4iPT09cilyZXR1cm4iXG4ifXJldHVybiBlJiZlLmVvbHx8IlxuIn0obixlKSxoPSExLGY9MDtjPW4uaW5zZXJ0U3BhY2VzP1ByKCIgIixuLnRhYlNpemV8fDQpOiJcdCI7dmFyIGQ9VHIoaSwhMSksbT0hMTtmdW5jdGlvbiBnKCl7cmV0dXJuIHUrUHIoYyxyK2YpfWZ1bmN0aW9uIHAoKXt2YXIgZT1kLnNjYW4oKTtmb3IoaD0hMTsxNT09PWV8fDE0PT09ZTspaD1ofHwxND09PWUsZT1kLnNjYW4oKTtyZXR1cm4gbT0xNj09PWV8fDAhPT1kLmdldFRva2VuRXJyb3IoKSxlfXZhciBiPVtdO2Z1bmN0aW9uIHYobixyLGkpe218fHQmJiEocjxzJiZpPmEpfHxlLnN1YnN0cmluZyhyLGkpPT09bnx8Yi5wdXNoKHtvZmZzZXQ6cixsZW5ndGg6aS1yLGNvbnRlbnQ6bn0pfXZhciB5PXAoKTtpZigxNyE9PXkpe3ZhciBDPWQuZ2V0VG9rZW5PZmZzZXQoKStvO3YoUHIoYyxyKSxvLEMpfWZvcig7MTchPT15Oyl7Zm9yKHZhciB3PWQuZ2V0VG9rZW5PZmZzZXQoKStkLmdldFRva2VuTGVuZ3RoKCkrbyxfPXAoKSxTPSIiLEE9ITE7IWgmJigxMj09PV98fDEzPT09Xyk7KXt2KCIgIix3LGQuZ2V0VG9rZW5PZmZzZXQoKStvKSx3PWQuZ2V0VG9rZW5PZmZzZXQoKStkLmdldFRva2VuTGVuZ3RoKCkrbyxTPShBPTEyPT09Xyk/ZygpOiIiLF89cCgpfWlmKDI9PT1fKTEhPT15JiYoZi0tLFM9ZygpKTtlbHNlIGlmKDQ9PT1fKTMhPT15JiYoZi0tLFM9ZygpKTtlbHNle3N3aXRjaCh5KXtjYXNlIDM6Y2FzZSAxOmYrKyxTPWcoKTticmVhaztjYXNlIDU6Y2FzZSAxMjpTPWcoKTticmVhaztjYXNlIDEzOmg/Uz1nKCk6QXx8KFM9IiAiKTticmVhaztjYXNlIDY6QXx8KFM9IiAiKTticmVhaztjYXNlIDEwOmlmKDY9PT1fKXtBfHwoUz0iIik7YnJlYWt9Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMTpjYXNlIDI6Y2FzZSA0OjEyPT09X3x8MTM9PT1fP0F8fChTPSIgIik6NSE9PV8mJjE3IT09XyYmKG09ITApO2JyZWFrO2Nhc2UgMTY6bT0hMH0haHx8MTIhPT1fJiYxMyE9PV98fChTPWcoKSl9MTc9PT1fJiYoUz1uLmluc2VydEZpbmFsTmV3bGluZT91OiIiKSx2KFMsdyxkLmdldFRva2VuT2Zmc2V0KCkrbykseT1ffXJldHVybiBifWZ1bmN0aW9uIFByKGUsdCl7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPWU7cmV0dXJuIG59ZnVuY3Rpb24gRnIoZSx0KXtyZXR1cm4tMSE9PSJcclxuIi5pbmRleE9mKGUuY2hhckF0KHQpKX12YXIgRHI7c2VsZi5vbm1lc3NhZ2U9ZT0+e0xyfHxrcihudWxsKX0sKERyfHwoRHI9e30pKS5ERUZBVUxUPXthbGxvd1RyYWlsaW5nQ29tbWE6ITF9O3ZhciBWcixLcixVcixCcixqcixxciwkcixXcixIcix6cixHcixKcixYcixacixZcixRcixlaSx0aSxuaSxyaSxpaSxvaSxhaSxzaSxsaSxjaSx1aSxoaSxmaSxkaSxtaSxnaSxwaSxiaSx2aSx5aSxDaSx3aSxfaSxTaSxBaSxFaSxOaSx4aSxMaSxraSxUaSxPaSxNaSxJaT1UcixSaT1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPURyLkRFRkFVTFQpO3ZhciByPW51bGwsaT1bXSxvPVtdO2Z1bmN0aW9uIGEoZSl7QXJyYXkuaXNBcnJheShpKT9pLnB1c2goZSk6bnVsbCE9PXImJihpW3JdPWUpfXJldHVybiBmdW5jdGlvbihlLHQsbil7dm9pZCAwPT09biYmKG49RHIuREVGQVVMVCk7dmFyIHI9VHIoZSwhMSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZT9mdW5jdGlvbigpe3JldHVybiBlKHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT9mdW5jdGlvbih0KXtyZXR1cm4gZSh0LHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpKX06ZnVuY3Rpb24oKXtyZXR1cm4hMH19dmFyIGE9aSh0Lm9uT2JqZWN0QmVnaW4pLHM9byh0Lm9uT2JqZWN0UHJvcGVydHkpLGw9aSh0Lm9uT2JqZWN0RW5kKSxjPWkodC5vbkFycmF5QmVnaW4pLHU9aSh0Lm9uQXJyYXlFbmQpLGg9byh0Lm9uTGl0ZXJhbFZhbHVlKSxmPW8odC5vblNlcGFyYXRvciksZD1pKHQub25Db21tZW50KSxtPW8odC5vbkVycm9yKSxnPW4mJm4uZGlzYWxsb3dDb21tZW50cyxwPW4mJm4uYWxsb3dUcmFpbGluZ0NvbW1hO2Z1bmN0aW9uIGIoKXtmb3IoOzspe3ZhciBlPXIuc2NhbigpO3N3aXRjaChyLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OnYoMTQpO2JyZWFrO2Nhc2UgNTp2KDE1KTticmVhaztjYXNlIDM6digxMyk7YnJlYWs7Y2FzZSAxOmd8fHYoMTEpO2JyZWFrO2Nhc2UgMjp2KDEyKTticmVhaztjYXNlIDY6digxNil9c3dpdGNoKGUpe2Nhc2UgMTI6Y2FzZSAxMzpnP3YoMTApOmQoKTticmVhaztjYXNlIDE2OnYoMSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGV9fX1mdW5jdGlvbiB2KGUsdCxuKXtpZih2b2lkIDA9PT10JiYodD1bXSksdm9pZCAwPT09biYmKG49W10pLG0oZSksdC5sZW5ndGgrbi5sZW5ndGg+MClmb3IodmFyIGk9ci5nZXRUb2tlbigpOzE3IT09aTspe2lmKC0xIT09dC5pbmRleE9mKGkpKXtiKCk7YnJlYWt9aWYoLTEhPT1uLmluZGV4T2YoaSkpYnJlYWs7aT1iKCl9fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ci5nZXRUb2tlblZhbHVlKCk7cmV0dXJuIGU/aCh0KTpzKHQpLGIoKSwhMH1mdW5jdGlvbiBDKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAxMTp2YXIgZT1yLmdldFRva2VuVmFsdWUoKSx0PU51bWJlcihlKTtpc05hTih0KSYmKHYoMiksdD0wKSxoKHQpO2JyZWFrO2Nhc2UgNzpoKG51bGwpO2JyZWFrO2Nhc2UgODpoKCEwKTticmVhaztjYXNlIDk6aCghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gYigpLCEwfWZ1bmN0aW9uIHcoKXtyZXR1cm4gMTAhPT1yLmdldFRva2VuKCk/KHYoMyxbXSxbMiw1XSksITEpOih5KCExKSw2PT09ci5nZXRUb2tlbigpPyhmKCI6IiksYigpLEEoKXx8dig0LFtdLFsyLDVdKSk6dig1LFtdLFsyLDVdKSwhMCl9ZnVuY3Rpb24gXygpe2EoKSxiKCk7Zm9yKHZhciBlPSExOzIhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8dig0LFtdLFtdKSxmKCIsIiksYigpLDI9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZ2KDYsW10sW10pO3coKXx8dig0LFtdLFsyLDVdKSxlPSEwfXJldHVybiBsKCksMiE9PXIuZ2V0VG9rZW4oKT92KDcsWzJdLFtdKTpiKCksITB9ZnVuY3Rpb24gUygpe2MoKSxiKCk7Zm9yKHZhciBlPSExOzQhPT1yLmdldFRva2VuKCkmJjE3IT09ci5nZXRUb2tlbigpOyl7aWYoNT09PXIuZ2V0VG9rZW4oKSl7aWYoZXx8dig0LFtdLFtdKSxmKCIsIiksYigpLDQ9PT1yLmdldFRva2VuKCkmJnApYnJlYWt9ZWxzZSBlJiZ2KDYsW10sW10pO0EoKXx8dig0LFtdLFs0LDVdKSxlPSEwfXJldHVybiB1KCksNCE9PXIuZ2V0VG9rZW4oKT92KDgsWzRdLFtdKTpiKCksITB9ZnVuY3Rpb24gQSgpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMzpyZXR1cm4gUygpO2Nhc2UgMTpyZXR1cm4gXygpO2Nhc2UgMTA6cmV0dXJuIHkoITApO2RlZmF1bHQ6cmV0dXJuIEMoKX19aWYoYigpLDE3PT09ci5nZXRUb2tlbigpKXJldHVybiEhbi5hbGxvd0VtcHR5Q29udGVudHx8KHYoNCxbXSxbXSksITEpO2lmKCFBKCkpcmV0dXJuIHYoNCxbXSxbXSksITE7MTchPT1yLmdldFRva2VuKCkmJnYoOSxbXSxbXSl9KGUse29uT2JqZWN0QmVnaW46ZnVuY3Rpb24oKXt2YXIgZT17fTthKGUpLG8ucHVzaChpKSxpPWUscj1udWxsfSxvbk9iamVjdFByb3BlcnR5OmZ1bmN0aW9uKGUpe3I9ZX0sb25PYmplY3RFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uQXJyYXlCZWdpbjpmdW5jdGlvbigpe3ZhciBlPVtdO2EoZSksby5wdXNoKGkpLGk9ZSxyPW51bGx9LG9uQXJyYXlFbmQ6ZnVuY3Rpb24oKXtpPW8ucG9wKCl9LG9uTGl0ZXJhbFZhbHVlOmEsb25FcnJvcjpmdW5jdGlvbihlLG4scil7dC5wdXNoKHtlcnJvcjplLG9mZnNldDpuLGxlbmd0aDpyfSl9fSxuKSxpWzBdfSxQaT1mdW5jdGlvbiBlKHQsbixyKXtpZih2b2lkIDA9PT1yJiYocj0hMSksZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0hMSksdD49ZS5vZmZzZXQmJnQ8ZS5vZmZzZXQrZS5sZW5ndGh8fG4mJnQ9PT1lLm9mZnNldCtlLmxlbmd0aH0odCxuLHIpKXt2YXIgaT10LmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aCYmaVtvXS5vZmZzZXQ8PW47bysrKXt2YXIgYT1lKGlbb10sbixyKTtpZihhKXJldHVybiBhfXJldHVybiB0fX0sRmk9ZnVuY3Rpb24gZSh0KXtpZighdC5wYXJlbnR8fCF0LnBhcmVudC5jaGlsZHJlbilyZXR1cm5bXTt2YXIgbj1lKHQucGFyZW50KTtpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIHI9dC5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWU7bi5wdXNoKHIpfWVsc2UgaWYoImFycmF5Ij09PXQucGFyZW50LnR5cGUpe3ZhciBpPXQucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodCk7LTEhPT1pJiZuLnB1c2goaSl9cmV0dXJuIG59LERpPWZ1bmN0aW9uIGUodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGUpO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPTAsaT10LmNoaWxkcmVuO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdLGE9by5jaGlsZHJlblsxXTthJiYobltvLmNoaWxkcmVuWzBdLnZhbHVlXT1lKGEpKX1yZXR1cm4gbjtjYXNlIm51bGwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdC52YWx1ZTtkZWZhdWx0OnJldHVybn19O2Z1bmN0aW9uIFZpKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYobnVsbD09ZXx8bnVsbD09dClyZXR1cm4hMTtpZih0eXBlb2YgZSE9dHlwZW9mIHQpcmV0dXJuITE7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoZSkhPT1BcnJheS5pc0FycmF5KHQpKXJldHVybiExO3ZhciBuLHI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKCFWaShlW25dLHRbbl0pKXJldHVybiExfWVsc2V7dmFyIGk9W107Zm9yKHIgaW4gZSlpLnB1c2gocik7aS5zb3J0KCk7dmFyIG89W107Zm9yKHIgaW4gdClvLnB1c2gocik7aWYoby5zb3J0KCksIVZpKGksbykpcmV0dXJuITE7Zm9yKG49MDtuPGkubGVuZ3RoO24rKylpZighVmkoZVtpW25dXSx0W2lbbl1dKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBLaShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIHZvaWQgMCE9PWV9ZnVuY3Rpb24gQmkoZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX1mdW5jdGlvbiBqaShlLHQpe3ZhciBuPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiBuPjA/ZS5sYXN0SW5kZXhPZih0KT09PW46MD09PW4mJmU9PT10fWZ1bmN0aW9uIHFpKGUpe3ZhciB0PSIiOyhmdW5jdGlvbihlLHQpe2lmKGUubGVuZ3RoPHQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfSkoZSwiKD9pKSIpJiYoZT1lLnN1YnN0cmluZyg0KSx0PSJpIik7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCsidSIpfWNhdGNoKG4pe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQpfWNhdGNoKGUpe3JldHVybn19fShLcj1Wcnx8KFZyPXt9KSkuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LEtyLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LChCcj1Vcnx8KFVyPXt9KSkuTUlOX1ZBTFVFPTAsQnIuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsKHFyPWpyfHwoanI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PU51bWJlci5NQVhfVkFMVUUmJihlPVVyLk1BWF9WQUxVRSksdD09PU51bWJlci5NQVhfVkFMVUUmJih0PVVyLk1BWF9WQUxVRSkse2xpbmU6ZSxjaGFyYWN0ZXI6dH19LHFyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLm9iamVjdExpdGVyYWwodCkmJiRvLnVpbnRlZ2VyKHQubGluZSkmJiRvLnVpbnRlZ2VyKHQuY2hhcmFjdGVyKX0sKFdyPSRyfHwoJHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYoJG8udWludGVnZXIoZSkmJiRvLnVpbnRlZ2VyKHQpJiYkby51aW50ZWdlcihuKSYmJG8udWludGVnZXIocikpcmV0dXJue3N0YXJ0OmpyLmNyZWF0ZShlLHQpLGVuZDpqci5jcmVhdGUobixyKX07aWYoanIuaXMoZSkmJmpyLmlzKHQpKXJldHVybntzdGFydDplLGVuZDp0fTt0aHJvdyBuZXcgRXJyb3IoIlJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1siK2UrIiwgIit0KyIsICIrbisiLCAiK3IrIl0iKX0sV3IuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8ub2JqZWN0TGl0ZXJhbCh0KSYmanIuaXModC5zdGFydCkmJmpyLmlzKHQuZW5kKX0sKHpyPUhyfHwoSHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dXJpOmUscmFuZ2U6dH19LHpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRyLmlzKHQucmFuZ2UpJiYoJG8uc3RyaW5nKHQudXJpKXx8JG8udW5kZWZpbmVkKHQudXJpKSl9LChKcj1Hcnx8KEdyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt0YXJnZXRVcmk6ZSx0YXJnZXRSYW5nZTp0LHRhcmdldFNlbGVjdGlvblJhbmdlOm4sb3JpZ2luU2VsZWN0aW9uUmFuZ2U6cn19LEpyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRyLmlzKHQudGFyZ2V0UmFuZ2UpJiYkby5zdHJpbmcodC50YXJnZXRVcmkpJiYoJHIuaXModC50YXJnZXRTZWxlY3Rpb25SYW5nZSl8fCRvLnVuZGVmaW5lZCh0LnRhcmdldFNlbGVjdGlvblJhbmdlKSkmJigkci5pcyh0Lm9yaWdpblNlbGVjdGlvblJhbmdlKXx8JG8udW5kZWZpbmVkKHQub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX0sKFpyPVhyfHwoWHI9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJue3JlZDplLGdyZWVuOnQsYmx1ZTpuLGFscGhhOnJ9fSxaci5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5udW1iZXJSYW5nZSh0LnJlZCwwLDEpJiYkby5udW1iZXJSYW5nZSh0LmdyZWVuLDAsMSkmJiRvLm51bWJlclJhbmdlKHQuYmx1ZSwwLDEpJiYkby5udW1iZXJSYW5nZSh0LmFscGhhLDAsMSl9LChRcj1Zcnx8KFlyPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsY29sb3I6dH19LFFyLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRyLmlzKHQucmFuZ2UpJiZYci5pcyh0LmNvbG9yKX0sKHRpPWVpfHwoZWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntsYWJlbDplLHRleHRFZGl0OnQsYWRkaXRpb25hbFRleHRFZGl0czpufX0sdGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uc3RyaW5nKHQubGFiZWwpJiYoJG8udW5kZWZpbmVkKHQudGV4dEVkaXQpfHxiaS5pcyh0KSkmJigkby51bmRlZmluZWQodC5hZGRpdGlvbmFsVGV4dEVkaXRzKXx8JG8udHlwZWRBcnJheSh0LmFkZGl0aW9uYWxUZXh0RWRpdHMsYmkuaXMpKX0sKHJpPW5pfHwobmk9e30pKS5Db21tZW50PSJjb21tZW50IixyaS5JbXBvcnRzPSJpbXBvcnRzIixyaS5SZWdpb249InJlZ2lvbiIsKG9pPWlpfHwoaWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz17c3RhcnRMaW5lOmUsZW5kTGluZTp0fTtyZXR1cm4gJG8uZGVmaW5lZChuKSYmKG8uc3RhcnRDaGFyYWN0ZXI9biksJG8uZGVmaW5lZChyKSYmKG8uZW5kQ2hhcmFjdGVyPXIpLCRvLmRlZmluZWQoaSkmJihvLmtpbmQ9aSksb30sb2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8udWludGVnZXIodC5zdGFydExpbmUpJiYkby51aW50ZWdlcih0LnN0YXJ0TGluZSkmJigkby51bmRlZmluZWQodC5zdGFydENoYXJhY3Rlcil8fCRvLnVpbnRlZ2VyKHQuc3RhcnRDaGFyYWN0ZXIpKSYmKCRvLnVuZGVmaW5lZCh0LmVuZENoYXJhY3Rlcil8fCRvLnVpbnRlZ2VyKHQuZW5kQ2hhcmFjdGVyKSkmJigkby51bmRlZmluZWQodC5raW5kKXx8JG8uc3RyaW5nKHQua2luZCkpfSwoc2k9YWl8fChhaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntsb2NhdGlvbjplLG1lc3NhZ2U6dH19LHNpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJkhyLmlzKHQubG9jYXRpb24pJiYkby5zdHJpbmcodC5tZXNzYWdlKX0sKGNpPWxpfHwobGk9e30pKS5FcnJvcj0xLGNpLldhcm5pbmc9MixjaS5JbmZvcm1hdGlvbj0zLGNpLkhpbnQ9NCwoaGk9dWl8fCh1aT17fSkpLlVubmVjZXNzYXJ5PTEsaGkuRGVwcmVjYXRlZD0yLChmaXx8KGZpPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gbnVsbCE9dCYmJG8uc3RyaW5nKHQuaHJlZil9LChtaT1kaXx8KGRpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT17cmFuZ2U6ZSxtZXNzYWdlOnR9O3JldHVybiAkby5kZWZpbmVkKG4pJiYoYS5zZXZlcml0eT1uKSwkby5kZWZpbmVkKHIpJiYoYS5jb2RlPXIpLCRvLmRlZmluZWQoaSkmJihhLnNvdXJjZT1pKSwkby5kZWZpbmVkKG8pJiYoYS5yZWxhdGVkSW5mb3JtYXRpb249byksYX0sbWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQsbj1lO3JldHVybiAkby5kZWZpbmVkKG4pJiYkci5pcyhuLnJhbmdlKSYmJG8uc3RyaW5nKG4ubWVzc2FnZSkmJigkby5udW1iZXIobi5zZXZlcml0eSl8fCRvLnVuZGVmaW5lZChuLnNldmVyaXR5KSkmJigkby5pbnRlZ2VyKG4uY29kZSl8fCRvLnN0cmluZyhuLmNvZGUpfHwkby51bmRlZmluZWQobi5jb2RlKSkmJigkby51bmRlZmluZWQobi5jb2RlRGVzY3JpcHRpb24pfHwkby5zdHJpbmcobnVsbD09PSh0PW4uY29kZURlc2NyaXB0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5ocmVmKSkmJigkby5zdHJpbmcobi5zb3VyY2UpfHwkby51bmRlZmluZWQobi5zb3VyY2UpKSYmKCRvLnVuZGVmaW5lZChuLnJlbGF0ZWRJbmZvcm1hdGlvbil8fCRvLnR5cGVkQXJyYXkobi5yZWxhdGVkSW5mb3JtYXRpb24sYWkuaXMpKX0sKHBpPWdpfHwoZ2k9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspbltyLTJdPWFyZ3VtZW50c1tyXTt2YXIgaT17dGl0bGU6ZSxjb21tYW5kOnR9O3JldHVybiAkby5kZWZpbmVkKG4pJiZuLmxlbmd0aD4wJiYoaS5hcmd1bWVudHM9biksaX0scGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uZGVmaW5lZCh0KSYmJG8uc3RyaW5nKHQudGl0bGUpJiYkby5zdHJpbmcodC5jb21tYW5kKX0sKHZpPWJpfHwoYmk9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDp0fX0sdmkuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOntzdGFydDplLGVuZDplfSxuZXdUZXh0OnR9fSx2aS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIn19LHZpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLm9iamVjdExpdGVyYWwodCkmJiRvLnN0cmluZyh0Lm5ld1RleHQpJiYkci5pcyh0LnJhbmdlKX0sKENpPXlpfHwoeWk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtsYWJlbDplfTtyZXR1cm4gdm9pZCAwIT09dCYmKHIubmVlZHNDb25maXJtYXRpb249dCksdm9pZCAwIT09biYmKHIuZGVzY3JpcHRpb249bikscn0sQ2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdm9pZCAwIT09dCYmJG8ub2JqZWN0TGl0ZXJhbCh0KSYmJG8uc3RyaW5nKHQubGFiZWwpJiYoJG8uYm9vbGVhbih0Lm5lZWRzQ29uZmlybWF0aW9uKXx8dm9pZCAwPT09dC5uZWVkc0NvbmZpcm1hdGlvbikmJigkby5zdHJpbmcodC5kZXNjcmlwdGlvbil8fHZvaWQgMD09PXQuZGVzY3JpcHRpb24pfSwod2l8fCh3aT17fSkpLmlzPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0sKFNpPV9pfHwoX2k9e30pKS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57cmFuZ2U6ZSxuZXdUZXh0OnQsYW5ub3RhdGlvbklkOm59fSxTaS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTp7c3RhcnQ6ZSxlbmQ6ZX0sbmV3VGV4dDp0LGFubm90YXRpb25JZDpufX0sU2kuZGVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6dH19LFNpLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIGJpLmlzKHQpJiYoeWkuaXModC5hbm5vdGF0aW9uSWQpfHx3aS5pcyh0LmFubm90YXRpb25JZCkpfSwoRWk9QWl8fChBaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0ZXh0RG9jdW1lbnQ6ZSxlZGl0czp0fX0sRWkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uZGVmaW5lZCh0KSYmR2kuaXModC50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KHQuZWRpdHMpfSwoeGk9Tml8fChOaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9e2tpbmQ6ImNyZWF0ZSIsdXJpOmV9O3JldHVybiB2b2lkIDA9PT10fHx2b2lkIDA9PT10Lm92ZXJ3cml0ZSYmdm9pZCAwPT09dC5pZ25vcmVJZkV4aXN0c3x8KHIub3B0aW9ucz10KSx2b2lkIDAhPT1uJiYoci5hbm5vdGF0aW9uSWQ9bikscn0seGkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmImNyZWF0ZSI9PT10LmtpbmQmJiRvLnN0cmluZyh0LnVyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHwkby5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8JG8uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8d2kuaXModC5hbm5vdGF0aW9uSWQpKX0sKGtpPUxpfHwoTGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOmUsbmV3VXJpOnR9O3JldHVybiB2b2lkIDA9PT1ufHx2b2lkIDA9PT1uLm92ZXJ3cml0ZSYmdm9pZCAwPT09bi5pZ25vcmVJZkV4aXN0c3x8KGkub3B0aW9ucz1uKSx2b2lkIDAhPT1yJiYoaS5hbm5vdGF0aW9uSWQ9ciksaX0sa2kuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmInJlbmFtZSI9PT10LmtpbmQmJiRvLnN0cmluZyh0Lm9sZFVyaSkmJiRvLnN0cmluZyh0Lm5ld1VyaSkmJih2b2lkIDA9PT10Lm9wdGlvbnN8fCh2b2lkIDA9PT10Lm9wdGlvbnMub3ZlcndyaXRlfHwkby5ib29sZWFuKHQub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHZvaWQgMD09PXQub3B0aW9ucy5pZ25vcmVJZkV4aXN0c3x8JG8uYm9vbGVhbih0Lm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJih2b2lkIDA9PT10LmFubm90YXRpb25JZHx8d2kuaXModC5hbm5vdGF0aW9uSWQpKX0sKE9pPVRpfHwoVGk9e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXtraW5kOiJkZWxldGUiLHVyaTplfTtyZXR1cm4gdm9pZCAwPT09dHx8dm9pZCAwPT09dC5yZWN1cnNpdmUmJnZvaWQgMD09PXQuaWdub3JlSWZOb3RFeGlzdHN8fChyLm9wdGlvbnM9dCksdm9pZCAwIT09biYmKHIuYW5ub3RhdGlvbklkPW4pLHJ9LE9pLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiJkZWxldGUiPT09dC5raW5kJiYkby5zdHJpbmcodC51cmkpJiYodm9pZCAwPT09dC5vcHRpb25zfHwodm9pZCAwPT09dC5vcHRpb25zLnJlY3Vyc2l2ZXx8JG8uYm9vbGVhbih0Lm9wdGlvbnMucmVjdXJzaXZlKSkmJih2b2lkIDA9PT10Lm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHN8fCRvLmJvb2xlYW4odC5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYodm9pZCAwPT09dC5hbm5vdGF0aW9uSWR8fHdpLmlzKHQuYW5ub3RhdGlvbklkKSl9LChNaXx8KE1pPXt9KSkuaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmKHZvaWQgMCE9PXQuY2hhbmdlc3x8dm9pZCAwIT09dC5kb2N1bWVudENoYW5nZXMpJiYodm9pZCAwPT09dC5kb2N1bWVudENoYW5nZXN8fHQuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gJG8uc3RyaW5nKGUua2luZCk/TmkuaXMoZSl8fExpLmlzKGUpfHxUaS5pcyhlKTpBaS5pcyhlKX0pKSl9O3ZhciAkaSxXaSxIaSx6aSxHaSxKaSxYaSxaaSxZaSxRaSxlbyx0byxubyxybyxpbyxvbyxhbyxzbyxsbyxjbyx1byxobyxmbyxtbyxnbyxwbyxibyx2byx5byxDbyx3byxfbyxTbyxBbyxFbyxObyx4byxMbyxrbyxUbyxPbyxNbyxJbyxSbyxQbyxGbyxEbyxWbyxLbyxVbyxCbyxqbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVkaXRzPWUsdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucz10fXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPWJpLmluc2VydChlLHQpOndpLmlzKG4pPyhpPW4scj1faS5pbnNlcnQoZSx0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxpPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLHI9X2kuaW5zZXJ0KGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09bj9yPWJpLnJlcGxhY2UoZSx0KTp3aS5pcyhuKT8oaT1uLHI9X2kucmVwbGFjZShlLHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj1faS5yZXBsYWNlKGUsdCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLHZvaWQgMCE9PWkpcmV0dXJuIGl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYodm9pZCAwPT09dD9uPWJpLmRlbChlKTp3aS5pcyh0KT8ocj10LG49X2kuZGVsKGUsdCkpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHI9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UodCksbj1faS5kZWwoZSxyKSksdGhpcy5lZGl0cy5wdXNoKG4pLHZvaWQgMCE9PXIpcmV0dXJuIHJ9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmVkaXRzLnB1c2goZSl9LGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZWRpdHMuc3BsaWNlKDAsdGhpcy5lZGl0cy5sZW5ndGgpfSxlLnByb3RvdHlwZS5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLiIpfSxlfSgpLHFvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9hbm5vdGF0aW9ucz12b2lkIDA9PT1lP09iamVjdC5jcmVhdGUobnVsbCk6ZSx0aGlzLl9jb3VudGVyPTAsdGhpcy5fc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm1hbmFnZT1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHdpLmlzKGUpP249ZToobj10aGlzLm5leHRJZCgpLHQ9ZSksdm9pZCAwIT09dGhpcy5fYW5ub3RhdGlvbnNbbl0pdGhyb3cgbmV3IEVycm9yKCJJZCAiK24rIiBpcyBhbHJlYWR5IGluIHVzZS4iKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgIituKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnNbbl09dCx0aGlzLl9zaXplKyssbn0sZS5wcm90b3R5cGUubmV4dElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvdW50ZXIrKyx0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCl9LGV9KCk7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD10aGlzO3RoaXMuX3RleHRFZGl0Q2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpLHZvaWQgMCE9PWU/KHRoaXMuX3dvcmtzcGFjZUVkaXQ9ZSxlLmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IHFvKGUuY2hhbmdlQW5ub3RhdGlvbnMpLGUuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksZS5kb2N1bWVudENoYW5nZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoQWkuaXMoZSkpe3ZhciBuPW5ldyBqbyhlLmVkaXRzLHQuX2NoYW5nZUFubm90YXRpb25zKTt0Ll90ZXh0RWRpdENoYW5nZXNbZS50ZXh0RG9jdW1lbnQudXJpXT1ufX0pKSk6ZS5jaGFuZ2VzJiZPYmplY3Qua2V5cyhlLmNoYW5nZXMpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPW5ldyBqbyhlLmNoYW5nZXNbbl0pO3QuX3RleHRFZGl0Q2hhbmdlc1tuXT1yfSkpKTp0aGlzLl93b3Jrc3BhY2VFZGl0PXt9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWRpdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDAhPT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyYmKDA9PT10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5zaXplP3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dm9pZCAwOnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpLHRoaXMuX3dvcmtzcGFjZUVkaXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYoR2kuaXMoZSkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHQ9e3VyaTplLnVyaSx2ZXJzaW9uOmUudmVyc2lvbn07aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0LnVyaV0pKXt2YXIgbj17dGV4dERvY3VtZW50OnQsZWRpdHM6aT1bXX07dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChuKSxyPW5ldyBqbyhpLHRoaXMuX2NoYW5nZUFubm90YXRpb25zKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbdC51cmldPXJ9cmV0dXJuIHJ9aWYodGhpcy5pbml0Q2hhbmdlcygpLHZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBub3JtYWwgdGV4dCBlZGl0IGNoYW5nZXMuIik7dmFyIHI7aWYoIShyPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXSkpe3ZhciBpPVtdO3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1tlXT1pLHI9bmV3IGpvKGkpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tlXT1yfXJldHVybiByfSxlLnByb3RvdHlwZS5pbml0RG9jdW1lbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMmJnZvaWQgMD09PXRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcyYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBxbyx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz1bXSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKX0sZS5wcm90b3R5cGUuaW5pdENoYW5nZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyYmdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzJiYodGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCkpfSxlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx2b2lkIDA9PT10aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcyl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciByLGksbztpZih5aS5pcyh0KXx8d2kuaXModCk/cj10Om49dCx2b2lkIDA9PT1yP2k9TmkuY3JlYXRlKGUsbik6KG89d2kuaXMocik/cjp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1OaS5jcmVhdGUoZSxuLG8pKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKGkpLHZvaWQgMCE9PW8pcmV0dXJuIG99LGUucHJvdG90eXBlLnJlbmFtZUZpbGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgaSxvLGE7aWYoeWkuaXMobil8fHdpLmlzKG4pP2k9bjpyPW4sdm9pZCAwPT09aT9vPUxpLmNyZWF0ZShlLHQscik6KGE9d2kuaXMoaSk/aTp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoaSksbz1MaS5jcmVhdGUoZSx0LHIsYSkpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gobyksdm9pZCAwIT09YSlyZXR1cm4gYX0sZS5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdm9pZCAwPT09dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMpdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcixpLG87aWYoeWkuaXModCl8fHdpLmlzKHQpP3I9dDpuPXQsdm9pZCAwPT09cj9pPVRpLmNyZWF0ZShlLG4pOihvPXdpLmlzKHIpP3I6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9VGkuY3JlYXRlKGUsbixvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChpKSx2b2lkIDAhPT1vKXJldHVybiBvfX0oKSwoV2k9JGl8fCgkaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm57dXJpOmV9fSxXaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5kZWZpbmVkKHQpJiYkby5zdHJpbmcodC51cmkpfSwoemk9SGl8fChIaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt1cmk6ZSx2ZXJzaW9uOnR9fSx6aS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5kZWZpbmVkKHQpJiYkby5zdHJpbmcodC51cmkpJiYkby5pbnRlZ2VyKHQudmVyc2lvbil9LChKaT1HaXx8KEdpPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3VyaTplLHZlcnNpb246dH19LEppLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRvLnN0cmluZyh0LnVyaSkmJihudWxsPT09dC52ZXJzaW9ufHwkby5pbnRlZ2VyKHQudmVyc2lvbikpfSwoWmk9WGl8fChYaT17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm57dXJpOmUsbGFuZ3VhZ2VJZDp0LHZlcnNpb246bix0ZXh0OnJ9fSxaaS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5kZWZpbmVkKHQpJiYkby5zdHJpbmcodC51cmkpJiYkby5zdHJpbmcodC5sYW5ndWFnZUlkKSYmJG8uaW50ZWdlcih0LnZlcnNpb24pJiYkby5zdHJpbmcodC50ZXh0KX0sKFFpPVlpfHwoWWk9e30pKS5QbGFpblRleHQ9InBsYWludGV4dCIsUWkuTWFya2Rvd249Im1hcmtkb3duIixmdW5jdGlvbihlKXtlLmlzPWZ1bmN0aW9uKHQpe3ZhciBuPXQ7cmV0dXJuIG49PT1lLlBsYWluVGV4dHx8bj09PWUuTWFya2Rvd259fShZaXx8KFlpPXt9KSksKGVvfHwoZW89e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5vYmplY3RMaXRlcmFsKGUpJiZZaS5pcyh0LmtpbmQpJiYkby5zdHJpbmcodC52YWx1ZSl9LChubz10b3x8KHRvPXt9KSkuVGV4dD0xLG5vLk1ldGhvZD0yLG5vLkZ1bmN0aW9uPTMsbm8uQ29uc3RydWN0b3I9NCxuby5GaWVsZD01LG5vLlZhcmlhYmxlPTYsbm8uQ2xhc3M9Nyxuby5JbnRlcmZhY2U9OCxuby5Nb2R1bGU9OSxuby5Qcm9wZXJ0eT0xMCxuby5Vbml0PTExLG5vLlZhbHVlPTEyLG5vLkVudW09MTMsbm8uS2V5d29yZD0xNCxuby5TbmlwcGV0PTE1LG5vLkNvbG9yPTE2LG5vLkZpbGU9MTcsbm8uUmVmZXJlbmNlPTE4LG5vLkZvbGRlcj0xOSxuby5FbnVtTWVtYmVyPTIwLG5vLkNvbnN0YW50PTIxLG5vLlN0cnVjdD0yMixuby5FdmVudD0yMyxuby5PcGVyYXRvcj0yNCxuby5UeXBlUGFyYW1ldGVyPTI1LChpbz1yb3x8KHJvPXt9KSkuUGxhaW5UZXh0PTEsaW8uU25pcHBldD0yLChvb3x8KG9vPXt9KSkuRGVwcmVjYXRlZD0xLChzbz1hb3x8KGFvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57bmV3VGV4dDplLGluc2VydDp0LHJlcGxhY2U6bn19LHNvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuIHQmJiRvLnN0cmluZyh0Lm5ld1RleHQpJiYkci5pcyh0Lmluc2VydCkmJiRyLmlzKHQucmVwbGFjZSl9LChjbz1sb3x8KGxvPXt9KSkuYXNJcz0xLGNvLmFkanVzdEluZGVudGF0aW9uPTIsKHVvfHwodW89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJue2xhYmVsOmV9fSwoaG98fChobz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybntpdGVtczplfHxbXSxpc0luY29tcGxldGU6ISF0fX0sKG1vPWZvfHwoZm89e30pKS5mcm9tUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX0sbW8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uc3RyaW5nKHQpfHwkby5vYmplY3RMaXRlcmFsKHQpJiYkby5zdHJpbmcodC5sYW5ndWFnZSkmJiRvLnN0cmluZyh0LnZhbHVlKX0sKGdvfHwoZ289e30pKS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhdCYmJG8ub2JqZWN0TGl0ZXJhbCh0KSYmKGVvLmlzKHQuY29udGVudHMpfHxmby5pcyh0LmNvbnRlbnRzKXx8JG8udHlwZWRBcnJheSh0LmNvbnRlbnRzLGZvLmlzKSkmJih2b2lkIDA9PT1lLnJhbmdlfHwkci5pcyhlLnJhbmdlKSl9LChwb3x8KHBvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/e2xhYmVsOmUsZG9jdW1lbnRhdGlvbjp0fTp7bGFiZWw6ZX19LChib3x8KGJvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLHI9MjtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKW5bci0yXT1hcmd1bWVudHNbcl07dmFyIGk9e2xhYmVsOmV9O3JldHVybiAkby5kZWZpbmVkKHQpJiYoaS5kb2N1bWVudGF0aW9uPXQpLCRvLmRlZmluZWQobik/aS5wYXJhbWV0ZXJzPW46aS5wYXJhbWV0ZXJzPVtdLGl9LCh5bz12b3x8KHZvPXt9KSkuVGV4dD0xLHlvLlJlYWQ9Mix5by5Xcml0ZT0zLChDb3x8KENvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiAkby5udW1iZXIodCkmJihuLmtpbmQ9dCksbn0sKF9vPXdvfHwod289e30pKS5GaWxlPTEsX28uTW9kdWxlPTIsX28uTmFtZXNwYWNlPTMsX28uUGFja2FnZT00LF9vLkNsYXNzPTUsX28uTWV0aG9kPTYsX28uUHJvcGVydHk9Nyxfby5GaWVsZD04LF9vLkNvbnN0cnVjdG9yPTksX28uRW51bT0xMCxfby5JbnRlcmZhY2U9MTEsX28uRnVuY3Rpb249MTIsX28uVmFyaWFibGU9MTMsX28uQ29uc3RhbnQ9MTQsX28uU3RyaW5nPTE1LF9vLk51bWJlcj0xNixfby5Cb29sZWFuPTE3LF9vLkFycmF5PTE4LF9vLk9iamVjdD0xOSxfby5LZXk9MjAsX28uTnVsbD0yMSxfby5FbnVtTWVtYmVyPTIyLF9vLlN0cnVjdD0yMyxfby5FdmVudD0yNCxfby5PcGVyYXRvcj0yNSxfby5UeXBlUGFyYW1ldGVyPTI2LChTb3x8KFNvPXt9KSkuRGVwcmVjYXRlZD0xLChBb3x8KEFvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89e25hbWU6ZSxraW5kOnQsbG9jYXRpb246e3VyaTpyLHJhbmdlOm59fTtyZXR1cm4gaSYmKG8uY29udGFpbmVyTmFtZT1pKSxvfSwoTm89RW98fChFbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9e25hbWU6ZSxkZXRhaWw6dCxraW5kOm4scmFuZ2U6cixzZWxlY3Rpb25SYW5nZTppfTtyZXR1cm4gdm9pZCAwIT09byYmKGEuY2hpbGRyZW49byksYX0sTm8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmJG8uc3RyaW5nKHQubmFtZSkmJiRvLm51bWJlcih0LmtpbmQpJiYkci5pcyh0LnJhbmdlKSYmJHIuaXModC5zZWxlY3Rpb25SYW5nZSkmJih2b2lkIDA9PT10LmRldGFpbHx8JG8uc3RyaW5nKHQuZGV0YWlsKSkmJih2b2lkIDA9PT10LmRlcHJlY2F0ZWR8fCRvLmJvb2xlYW4odC5kZXByZWNhdGVkKSkmJih2b2lkIDA9PT10LmNoaWxkcmVufHxBcnJheS5pc0FycmF5KHQuY2hpbGRyZW4pKSYmKHZvaWQgMD09PXQudGFnc3x8QXJyYXkuaXNBcnJheSh0LnRhZ3MpKX0sKExvPXhvfHwoeG89e30pKS5FbXB0eT0iIixMby5RdWlja0ZpeD0icXVpY2tmaXgiLExvLlJlZmFjdG9yPSJyZWZhY3RvciIsTG8uUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0IixMby5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixMby5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLExvLlNvdXJjZT0ic291cmNlIixMby5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLExvLlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCIsKFRvPWtvfHwoa289e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17ZGlhZ25vc3RpY3M6ZX07cmV0dXJuIG51bGwhPXQmJihuLm9ubHk9dCksbn0sVG8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gJG8uZGVmaW5lZCh0KSYmJG8udHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLGRpLmlzKSYmKHZvaWQgMD09PXQub25seXx8JG8udHlwZWRBcnJheSh0Lm9ubHksJG8uc3RyaW5nKSl9LChNbz1Pb3x8KE9vPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj17dGl0bGU6ZX0saT0hMDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGk9ITEsci5raW5kPXQpOmdpLmlzKHQpP3IuY29tbWFuZD10OnIuZWRpdD10LGkmJnZvaWQgMCE9PW4mJihyLmtpbmQ9bikscn0sTW8uaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtyZXR1cm4gdCYmJG8uc3RyaW5nKHQudGl0bGUpJiYodm9pZCAwPT09dC5kaWFnbm9zdGljc3x8JG8udHlwZWRBcnJheSh0LmRpYWdub3N0aWNzLGRpLmlzKSkmJih2b2lkIDA9PT10LmtpbmR8fCRvLnN0cmluZyh0LmtpbmQpKSYmKHZvaWQgMCE9PXQuZWRpdHx8dm9pZCAwIT09dC5jb21tYW5kKSYmKHZvaWQgMD09PXQuY29tbWFuZHx8Z2kuaXModC5jb21tYW5kKSkmJih2b2lkIDA9PT10LmlzUHJlZmVycmVkfHwkby5ib29sZWFuKHQuaXNQcmVmZXJyZWQpKSYmKHZvaWQgMD09PXQuZWRpdHx8TWkuaXModC5lZGl0KSl9LChSbz1Jb3x8KElvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49e3JhbmdlOmV9O3JldHVybiAkby5kZWZpbmVkKHQpJiYobi5kYXRhPXQpLG59LFJvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRyLmlzKHQucmFuZ2UpJiYoJG8udW5kZWZpbmVkKHQuY29tbWFuZCl8fGdpLmlzKHQuY29tbWFuZCkpfSwoRm89UG98fChQbz17fSkpLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybnt0YWJTaXplOmUsaW5zZXJ0U3BhY2VzOnR9fSxGby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiAkby5kZWZpbmVkKHQpJiYkby51aW50ZWdlcih0LnRhYlNpemUpJiYkby5ib29sZWFuKHQuaW5zZXJ0U3BhY2VzKX0sKFZvPURvfHwoRG89e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybntyYW5nZTplLHRhcmdldDp0LGRhdGE6bn19LFZvLmlzPWZ1bmN0aW9uKGUpe3ZhciB0PWU7cmV0dXJuICRvLmRlZmluZWQodCkmJiRyLmlzKHQucmFuZ2UpJiYoJG8udW5kZWZpbmVkKHQudGFyZ2V0KXx8JG8uc3RyaW5nKHQudGFyZ2V0KSl9LChVbz1Lb3x8KEtvPXt9KSkuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3JhbmdlOmUscGFyZW50OnR9fSxVby5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiB2b2lkIDAhPT10JiYkci5pcyh0LnJhbmdlKSYmKHZvaWQgMD09PXQucGFyZW50fHxVby5pcyh0LnBhcmVudCkpfSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsbil7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7dmFyIHI9ZS5sZW5ndGgvMnwwLGk9ZS5zbGljZSgwLHIpLG89ZS5zbGljZShyKTt0KGksbiksdChvLG4pO2Zvcih2YXIgYT0wLHM9MCxsPTA7YTxpLmxlbmd0aCYmczxvLmxlbmd0aDspe3ZhciBjPW4oaVthXSxvW3NdKTtlW2wrK109Yzw9MD9pW2ErK106b1tzKytdfWZvcig7YTxpLmxlbmd0aDspZVtsKytdPWlbYSsrXTtmb3IoO3M8by5sZW5ndGg7KWVbbCsrXT1vW3MrK107cmV0dXJuIGV9ZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyB6byhlLHQsbixyKX0sZS5pcz1mdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybiEhKCRvLmRlZmluZWQodCkmJiRvLnN0cmluZyh0LnVyaSkmJigkby51bmRlZmluZWQodC5sYW5ndWFnZUlkKXx8JG8uc3RyaW5nKHQubGFuZ3VhZ2VJZCkpJiYkby51aW50ZWdlcih0LmxpbmVDb3VudCkmJiRvLmZ1bmModC5nZXRUZXh0KSYmJG8uZnVuYyh0LnBvc2l0aW9uQXQpJiYkby5mdW5jKHQub2Zmc2V0QXQpKX0sZS5hcHBseUVkaXRzPWZ1bmN0aW9uKGUsbil7Zm9yKHZhciByPWUuZ2V0VGV4dCgpLGk9dChuLChmdW5jdGlvbihlLHQpe3ZhciBuPWUucmFuZ2Uuc3RhcnQubGluZS10LnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIDA9PT1uP2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm59KSksbz1yLmxlbmd0aCxhPWkubGVuZ3RoLTE7YT49MDthLS0pe3ZhciBzPWlbYV0sbD1lLm9mZnNldEF0KHMucmFuZ2Uuc3RhcnQpLGM9ZS5vZmZzZXRBdChzLnJhbmdlLmVuZCk7aWYoIShjPD1vKSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtyPXIuc3Vic3RyaW5nKDAsbCkrcy5uZXdUZXh0K3Iuc3Vic3RyaW5nKGMsci5sZW5ndGgpLG89bH1yZXR1cm4gcn19KEJvfHwoQm89e30pKTt2YXIgJG8sV28sSG8sem89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ1cmkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVyc2lvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxuPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyh0LG4pfXJldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuX2xpbmVPZmZzZXRzKXtmb3IodmFyIGU9W10sdD10aGlzLl9jb250ZW50LG49ITAscj0wO3I8dC5sZW5ndGg7cisrKXtuJiYoZS5wdXNoKHIpLG49ITEpO3ZhciBpPXQuY2hhckF0KHIpO249IlxyIj09PWl8fCJcbiI9PT1pLCJcciI9PT1pJiZyKzE8dC5sZW5ndGgmJiJcbiI9PT10LmNoYXJBdChyKzEpJiZyKyt9biYmdC5sZW5ndGg+MCYmZS5wdXNoKHQubGVuZ3RoKSx0aGlzLl9saW5lT2Zmc2V0cz1lfXJldHVybiB0aGlzLl9saW5lT2Zmc2V0c30sZS5wcm90b3R5cGUucG9zaXRpb25BdD1mdW5jdGlvbihlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO3ZhciB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm4ganIuY3JlYXRlKDAsZSk7Zm9yKDtuPHI7KXt2YXIgaT1NYXRoLmZsb29yKChuK3IpLzIpO3RbaV0+ZT9yPWk6bj1pKzF9dmFyIG89bi0xO3JldHVybiBqci5jcmVhdGUobyxlLXRbb10pfSxlLnByb3RvdHlwZS5vZmZzZXRBdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7dmFyIG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGluZUNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZX0oKTtXbz0kb3x8KCRvPXt9KSxIbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFdvLmRlZmluZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9LFdvLnVuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZX0sV28uYm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZX0sV28uc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09SG8uY2FsbChlKX0sV28ubnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09SG8uY2FsbChlKX0sV28ubnVtYmVyUmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09SG8uY2FsbChlKSYmdDw9ZSYmZTw9bn0sV28uaW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PUhvLmNhbGwoZSkmJi0yMTQ3NDgzNjQ4PD1lJiZlPD0yMTQ3NDgzNjQ3fSxXby51aW50ZWdlcj1mdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PUhvLmNhbGwoZSkmJjA8PWUmJmU8PTIxNDc0ODM2NDd9LFdvLmZ1bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUhvLmNhbGwoZSl9LFdvLm9iamVjdExpdGVyYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9LFdvLnR5cGVkQXJyYXk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSh0KX07dmFyIEdvLEpvLFhvLFpvLFlvLFFvPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtjb25zdCB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSx0KXtmb3IobGV0IHQgb2YgZSlpZihRby5pc0luY3JlbWVudGFsKHQpKXtjb25zdCBlPW5hKHQucmFuZ2UpLG49dGhpcy5vZmZzZXRBdChlLnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQoZS5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxuKSt0LnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcocix0aGlzLl9jb250ZW50Lmxlbmd0aCk7Y29uc3QgaT1NYXRoLm1heChlLnN0YXJ0LmxpbmUsMCksbz1NYXRoLm1heChlLmVuZC5saW5lLDApO2xldCBhPXRoaXMuX2xpbmVPZmZzZXRzO2NvbnN0IHM9dGEodC50ZXh0LCExLG4pO2lmKG8taT09PXMubGVuZ3RoKWZvcihsZXQgZT0wLHQ9cy5sZW5ndGg7ZTx0O2UrKylhW2UraSsxXT1zW2VdO2Vsc2Ugcy5sZW5ndGg8MWU0P2Euc3BsaWNlKGkrMSxvLWksLi4ucyk6dGhpcy5fbGluZU9mZnNldHM9YT1hLnNsaWNlKDAsaSsxKS5jb25jYXQocyxhLnNsaWNlKG8rMSkpO2NvbnN0IGw9dC50ZXh0Lmxlbmd0aC0oci1uKTtpZigwIT09bClmb3IobGV0IGU9aSsxK3MubGVuZ3RoLHQ9YS5sZW5ndGg7ZTx0O2UrKylhW2VdPWFbZV0rbH1lbHNle2lmKCFRby5pc0Z1bGwodCkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCIpO3RoaXMuX2NvbnRlbnQ9dC50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH10aGlzLl92ZXJzaW9uPXR9Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fbGluZU9mZnNldHMmJih0aGlzLl9saW5lT2Zmc2V0cz10YSh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm57bGluZTowLGNoYXJhY3RlcjplfTtmb3IoO248cjspe2xldCBpPU1hdGguZmxvb3IoKG4rcikvMik7dFtpXT5lP3I9aTpuPWkrMX1sZXQgaT1uLTE7cmV0dXJue2xpbmU6aSxjaGFyYWN0ZXI6ZS10W2ldfX1vZmZzZXRBdChlKXtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDAhPT10LnJhbmdlJiYodm9pZCAwPT09dC5yYW5nZUxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiB0LnJhbmdlTGVuZ3RoKX1zdGF0aWMgaXNGdWxsKGUpe2xldCB0PWU7cmV0dXJuIG51bGwhPXQmJiJzdHJpbmciPT10eXBlb2YgdC50ZXh0JiZ2b2lkIDA9PT10LnJhbmdlJiZ2b2lkIDA9PT10LnJhbmdlTGVuZ3RofX07ZnVuY3Rpb24gZWEoZSx0KXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCBuPWUubGVuZ3RoLzJ8MCxyPWUuc2xpY2UoMCxuKSxpPWUuc2xpY2Uobik7ZWEocix0KSxlYShpLHQpO2xldCBvPTAsYT0wLHM9MDtmb3IoO288ci5sZW5ndGgmJmE8aS5sZW5ndGg7KXtsZXQgbj10KHJbb10saVthXSk7ZVtzKytdPW48PTA/cltvKytdOmlbYSsrXX1mb3IoO288ci5sZW5ndGg7KWVbcysrXT1yW28rK107Zm9yKDthPGkubGVuZ3RoOyllW3MrK109aVthKytdO3JldHVybiBlfWZ1bmN0aW9uIHRhKGUsdCxuPTApe2NvbnN0IHI9dD9bbl06W107Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBpPWUuY2hhckNvZGVBdCh0KTsxMyE9PWkmJjEwIT09aXx8KDEzPT09aSYmdCsxPGUubGVuZ3RoJiYxMD09PWUuY2hhckNvZGVBdCh0KzEpJiZ0Kyssci5wdXNoKG4rdCsxKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbmEoZSl7Y29uc3QgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIHQubGluZT5uLmxpbmV8fHQubGluZT09PW4ubGluZSYmdC5jaGFyYWN0ZXI+bi5jaGFyYWN0ZXI/e3N0YXJ0Om4sZW5kOnR9OmV9ZnVuY3Rpb24gcmEoZSl7Y29uc3QgdD1uYShlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9ZnVuY3Rpb24gaWEoZSx0LC4uLm4pe3JldHVybiBmdW5jdGlvbihlLHQpe2xldCBuO3JldHVybiBuPTA9PT10Lmxlbmd0aD9lOmUucmVwbGFjZSgvXHsoXGQrKVx9L2csKChlLG4pPT57bGV0IHI9blswXTtyZXR1cm4gdm9pZCAwIT09dFtyXT90W3JdOmV9KSksbn0odCxuKX1mdW5jdGlvbiBvYShlKXtyZXR1cm4gaWF9KEpvPUdvfHwoR289e30pKS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBRbyhlLHQsbixyKX0sSm8udXBkYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2YgUW8pcmV0dXJuIGUudXBkYXRlKHQsbiksZTt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9LEpvLmFwcGx5RWRpdHM9ZnVuY3Rpb24oZSx0KXtsZXQgbj1lLmdldFRleHQoKSxyPWVhKHQubWFwKHJhKSwoKGUsdCk9PntsZXQgbj1lLnJhbmdlLnN0YXJ0LmxpbmUtdC5yYW5nZS5zdGFydC5saW5lO3JldHVybiAwPT09bj9lLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci10LnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpufSkpLGk9MDtjb25zdCBvPVtdO2Zvcihjb25zdCB0IG9mIHIpe2xldCByPWUub2Zmc2V0QXQodC5yYW5nZS5zdGFydCk7aWYocjxpKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3I+aSYmby5wdXNoKG4uc3Vic3RyaW5nKGkscikpLHQubmV3VGV4dC5sZW5ndGgmJm8ucHVzaCh0Lm5ld1RleHQpLGk9ZS5vZmZzZXRBdCh0LnJhbmdlLmVuZCl9cmV0dXJuIG8ucHVzaChuLnN1YnN0cihpKSksby5qb2luKCIiKX0sKFpvPVhvfHwoWG89e30pKVtaby5VbmRlZmluZWQ9MF09IlVuZGVmaW5lZCIsWm9bWm8uRW51bVZhbHVlTWlzbWF0Y2g9MV09IkVudW1WYWx1ZU1pc21hdGNoIixab1taby5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIixab1taby5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTI1N109IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLFpvW1pvLlVuZXhwZWN0ZWRFbmRPZlN0cmluZz0yNThdPSJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLFpvW1pvLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0yNTldPSJVbmV4cGVjdGVkRW5kT2ZOdW1iZXIiLFpvW1pvLkludmFsaWRVbmljb2RlPTI2MF09IkludmFsaWRVbmljb2RlIixab1taby5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyPTI2MV09IkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLFpvW1pvLkludmFsaWRDaGFyYWN0ZXI9MjYyXT0iSW52YWxpZENoYXJhY3RlciIsWm9bWm8uUHJvcGVydHlFeHBlY3RlZD01MTNdPSJQcm9wZXJ0eUV4cGVjdGVkIixab1taby5Db21tYUV4cGVjdGVkPTUxNF09IkNvbW1hRXhwZWN0ZWQiLFpvW1pvLkNvbG9uRXhwZWN0ZWQ9NTE1XT0iQ29sb25FeHBlY3RlZCIsWm9bWm8uVmFsdWVFeHBlY3RlZD01MTZdPSJWYWx1ZUV4cGVjdGVkIixab1taby5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZD01MTddPSJDb21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCIsWm9bWm8uQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZD01MThdPSJDb21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkIixab1taby5UcmFpbGluZ0NvbW1hPTUxOV09IlRyYWlsaW5nQ29tbWEiLFpvW1pvLkR1cGxpY2F0ZUtleT01MjBdPSJEdXBsaWNhdGVLZXkiLFpvW1pvLkNvbW1lbnROb3RQZXJtaXR0ZWQ9NTIxXT0iQ29tbWVudE5vdFBlcm1pdHRlZCIsWm9bWm8uU2NoZW1hUmVzb2x2ZUVycm9yPTc2OF09IlNjaGVtYVJlc29sdmVFcnJvciIsKFlvfHwoWW89e30pKS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W1lpLk1hcmtkb3duLFlpLlBsYWluVGV4dF0sY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ6ITB9fX19O3ZhciBhYSxzYSxsYSxjYT0oYWE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oYWE9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWFhKGUsdCksZS5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToobi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IG4pfSksdWE9b2EoKSxoYT17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTp1YSgiY29sb3JIZXhGb3JtYXRXYXJuaW5nIiwiSW52YWxpZCBjb2xvciBmb3JtYXQuIFVzZSAjUkdCLCAjUkdCQSwgI1JSR0dCQiBvciAjUlJHR0JCQUEuIikscGF0dGVybjovXiMoWzAtOUEtRmEtZl17Myw0fXwoWzAtOUEtRmEtZl17Mn0pezMsNH0pJC99LCJkYXRlLXRpbWUiOntlcnJvck1lc3NhZ2U6dWEoImRhdGVUaW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOnVhKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOnVhKCJ0aW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTp1YSgiZW1haWxGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBlLW1haWwgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aMC05LV0rXC4pK1thLXpBLVpdezIsfSkpJC99LGhvc3RuYW1lOntlcnJvck1lc3NhZ2U6dWEoImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTp1YSgiaXB2NEZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGFuIElQdjQgYWRkcmVzcy4iKSxwYXR0ZXJuOi9eKD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZClcLil7M30oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSQvfSxpcHY2OntlcnJvck1lc3NhZ2U6dWEoImlwdjZGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhbiBJUHY2IGFkZHJlc3MuIikscGF0dGVybjovXigoKFswLTlhLWZdezEsNH06KXs3fShbMC05YS1mXXsxLDR9fDopKXwoKFswLTlhLWZdezEsNH06KXs2fSg6WzAtOWEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezV9KCgoOlswLTlhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOWEtZl17MSw0fTopezR9KCgoOlswLTlhLWZdezEsNH0pezEsM30pfCgoOlswLTlhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXszfSgoKDpbMC05YS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05YS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezJ9KCgoOlswLTlhLWZdezEsNH0pezEsNX0pfCgoOlswLTlhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7MX0oKCg6WzAtOWEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05YS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05YS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSQvaX19LGZhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09biYmKG49MCksdGhpcy5vZmZzZXQ9dCx0aGlzLmxlbmd0aD1uLHRoaXMucGFyZW50PWV9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9LGV9KCksZGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIHIudHlwZT0ibnVsbCIsci52YWx1ZT1udWxsLHJ9cmV0dXJuIGNhKHQsZSksdH0oZmEpLG1hPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQscil8fHRoaXM7cmV0dXJuIGkudHlwZT0iYm9vbGVhbiIsaS52YWx1ZT1uLGl9cmV0dXJuIGNhKHQsZSksdH0oZmEpLGdhPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuKXt2YXIgcj1lLmNhbGwodGhpcyx0LG4pfHx0aGlzO3JldHVybiByLnR5cGU9ImFycmF5IixyLml0ZW1zPVtdLHJ9cmV0dXJuIGNhKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KGZhKSxwYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJudW1iZXIiLHIuaXNJbnRlZ2VyPSEwLHIudmFsdWU9TnVtYmVyLk5hTixyfXJldHVybiBjYSh0LGUpLHR9KGZhKSxiYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT1lLmNhbGwodGhpcyx0LG4scil8fHRoaXM7cmV0dXJuIGkudHlwZT0ic3RyaW5nIixpLnZhbHVlPSIiLGl9cmV0dXJuIGNhKHQsZSksdH0oZmEpLHZhPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLHQsbil8fHRoaXM7cmV0dXJuIGkudHlwZT0icHJvcGVydHkiLGkuY29sb25PZmZzZXQ9LTEsaS5rZXlOb2RlPXIsaX1yZXR1cm4gY2EodCxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVOb2RlP1t0aGlzLmtleU5vZGUsdGhpcy52YWx1ZU5vZGVdOlt0aGlzLmtleU5vZGVdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KGZhKSx5YT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5jYWxsKHRoaXMsdCxuKXx8dGhpcztyZXR1cm4gci50eXBlPSJvYmplY3QiLHIucHJvcGVydGllcz1bXSxyfXJldHVybiBjYSh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wZXJ0aWVzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHR9KGZhKTtmdW5jdGlvbiBDYShlKXtyZXR1cm4gQmkoZSk/ZT97fTp7bm90Ont9fTplfShsYT1zYXx8KHNhPXt9KSlbbGEuS2V5PTBdPSJLZXkiLGxhW2xhLkVudW09MV09IkVudW0iO3ZhciB3YT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT1lJiYoZT0tMSksdGhpcy5mb2N1c09mZnNldD1lLHRoaXMuZXhjbHVkZT10LHRoaXMuc2NoZW1hcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2NoZW1hcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnNjaGVtYXMsZS5zY2hlbWFzKX0sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbihlKXtyZXR1cm4oLTE9PT10aGlzLmZvY3VzT2Zmc2V0fHxOYShlLHRoaXMuZm9jdXNPZmZzZXQpKSYmZSE9PXRoaXMuZXhjbHVkZX0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKC0xLHRoaXMuZXhjbHVkZSl9LGV9KCksX2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNjaGVtYXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbihlKXt9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuITB9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmluc3RhbmNlPW5ldyBlLGV9KCksU2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LGUucHJvdG90eXBlLm1lcmdlQWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZTt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTt0aGlzLm1lcmdlKHIpfX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24oZSl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdChlLnByb2JsZW1zKX0sZS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhZS5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZlLmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KGUuZW51bVZhbHVlcyk7Zm9yKHZhciB0PTAsbj10aGlzLnByb2JsZW1zO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO3IuY29kZT09PVhvLkVudW1WYWx1ZU1pc21hdGNoJiYoci5tZXNzYWdlPXVhKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0aGlzLmVudW1WYWx1ZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSkuam9pbigiLCAiKSkpfX19LGUucHJvdG90eXBlLm1lcmdlUHJvcGVydHlNYXRjaD1mdW5jdGlvbihlKXt0aGlzLm1lcmdlKGUpLHRoaXMucHJvcGVydGllc01hdGNoZXMrKywoZS5lbnVtVmFsdWVNYXRjaHx8IWUuaGFzUHJvYmxlbXMoKSYmZS5wcm9wZXJ0aWVzTWF0Y2hlcykmJnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrLGUuZW51bVZhbHVlTWF0Y2gmJmUuZW51bVZhbHVlcyYmMT09PWUuZW51bVZhbHVlcy5sZW5ndGgmJnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcysrfSxlLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzUHJvYmxlbXMoKTtyZXR1cm4gdCE9PWUuaGFzUHJvYmxlbXMoKT90Py0xOjE6dGhpcy5lbnVtVmFsdWVNYXRjaCE9PWUuZW51bVZhbHVlTWF0Y2g/ZS5lbnVtVmFsdWVNYXRjaD8tMToxOnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcyE9PWUucHJpbWFyeVZhbHVlTWF0Y2hlcz90aGlzLnByaW1hcnlWYWx1ZU1hdGNoZXMtZS5wcmltYXJ5VmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyE9PWUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcz90aGlzLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMtZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzOnRoaXMucHJvcGVydGllc01hdGNoZXMtZS5wcm9wZXJ0aWVzTWF0Y2hlc30sZX0oKTtmdW5jdGlvbiBBYShlKXtyZXR1cm4gRGkoZSl9ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIEZpKGUpfWZ1bmN0aW9uIE5hKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9dmFyIHhhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PW4mJihuPVtdKSx0aGlzLnJvb3Q9ZSx0aGlzLnN5bnRheEVycm9ycz10LHRoaXMuY29tbWVudHM9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD0hMSksdGhpcy5yb290KXJldHVybiBQaSh0aGlzLnJvb3QsZSx0KX0sZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5yb290KXt2YXIgdD1mdW5jdGlvbihuKXt2YXIgcj1lKG4pLGk9bi5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KGkpKWZvcih2YXIgbz0wO288aS5sZW5ndGgmJnI7bysrKXI9dChpW29dKTtyZXR1cm4gcn07dCh0aGlzLnJvb3QpfX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKHZvaWQgMD09PW4mJihuPWxpLldhcm5pbmcpLHRoaXMucm9vdCYmdCl7dmFyIHI9bmV3IFNhO3JldHVybiBMYSh0aGlzLnJvb3QsdCxyLF9hLmluc3RhbmNlKSxyLnByb2JsZW1zLm1hcCgoZnVuY3Rpb24odCl7dmFyIHIsaT0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQubG9jYXRpb24ub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5sb2NhdGlvbi5vZmZzZXQrdC5sb2NhdGlvbi5sZW5ndGgpKTtyZXR1cm4gZGkuY3JlYXRlKGksdC5tZXNzYWdlLG51bGwhPT0ocj10LnNldmVyaXR5KSYmdm9pZCAwIT09cj9yOm4sdC5jb2RlKX0pKX19LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciByPW5ldyB3YSh0LG4pO3JldHVybiB0aGlzLnJvb3QmJmUmJkxhKHRoaXMucm9vdCxlLG5ldyBTYSxyKSxyLnNjaGVtYXN9LGV9KCk7ZnVuY3Rpb24gTGEoZSx0LG4scil7aWYoZSYmci5pbmNsdWRlKGUpKXt2YXIgaT1lO3N3aXRjaChpLnR5cGUpe2Nhc2Uib2JqZWN0IjohZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPU9iamVjdC5jcmVhdGUobnVsbCksbz1bXSxhPTAscz1lLnByb3BlcnRpZXM7YTxzLmxlbmd0aDthKyspe2lbSz0ocD1zW2FdKS5rZXlOb2RlLnZhbHVlXT1wLnZhbHVlTm9kZSxvLnB1c2goSyl9aWYoQXJyYXkuaXNBcnJheSh0LnJlcXVpcmVkKSlmb3IodmFyIGw9MCxjPXQucmVxdWlyZWQ7bDxjLmxlbmd0aDtsKyspe2lmKCFpW1M9Y1tsXV0pe3ZhciB1PWUucGFyZW50JiYicHJvcGVydHkiPT09ZS5wYXJlbnQudHlwZSYmZS5wYXJlbnQua2V5Tm9kZSxoPXU/e29mZnNldDp1Lm9mZnNldCxsZW5ndGg6dS5sZW5ndGh9OntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOjF9O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246aCxtZXNzYWdlOnVhKCJNaXNzaW5nUmVxdWlyZWRQcm9wV2FybmluZyIsJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyxTKX0pfX12YXIgZj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9by5pbmRleE9mKGUpO3Q+PTA7KW8uc3BsaWNlKHQsMSksdD1vLmluZGV4T2YoZSl9O2lmKHQucHJvcGVydGllcylmb3IodmFyIGQ9MCxtPU9iamVjdC5rZXlzKHQucHJvcGVydGllcyk7ZDxtLmxlbmd0aDtkKyspe2YoUz1tW2RdKTt2YXIgZz10LnByb3BlcnRpZXNbU107aWYoaz1pW1NdKWlmKEJpKGcpKWlmKGcpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7dmFyIHA9ay5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fHVhKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9ZWxzZSBMYShrLGcsTj1uZXcgU2Esciksbi5tZXJnZVByb3BlcnR5TWF0Y2goTil9aWYodC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIGI9MCx2PU9iamVjdC5rZXlzKHQucGF0dGVyblByb3BlcnRpZXMpO2I8di5sZW5ndGg7YisrKWZvcih2YXIgeT12W2JdLEM9cWkoeSksdz0wLF89by5zbGljZSgwKTt3PF8ubGVuZ3RoO3crKyl7dmFyIFM9X1t3XTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QoUykpaWYoZihTKSxrPWlbU10paWYoQmkoZz10LnBhdHRlcm5Qcm9wZXJ0aWVzW3ldKSlpZihnKW4ucHJvcGVydGllc01hdGNoZXMrKyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3A9ay5wYXJlbnQ7bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnAua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnAua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fHVhKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLFMpfSl9ZWxzZSBMYShrLGcsTj1uZXcgU2Esciksbi5tZXJnZVByb3BlcnR5TWF0Y2goTil9aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKWZvcih2YXIgQT0wLEU9bztBPEUubGVuZ3RoO0ErKyl7aWYoaz1pW1M9RVtBXV0pe3ZhciBOPW5ldyBTYTtMYShrLHQuYWRkaXRpb25hbFByb3BlcnRpZXMsTixyKSxuLm1lcmdlUHJvcGVydHlNYXRjaChOKX19ZWxzZSBpZighMT09PXQuYWRkaXRpb25hbFByb3BlcnRpZXMmJm8ubGVuZ3RoPjApZm9yKHZhciB4PTAsTD1vO3g8TC5sZW5ndGg7eCsrKXt2YXIgaztpZihrPWlbUz1MW3hdXSl7cD1rLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6cC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsUyl9KX19S2kodC5tYXhQcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIix0Lm1heFByb3BlcnRpZXMpfSk7S2kodC5taW5Qcm9wZXJ0aWVzKSYmZS5wcm9wZXJ0aWVzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIk1pblByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBmZXdlciBwcm9wZXJ0aWVzIHRoYW4gdGhlIHJlcXVpcmVkIG51bWJlciBvZiB7MH0iLHQubWluUHJvcGVydGllcyl9KTtpZih0LmRlcGVuZGVuY2llcylmb3IodmFyIFQ9MCxPPU9iamVjdC5rZXlzKHQuZGVwZW5kZW5jaWVzKTtUPE8ubGVuZ3RoO1QrKyl7aWYoaVtLPU9bVF1dKXt2YXIgTT10LmRlcGVuZGVuY2llc1tLXTtpZihBcnJheS5pc0FycmF5KE0pKWZvcih2YXIgST0wLFI9TTtJPFIubGVuZ3RoO0krKyl7dmFyIFA9UltJXTtpW1BdP24ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIlJlcXVpcmVkRGVwZW5kZW50UHJvcFdhcm5pbmciLCJPYmplY3QgaXMgbWlzc2luZyBwcm9wZXJ0eSB7MH0gcmVxdWlyZWQgYnkgcHJvcGVydHkgezF9LiIsUCxLKX0pfWVsc2UgaWYoZz1DYShNKSlMYShlLGcsTj1uZXcgU2Esciksbi5tZXJnZVByb3BlcnR5TWF0Y2goTil9fXZhciBGPUNhKHQucHJvcGVydHlOYW1lcyk7aWYoRilmb3IodmFyIEQ9MCxWPWUucHJvcGVydGllcztEPFYubGVuZ3RoO0QrKyl7dmFyIEs7KEs9VltEXS5rZXlOb2RlKSYmTGEoSyxGLG4sX2EuaW5zdGFuY2UpfX0oaSx0LG4scik7YnJlYWs7Y2FzZSJhcnJheSI6IWZ1bmN0aW9uKGUsdCxuLHIpe2lmKEFycmF5LmlzQXJyYXkodC5pdGVtcykpe2Zvcih2YXIgaT10Lml0ZW1zLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9Q2EoaVtvXSkscz1uZXcgU2E7KGY9ZS5pdGVtc1tvXSk/KExhKGYsYSxzLHIpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKHMpKTplLml0ZW1zLmxlbmd0aD49aS5sZW5ndGgmJm4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrfWlmKGUuaXRlbXMubGVuZ3RoPmkubGVuZ3RoKWlmKCJvYmplY3QiPT10eXBlb2YgdC5hZGRpdGlvbmFsSXRlbXMpZm9yKHZhciBsPWkubGVuZ3RoO2w8ZS5pdGVtcy5sZW5ndGg7bCsrKXtzPW5ldyBTYTtMYShlLml0ZW1zW2xdLHQuYWRkaXRpb25hbEl0ZW1zLHMsciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocyl9ZWxzZSExPT09dC5hZGRpdGlvbmFsSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoImFkZGl0aW9uYWxJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMgYWNjb3JkaW5nIHRvIHNjaGVtYS4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsaS5sZW5ndGgpfSl9ZWxzZXt2YXIgYz1DYSh0Lml0ZW1zKTtpZihjKWZvcih2YXIgdT0wLGg9ZS5pdGVtczt1PGgubGVuZ3RoO3UrKyl7dmFyIGY7TGEoZj1oW3VdLGMscz1uZXcgU2Esciksbi5tZXJnZVByb3BlcnR5TWF0Y2gocyl9fXZhciBkPUNhKHQuY29udGFpbnMpO2lmKGQpe2UuaXRlbXMuc29tZSgoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFNhO3JldHVybiBMYShlLGQsdCxfYS5pbnN0YW5jZSksIXQuaGFzUHJvYmxlbXMoKX0pKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSl9S2kodC5taW5JdGVtcykmJmUuaXRlbXMubGVuZ3RoPHQubWluSXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1pbkl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gZmV3IGl0ZW1zLiBFeHBlY3RlZCB7MH0gb3IgbW9yZS4iLHQubWluSXRlbXMpfSk7S2kodC5tYXhJdGVtcykmJmUuaXRlbXMubGVuZ3RoPnQubWF4SXRlbXMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1heEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsdC5tYXhJdGVtcyl9KTtpZighMD09PXQudW5pcXVlSXRlbXMpe3ZhciBtPUFhKGUpO20uc29tZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCE9PW0ubGFzdEluZGV4T2YoZSl9KSkmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoInVuaXF1ZUl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyBkdXBsaWNhdGUgaXRlbXMuIil9KX19KGksdCxuLHIpO2JyZWFrO2Nhc2Uic3RyaW5nIjohZnVuY3Rpb24oZSx0LG4scil7S2kodC5taW5MZW5ndGgpJiZlLnZhbHVlLmxlbmd0aDx0Lm1pbkxlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp1YSgibWluTGVuZ3RoV2FybmluZyIsIlN0cmluZyBpcyBzaG9ydGVyIHRoYW4gdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWluTGVuZ3RoKX0pO0tpKHQubWF4TGVuZ3RoKSYmZS52YWx1ZS5sZW5ndGg+dC5tYXhMZW5ndGgmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1heExlbmd0aFdhcm5pbmciLCJTdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gbGVuZ3RoIG9mIHswfS4iLHQubWF4TGVuZ3RoKX0pO2lmKG89dC5wYXR0ZXJuLCJzdHJpbmciPT10eXBlb2Ygbyl7dmFyIGk9cWkodC5wYXR0ZXJuKTsobnVsbD09aT92b2lkIDA6aS50ZXN0KGUudmFsdWUpKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHx1YSgicGF0dGVybldhcm5pbmciLCdTdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4gb2YgInswfSIuJyx0LnBhdHRlcm4pfSl9dmFyIG87aWYodC5mb3JtYXQpc3dpdGNoKHQuZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp2YXIgYT12b2lkIDA7aWYoZS52YWx1ZSl7dmFyIHM9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8uZXhlYyhlLnZhbHVlKTtzP3NbMl18fCJ1cmkiIT09dC5mb3JtYXR8fChhPXVhKCJ1cmlTY2hlbWVNaXNzaW5nIiwiVVJJIHdpdGggYSBzY2hlbWUgaXMgZXhwZWN0ZWQuIikpOmE9dWEoInVyaU1pc3NpbmciLCJVUkkgaXMgZXhwZWN0ZWQuIil9ZWxzZSBhPXVhKCJ1cmlFbXB0eSIsIlVSSSBleHBlY3RlZC4iKTthJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6ZS5vZmZzZXQsbGVuZ3RoOmUubGVuZ3RofSxtZXNzYWdlOnQucGF0dGVybkVycm9yTWVzc2FnZXx8dC5lcnJvck1lc3NhZ2V8fHVhKCJ1cmlGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFVSSTogezB9IixhKX0pO2JyZWFrO2Nhc2UiY29sb3ItaGV4IjpjYXNlImRhdGUtdGltZSI6Y2FzZSJkYXRlIjpjYXNlInRpbWUiOmNhc2UiZW1haWwiOmNhc2UiaG9zdG5hbWUiOmNhc2UiaXB2NCI6Y2FzZSJpcHY2Ijp2YXIgbD1oYVt0LmZvcm1hdF07ZS52YWx1ZSYmbC5wYXR0ZXJuLmV4ZWMoZS52YWx1ZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8bC5lcnJvck1lc3NhZ2V9KX19KGksdCxuKTticmVhaztjYXNlIm51bWJlciI6IWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWUudmFsdWU7ZnVuY3Rpb24gbyhlKXt2YXIgdCxuPS9eKC0/XGQrKSg/OlwuKFxkKykpPyg/OmUoWy0rXVxkKykpPyQvLmV4ZWMoZS50b1N0cmluZygpKTtyZXR1cm4gbiYme3ZhbHVlOk51bWJlcihuWzFdKyhuWzJdfHwiIikpLG11bHRpcGxpZXI6KChudWxsPT09KHQ9blsyXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKXx8MCktKHBhcnNlSW50KG5bM10pfHwwKX19aWYoS2kodC5tdWx0aXBsZU9mKSl7dmFyIGE9LTE7aWYoTnVtYmVyLmlzSW50ZWdlcih0Lm11bHRpcGxlT2YpKWE9aSV0Lm11bHRpcGxlT2Y7ZWxzZXt2YXIgcz1vKHQubXVsdGlwbGVPZiksbD1vKGkpO2lmKHMmJmwpe3ZhciBjPU1hdGgucG93KDEwLE1hdGguYWJzKGwubXVsdGlwbGllci1zLm11bHRpcGxpZXIpKTtsLm11bHRpcGxpZXI8cy5tdWx0aXBsaWVyP2wudmFsdWUqPWM6cy52YWx1ZSo9YyxhPWwudmFsdWUlcy52YWx1ZX19MCE9PWEmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm11bHRpcGxlT2ZXYXJuaW5nIiwiVmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB7MH0uIix0Lm11bHRpcGxlT2YpfSl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBLaSh0KT90OkJpKHQpJiZ0P2U6dm9pZCAwfWZ1bmN0aW9uIGgoZSx0KXtpZighQmkodCl8fCF0KXJldHVybiBlfXZhciBmPXUodC5taW5pbXVtLHQuZXhjbHVzaXZlTWluaW11bSk7S2koZikmJmk8PWYmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoImV4Y2x1c2l2ZU1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIGV4Y2x1c2l2ZSBtaW5pbXVtIG9mIHswfS4iLGYpfSk7dmFyIGQ9dSh0Lm1heGltdW0sdC5leGNsdXNpdmVNYXhpbXVtKTtLaShkKSYmaT49ZCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmUub2Zmc2V0LGxlbmd0aDplLmxlbmd0aH0sbWVzc2FnZTp1YSgiZXhjbHVzaXZlTWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgZXhjbHVzaXZlIG1heGltdW0gb2YgezB9LiIsZCl9KTt2YXIgbT1oKHQubWluaW11bSx0LmV4Y2x1c2l2ZU1pbmltdW0pO0tpKG0pJiZpPG0mJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIG1pbmltdW0gb2YgezB9LiIsbSl9KTt2YXIgZz1oKHQubWF4aW11bSx0LmV4Y2x1c2l2ZU1heGltdW0pO0tpKGcpJiZpPmcmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDplLm9mZnNldCxsZW5ndGg6ZS5sZW5ndGh9LG1lc3NhZ2U6dWEoIm1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIG1heGltdW0gb2YgezB9LiIsZyl9KX0oaSx0LG4pO2JyZWFrO2Nhc2UicHJvcGVydHkiOnJldHVybiBMYShpLnZhbHVlTm9kZSx0LG4scil9IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gaS50eXBlPT09ZXx8ImludGVnZXIiPT09ZSYmIm51bWJlciI9PT1pLnR5cGUmJmkuaXNJbnRlZ2VyfUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGUuc29tZShlKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoInR5cGVBcnJheU1pc21hdGNoV2FybmluZyIsIkluY29ycmVjdCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgezB9LiIsdC50eXBlLmpvaW4oIiwgIikpfSk6dC50eXBlJiYoZSh0LnR5cGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6aS5vZmZzZXQsbGVuZ3RoOmkubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHx1YSgidHlwZU1pc21hdGNoV2FybmluZyIsJ0luY29ycmVjdCB0eXBlLiBFeHBlY3RlZCAiezB9Ii4nLHQudHlwZSl9KSk7aWYoQXJyYXkuaXNBcnJheSh0LmFsbE9mKSlmb3IodmFyIG89MCxhPXQuYWxsT2Y7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107TGEoaSxDYShzKSxuLHIpfXZhciBsPUNhKHQubm90KTtpZihsKXt2YXIgYz1uZXcgU2EsdT1yLm5ld1N1YigpO0xhKGksbCxjLHUpLGMuaGFzUHJvYmxlbXMoKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp1YSgibm90U2NoZW1hV2FybmluZyIsIk1hdGNoZXMgYSBzY2hlbWEgdGhhdCBpcyBub3QgYWxsb3dlZC4iKX0pO2Zvcih2YXIgaD0wLGY9dS5zY2hlbWFzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2QuaW52ZXJ0ZWQ9IWQuaW52ZXJ0ZWQsci5hZGQoZCl9fXZhciBtPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPVtdLGE9dm9pZCAwLHM9MCxsPWU7czxsLmxlbmd0aDtzKyspe3ZhciBjPUNhKGxbc10pLHU9bmV3IFNhLGg9ci5uZXdTdWIoKTtpZihMYShpLGMsdSxoKSx1Lmhhc1Byb2JsZW1zKCl8fG8ucHVzaChjKSxhKWlmKHR8fHUuaGFzUHJvYmxlbXMoKXx8YS52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCkpe3ZhciBmPXUuY29tcGFyZShhLnZhbGlkYXRpb25SZXN1bHQpO2Y+MD9hPXtzY2hlbWE6Yyx2YWxpZGF0aW9uUmVzdWx0OnUsbWF0Y2hpbmdTY2hlbWFzOmh9OjA9PT1mJiYoYS5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoaCksYS52YWxpZGF0aW9uUmVzdWx0Lm1lcmdlRW51bVZhbHVlcyh1KSl9ZWxzZSBhLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShoKSxhLnZhbGlkYXRpb25SZXN1bHQucHJvcGVydGllc01hdGNoZXMrPXUucHJvcGVydGllc01hdGNoZXMsYS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPXUucHJvcGVydGllc1ZhbHVlTWF0Y2hlcztlbHNlIGE9e3NjaGVtYTpjLHZhbGlkYXRpb25SZXN1bHQ6dSxtYXRjaGluZ1NjaGVtYXM6aH19cmV0dXJuIG8ubGVuZ3RoPjEmJnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6MX0sbWVzc2FnZTp1YSgib25lT2ZXYXJuaW5nIiwiTWF0Y2hlcyBtdWx0aXBsZSBzY2hlbWFzIHdoZW4gb25seSBvbmUgbXVzdCB2YWxpZGF0ZS4iKX0pLGEmJihuLm1lcmdlKGEudmFsaWRhdGlvblJlc3VsdCksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9YS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9YS52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsci5tZXJnZShhLm1hdGNoaW5nU2NoZW1hcykpLG8ubGVuZ3RofTtBcnJheS5pc0FycmF5KHQuYW55T2YpJiZtKHQuYW55T2YsITEpO0FycmF5LmlzQXJyYXkodC5vbmVPZikmJm0odC5vbmVPZiwhMCk7dmFyIGc9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFNhLG89ci5uZXdTdWIoKTtMYShpLENhKGUpLHQsbyksbi5tZXJnZSh0KSxuLnByb3BlcnRpZXNNYXRjaGVzKz10LnByb3BlcnRpZXNNYXRjaGVzLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcys9dC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2Uobyl9LHA9Q2EodC5pZik7cCYmKGI9cCx2PUNhKHQudGhlbikseT1DYSh0LmVsc2UpLEM9Q2EoYiksdz1uZXcgU2EsXz1yLm5ld1N1YigpLExhKGksQyx3LF8pLHIubWVyZ2UoXyksdy5oYXNQcm9ibGVtcygpP3kmJmcoeSk6diYmZyh2KSk7dmFyIGIsdix5LEMsdyxfO2lmKEFycmF5LmlzQXJyYXkodC5lbnVtKSl7Zm9yKHZhciBTPUFhKGkpLEE9ITEsRT0wLE49dC5lbnVtO0U8Ti5sZW5ndGg7RSsrKXt2YXIgeD1OW0VdO2lmKFZpKFMseCkpe0E9ITA7YnJlYWt9fW4uZW51bVZhbHVlcz10LmVudW0sbi5lbnVtVmFsdWVNYXRjaD1BLEF8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6WG8uRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoImVudW1XYXJuaW5nIiwiVmFsdWUgaXMgbm90IGFjY2VwdGVkLiBWYWxpZCB2YWx1ZXM6IHswfS4iLHQuZW51bS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX0pKS5qb2luKCIsICIpKX0pfWlmKFVpKHQuY29uc3QpKXtWaShTPUFhKGkpLHQuY29uc3QpP24uZW51bVZhbHVlTWF0Y2g9ITA6KG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6WG8uRW51bVZhbHVlTWlzbWF0Y2gsbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8dWEoImNvbnN0V2FybmluZyIsIlZhbHVlIG11c3QgYmUgezB9LiIsSlNPTi5zdHJpbmdpZnkodC5jb25zdCkpfSksbi5lbnVtVmFsdWVNYXRjaD0hMSksbi5lbnVtVmFsdWVzPVt0LmNvbnN0XX10LmRlcHJlY2F0aW9uTWVzc2FnZSYmaS5wYXJlbnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLnBhcmVudC5vZmZzZXQsbGVuZ3RoOmkucGFyZW50Lmxlbmd0aH0sc2V2ZXJpdHk6bGkuV2FybmluZyxtZXNzYWdlOnQuZGVwcmVjYXRpb25NZXNzYWdlLGNvZGU6WG8uRGVwcmVjYXRlZH0pfSgpLHIuYWRkKHtub2RlOmksc2NoZW1hOnR9KX19ZnVuY3Rpb24ga2EoZSx0KXt2YXIgbj1bXSxyPS0xLGk9ZS5nZXRUZXh0KCksbz1JaShpLCExKSxhPXQmJnQuY29sbGVjdENvbW1lbnRzP1tdOnZvaWQgMDtmdW5jdGlvbiBzKCl7Zm9yKDs7KXt2YXIgdD1vLnNjYW4oKTtzd2l0Y2godSgpLHQpe2Nhc2UgMTI6Y2FzZSAxMzpBcnJheS5pc0FycmF5KGEpJiZhLnB1c2goJHIuY3JlYXRlKGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkpLGUucG9zaXRpb25BdChvLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpKSkpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiB0fX19ZnVuY3Rpb24gbCh0LGksbyxhLHMpe2lmKHZvaWQgMD09PXMmJihzPWxpLkVycm9yKSwwPT09bi5sZW5ndGh8fG8hPT1yKXt2YXIgbD0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KG8pLGUucG9zaXRpb25BdChhKSk7bi5wdXNoKGRpLmNyZWF0ZShsLHQscyxpLGUubGFuZ3VhZ2VJZCkpLHI9b319ZnVuY3Rpb24gYyhlLHQsbixyLGEpe3ZvaWQgMD09PW4mJihuPXZvaWQgMCksdm9pZCAwPT09ciYmKHI9W10pLHZvaWQgMD09PWEmJihhPVtdKTt2YXIgYz1vLmdldFRva2VuT2Zmc2V0KCksdT1vLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpO2lmKGM9PT11JiZjPjApe2ZvcihjLS07Yz4wJiYvXHMvLnRlc3QoaS5jaGFyQXQoYykpOyljLS07dT1jKzF9aWYobChlLHQsYyx1KSxuJiZoKG4sITEpLHIubGVuZ3RoK2EubGVuZ3RoPjApZm9yKHZhciBmPW8uZ2V0VG9rZW4oKTsxNyE9PWY7KXtpZigtMSE9PXIuaW5kZXhPZihmKSl7cygpO2JyZWFrfWlmKC0xIT09YS5pbmRleE9mKGYpKWJyZWFrO2Y9cygpfXJldHVybiBufWZ1bmN0aW9uIHUoKXtzd2l0Y2goby5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpyZXR1cm4gYyh1YSgiSW52YWxpZFVuaWNvZGUiLCJJbnZhbGlkIHVuaWNvZGUgc2VxdWVuY2UgaW4gc3RyaW5nLiIpLFhvLkludmFsaWRVbmljb2RlKSwhMDtjYXNlIDU6cmV0dXJuIGModWEoIkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLCJJbnZhbGlkIGVzY2FwZSBjaGFyYWN0ZXIgaW4gc3RyaW5nLiIpLFhvLkludmFsaWRFc2NhcGVDaGFyYWN0ZXIpLCEwO2Nhc2UgMzpyZXR1cm4gYyh1YSgiVW5leHBlY3RlZEVuZE9mTnVtYmVyIiwiVW5leHBlY3RlZCBlbmQgb2YgbnVtYmVyLiIpLFhvLlVuZXhwZWN0ZWRFbmRPZk51bWJlciksITA7Y2FzZSAxOnJldHVybiBjKHVhKCJVbmV4cGVjdGVkRW5kT2ZDb21tZW50IiwiVW5leHBlY3RlZCBlbmQgb2YgY29tbWVudC4iKSxYby5VbmV4cGVjdGVkRW5kT2ZDb21tZW50KSwhMDtjYXNlIDI6cmV0dXJuIGModWEoIlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsIlVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4iKSxYby5VbmV4cGVjdGVkRW5kT2ZTdHJpbmcpLCEwO2Nhc2UgNjpyZXR1cm4gYyh1YSgiSW52YWxpZENoYXJhY3RlciIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBzdHJpbmcuIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQuIiksWG8uSW52YWxpZENoYXJhY3RlciksITB9cmV0dXJuITF9ZnVuY3Rpb24gaChlLHQpe3JldHVybiBlLmxlbmd0aD1vLmdldFRva2VuT2Zmc2V0KCkrby5nZXRUb2tlbkxlbmd0aCgpLWUub2Zmc2V0LHQmJnMoKSxlfXZhciBmPW5ldyBiYSh2b2lkIDAsMCwwKTtmdW5jdGlvbiBkKHQsbil7dmFyIHI9bmV3IHZhKHQsby5nZXRUb2tlbk9mZnNldCgpLGYpLGk9bShyKTtpZighaSl7aWYoMTYhPT1vLmdldFRva2VuKCkpcmV0dXJuO2ModWEoIkRvdWJsZVF1b3Rlc0V4cGVjdGVkIiwiUHJvcGVydHkga2V5cyBtdXN0IGJlIGRvdWJsZXF1b3RlZCIpLFhvLlVuZGVmaW5lZCk7dmFyIGE9bmV3IGJhKHIsby5nZXRUb2tlbk9mZnNldCgpLG8uZ2V0VG9rZW5MZW5ndGgoKSk7YS52YWx1ZT1vLmdldFRva2VuVmFsdWUoKSxpPWEscygpfXIua2V5Tm9kZT1pO3ZhciB1PW5baS52YWx1ZV07aWYodT8obCh1YSgiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksWG8uRHVwbGljYXRlS2V5LHIua2V5Tm9kZS5vZmZzZXQsci5rZXlOb2RlLm9mZnNldCtyLmtleU5vZGUubGVuZ3RoLGxpLldhcm5pbmcpLCJvYmplY3QiPT10eXBlb2YgdSYmbCh1YSgiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksWG8uRHVwbGljYXRlS2V5LHUua2V5Tm9kZS5vZmZzZXQsdS5rZXlOb2RlLm9mZnNldCt1LmtleU5vZGUubGVuZ3RoLGxpLldhcm5pbmcpLG5baS52YWx1ZV09ITApOm5baS52YWx1ZV09ciw2PT09by5nZXRUb2tlbigpKXIuY29sb25PZmZzZXQ9by5nZXRUb2tlbk9mZnNldCgpLHMoKTtlbHNlIGlmKGModWEoIkNvbG9uRXhwZWN0ZWQiLCJDb2xvbiBleHBlY3RlZCIpLFhvLkNvbG9uRXhwZWN0ZWQpLDEwPT09by5nZXRUb2tlbigpJiZlLnBvc2l0aW9uQXQoaS5vZmZzZXQraS5sZW5ndGgpLmxpbmU8ZS5wb3NpdGlvbkF0KG8uZ2V0VG9rZW5PZmZzZXQoKSkubGluZSlyZXR1cm4gci5sZW5ndGg9aS5sZW5ndGgscjt2YXIgaD1nKHIpO3JldHVybiBoPyhyLnZhbHVlTm9kZT1oLHIubGVuZ3RoPWgub2Zmc2V0K2gubGVuZ3RoLXIub2Zmc2V0LHIpOmModWEoIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLFhvLlZhbHVlRXhwZWN0ZWQscixbXSxbMiw1XSl9ZnVuY3Rpb24gbShlKXtpZigxMD09PW8uZ2V0VG9rZW4oKSl7dmFyIHQ9bmV3IGJhKGUsby5nZXRUb2tlbk9mZnNldCgpKTtyZXR1cm4gdC52YWx1ZT1vLmdldFRva2VuVmFsdWUoKSxoKHQsITApfX1mdW5jdGlvbiBnKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZigzPT09by5nZXRUb2tlbigpKXt2YXIgdD1uZXcgZ2EoZSxvLmdldFRva2VuT2Zmc2V0KCkpO3MoKTtmb3IodmFyIG49ITE7NCE9PW8uZ2V0VG9rZW4oKSYmMTchPT1vLmdldFRva2VuKCk7KXtpZig1PT09by5nZXRUb2tlbigpKXtufHxjKHVhKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxYby5WYWx1ZUV4cGVjdGVkKTt2YXIgcj1vLmdldFRva2VuT2Zmc2V0KCk7aWYocygpLDQ9PT1vLmdldFRva2VuKCkpe24mJmwodWEoIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLFhvLlRyYWlsaW5nQ29tbWEscixyKzEpO2NvbnRpbnVlfX1lbHNlIG4mJmModWEoIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLFhvLkNvbW1hRXhwZWN0ZWQpO3ZhciBpPWcodCk7aT90Lml0ZW1zLnB1c2goaSk6Yyh1YSgiUHJvcGVydHlFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksWG8uVmFsdWVFeHBlY3RlZCx2b2lkIDAsW10sWzQsNV0pLG49ITB9cmV0dXJuIDQhPT1vLmdldFRva2VuKCk/Yyh1YSgiRXhwZWN0ZWRDbG9zZUJyYWNrZXQiLCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNrZXQiKSxYby5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCx0KTpoKHQsITApfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKDE9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyB5YShlLG8uZ2V0VG9rZW5PZmZzZXQoKSksbj1PYmplY3QuY3JlYXRlKG51bGwpO3MoKTtmb3IodmFyIHI9ITE7MiE9PW8uZ2V0VG9rZW4oKSYmMTchPT1vLmdldFRva2VuKCk7KXtpZig1PT09by5nZXRUb2tlbigpKXtyfHxjKHVhKCJQcm9wZXJ0eUV4cGVjdGVkIiwiUHJvcGVydHkgZXhwZWN0ZWQiKSxYby5Qcm9wZXJ0eUV4cGVjdGVkKTt2YXIgaT1vLmdldFRva2VuT2Zmc2V0KCk7aWYocygpLDI9PT1vLmdldFRva2VuKCkpe3ImJmwodWEoIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLFhvLlRyYWlsaW5nQ29tbWEsaSxpKzEpO2NvbnRpbnVlfX1lbHNlIHImJmModWEoIkV4cGVjdGVkQ29tbWEiLCJFeHBlY3RlZCBjb21tYSIpLFhvLkNvbW1hRXhwZWN0ZWQpO3ZhciBhPWQodCxuKTthP3QucHJvcGVydGllcy5wdXNoKGEpOmModWEoIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLFhvLlByb3BlcnR5RXhwZWN0ZWQsdm9pZCAwLFtdLFsyLDVdKSxyPSEwfXJldHVybiAyIT09by5nZXRUb2tlbigpP2ModWEoIkV4cGVjdGVkQ2xvc2VCcmFjZSIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2UiKSxYby5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkLHQpOmgodCwhMCl9fShlKXx8bShlKXx8ZnVuY3Rpb24oZSl7aWYoMTE9PT1vLmdldFRva2VuKCkpe3ZhciB0PW5ldyBwYShlLG8uZ2V0VG9rZW5PZmZzZXQoKSk7aWYoMD09PW8uZ2V0VG9rZW5FcnJvcigpKXt2YXIgbj1vLmdldFRva2VuVmFsdWUoKTt0cnl7dmFyIHI9SlNPTi5wYXJzZShuKTtpZighS2kocikpcmV0dXJuIGModWEoIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksWG8uVW5kZWZpbmVkLHQpO3QudmFsdWU9cn1jYXRjaChlKXtyZXR1cm4gYyh1YSgiSW52YWxpZE51bWJlckZvcm1hdCIsIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSxYby5VbmRlZmluZWQsdCl9dC5pc0ludGVnZXI9LTE9PT1uLmluZGV4T2YoIi4iKX1yZXR1cm4gaCh0LCEwKX19KGUpfHxmdW5jdGlvbihlKXtzd2l0Y2goby5nZXRUb2tlbigpKXtjYXNlIDc6cmV0dXJuIGgobmV3IGRhKGUsby5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA4OnJldHVybiBoKG5ldyBtYShlLCEwLG8uZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgOTpyZXR1cm4gaChuZXcgbWEoZSwhMSxvLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtkZWZhdWx0OnJldHVybn19KGUpfXZhciBwPXZvaWQgMDtyZXR1cm4gMTchPT1zKCkmJigocD1nKHApKT8xNyE9PW8uZ2V0VG9rZW4oKSYmYyh1YSgiRW5kIG9mIGZpbGUgZXhwZWN0ZWQiLCJFbmQgb2YgZmlsZSBleHBlY3RlZC4iKSxYby5VbmRlZmluZWQpOmModWEoIkludmFsaWQgc3ltYm9sIiwiRXhwZWN0ZWQgYSBKU09OIG9iamVjdCwgYXJyYXkgb3IgbGl0ZXJhbC4iKSxYby5VbmRlZmluZWQpKSxuZXcgeGEocCxuLGEpfWZ1bmN0aW9uIFRhKGUsdCxuKXtpZihudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgcj10KyJcdCI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiJbXSI7Zm9yKHZhciBpPSJbXG4iLG89MDtvPGUubGVuZ3RoO28rKylpKz1yK1RhKGVbb10scixuKSxvPGUubGVuZ3RoLTEmJihpKz0iLCIpLGkrPSJcbiI7cmV0dXJuIGkrPXQrIl0ifXZhciBhPU9iamVjdC5rZXlzKGUpO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4ie30iO2ZvcihpPSJ7XG4iLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTtpKz1yK0pTT04uc3RyaW5naWZ5KHMpKyI6ICIrVGEoZVtzXSxyLG4pLG88YS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9IlxuIn1yZXR1cm4gaSs9dCsifSJ9cmV0dXJuIG4oZSl9dmFyIE9hPW9hKCksTWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3ZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1uJiYobj1Qcm9taXNlKSx2b2lkIDA9PT1yJiYocj17fSksdGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlQ29uc3RydWN0b3I9bix0aGlzLmNsaWVudENhcGFiaWxpdGllcz1yfXJldHVybiBlLnByb3RvdHlwZS5kb1Jlc29sdmU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIG49dGhpcy5jb250cmlidXRpb25zW3RdLnJlc29sdmVDb21wbGV0aW9uO2lmKG4pe3ZhciByPW4oZSk7aWYocilyZXR1cm4gcn19cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoZSl9LGUucHJvdG90eXBlLmRvQ29tcGxldGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMsaT17aXRlbXM6W10saXNJbmNvbXBsZXRlOiExfSxvPWUuZ2V0VGV4dCgpLGE9ZS5vZmZzZXRBdCh0KSxzPW4uZ2V0Tm9kZUZyb21PZmZzZXQoYSwhMCk7aWYodGhpcy5pc0luQ29tbWVudChlLHM/cy5vZmZzZXQ6MCxhKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO2lmKHMmJmE9PT1zLm9mZnNldCtzLmxlbmd0aCYmYT4wKXt2YXIgbD1vW2EtMV07KCJvYmplY3QiPT09cy50eXBlJiYifSI9PT1sfHwiYXJyYXkiPT09cy50eXBlJiYiXSI9PT1sKSYmKHM9cy5wYXJlbnQpfXZhciBjLHU9dGhpcy5nZXRDdXJyZW50V29yZChlLGEpO2lmKCFzfHwic3RyaW5nIiE9PXMudHlwZSYmIm51bWJlciIhPT1zLnR5cGUmJiJib29sZWFuIiE9PXMudHlwZSYmIm51bGwiIT09cy50eXBlKXt2YXIgaD1hLXUubGVuZ3RoO2g+MCYmJyInPT09b1toLTFdJiZoLS0sYz0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KGgpLHQpfWVsc2UgYz0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KHMub2Zmc2V0KSxlLnBvc2l0aW9uQXQocy5vZmZzZXQrcy5sZW5ndGgpKTt2YXIgZj17fSxkPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sYWJlbCxuPWZbdF07aWYobiluLmRvY3VtZW50YXRpb258fChuLmRvY3VtZW50YXRpb249ZS5kb2N1bWVudGF0aW9uKSxuLmRldGFpbHx8KG4uZGV0YWlsPWUuZGV0YWlsKTtlbHNle2lmKCh0PXQucmVwbGFjZSgvW1xuXS9nLCLihrUiKSkubGVuZ3RoPjYwKXt2YXIgcj10LnN1YnN0cigwLDU3KS50cmltKCkrIi4uLiI7ZltyXXx8KHQ9cil9YyYmdm9pZCAwIT09ZS5pbnNlcnRUZXh0JiYoZS50ZXh0RWRpdD1iaS5yZXBsYWNlKGMsZS5pbnNlcnRUZXh0KSksZS5sYWJlbD10LGZbdF09ZSxpLml0ZW1zLnB1c2goZSl9fSxzZXRBc0luY29tcGxldGU6ZnVuY3Rpb24oKXtpLmlzSW5jb21wbGV0ZT0hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX0sbG9nOmZ1bmN0aW9uKGUpe2NvbnNvbGUubG9nKGUpfSxnZXROdW1iZXJPZlByb3Bvc2FsczpmdW5jdGlvbigpe3JldHVybiBpLml0ZW1zLmxlbmd0aH19O3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksbikudGhlbigoZnVuY3Rpb24odCl7dmFyIGw9W10saD0hMCxtPSIiLGc9dm9pZCAwO2lmKHMmJiJzdHJpbmciPT09cy50eXBlKXt2YXIgcD1zLnBhcmVudDtwJiYicHJvcGVydHkiPT09cC50eXBlJiZwLmtleU5vZGU9PT1zJiYoaD0hcC52YWx1ZU5vZGUsZz1wLG09by5zdWJzdHIocy5vZmZzZXQrMSxzLmxlbmd0aC0yKSxwJiYocz1wLnBhcmVudCkpfWlmKHMmJiJvYmplY3QiPT09cy50eXBlKXtpZihzLm9mZnNldD09PWEpcmV0dXJuIGk7cy5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2cmJmc9PT1lfHwoZltlLmtleU5vZGUudmFsdWVdPXVvLmNyZWF0ZSgiX18iKSl9KSk7dmFyIGI9IiI7aCYmKGI9ci5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGUsZS5vZmZzZXRBdChjLmVuZCkpKSx0P3IuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyh0LG4scyxoLGIsZCk6ci5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucyhuLHMsbSxkKTt2YXIgdj1FYShzKTtyLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5jb2xsZWN0UHJvcGVydHlDb21wbGV0aW9ucyhlLnVyaSx2LHUsaCwiIj09PWIsZCk7biYmbC5wdXNoKG4pfSkpLCF0JiZ1Lmxlbmd0aD4wJiYnIichPT1vLmNoYXJBdChhLXUubGVuZ3RoLTEpJiYoZC5hZGQoe2tpbmQ6dG8uUHJvcGVydHksbGFiZWw6ci5nZXRMYWJlbEZvclZhbHVlKHUpLGluc2VydFRleHQ6ci5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkodSx2b2lkIDAsITEsYiksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxkLnNldEFzSW5jb21wbGV0ZSgpKX12YXIgeT17fTtyZXR1cm4gdD9yLmdldFZhbHVlQ29tcGxldGlvbnModCxuLHMsYSxlLGQseSk6ci5nZXRTY2hlbWFMZXNzVmFsdWVDb21wbGV0aW9ucyhuLHMsYSxlLGQpLHIuY29udHJpYnV0aW9ucy5sZW5ndGg+MCYmci5nZXRDb250cmlidXRlZFZhbHVlQ29tcGxldGlvbnMobixzLGEsZSxkLGwpLHIucHJvbWlzZUNvbnN0cnVjdG9yLmFsbChsKS50aGVuKChmdW5jdGlvbigpe2lmKDA9PT1kLmdldE51bWJlck9mUHJvcG9zYWxzKCkpe3ZhciB0PWE7IXN8fCJzdHJpbmciIT09cy50eXBlJiYibnVtYmVyIiE9PXMudHlwZSYmImJvb2xlYW4iIT09cy50eXBlJiYibnVsbCIhPT1zLnR5cGV8fCh0PXMub2Zmc2V0K3MubGVuZ3RoKTt2YXIgbj1yLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSx0KTtyLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnMoeSxuLGQpfXJldHVybiBpfSkpfSkpfSxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT10aGlzO3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLG4ub2Zmc2V0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLm5vZGU9PT1uJiYhZS5pbnZlcnRlZCl7dmFyIHQ9ZS5zY2hlbWEucHJvcGVydGllczt0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10W2VdO2lmKCJvYmplY3QiPT10eXBlb2YgbiYmIW4uZGVwcmVjYXRpb25NZXNzYWdlJiYhbi5kb05vdFN1Z2dlc3Qpe3ZhciBzPXtraW5kOnRvLlByb3BlcnR5LGxhYmVsOmUsaW5zZXJ0VGV4dDphLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShlLG4scixpKSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOmEuZnJvbU1hcmt1cChuLm1hcmtkb3duRGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9ufHwiIn07dm9pZCAwIT09bi5zdWdnZXN0U29ydFRleHQmJihzLnNvcnRUZXh0PW4uc3VnZ2VzdFNvcnRUZXh0KSxzLmluc2VydFRleHQmJmppKHMuaW5zZXJ0VGV4dCwiJDEiLmNvbmNhdChpKSkmJihzLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLG8uYWRkKHMpfX0pKTt2YXIgcz1lLnNjaGVtYS5wcm9wZXJ0eU5hbWVzO2lmKCJvYmplY3QiPT10eXBlb2YgcyYmIXMuZGVwcmVjYXRpb25NZXNzYWdlJiYhcy5kb05vdFN1Z2dlc3Qpe3ZhciBsPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKTt2YXIgbj17a2luZDp0by5Qcm9wZXJ0eSxsYWJlbDplLGluc2VydFRleHQ6YS5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSx2b2lkIDAscixpKSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZmlsdGVyVGV4dDphLmdldEZpbHRlclRleHRGb3JWYWx1ZShlKSxkb2N1bWVudGF0aW9uOnR8fGEuZnJvbU1hcmt1cChzLm1hcmtkb3duRGVzY3JpcHRpb24pfHxzLmRlc2NyaXB0aW9ufHwiIn07dm9pZCAwIT09cy5zdWdnZXN0U29ydFRleHQmJihuLnNvcnRUZXh0PXMuc3VnZ2VzdFNvcnRUZXh0KSxuLmluc2VydFRleHQmJmppKG4uaW5zZXJ0VGV4dCwiJDEiLmNvbmNhdChpKSkmJihuLmNvbW1hbmQ9e3RpdGxlOiJTdWdnZXN0Iixjb21tYW5kOiJlZGl0b3IuYWN0aW9uLnRyaWdnZXJTdWdnZXN0In0pLG8uYWRkKG4pfTtpZihzLmVudW0pZm9yKHZhciBjPTA7YzxzLmVudW0ubGVuZ3RoO2MrKyl7dmFyIHU9dm9pZCAwO3MubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZjPHMubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aD91PWEuZnJvbU1hcmt1cChzLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tjXSk6cy5lbnVtRGVzY3JpcHRpb25zJiZjPHMuZW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJih1PXMuZW51bURlc2NyaXB0aW9uc1tjXSksbChzLmVudW1bY10sdSl9cy5jb25zdCYmbChzLmNvbnN0KX19fSkpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLG89ZnVuY3Rpb24oZSl7ZS5wcm9wZXJ0aWVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Tm9kZS52YWx1ZTtyLmFkZCh7a2luZDp0by5Qcm9wZXJ0eSxsYWJlbDp0LGluc2VydFRleHQ6aS5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUodCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGZpbHRlclRleHQ6aS5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUodCksZG9jdW1lbnRhdGlvbjoiIn0pfSkpfTtpZih0LnBhcmVudClpZigicHJvcGVydHkiPT09dC5wYXJlbnQudHlwZSl7dmFyIGE9dC5wYXJlbnQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KChmdW5jdGlvbihlKXtyZXR1cm4icHJvcGVydHkiPT09ZS50eXBlJiZlIT09dC5wYXJlbnQmJmUua2V5Tm9kZS52YWx1ZT09PWEmJmUudmFsdWVOb2RlJiYib2JqZWN0Ij09PWUudmFsdWVOb2RlLnR5cGUmJm8oZS52YWx1ZU5vZGUpLCEwfSkpfWVsc2UiYXJyYXkiPT09dC5wYXJlbnQudHlwZSYmdC5wYXJlbnQuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Im9iamVjdCI9PT1lLnR5cGUmJmUhPT10JiZvKGUpfSkpO2Vsc2Uib2JqZWN0Ij09PXQudHlwZSYmci5hZGQoe2tpbmQ6dG8uUHJvcGVydHksbGFiZWw6IiRzY2hlbWEiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoIiRzY2hlbWEiLHZvaWQgMCwhMCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiIsZmlsdGVyVGV4dDp0aGlzLmdldEZpbHRlclRleHRGb3JWYWx1ZSgiJHNjaGVtYSIpfSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89dGhpcyxhPW47aWYoIXR8fCJzdHJpbmciIT09dC50eXBlJiYibnVtYmVyIiE9PXQudHlwZSYmImJvb2xlYW4iIT09dC50eXBlJiYibnVsbCIhPT10LnR5cGV8fChhPXQub2Zmc2V0K3QubGVuZ3RoLHQ9dC5wYXJlbnQpLCF0KXJldHVybiBpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoiRW1wdHkgb2JqZWN0IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LCIiKSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLHZvaWQgaS5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiRW1wdHkgYXJyYXkiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10sIiIpLGluc2VydFRleHRGb3JtYXQ6cm8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSk7dmFyIHM9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKHIsYSksbD1mdW5jdGlvbihlKXtlLnBhcmVudCYmIU5hKGUucGFyZW50LG4sITApJiZpLmFkZCh7a2luZDpvLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6by5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGUoZSxyKSxpbnNlcnRUZXh0Om8uZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZShlLHIscyksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSwiYm9vbGVhbiI9PT1lLnR5cGUmJm8uYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighZS52YWx1ZSxzLGkpfTtpZigicHJvcGVydHkiPT09dC50eXBlJiZuPih0LmNvbG9uT2Zmc2V0fHwwKSl7dmFyIGM9dC52YWx1ZU5vZGU7aWYoYyYmKG4+Yy5vZmZzZXQrYy5sZW5ndGh8fCJvYmplY3QiPT09Yy50eXBlfHwiYXJyYXkiPT09Yy50eXBlKSlyZXR1cm47dmFyIHU9dC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PXUmJmUudmFsdWVOb2RlJiZsKGUudmFsdWVOb2RlKSwhMH0pKSwiJHNjaGVtYSI9PT11JiZ0LnBhcmVudCYmIXQucGFyZW50LnBhcmVudCYmdGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhzLGkpfWlmKCJhcnJheSI9PT10LnR5cGUpaWYodC5wYXJlbnQmJiJwcm9wZXJ0eSI9PT10LnBhcmVudC50eXBlKXt2YXIgaD10LnBhcmVudC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoKGZ1bmN0aW9uKGUpe3JldHVybiJwcm9wZXJ0eSI9PT1lLnR5cGUmJmUua2V5Tm9kZS52YWx1ZT09PWgmJmUudmFsdWVOb2RlJiYiYXJyYXkiPT09ZS52YWx1ZU5vZGUudHlwZSYmZS52YWx1ZU5vZGUuaXRlbXMuZm9yRWFjaChsKSwhMH0pKX1lbHNlIHQuaXRlbXMuZm9yRWFjaChsKX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyxhKXt2YXIgcz1yLGw9dm9pZCAwLGM9dm9pZCAwO2lmKCFufHwic3RyaW5nIiE9PW4udHlwZSYmIm51bWJlciIhPT1uLnR5cGUmJiJib29sZWFuIiE9PW4udHlwZSYmIm51bGwiIT09bi50eXBlfHwocz1uLm9mZnNldCtuLmxlbmd0aCxjPW4sbj1uLnBhcmVudCksbil7aWYoInByb3BlcnR5Ij09PW4udHlwZSYmcj4obi5jb2xvbk9mZnNldHx8MCkpe3ZhciB1PW4udmFsdWVOb2RlO2lmKHUmJnI+dS5vZmZzZXQrdS5sZW5ndGgpcmV0dXJuO2w9bi5rZXlOb2RlLnZhbHVlLG49bi5wYXJlbnR9aWYobiYmKHZvaWQgMCE9PWx8fCJhcnJheSI9PT1uLnR5cGUpKXtmb3IodmFyIGg9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGkscyksZj0wLGQ9dC5nZXRNYXRjaGluZ1NjaGVtYXMoZS5zY2hlbWEsbi5vZmZzZXQsYyk7ZjxkLmxlbmd0aDtmKyspe3ZhciBtPWRbZl07aWYobS5ub2RlPT09biYmIW0uaW52ZXJ0ZWQmJm0uc2NoZW1hKXtpZigiYXJyYXkiPT09bi50eXBlJiZtLnNjaGVtYS5pdGVtcylpZihBcnJheS5pc0FycmF5KG0uc2NoZW1hLml0ZW1zKSl7dmFyIGc9dGhpcy5maW5kSXRlbUF0T2Zmc2V0KG4saSxyKTtnPG0uc2NoZW1hLml0ZW1zLmxlbmd0aCYmdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKG0uc2NoZW1hLml0ZW1zW2ddLGgsbyxhKX1lbHNlIHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhtLnNjaGVtYS5pdGVtcyxoLG8sYSk7aWYodm9pZCAwIT09bCl7dmFyIHA9ITE7aWYobS5zY2hlbWEucHJvcGVydGllcykodz1tLnNjaGVtYS5wcm9wZXJ0aWVzW2xdKSYmKHA9ITAsdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpKTtpZihtLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyYmIXApZm9yKHZhciBiPTAsdj1PYmplY3Qua2V5cyhtLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyk7Yjx2Lmxlbmd0aDtiKyspe3ZhciB5PXZbYl0sQz1xaSh5KTtpZihudWxsPT1DP3ZvaWQgMDpDLnRlc3QobCkpe3A9ITA7dmFyIHc9bS5zY2hlbWEucGF0dGVyblByb3BlcnRpZXNbeV07dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpfX1pZihtLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyYmIXApe3c9bS5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXM7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHcsaCxvLGEpfX19fSIkc2NoZW1hIiE9PWx8fG4ucGFyZW50fHx0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGgsbyksYS5ib29sZWFuJiYodGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCEwLGgsbyksdGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCExLGgsbykpLGEubnVsbCYmdGhpcy5hZGROdWxsVmFsdWVDb21wbGV0aW9uKGgsbyl9fWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUuc2NoZW1hLCIiLG8sYSl9LGUucHJvdG90eXBlLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyLGksbyl7aWYodCl7aWYoInN0cmluZyIhPT10LnR5cGUmJiJudW1iZXIiIT09dC50eXBlJiYiYm9vbGVhbiIhPT10LnR5cGUmJiJudWxsIiE9PXQudHlwZXx8KHQ9dC5wYXJlbnQpLHQmJiJwcm9wZXJ0eSI9PT10LnR5cGUmJm4+KHQuY29sb25PZmZzZXR8fDApKXt2YXIgYT10LmtleU5vZGUudmFsdWUscz10LnZhbHVlTm9kZTtpZigoIXN8fG48PXMub2Zmc2V0K3MubGVuZ3RoKSYmdC5wYXJlbnQpe3ZhciBsPUVhKHQucGFyZW50KTt0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xsZWN0VmFsdWVDb21wbGV0aW9ucyhyLnVyaSxsLGEsaSk7dCYmby5wdXNoKHQpfSkpfX19ZWxzZSB0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb2xsZWN0RGVmYXVsdENvbXBsZXRpb25zKHIudXJpLGkpO3QmJm8ucHVzaCh0KX0pKX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzOyJvYmplY3QiPT10eXBlb2YgZSYmKHRoaXMuYWRkRW51bVZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZSx0LG4pLHRoaXMuY29sbGVjdFR5cGVzKGUsciksQXJyYXkuaXNBcnJheShlLmFsbE9mKSYmZS5hbGxPZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gaS5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIpfSkpLEFycmF5LmlzQXJyYXkoZS5hbnlPZikmJmUuYW55T2YuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyKX0pKSxBcnJheS5pc0FycmF5KGUub25lT2YpJiZlLm9uZU9mLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil9KSkpfSxlLnByb3RvdHlwZS5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO3ZvaWQgMD09PXImJihyPTApO3ZhciBvPSExO2lmKFVpKGUuZGVmYXVsdCkpe2Zvcih2YXIgYT1lLnR5cGUscz1lLmRlZmF1bHQsbD1yO2w+MDtsLS0pcz1bc10sYT0iYXJyYXkiO24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoYSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKHMpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocyx0KSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZGV0YWlsOk9hKCJqc29uLnN1Z2dlc3QuZGVmYXVsdCIsIkRlZmF1bHQgdmFsdWUiKX0pLG89ITB9QXJyYXkuaXNBcnJheShlLmV4YW1wbGVzKSYmZS5leGFtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihhKXtmb3IodmFyIHM9ZS50eXBlLGw9YSxjPXI7Yz4wO2MtLSlsPVtsXSxzPSJhcnJheSI7bi5hZGQoe2tpbmQ6aS5nZXRTdWdnZXN0aW9uS2luZChzKSxsYWJlbDppLmdldExhYmVsRm9yVmFsdWUobCksaW5zZXJ0VGV4dDppLmdldEluc2VydFRleHRGb3JWYWx1ZShsLHQpLGluc2VydFRleHRGb3JtYXQ6cm8uU25pcHBldH0pLG89ITB9KSksQXJyYXkuaXNBcnJheShlLmRlZmF1bHRTbmlwcGV0cykmJmUuZGVmYXVsdFNuaXBwZXRzLmZvckVhY2goKGZ1bmN0aW9uKGEpe3ZhciBzLGwsYz1lLnR5cGUsdT1hLmJvZHksaD1hLmxhYmVsO2lmKFVpKHUpKXtlLnR5cGU7Zm9yKHZhciBmPXI7Zj4wO2YtLSl1PVt1XTtzPWkuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZSh1LHQpLGw9aS5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlKHUpLGg9aHx8aS5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZSh1KX1lbHNle2lmKCJzdHJpbmciIT10eXBlb2YgYS5ib2R5VGV4dClyZXR1cm47dmFyIGQ9IiIsbT0iIixnPSIiO2ZvcihmPXI7Zj4wO2YtLSlkPWQrZysiW1xuIixtPW0rIlxuIitnKyJdIixnKz0iXHQiLGM9ImFycmF5IjtzPWQrZythLmJvZHlUZXh0LnNwbGl0KCJcbiIpLmpvaW4oIlxuIitnKSttK3QsaD1ofHxzLGw9cy5yZXBsYWNlKC9bXG5dL2csIiIpfW4uYWRkKHtraW5kOmkuZ2V0U3VnZ2VzdGlvbktpbmQoYyksbGFiZWw6aCxkb2N1bWVudGF0aW9uOmkuZnJvbU1hcmt1cChhLm1hcmtkb3duRGVzY3JpcHRpb24pfHxhLmRlc2NyaXB0aW9uLGluc2VydFRleHQ6cyxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZmlsdGVyVGV4dDpsfSksbz0hMH0pKSwhbyYmIm9iamVjdCI9PXR5cGVvZiBlLml0ZW1zJiYhQXJyYXkuaXNBcnJheShlLml0ZW1zKSYmcjw1JiZ0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKGUuaXRlbXMsdCxuLHIrMSl9LGUucHJvdG90eXBlLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuKXtpZihVaShlLmNvbnN0KSYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZChlLnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShlLmNvbnN0KSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUuY29uc3QsdCksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25EZXNjcmlwdGlvbil8fGUuZGVzY3JpcHRpb259KSxBcnJheS5pc0FycmF5KGUuZW51bSkpZm9yKHZhciByPTAsaT1lLmVudW0ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPWUuZW51bVtyXSxhPXRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9uO2UubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZyPGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCk/YT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbcl0pOmUuZW51bURlc2NyaXB0aW9ucyYmcjxlLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYoYT1lLmVudW1EZXNjcmlwdGlvbnNbcl0pLG4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUobyksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShvLHQpLGluc2VydFRleHRGb3JtYXQ6cm8uU25pcHBldCxkb2N1bWVudGF0aW9uOmF9KX19LGUucHJvdG90eXBlLmNvbGxlY3RUeXBlcz1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUuZW51bSkmJiFVaShlLmNvbnN0KSl7dmFyIG49ZS50eXBlO0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXT0hMH0pKTpuJiYodFtuXT0hMCl9fSxlLnByb3RvdHlwZS5hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuKXtlLm9iamVjdCYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6Int9IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh7fSx0KSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZGV0YWlsOk9hKCJkZWZhdWx0cy5vYmplY3QiLCJOZXcgb2JqZWN0IiksZG9jdW1lbnRhdGlvbjoiIn0pLGUuYXJyYXkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IltdIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShbXSx0KSxpbnNlcnRUZXh0Rm9ybWF0OnJvLlNuaXBwZXQsZGV0YWlsOk9hKCJkZWZhdWx0cy5hcnJheSIsIk5ldyBhcnJheSIpLGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbihlLHQsbil7bi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYm9vbGVhbiIpLGxhYmVsOmU/InRydWUiOiJmYWxzZSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLHQpLGluc2VydFRleHRGb3JtYXQ6cm8uU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9LGUucHJvdG90eXBlLmFkZE51bGxWYWx1ZUNvbXBsZXRpb249ZnVuY3Rpb24oZSx0KXt0LmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJudWxsIiksbGFiZWw6Im51bGwiLGluc2VydFRleHQ6Im51bGwiK2UsaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkRG9sbGFyU2NoZW1hQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5zY2hlbWFTZXJ2aWNlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHMoKGZ1bmN0aW9uKGUpe3JldHVybiJodHRwIj09PWV8fCJodHRwcyI9PT1lfSkpO3IuZm9yRWFjaCgoZnVuY3Rpb24ocil7cmV0dXJuIHQuYWRkKHtraW5kOnRvLk1vZHVsZSxsYWJlbDpuLmdldExhYmVsRm9yVmFsdWUociksZmlsdGVyVGV4dDpuLmdldEZpbHRlclRleHRGb3JWYWx1ZShyKSxpbnNlcnRUZXh0Om4uZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHIsZSksaW5zZXJ0VGV4dEZvcm1hdDpyby5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0pKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LGUucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JWYWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9LGUucHJvdG90eXBlLmdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9LGUucHJvdG90eXBlLmdldExhYmVsRm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9cJFx7XGQrOihbXn1dKylcfXxcJFxkKy9nLCIkMSIpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFwkXH1dL2csIlxcJCYiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlPWZ1bmN0aW9uKGUsdCl7dmFyIG49SlNPTi5zdHJpbmdpZnkoZSxudWxsLCJcdCIpO3JldHVybiJ7fSI9PT1uPyJ7JDF9Iit0OiJbXSI9PT1uPyJbJDFdIit0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuK3QpfSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFRhKGUsIiIsKGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmIl4iPT09ZVswXT9lLnN1YnN0cigxKTpKU09OLnN0cmluZ2lmeShlKX0pKSt0fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlIm9iamVjdCI6cmV0dXJuIG51bGw9PT1lPyIkezE6bnVsbH0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KTtjYXNlInN0cmluZyI6dmFyIG49SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIG49bi5zdWJzdHIoMSxuLmxlbmd0aC0yKSwnIiR7MTonKyhuPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuKSkrJ30iJyt0O2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiIkezE6IitKU09OLnN0cmluZ2lmeShlKSsifSIrdH1yZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KX0sZS5wcm90b3R5cGUuZ2V0U3VnZ2VzdGlvbktpbmQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHQ9ZTtlPXQubGVuZ3RoPjA/dFswXTp2b2lkIDB9aWYoIWUpcmV0dXJuIHRvLlZhbHVlO3N3aXRjaChlKXtjYXNlInN0cmluZyI6ZGVmYXVsdDpyZXR1cm4gdG8uVmFsdWU7Y2FzZSJvYmplY3QiOnJldHVybiB0by5Nb2R1bGU7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIHRvLlByb3BlcnR5fX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIltdIjtjYXNlIm9iamVjdCI6cmV0dXJuInt9IjtkZWZhdWx0OnJldHVybiB0LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpfX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZT1mdW5jdGlvbihlLHQsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLG4pO2Nhc2Uib2JqZWN0IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30sbik7ZGVmYXVsdDp2YXIgcj10LmdldFRleHQoKS5zdWJzdHIoZS5vZmZzZXQsZS5sZW5ndGgpK247cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChyKX19LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLCIiKTtpZighbilyZXR1cm4gaTt2YXIgbyxhPWkrIjogIixzPTA7aWYodCl7aWYoQXJyYXkuaXNBcnJheSh0LmRlZmF1bHRTbmlwcGV0cykpe2lmKDE9PT10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGgpe3ZhciBsPXQuZGVmYXVsdFNuaXBwZXRzWzBdLmJvZHk7VWkobCkmJihvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZShsLCIiKSl9cys9dC5kZWZhdWx0U25pcHBldHMubGVuZ3RofWlmKHQuZW51bSYmKG98fDEhPT10LmVudW0ubGVuZ3RofHwobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5lbnVtWzBdLCIiKSkscys9dC5lbnVtLmxlbmd0aCksVWkodC5kZWZhdWx0KSYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmRlZmF1bHQsIiIpKSxzKyspLEFycmF5LmlzQXJyYXkodC5leGFtcGxlcykmJnQuZXhhbXBsZXMubGVuZ3RoJiYob3x8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZXhhbXBsZXNbMF0sIiIpKSxzKz10LmV4YW1wbGVzLmxlbmd0aCksMD09PXMpe3ZhciBjPUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGVbMF06dC50eXBlO3N3aXRjaChjfHwodC5wcm9wZXJ0aWVzP2M9Im9iamVjdCI6dC5pdGVtcyYmKGM9ImFycmF5IikpLGMpe2Nhc2UiYm9vbGVhbiI6bz0iJDEiO2JyZWFrO2Nhc2Uic3RyaW5nIjpvPSciJDEiJzticmVhaztjYXNlIm9iamVjdCI6bz0ieyQxfSI7YnJlYWs7Y2FzZSJhcnJheSI6bz0iWyQxXSI7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6bz0iJHsxOjB9IjticmVhaztjYXNlIm51bGwiOm89IiR7MTpudWxsfSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaX19fXJldHVybighb3x8cz4xKSYmKG89IiQxIiksYStvK3J9LGUucHJvdG90eXBlLmdldEN1cnJlbnRXb3JkPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQtMSxyPWUuZ2V0VGV4dCgpO24+PTAmJi0xPT09JyBcdFxuXHJcdiI6e1ssXX0nLmluZGV4T2Yoci5jaGFyQXQobikpOyluLS07cmV0dXJuIHIuc3Vic3RyaW5nKG4rMSx0KX0sZS5wcm90b3R5cGUuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcj1mdW5jdGlvbihlLHQpe3ZhciBuPUlpKGUuZ2V0VGV4dCgpLCEwKTtzd2l0Y2gobi5zZXRQb3NpdGlvbih0KSxuLnNjYW4oKSl7Y2FzZSA1OmNhc2UgMjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiIsIn19LGUucHJvdG90eXBlLmZpbmRJdGVtQXRPZmZzZXQ9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1JaSh0LmdldFRleHQoKSwhMCksaT1lLml0ZW1zLG89aS5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGE9aVtvXTtpZihuPmEub2Zmc2V0K2EubGVuZ3RoKXJldHVybiByLnNldFBvc2l0aW9uKGEub2Zmc2V0K2EubGVuZ3RoKSw1PT09ci5zY2FuKCkmJm4+PXIuZ2V0VG9rZW5PZmZzZXQoKStyLmdldFRva2VuTGVuZ3RoKCk/bysxOm87aWYobj49YS5vZmZzZXQpcmV0dXJuIG99cmV0dXJuIDB9LGUucHJvdG90eXBlLmlzSW5Db21tZW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1JaShlLmdldFRleHQoKSwhMSk7ci5zZXRQb3NpdGlvbih0KTtmb3IodmFyIGk9ci5zY2FuKCk7MTchPT1pJiZyLmdldFRva2VuT2Zmc2V0KCkrci5nZXRUb2tlbkxlbmd0aCgpPG47KWk9ci5zY2FuKCk7cmV0dXJuKDEyPT09aXx8MTM9PT1pKSYmci5nZXRUb2tlbk9mZnNldCgpPD1ufSxlLnByb3RvdHlwZS5mcm9tTWFya3VwPWZ1bmN0aW9uKGUpe2lmKGUmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXJldHVybntraW5kOllpLk1hcmtkb3duLHZhbHVlOmV9fSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydE1hcmtkb3duPWZ1bmN0aW9uKCl7aWYoIVVpKHRoaXMuc3VwcG9ydHNNYXJrZG93bikpe3ZhciBlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb247dGhpcy5zdXBwb3J0c01hcmtkb3duPWUmJmUuY29tcGxldGlvbkl0ZW0mJkFycmF5LmlzQXJyYXkoZS5jb21wbGV0aW9uSXRlbS5kb2N1bWVudGF0aW9uRm9ybWF0KSYmLTEhPT1lLmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQuaW5kZXhPZihZaS5NYXJrZG93bil9cmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bn0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz1mdW5jdGlvbigpe2lmKCFVaSh0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycykpe3ZhciBlPXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCYmdGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50LmNvbXBsZXRpb247dGhpcy5zdXBwb3J0c0NvbW1pdENoYXJhY3RlcnM9ZSYmZS5jb21wbGV0aW9uSXRlbSYmISFlLmNvbXBsZXRpb25JdGVtLmNvbW1pdENoYXJhY3RlcnNTdXBwb3J0fXJldHVybiB0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVyc30sZX0oKSxJYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2U9bnx8UHJvbWlzZX1yZXR1cm4gZS5wcm90b3R5cGUuZG9Ib3Zlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5vZmZzZXRBdCh0KSxpPW4uZ2V0Tm9kZUZyb21PZmZzZXQocik7aWYoIWl8fCgib2JqZWN0Ij09PWkudHlwZXx8ImFycmF5Ij09PWkudHlwZSkmJnI+aS5vZmZzZXQrMSYmcjxpLm9mZnNldCtpLmxlbmd0aC0xKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKTt2YXIgbz1pO2lmKCJzdHJpbmciPT09aS50eXBlKXt2YXIgYT1pLnBhcmVudDtpZihhJiYicHJvcGVydHkiPT09YS50eXBlJiZhLmtleU5vZGU9PT1pJiYhKGk9YS52YWx1ZU5vZGUpKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShudWxsKX1mb3IodmFyIHM9JHIuY3JlYXRlKGUucG9zaXRpb25BdChvLm9mZnNldCksZS5wb3NpdGlvbkF0KG8ub2Zmc2V0K28ubGVuZ3RoKSksbD1mdW5jdGlvbihlKXtyZXR1cm57Y29udGVudHM6ZSxyYW5nZTpzfX0sYz1FYShpKSx1PXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTt1Pj0wO3UtLSl7dmFyIGg9dGhpcy5jb250cmlidXRpb25zW3VdLmdldEluZm9Db250cmlidXRpb24oZS51cmksYyk7aWYoaClyZXR1cm4gaC50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbChlKX0pKX1yZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGUmJmkpe3ZhciB0PW4uZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hLGkub2Zmc2V0KSxyPXZvaWQgMCxvPXZvaWQgMCxhPXZvaWQgMCxzPXZvaWQgMDt0LmV2ZXJ5KChmdW5jdGlvbihlKXtpZihlLm5vZGU9PT1pJiYhZS5pbnZlcnRlZCYmZS5zY2hlbWEmJihyPXJ8fGUuc2NoZW1hLnRpdGxlLG89b3x8ZS5zY2hlbWEubWFya2Rvd25EZXNjcmlwdGlvbnx8UmEoZS5zY2hlbWEuZGVzY3JpcHRpb24pLGUuc2NoZW1hLmVudW0pKXt2YXIgdD1lLnNjaGVtYS5lbnVtLmluZGV4T2YoQWEoaSkpO2Uuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucz9hPWUuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1t0XTplLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zJiYoYT1SYShlLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zW3RdKSksYSYmInN0cmluZyIhPXR5cGVvZihzPWUuc2NoZW1hLmVudW1bdF0pJiYocz1KU09OLnN0cmluZ2lmeShzKSl9cmV0dXJuITB9KSk7dmFyIGM9IiI7cmV0dXJuIHImJihjPVJhKHIpKSxvJiYoYy5sZW5ndGg+MCYmKGMrPSJcblxuIiksYys9byksYSYmKGMubGVuZ3RoPjAmJihjKz0iXG5cbiIpLGMrPSJgIi5jb25jYXQoZnVuY3Rpb24oZSl7aWYoLTEhPT1lLmluZGV4T2YoImAiKSlyZXR1cm4iYGAgIitlKyIgYGAiO3JldHVybiBlfShzKSwiYDogIikuY29uY2F0KGEpKSxsKFtjXSl9cmV0dXJuIG51bGx9KSl9LGV9KCk7ZnVuY3Rpb24gUmEoZSl7aWYoZSlyZXR1cm4gZS5yZXBsYWNlKC8oW15cblxyXSkoXHI/XG4pKFteXG5ccl0pL2dtLCIkMVxuXG4kMyIpLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX12YXIgUGE9b2EoKSxGYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmpzb25TY2hlbWFTZXJ2aWNlPWUsdGhpcy5wcm9taXNlPXQsdGhpcy52YWxpZGF0aW9uRW5hYmxlZD0hMH1yZXR1cm4gZS5wcm90b3R5cGUuY29uZmlndXJlPWZ1bmN0aW9uKGUpe2UmJih0aGlzLnZhbGlkYXRpb25FbmFibGVkPSExIT09ZS52YWxpZGF0ZSx0aGlzLmNvbW1lbnRTZXZlcml0eT1lLmFsbG93Q29tbWVudHM/dm9pZCAwOmxpLkVycm9yKX0sZS5wcm90b3R5cGUuZG9WYWxpZGF0aW9uPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXM7aWYoIXRoaXMudmFsaWRhdGlvbkVuYWJsZWQpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKFtdKTt2YXIgbz1bXSxhPXt9LHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yYW5nZS5zdGFydC5saW5lKyIgIitlLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcisiICIrZS5tZXNzYWdlO2FbdF18fChhW3RdPSEwLG8ucHVzaChlKSl9LGw9ZnVuY3Rpb24ocil7dmFyIGE9KG51bGw9PW4/dm9pZCAwOm4udHJhaWxpbmdDb21tYXMpP1VhKG4udHJhaWxpbmdDb21tYXMpOmxpLkVycm9yLGw9KG51bGw9PW4/dm9pZCAwOm4uY29tbWVudHMpP1VhKG4uY29tbWVudHMpOmkuY29tbWVudFNldmVyaXR5LGM9KG51bGw9PW4/dm9pZCAwOm4uc2NoZW1hVmFsaWRhdGlvbik/VWEobi5zY2hlbWFWYWxpZGF0aW9uKTpsaS5XYXJuaW5nLHU9KG51bGw9PW4/dm9pZCAwOm4uc2NoZW1hUmVxdWVzdCk/VWEobi5zY2hlbWFSZXF1ZXN0KTpsaS5XYXJuaW5nO2lmKHIpe2lmKHIuZXJyb3JzLmxlbmd0aCYmdC5yb290JiZ1KXt2YXIgaD10LnJvb3QsZj0ib2JqZWN0Ij09PWgudHlwZT9oLnByb3BlcnRpZXNbMF06dm9pZCAwO2lmKGYmJiIkc2NoZW1hIj09PWYua2V5Tm9kZS52YWx1ZSl7dmFyIGQ9Zi52YWx1ZU5vZGV8fGYsbT0kci5jcmVhdGUoZS5wb3NpdGlvbkF0KGQub2Zmc2V0KSxlLnBvc2l0aW9uQXQoZC5vZmZzZXQrZC5sZW5ndGgpKTtzKGRpLmNyZWF0ZShtLHIuZXJyb3JzWzBdLHUsWG8uU2NoZW1hUmVzb2x2ZUVycm9yKSl9ZWxzZXttPSRyLmNyZWF0ZShlLnBvc2l0aW9uQXQoaC5vZmZzZXQpLGUucG9zaXRpb25BdChoLm9mZnNldCsxKSk7cyhkaS5jcmVhdGUobSxyLmVycm9yc1swXSx1LFhvLlNjaGVtYVJlc29sdmVFcnJvcikpfX1lbHNlIGlmKGMpe3ZhciBnPXQudmFsaWRhdGUoZSxyLnNjaGVtYSxjKTtnJiZnLmZvckVhY2gocyl9VmEoci5zY2hlbWEpJiYobD12b2lkIDApLEthKHIuc2NoZW1hKSYmKGE9dm9pZCAwKX1mb3IodmFyIHA9MCxiPXQuc3ludGF4RXJyb3JzO3A8Yi5sZW5ndGg7cCsrKXt2YXIgdj1iW3BdO2lmKHYuY29kZT09PVhvLlRyYWlsaW5nQ29tbWEpe2lmKCJudW1iZXIiIT10eXBlb2YgYSljb250aW51ZTt2LnNldmVyaXR5PWF9cyh2KX1pZigibnVtYmVyIj09dHlwZW9mIGwpe3ZhciB5PVBhKCJJbnZhbGlkQ29tbWVudFRva2VuIiwiQ29tbWVudHMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gSlNPTi4iKTt0LmNvbW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MoZGkuY3JlYXRlKGUseSxsLFhvLkNvbW1lbnROb3RQZXJtaXR0ZWQpKX0pKX1yZXR1cm4gb307aWYocil7dmFyIGM9ci5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC8iK0RhKys7cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShjLFtdLHIpLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSl9KSl9cmV0dXJuIHRoaXMuanNvblNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSl9KSl9LGUucHJvdG90eXBlLmdldExhbmd1YWdlU3RhdHVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3NjaGVtYXM6dGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2UoZS51cmksdCl9fSxlfSgpLERhPTA7ZnVuY3Rpb24gVmEoZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtpZihCaShlLmFsbG93Q29tbWVudHMpKXJldHVybiBlLmFsbG93Q29tbWVudHM7aWYoZS5hbGxPZilmb3IodmFyIHQ9MCxuPWUuYWxsT2Y7dDxuLmxlbmd0aDt0Kyspe3ZhciByPVZhKG5bdF0pO2lmKEJpKHIpKXJldHVybiByfX19ZnVuY3Rpb24gS2EoZSl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXtpZihCaShlLmFsbG93VHJhaWxpbmdDb21tYXMpKXJldHVybiBlLmFsbG93VHJhaWxpbmdDb21tYXM7dmFyIHQ9ZTtpZihCaSh0LmFsbG93c1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gdC5hbGxvd3NUcmFpbGluZ0NvbW1hcztpZihlLmFsbE9mKWZvcih2YXIgbj0wLHI9ZS5hbGxPZjtuPHIubGVuZ3RoO24rKyl7dmFyIGk9S2EocltuXSk7aWYoQmkoaSkpcmV0dXJuIGl9fX1mdW5jdGlvbiBVYShlKXtzd2l0Y2goZSl7Y2FzZSJlcnJvciI6cmV0dXJuIGxpLkVycm9yO2Nhc2Uid2FybmluZyI6cmV0dXJuIGxpLldhcm5pbmc7Y2FzZSJpZ25vcmUiOnJldHVybn19ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIGU8NDg/MDplPD01Nz9lLTQ4OihlPDk3JiYoZSs9MzIpLGU+PTk3JiZlPD0xMDI/ZS05NysxMDowKX1mdW5jdGlvbiBqYShlKXtpZigiIyI9PT1lWzBdKXN3aXRjaChlLmxlbmd0aCl7Y2FzZSA0OnJldHVybntyZWQ6MTcqQmEoZS5jaGFyQ29kZUF0KDEpKS8yNTUsZ3JlZW46MTcqQmEoZS5jaGFyQ29kZUF0KDIpKS8yNTUsYmx1ZToxNypCYShlLmNoYXJDb2RlQXQoMykpLzI1NSxhbHBoYToxfTtjYXNlIDU6cmV0dXJue3JlZDoxNypCYShlLmNoYXJDb2RlQXQoMSkpLzI1NSxncmVlbjoxNypCYShlLmNoYXJDb2RlQXQoMikpLzI1NSxibHVlOjE3KkJhKGUuY2hhckNvZGVBdCgzKSkvMjU1LGFscGhhOjE3KkJhKGUuY2hhckNvZGVBdCg0KSkvMjU1fTtjYXNlIDc6cmV0dXJue3JlZDooMTYqQmEoZS5jaGFyQ29kZUF0KDEpKStCYShlLmNoYXJDb2RlQXQoMikpKS8yNTUsZ3JlZW46KDE2KkJhKGUuY2hhckNvZGVBdCgzKSkrQmEoZS5jaGFyQ29kZUF0KDQpKSkvMjU1LGJsdWU6KDE2KkJhKGUuY2hhckNvZGVBdCg1KSkrQmEoZS5jaGFyQ29kZUF0KDYpKSkvMjU1LGFscGhhOjF9O2Nhc2UgOTpyZXR1cm57cmVkOigxNipCYShlLmNoYXJDb2RlQXQoMSkpK0JhKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjooMTYqQmEoZS5jaGFyQ29kZUF0KDMpKStCYShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZTooMTYqQmEoZS5jaGFyQ29kZUF0KDUpKStCYShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6KDE2KkJhKGUuY2hhckNvZGVBdCg3KSkrQmEoZS5jaGFyQ29kZUF0KDgpKSkvMjU1fX19dmFyIHFhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnNjaGVtYVNlcnZpY2U9ZX1yZXR1cm4gZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9scz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pO3ZhciBpPXQucm9vdDtpZighaSlyZXR1cm5bXTt2YXIgbz1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFLGE9ZS51cmk7aWYoKCJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiI9PT1hfHxqaShhLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJiJhcnJheSI9PT1pLnR5cGUpe2Zvcih2YXIgcz1bXSxsPTAsYz1pLml0ZW1zO2w8Yy5sZW5ndGg7bCsrKXt2YXIgdT1jW2xdO2lmKCJvYmplY3QiPT09dS50eXBlKWZvcih2YXIgaD0wLGY9dS5wcm9wZXJ0aWVzO2g8Zi5sZW5ndGg7aCsrKXt2YXIgZD1mW2hdO2lmKCJrZXkiPT09ZC5rZXlOb2RlLnZhbHVlJiZkLnZhbHVlTm9kZSl7dmFyIG09SHIuY3JlYXRlKGUudXJpLCRhKGUsdSkpO2lmKHMucHVzaCh7bmFtZTpBYShkLnZhbHVlTm9kZSksa2luZDp3by5GdW5jdGlvbixsb2NhdGlvbjptfSksLS1vPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksc319fXJldHVybiBzfWZvcih2YXIgZz1be25vZGU6aSxjb250YWluZXJOYW1lOiIifV0scD0wLGI9ITEsdj1bXSx5PWZ1bmN0aW9uKHQsbil7ImFycmF5Ij09PXQudHlwZT90Lml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UmJmcucHVzaCh7bm9kZTplLGNvbnRhaW5lck5hbWU6bn0pfSkpOiJvYmplY3QiPT09dC50eXBlJiZ0LnByb3BlcnRpZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dC52YWx1ZU5vZGU7aWYoaSlpZihvPjApe28tLTt2YXIgYT1Ici5jcmVhdGUoZS51cmksJGEoZSx0KSkscz1uP24rIi4iK3Qua2V5Tm9kZS52YWx1ZTp0LmtleU5vZGUudmFsdWU7di5wdXNoKHtuYW1lOnIuZ2V0S2V5TGFiZWwodCksa2luZDpyLmdldFN5bWJvbEtpbmQoaS50eXBlKSxsb2NhdGlvbjphLGNvbnRhaW5lck5hbWU6bn0pLGcucHVzaCh7bm9kZTppLGNvbnRhaW5lck5hbWU6c30pfWVsc2UgYj0hMH0pKX07cDxnLmxlbmd0aDspe3ZhciBDPWdbcCsrXTt5KEMubm9kZSxDLmNvbnRhaW5lck5hbWUpfXJldHVybiBiJiZuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoYSksdn0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9sczI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KTt2YXIgaT10LnJvb3Q7aWYoIWkpcmV0dXJuW107dmFyIG89bi5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxhPWUudXJpO2lmKCgidnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24iPT09YXx8amkoYS50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiYiYXJyYXkiPT09aS50eXBlKXtmb3IodmFyIHM9W10sbD0wLGM9aS5pdGVtcztsPGMubGVuZ3RoO2wrKyl7dmFyIHU9Y1tsXTtpZigib2JqZWN0Ij09PXUudHlwZSlmb3IodmFyIGg9MCxmPXUucHJvcGVydGllcztoPGYubGVuZ3RoO2grKyl7dmFyIGQ9ZltoXTtpZigia2V5Ij09PWQua2V5Tm9kZS52YWx1ZSYmZC52YWx1ZU5vZGUpe3ZhciBtPSRhKGUsdSksZz0kYShlLGQua2V5Tm9kZSk7aWYocy5wdXNoKHtuYW1lOkFhKGQudmFsdWVOb2RlKSxraW5kOndvLkZ1bmN0aW9uLHJhbmdlOm0sc2VsZWN0aW9uUmFuZ2U6Z30pLC0tbzw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKGEpLHN9fX1yZXR1cm4gc31mb3IodmFyIHA9W10sYj1be25vZGU6aSxyZXN1bHQ6cH1dLHY9MCx5PSExLEM9ZnVuY3Rpb24odCxuKXsiYXJyYXkiPT09dC50eXBlP3QuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtpZih0KWlmKG8+MCl7by0tO3ZhciBhPSRhKGUsdCkscz1hLGw9e25hbWU6U3RyaW5nKGkpLGtpbmQ6ci5nZXRTeW1ib2xLaW5kKHQudHlwZSkscmFuZ2U6YSxzZWxlY3Rpb25SYW5nZTpzLGNoaWxkcmVuOltdfTtuLnB1c2gobCksYi5wdXNoKHtyZXN1bHQ6bC5jaGlsZHJlbixub2RlOnR9KX1lbHNlIHk9ITB9KSk6Im9iamVjdCI9PT10LnR5cGUmJnQucHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LnZhbHVlTm9kZTtpZihpKWlmKG8+MCl7by0tO3ZhciBhPSRhKGUsdCkscz0kYShlLHQua2V5Tm9kZSksbD1bXSxjPXtuYW1lOnIuZ2V0S2V5TGFiZWwodCksa2luZDpyLmdldFN5bWJvbEtpbmQoaS50eXBlKSxyYW5nZTphLHNlbGVjdGlvblJhbmdlOnMsY2hpbGRyZW46bCxkZXRhaWw6ci5nZXREZXRhaWwoaSl9O24ucHVzaChjKSxiLnB1c2goe3Jlc3VsdDpsLG5vZGU6aX0pfWVsc2UgeT0hMH0pKX07djxiLmxlbmd0aDspe3ZhciB3PWJbdisrXTtDKHcubm9kZSx3LnJlc3VsdCl9cmV0dXJuIHkmJm4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChhKSxwfSxlLnByb3RvdHlwZS5nZXRTeW1ib2xLaW5kPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIm9iamVjdCI6cmV0dXJuIHdvLk1vZHVsZTtjYXNlInN0cmluZyI6cmV0dXJuIHdvLlN0cmluZztjYXNlIm51bWJlciI6cmV0dXJuIHdvLk51bWJlcjtjYXNlImFycmF5IjpyZXR1cm4gd28uQXJyYXk7Y2FzZSJib29sZWFuIjpyZXR1cm4gd28uQm9vbGVhbjtkZWZhdWx0OnJldHVybiB3by5WYXJpYWJsZX19LGUucHJvdG90eXBlLmdldEtleUxhYmVsPWZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Tm9kZS52YWx1ZTtyZXR1cm4gdCYmKHQ9dC5yZXBsYWNlKC9bXG5dL2csIuKGtSIpKSx0JiZ0LnRyaW0oKT90OiciJy5jb25jYXQodCwnIicpfSxlLnByb3RvdHlwZS5nZXREZXRhaWw9ZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4iYm9vbGVhbiI9PT1lLnR5cGV8fCJudW1iZXIiPT09ZS50eXBlfHwibnVsbCI9PT1lLnR5cGV8fCJzdHJpbmciPT09ZS50eXBlP1N0cmluZyhlLnZhbHVlKToiYXJyYXkiPT09ZS50eXBlP2UuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoiW10iOiJvYmplY3QiPT09ZS50eXBlP2UuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoie30iOnZvaWQgMH0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50Q29sb3JzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKHIpe3ZhciBpPVtdO2lmKHIpZm9yKHZhciBvPW4mJiJudW1iZXIiPT10eXBlb2Ygbi5yZXN1bHRMaW1pdD9uLnJlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUUsYT17fSxzPTAsbD10LmdldE1hdGNoaW5nU2NoZW1hcyhyLnNjaGVtYSk7czxsLmxlbmd0aDtzKyspe3ZhciBjPWxbc107aWYoIWMuaW52ZXJ0ZWQmJmMuc2NoZW1hJiYoImNvbG9yIj09PWMuc2NoZW1hLmZvcm1hdHx8ImNvbG9yLWhleCI9PT1jLnNjaGVtYS5mb3JtYXQpJiZjLm5vZGUmJiJzdHJpbmciPT09Yy5ub2RlLnR5cGUpe3ZhciB1PVN0cmluZyhjLm5vZGUub2Zmc2V0KTtpZighYVt1XSl7dmFyIGg9amEoQWEoYy5ub2RlKSk7aWYoaCl7dmFyIGY9JGEoZSxjLm5vZGUpO2kucHVzaCh7Y29sb3I6aCxyYW5nZTpmfSl9aWYoYVt1XT0hMCwtLW88PTApcmV0dXJuIG4mJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZChlLnVyaSksaX19fXJldHVybiBpfSkpfSxlLnByb3RvdHlwZS5nZXRDb2xvclByZXNlbnRhdGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1bXSxhPU1hdGgucm91bmQoMjU1Km4ucmVkKSxzPU1hdGgucm91bmQoMjU1Km4uZ3JlZW4pLGw9TWF0aC5yb3VuZCgyNTUqbi5ibHVlKTtmdW5jdGlvbiBjKGUpe3ZhciB0PWUudG9TdHJpbmcoMTYpO3JldHVybiAyIT09dC5sZW5ndGg/IjAiK3Q6dH1yZXR1cm4gaT0xPT09bi5hbHBoYT8iIyIuY29uY2F0KGMoYSkpLmNvbmNhdChjKHMpKS5jb25jYXQoYyhsKSk6IiMiLmNvbmNhdChjKGEpKS5jb25jYXQoYyhzKSkuY29uY2F0KGMobCkpLmNvbmNhdChjKE1hdGgucm91bmQoMjU1Km4uYWxwaGEpKSksby5wdXNoKHtsYWJlbDppLHRleHRFZGl0OmJpLnJlcGxhY2UocixKU09OLnN0cmluZ2lmeShpKSl9KSxvfSxlfSgpO2Z1bmN0aW9uICRhKGUsdCl7cmV0dXJuICRyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpfXZhciBXYSxIYSx6YSxHYSxKYSxYYSxaYT1vYSgpLFlhPXtzY2hlbWFBc3NvY2lhdGlvbnM6W10sc2NoZW1hczp7Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hIyI6eyRyZWY6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyJ9LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiOnskc2NoZW1hOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiLGRlZmluaXRpb25zOntzY2hlbWFBcnJheTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsaXRlbXM6eyRyZWY6IiMifX0scG9zaXRpdmVJbnRlZ2VyOnt0eXBlOiJpbnRlZ2VyIixtaW5pbXVtOjB9LHBvc2l0aXZlSW50ZWdlckRlZmF1bHQwOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn0se2RlZmF1bHQ6MH1dfSxzaW1wbGVUeXBlczp7dHlwZToic3RyaW5nIixlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH19LHR5cGU6Im9iamVjdCIscHJvcGVydGllczp7aWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkc2NoZW1hOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sdGl0bGU6e3R5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0eXBlOiJzdHJpbmcifSxkZWZhdWx0Ont9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsbWluaW11bTowLGV4Y2x1c2l2ZU1pbmltdW06ITB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1heExlbmd0aDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluTGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHBhdHRlcm46e3R5cGU6InN0cmluZyIsZm9ybWF0OiJyZWdleCJ9LGFkZGl0aW9uYWxJdGVtczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6e319LG1heEl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5JdGVtczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4UHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluUHJvcGVydGllczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSxyZXF1aXJlZDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfSxhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3t0eXBlOiJib29sZWFuIn0seyRyZWY6IiMifV0sZGVmYXVsdDp7fX0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxkZXBlbmRlbmNpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfX0sZW51bTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7YW55T2Y6W3t0eXBlOiJzdHJpbmciLGVudW06WyJkYXRlLXRpbWUiLCJ1cmkiLCJlbWFpbCIsImhvc3RuYW1lIiwiaXB2NCIsImlwdjYiLCJyZWdleCJdfSx7dHlwZToic3RyaW5nIn1dfSxhbGxPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxhbnlPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxvbmVPZjp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dfSxub3Q6e2FsbE9mOlt7JHJlZjoiIyJ9XX19LGRlcGVuZGVuY2llczp7ZXhjbHVzaXZlTWF4aW11bTpbIm1heGltdW0iXSxleGNsdXNpdmVNaW5pbXVtOlsibWluaW11bSJdfSxkZWZhdWx0Ont9fSwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIjp7ZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxub25OZWdhdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0sbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOntlbnVtOlsiYXJyYXkiLCJib29sZWFuIiwiaW50ZWdlciIsIm51bGwiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciXX0sc3RyaW5nQXJyYXk6e3R5cGU6ImFycmF5IixpdGVtczp7dHlwZToic3RyaW5nIn0sdW5pcXVlSXRlbXM6ITAsZGVmYXVsdDpbXX19LHR5cGU6WyJvYmplY3QiLCJib29sZWFuIl0scHJvcGVydGllczp7JGlkOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSwkcmVmOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpLXJlZmVyZW5jZSJ9LCRjb21tZW50Ont0eXBlOiJzdHJpbmcifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6ITAscmVhZE9ubHk6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGV4YW1wbGVzOnt0eXBlOiJhcnJheSIsaXRlbXM6ITB9LG11bHRpcGxlT2Y6e3R5cGU6Im51bWJlciIsZXhjbHVzaXZlTWluaW11bTowfSxtYXhpbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNYXhpbXVtOnt0eXBlOiJudW1iZXIifSxtaW5pbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0eXBlOiJudW1iZXIifSxtYXhMZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluTGVuZ3RoOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnskcmVmOiIjIn0saXRlbXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In1dLGRlZmF1bHQ6ITB9LG1heEl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pbkl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0sdW5pcXVlSXRlbXM6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGNvbnRhaW5zOnskcmVmOiIjIn0sbWF4UHJvcGVydGllczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5Qcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwIn0scmVxdWlyZWQ6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifSxhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmluaXRpb25zOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHBhdHRlcm5Qcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0scHJvcGVydHlOYW1lczp7Zm9ybWF0OiJyZWdleCJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxwcm9wZXJ0eU5hbWVzOnskcmVmOiIjIn0sY29uc3Q6ITAsZW51bTp7dHlwZToiYXJyYXkiLGl0ZW1zOiEwLG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9LHR5cGU6e2FueU9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LHt0eXBlOiJhcnJheSIsaXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfV19LGZvcm1hdDp7dHlwZToic3RyaW5nIn0sY29udGVudE1lZGlhVHlwZTp7dHlwZToic3RyaW5nIn0sY29udGVudEVuY29kaW5nOnt0eXBlOiJzdHJpbmcifSxpZjp7JHJlZjoiIyJ9LHRoZW46eyRyZWY6IiMifSxlbHNlOnskcmVmOiIjIn0sYWxsT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxhbnlPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LG9uZU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sbm90OnskcmVmOiIjIn19LGRlZmF1bHQ6ITB9fX0sUWE9e2lkOlphKCJzY2hlbWEuanNvbi5pZCIsIkEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzY2hlbWEuIiksJHNjaGVtYTpaYSgic2NoZW1hLmpzb24uJHNjaGVtYSIsIlRoZSBzY2hlbWEgdG8gdmVyaWZ5IHRoaXMgZG9jdW1lbnQgYWdhaW5zdC4iKSx0aXRsZTpaYSgic2NoZW1hLmpzb24udGl0bGUiLCJBIGRlc2NyaXB0aXZlIHRpdGxlIG9mIHRoZSBlbGVtZW50LiIpLGRlc2NyaXB0aW9uOlphKCJzY2hlbWEuanNvbi5kZXNjcmlwdGlvbiIsIkEgbG9uZyBkZXNjcmlwdGlvbiBvZiB0aGUgZWxlbWVudC4gVXNlZCBpbiBob3ZlciBtZW51cyBhbmQgc3VnZ2VzdGlvbnMuIiksZGVmYXVsdDpaYSgic2NoZW1hLmpzb24uZGVmYXVsdCIsIkEgZGVmYXVsdCB2YWx1ZS4gVXNlZCBieSBzdWdnZXN0aW9ucy4iKSxtdWx0aXBsZU9mOlphKCJzY2hlbWEuanNvbi5tdWx0aXBsZU9mIiwiQSBudW1iZXIgdGhhdCBzaG91bGQgY2xlYW5seSBkaXZpZGUgdGhlIGN1cnJlbnQgdmFsdWUgKGkuZS4gaGF2ZSBubyByZW1haW5kZXIpLiIpLG1heGltdW06WmEoInNjaGVtYS5qc29uLm1heGltdW0iLCJUaGUgbWF4aW11bSBudW1lcmljYWwgdmFsdWUsIGluY2x1c2l2ZSBieSBkZWZhdWx0LiIpLGV4Y2x1c2l2ZU1heGltdW06WmEoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1heGltdW0iLCJNYWtlcyB0aGUgbWF4aW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWluaW11bTpaYSgic2NoZW1hLmpzb24ubWluaW11bSIsIlRoZSBtaW5pbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWluaW11bTpaYSgic2NoZW1hLmpzb24uZXhjbHVzaXZlTWluaW51bSIsIk1ha2VzIHRoZSBtaW5pbXVtIHByb3BlcnR5IGV4Y2x1c2l2ZS4iKSxtYXhMZW5ndGg6WmEoInNjaGVtYS5qc29uLm1heExlbmd0aCIsIlRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxtaW5MZW5ndGg6WmEoInNjaGVtYS5qc29uLm1pbkxlbmd0aCIsIlRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxwYXR0ZXJuOlphKCJzY2hlbWEuanNvbi5wYXR0ZXJuIiwiQSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIHN0cmluZyBhZ2FpbnN0LiBJdCBpcyBub3QgaW1wbGljaXRseSBhbmNob3JlZC4iKSxhZGRpdGlvbmFsSXRlbXM6WmEoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxJdGVtcyIsIkZvciBhcnJheXMsIG9ubHkgd2hlbiBpdGVtcyBpcyBzZXQgYXMgYW4gYXJyYXkuIElmIGl0IGlzIGEgc2NoZW1hLCB0aGVuIHRoaXMgc2NoZW1hIHZhbGlkYXRlcyBpdGVtcyBhZnRlciB0aGUgb25lcyBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1zIGFycmF5LiBJZiBpdCBpcyBmYWxzZSwgdGhlbiBhZGRpdGlvbmFsIGl0ZW1zIHdpbGwgY2F1c2UgdmFsaWRhdGlvbiB0byBmYWlsLiIpLGl0ZW1zOlphKCJzY2hlbWEuanNvbi5pdGVtcyIsIkZvciBhcnJheXMuIENhbiBlaXRoZXIgYmUgYSBzY2hlbWEgdG8gdmFsaWRhdGUgZXZlcnkgZWxlbWVudCBhZ2FpbnN0IG9yIGFuIGFycmF5IG9mIHNjaGVtYXMgdG8gdmFsaWRhdGUgZWFjaCBpdGVtIGFnYWluc3QgaW4gb3JkZXIgKHRoZSBmaXJzdCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIHNlY29uZCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi4iKSxtYXhJdGVtczpaYSgic2NoZW1hLmpzb24ubWF4SXRlbXMiLCJUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksbWluSXRlbXM6WmEoInNjaGVtYS5qc29uLm1pbkl0ZW1zIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLHVuaXF1ZUl0ZW1zOlphKCJzY2hlbWEuanNvbi51bmlxdWVJdGVtcyIsIklmIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IG11c3QgYmUgdW5pcXVlLiBEZWZhdWx0cyB0byBmYWxzZS4iKSxtYXhQcm9wZXJ0aWVzOlphKCJzY2hlbWEuanNvbi5tYXhQcm9wZXJ0aWVzIiwiVGhlIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIiksbWluUHJvcGVydGllczpaYSgic2NoZW1hLmpzb24ubWluUHJvcGVydGllcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLHJlcXVpcmVkOlphKCJzY2hlbWEuanNvbi5yZXF1aXJlZCIsIkFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgcmVxdWlyZWQgb24gdGhpcyBvYmplY3QuIiksYWRkaXRpb25hbFByb3BlcnRpZXM6WmEoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiRWl0aGVyIGEgc2NoZW1hIG9yIGEgYm9vbGVhbi4gSWYgYSBzY2hlbWEsIHRoZW4gdXNlZCB0byB2YWxpZGF0ZSBhbGwgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSAncHJvcGVydGllcycgb3IgJ3BhdHRlcm5Qcm9wZXJ0aWVzJy4gSWYgZmFsc2UsIHRoZW4gYW55IHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgZWl0aGVyIHdpbGwgY2F1c2UgdGhpcyBzY2hlbWEgdG8gZmFpbC4iKSxkZWZpbml0aW9uczpaYSgic2NoZW1hLmpzb24uZGVmaW5pdGlvbnMiLCJOb3QgdXNlZCBmb3IgdmFsaWRhdGlvbi4gUGxhY2Ugc3Vic2NoZW1hcyBoZXJlIHRoYXQgeW91IHdpc2ggdG8gcmVmZXJlbmNlIGlubGluZSB3aXRoICRyZWYuIikscHJvcGVydGllczpaYSgic2NoZW1hLmpzb24ucHJvcGVydGllcyIsIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIGVhY2ggcHJvcGVydHkuIikscGF0dGVyblByb3BlcnRpZXM6WmEoInNjaGVtYS5qc29uLnBhdHRlcm5Qcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcmVndWxhciBleHByZXNzaW9ucyBvbiBwcm9wZXJ0eSBuYW1lcyB0byBzY2hlbWFzIGZvciBtYXRjaGluZyBwcm9wZXJ0aWVzLiIpLGRlcGVuZGVuY2llczpaYSgic2NoZW1hLmpzb24uZGVwZW5kZW5jaWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gZWl0aGVyIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG9yIGEgc2NoZW1hLiBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBtZWFucyB0aGUgcHJvcGVydHkgbmFtZWQgaW4gdGhlIGtleSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheSBiZWluZyBwcmVzZW50IGluIHRoZSBvYmplY3QgaW4gb3JkZXIgdG8gYmUgdmFsaWQuIElmIHRoZSB2YWx1ZSBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgc2NoZW1hIGlzIG9ubHkgYXBwbGllZCB0byB0aGUgb2JqZWN0IGlmIHRoZSBwcm9wZXJ0eSBpbiB0aGUga2V5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LiIpLGVudW06WmEoInNjaGVtYS5qc29uLmVudW0iLCJUaGUgc2V0IG9mIGxpdGVyYWwgdmFsdWVzIHRoYXQgYXJlIHZhbGlkLiIpLHR5cGU6WmEoInNjaGVtYS5qc29uLnR5cGUiLCJFaXRoZXIgYSBzdHJpbmcgb2Ygb25lIG9mIHRoZSBiYXNpYyBzY2hlbWEgdHlwZXMgKG51bWJlciwgaW50ZWdlciwgbnVsbCwgYXJyYXksIG9iamVjdCwgYm9vbGVhbiwgc3RyaW5nKSBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHNwZWNpZnlpbmcgYSBzdWJzZXQgb2YgdGhvc2UgdHlwZXMuIiksZm9ybWF0OlphKCJzY2hlbWEuanNvbi5mb3JtYXQiLCJEZXNjcmliZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgdGhlIHZhbHVlLiIpLGFsbE9mOlphKCJzY2hlbWEuanNvbi5hbGxPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGFsbCBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLGFueU9mOlphKCJzY2hlbWEuanNvbi5hbnlPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIHdoZXJlIGF0IGxlYXN0IG9uZSBtdXN0IG1hdGNoLiIpLG9uZU9mOlphKCJzY2hlbWEuanNvbi5vbmVPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGV4YWN0bHkgb25lIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksbm90OlphKCJzY2hlbWEuanNvbi5ub3QiLCJBIHNjaGVtYSB3aGljaCBtdXN0IG5vdCBtYXRjaC4iKSwkaWQ6WmEoInNjaGVtYS5qc29uLiRpZCIsIkEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzY2hlbWEuIiksJHJlZjpaYSgic2NoZW1hLmpzb24uJHJlZiIsIlJlZmVyZW5jZSBhIGRlZmluaXRpb24gaG9zdGVkIG9uIGFueSBsb2NhdGlvbi4iKSwkY29tbWVudDpaYSgic2NoZW1hLmpzb24uJGNvbW1lbnQiLCJDb21tZW50cyBmcm9tIHNjaGVtYSBhdXRob3JzIHRvIHJlYWRlcnMgb3IgbWFpbnRhaW5lcnMgb2YgdGhlIHNjaGVtYS4iKSxyZWFkT25seTpaYSgic2NoZW1hLmpzb24ucmVhZE9ubHkiLCJJbmRpY2F0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGluc3RhbmNlIGlzIG1hbmFnZWQgZXhjbHVzaXZlbHkgYnkgdGhlIG93bmluZyBhdXRob3JpdHkuIiksZXhhbXBsZXM6WmEoInNjaGVtYS5qc29uLmV4YW1wbGVzIiwiU2FtcGxlIEpTT04gdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NoZW1hLCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWxsdXN0cmF0aW5nIHVzYWdlLiIpLGNvbnRhaW5zOlphKCJzY2hlbWEuanNvbi5jb250YWlucyIsJ0FuIGFycmF5IGluc3RhbmNlIGlzIHZhbGlkIGFnYWluc3QgImNvbnRhaW5zIiBpZiBhdCBsZWFzdCBvbmUgb2YgaXRzIGVsZW1lbnRzIGlzIHZhbGlkIGFnYWluc3QgdGhlIGdpdmVuIHNjaGVtYS4nKSxwcm9wZXJ0eU5hbWVzOlphKCJzY2hlbWEuanNvbi5wcm9wZXJ0eU5hbWVzIiwiSWYgdGhlIGluc3RhbmNlIGlzIGFuIG9iamVjdCwgdGhpcyBrZXl3b3JkIHZhbGlkYXRlcyBpZiBldmVyeSBwcm9wZXJ0eSBuYW1lIGluIHRoZSBpbnN0YW5jZSB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgcHJvdmlkZWQgc2NoZW1hLiIpLGNvbnN0OlphKCJzY2hlbWEuanNvbi5jb25zdCIsIkFuIGluc3RhbmNlIHZhbGlkYXRlcyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGlzIGtleXdvcmQgaWYgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUga2V5d29yZC4iKSxjb250ZW50TWVkaWFUeXBlOlphKCJzY2hlbWEuanNvbi5jb250ZW50TWVkaWFUeXBlIiwiRGVzY3JpYmVzIHRoZSBtZWRpYSB0eXBlIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGNvbnRlbnRFbmNvZGluZzpaYSgic2NoZW1hLmpzb24uY29udGVudEVuY29kaW5nIiwiRGVzY3JpYmVzIHRoZSBjb250ZW50IGVuY29kaW5nIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGlmOlphKCJzY2hlbWEuanNvbi5pZiIsJ1RoZSB2YWxpZGF0aW9uIG91dGNvbWUgb2YgdGhlICJpZiIgc3Vic2NoZW1hIGNvbnRyb2xzIHdoaWNoIG9mIHRoZSAidGhlbiIgb3IgImVsc2UiIGtleXdvcmRzIGFyZSBldmFsdWF0ZWQuJyksdGhlbjpaYSgic2NoZW1hLmpzb24udGhlbiIsJ1RoZSAiaWYiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIHN1Y2NlZWRzLicpLGVsc2U6WmEoInNjaGVtYS5qc29uLmVsc2UiLCdUaGUgImVsc2UiIHN1YnNjaGVtYSBpcyB1c2VkIGZvciB2YWxpZGF0aW9uIHdoZW4gdGhlICJpZiIgc3Vic2NoZW1hIGZhaWxzLicpfTtmb3IoSmEgaW4gWWEuc2NoZW1hcylmb3IoR2EgaW4oV2E9WWEuc2NoZW1hc1tKYV0pLnByb3BlcnRpZXMpImJvb2xlYW4iPT10eXBlb2YoSGE9V2EucHJvcGVydGllc1tHYV0pJiYoSGE9V2EucHJvcGVydGllc1tHYV09e30pLCh6YT1RYVtHYV0pP0hhLmRlc2NyaXB0aW9uPXphOmNvbnNvbGUubG9nKCIiLmNvbmNhdChHYSwiOiBsb2NhbGl6ZSgnc2NoZW1hLmpzb24uIikuY29uY2F0KEdhLCdcJywgIiIpJykpO1hhPSgoKT0+e3ZhciBlPXs0NzA6ZT0+e2Z1bmN0aW9uIHQoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeShlKSl9ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbixyPSIiLGk9MCxvPS0xLGE9MCxzPTA7czw9ZS5sZW5ndGg7KytzKXtpZihzPGUubGVuZ3RoKW49ZS5jaGFyQ29kZUF0KHMpO2Vsc2V7aWYoNDc9PT1uKWJyZWFrO249NDd9aWYoNDc9PT1uKXtpZihvPT09cy0xfHwxPT09YSk7ZWxzZSBpZihvIT09cy0xJiYyPT09YSl7aWYoci5sZW5ndGg8Mnx8MiE9PWl8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSlpZihyLmxlbmd0aD4yKXt2YXIgbD1yLmxhc3RJbmRleE9mKCIvIik7aWYobCE9PXIubGVuZ3RoLTEpey0xPT09bD8ocj0iIixpPTApOmk9KHI9ci5zbGljZSgwLGwpKS5sZW5ndGgtMS1yLmxhc3RJbmRleE9mKCIvIiksbz1zLGE9MDtjb250aW51ZX19ZWxzZSBpZigyPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aCl7cj0iIixpPTAsbz1zLGE9MDtjb250aW51ZX10JiYoci5sZW5ndGg+MD9yKz0iLy4uIjpyPSIuLiIsaT0yKX1lbHNlIHIubGVuZ3RoPjA/cis9Ii8iK2Uuc2xpY2UobysxLHMpOnI9ZS5zbGljZShvKzEscyksaT1zLW8tMTtvPXMsYT0wfWVsc2UgNDY9PT1uJiYtMSE9PWE/KythOmE9LTF9cmV0dXJuIHJ9dmFyIHI9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGUscj0iIixpPSExLG89YXJndW1lbnRzLmxlbmd0aC0xO28+PS0xJiYhaTtvLS0pe3ZhciBhO28+PTA/YT1hcmd1bWVudHNbb106KHZvaWQgMD09PWUmJihlPXByb2Nlc3MuY3dkKCkpLGE9ZSksdChhKSwwIT09YS5sZW5ndGgmJihyPWErIi8iK3IsaT00Nz09PWEuY2hhckNvZGVBdCgwKSl9cmV0dXJuIHI9bihyLCFpKSxpP3IubGVuZ3RoPjA/Ii8iK3I6Ii8iOnIubGVuZ3RoPjA/cjoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihlKXtpZih0KGUpLDA9PT1lLmxlbmd0aClyZXR1cm4iLiI7dmFyIHI9NDc9PT1lLmNoYXJDb2RlQXQoMCksaT00Nz09PWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtyZXR1cm4gMCE9PShlPW4oZSwhcikpLmxlbmd0aHx8cnx8KGU9Ii4iKSxlLmxlbmd0aD4wJiZpJiYoZSs9Ii8iKSxyPyIvIitlOmV9LGlzQWJzb2x1dGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSksZS5sZW5ndGg+MCYmNDc9PT1lLmNoYXJDb2RlQXQoMCl9LGpvaW46ZnVuY3Rpb24oKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBlLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7KytuKXt2YXIgaT1hcmd1bWVudHNbbl07dChpKSxpLmxlbmd0aD4wJiYodm9pZCAwPT09ZT9lPWk6ZSs9Ii8iK2kpfXJldHVybiB2b2lkIDA9PT1lPyIuIjpyLm5vcm1hbGl6ZShlKX0scmVsYXRpdmU6ZnVuY3Rpb24oZSxuKXtpZih0KGUpLHQobiksZT09PW4pcmV0dXJuIiI7aWYoKGU9ci5yZXNvbHZlKGUpKT09PShuPXIucmVzb2x2ZShuKSkpcmV0dXJuIiI7Zm9yKHZhciBpPTE7aTxlLmxlbmd0aCYmNDc9PT1lLmNoYXJDb2RlQXQoaSk7KytpKTtmb3IodmFyIG89ZS5sZW5ndGgsYT1vLWkscz0xO3M8bi5sZW5ndGgmJjQ3PT09bi5jaGFyQ29kZUF0KHMpOysrcyk7Zm9yKHZhciBsPW4ubGVuZ3RoLXMsYz1hPGw/YTpsLHU9LTEsaD0wO2g8PWM7KytoKXtpZihoPT09Yyl7aWYobD5jKXtpZig0Nz09PW4uY2hhckNvZGVBdChzK2gpKXJldHVybiBuLnNsaWNlKHMraCsxKTtpZigwPT09aClyZXR1cm4gbi5zbGljZShzK2gpfWVsc2UgYT5jJiYoNDc9PT1lLmNoYXJDb2RlQXQoaStoKT91PWg6MD09PWgmJih1PTApKTticmVha312YXIgZj1lLmNoYXJDb2RlQXQoaStoKTtpZihmIT09bi5jaGFyQ29kZUF0KHMraCkpYnJlYWs7NDc9PT1mJiYodT1oKX12YXIgZD0iIjtmb3IoaD1pK3UrMTtoPD1vOysraCloIT09byYmNDchPT1lLmNoYXJDb2RlQXQoaCl8fCgwPT09ZC5sZW5ndGg/ZCs9Ii4uIjpkKz0iLy4uIik7cmV0dXJuIGQubGVuZ3RoPjA/ZCtuLnNsaWNlKHMrdSk6KHMrPXUsNDc9PT1uLmNoYXJDb2RlQXQocykmJisrcyxuLnNsaWNlKHMpKX0sX21ha2VMb25nOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxkaXJuYW1lOmZ1bmN0aW9uKGUpe2lmKHQoZSksMD09PWUubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIG49ZS5jaGFyQ29kZUF0KDApLHI9NDc9PT1uLGk9LTEsbz0hMCxhPWUubGVuZ3RoLTE7YT49MTstLWEpaWYoNDc9PT0obj1lLmNoYXJDb2RlQXQoYSkpKXtpZighbyl7aT1hO2JyZWFrfX1lbHNlIG89ITE7cmV0dXJuLTE9PT1pP3I/Ii8iOiIuIjpyJiYxPT09aT8iLy8iOmUuc2xpY2UoMCxpKX0sYmFzZW5hbWU6ZnVuY3Rpb24oZSxuKXtpZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO3QoZSk7dmFyIHIsaT0wLG89LTEsYT0hMDtpZih2b2lkIDAhPT1uJiZuLmxlbmd0aD4wJiZuLmxlbmd0aDw9ZS5sZW5ndGgpe2lmKG4ubGVuZ3RoPT09ZS5sZW5ndGgmJm49PT1lKXJldHVybiIiO3ZhciBzPW4ubGVuZ3RoLTEsbD0tMTtmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgYz1lLmNoYXJDb2RlQXQocik7aWYoNDc9PT1jKXtpZighYSl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PWwmJihhPSExLGw9cisxKSxzPj0wJiYoYz09PW4uY2hhckNvZGVBdChzKT8tMT09LS1zJiYobz1yKToocz0tMSxvPWwpKX1yZXR1cm4gaT09PW8/bz1sOi0xPT09byYmKG89ZS5sZW5ndGgpLGUuc2xpY2UoaSxvKX1mb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWlmKDQ3PT09ZS5jaGFyQ29kZUF0KHIpKXtpZighYSl7aT1yKzE7YnJlYWt9fWVsc2UtMT09PW8mJihhPSExLG89cisxKTtyZXR1cm4tMT09PW8/IiI6ZS5zbGljZShpLG8pfSxleHRuYW1lOmZ1bmN0aW9uKGUpe3QoZSk7Zm9yKHZhciBuPS0xLHI9MCxpPS0xLG89ITAsYT0wLHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7dmFyIGw9ZS5jaGFyQ29kZUF0KHMpO2lmKDQ3IT09bCktMT09PWkmJihvPSExLGk9cysxKSw0Nj09PWw/LTE9PT1uP249czoxIT09YSYmKGE9MSk6LTEhPT1uJiYoYT0tMSk7ZWxzZSBpZighbyl7cj1zKzE7YnJlYWt9fXJldHVybi0xPT09bnx8LTE9PT1pfHwwPT09YXx8MT09PWEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7cmV0dXJuIG49KHQ9ZSkuZGlyfHx0LnJvb3Qscj10LmJhc2V8fCh0Lm5hbWV8fCIiKSsodC5leHR8fCIiKSxuP249PT10LnJvb3Q/bityOm4rIi8iK3I6cjt2YXIgdCxuLHJ9LHBhcnNlOmZ1bmN0aW9uKGUpe3QoZSk7dmFyIG49e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbjt2YXIgcixpPWUuY2hhckNvZGVBdCgwKSxvPTQ3PT09aTtvPyhuLnJvb3Q9Ii8iLHI9MSk6cj0wO2Zvcih2YXIgYT0tMSxzPTAsbD0tMSxjPSEwLHU9ZS5sZW5ndGgtMSxoPTA7dT49cjstLXUpaWYoNDchPT0oaT1lLmNoYXJDb2RlQXQodSkpKS0xPT09bCYmKGM9ITEsbD11KzEpLDQ2PT09aT8tMT09PWE/YT11OjEhPT1oJiYoaD0xKTotMSE9PWEmJihoPS0xKTtlbHNlIGlmKCFjKXtzPXUrMTticmVha31yZXR1cm4tMT09PWF8fC0xPT09bHx8MD09PWh8fDE9PT1oJiZhPT09bC0xJiZhPT09cysxPy0xIT09bCYmKG4uYmFzZT1uLm5hbWU9MD09PXMmJm8/ZS5zbGljZSgxLGwpOmUuc2xpY2UocyxsKSk6KDA9PT1zJiZvPyhuLm5hbWU9ZS5zbGljZSgxLGEpLG4uYmFzZT1lLnNsaWNlKDEsbCkpOihuLm5hbWU9ZS5zbGljZShzLGEpLG4uYmFzZT1lLnNsaWNlKHMsbCkpLG4uZXh0PWUuc2xpY2UoYSxsKSkscz4wP24uZGlyPWUuc2xpY2UoMCxzLTEpOm8mJihuLmRpcj0iLyIpLG59LHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9O3IucG9zaXg9cixlLmV4cG9ydHM9cn0sNDQ3OihlLHQsbik9Pnt2YXIgcjtpZihuLnIodCksbi5kKHQse1VSSTooKT0+ZyxVdGlsczooKT0+Tn0pLCJvYmplY3QiPT10eXBlb2YgcHJvY2VzcylyPSJ3aW4zMiI9PT1wcm9jZXNzLnBsYXRmb3JtO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3Ipe3ZhciBpPW5hdmlnYXRvci51c2VyQWdlbnQ7cj1pLmluZGV4T2YoIldpbmRvd3MiKT49MH12YXIgbyxhLHM9KG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4obz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9KShlLHQpfSxmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHQpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWV9byhlLHQpLGUucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KG4ucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyBuKX0pLGw9L15cd1tcd1xkKy4tXSokLyxjPS9eXC8vLHU9L15cL1wvLztmdW5jdGlvbiBoKGUsdCl7aWYoIWUuc2NoZW1lJiZ0KXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogU2NoZW1lIGlzIG1pc3Npbmc6IHtzY2hlbWU6ICIiLCBhdXRob3JpdHk6ICInLmNvbmNhdChlLmF1dGhvcml0eSwnIiwgcGF0aDogIicpLmNvbmNhdChlLnBhdGgsJyIsIHF1ZXJ5OiAiJykuY29uY2F0KGUucXVlcnksJyIsIGZyYWdtZW50OiAiJykuY29uY2F0KGUuZnJhZ21lbnQsJyJ9JykpO2lmKGUuc2NoZW1lJiYhbC50ZXN0KGUuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoZS5wYXRoKWlmKGUuYXV0aG9yaXR5KXtpZighYy50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZih1LnRlc3QoZS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX12YXIgZj0iIixkPSIvIixtPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO3ZvaWQgMD09PW8mJihvPSExKSwib2JqZWN0Ij09dHlwZW9mIGU/KHRoaXMuc2NoZW1lPWUuc2NoZW1lfHxmLHRoaXMuYXV0aG9yaXR5PWUuYXV0aG9yaXR5fHxmLHRoaXMucGF0aD1lLnBhdGh8fGYsdGhpcy5xdWVyeT1lLnF1ZXJ5fHxmLHRoaXMuZnJhZ21lbnQ9ZS5mcmFnbWVudHx8Zik6KHRoaXMuc2NoZW1lPShzPW8sKGE9ZSl8fHM/YToiZmlsZSIpLHRoaXMuYXV0aG9yaXR5PXR8fGYsdGhpcy5wYXRoPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1kJiYodD1kK3QpOnQ9ZH1yZXR1cm4gdH0odGhpcy5zY2hlbWUsbnx8ZiksdGhpcy5xdWVyeT1yfHxmLHRoaXMuZnJhZ21lbnQ9aXx8ZixoKHRoaXMsbykpfXJldHVybiBlLmlzVXJpPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZXx8ISF0JiYic3RyaW5nIj09dHlwZW9mIHQuYXV0aG9yaXR5JiYic3RyaW5nIj09dHlwZW9mIHQuZnJhZ21lbnQmJiJzdHJpbmciPT10eXBlb2YgdC5wYXRoJiYic3RyaW5nIj09dHlwZW9mIHQucXVlcnkmJiJzdHJpbmciPT10eXBlb2YgdC5zY2hlbWUmJiJzdHJpbmciPT10eXBlb2YgdC5mc1BhdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LndpdGgmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRvU3RyaW5nfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB3KHRoaXMsITEpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLndpdGg9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIHQ9ZS5zY2hlbWUsbj1lLmF1dGhvcml0eSxyPWUucGF0aCxpPWUucXVlcnksbz1lLmZyYWdtZW50O3JldHVybiB2b2lkIDA9PT10P3Q9dGhpcy5zY2hlbWU6bnVsbD09PXQmJih0PWYpLHZvaWQgMD09PW4/bj10aGlzLmF1dGhvcml0eTpudWxsPT09biYmKG49Ziksdm9pZCAwPT09cj9yPXRoaXMucGF0aDpudWxsPT09ciYmKHI9Ziksdm9pZCAwPT09aT9pPXRoaXMucXVlcnk6bnVsbD09PWkmJihpPWYpLHZvaWQgMD09PW8/bz10aGlzLmZyYWdtZW50Om51bGw9PT1vJiYobz1mKSx0PT09dGhpcy5zY2hlbWUmJm49PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmaT09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGIodCxuLHIsaSxvKX0sZS5wYXJzZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgbj1tLmV4ZWMoZSk7cmV0dXJuIG4/bmV3IGIoblsyXXx8ZixFKG5bNF18fGYpLEUobls1XXx8ZiksRShuWzddfHxmKSxFKG5bOV18fGYpLHQpOm5ldyBiKGYsZixmLGYsZil9LGUuZmlsZT1mdW5jdGlvbihlKXt2YXIgdD1mO2lmKHImJihlPWUucmVwbGFjZSgvXFwvZyxkKSksZVswXT09PWQmJmVbMV09PT1kKXt2YXIgbj1lLmluZGV4T2YoZCwyKTstMT09PW4/KHQ9ZS5zdWJzdHJpbmcoMiksZT1kKToodD1lLnN1YnN0cmluZygyLG4pLGU9ZS5zdWJzdHJpbmcobil8fGQpfXJldHVybiBuZXcgYigiZmlsZSIsdCxlLGYsZil9LGUuZnJvbT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgYihlLnNjaGVtZSxlLmF1dGhvcml0eSxlLnBhdGgsZS5xdWVyeSxlLmZyYWdtZW50KTtyZXR1cm4gaCh0LCEwKSx0fSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLF8odGhpcyxlKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucmV2aXZlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBlKXJldHVybiB0O3ZhciBuPW5ldyBiKHQpO3JldHVybiBuLl9mb3JtYXR0ZWQ9dC5leHRlcm5hbCxuLl9mc1BhdGg9dC5fc2VwPT09cD90LmZzUGF0aDpudWxsLG59cmV0dXJuIHR9LGV9KCkscD1yPzE6dm9pZCAwLGI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5fZm9ybWF0dGVkPW51bGwsdC5fZnNQYXRoPW51bGwsdH1yZXR1cm4gcyh0LGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD13KHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxlP18odGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1fKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoZS5mc1BhdGg9dGhpcy5fZnNQYXRoLGUuX3NlcD1wKSx0aGlzLl9mb3JtYXR0ZWQmJihlLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoZS5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihlLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihlLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKGUucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKGUuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksZX0sdH0oZyksdj0oKGE9e30pWzU4XT0iJTNBIixhWzQ3XT0iJTJGIixhWzYzXT0iJTNGIixhWzM1XT0iJTIzIixhWzkxXT0iJTVCIixhWzkzXT0iJTVEIixhWzY0XT0iJTQwIixhWzMzXT0iJTIxIixhWzM2XT0iJTI0IixhWzM4XT0iJTI2IixhWzM5XT0iJTI3IixhWzQwXT0iJTI4IixhWzQxXT0iJTI5IixhWzQyXT0iJTJBIixhWzQzXT0iJTJCIixhWzQ0XT0iJTJDIixhWzU5XT0iJTNCIixhWzYxXT0iJTNEIixhWzMyXT0iJTIwIixhKTtmdW5jdGlvbiB5KGUsdCl7Zm9yKHZhciBuPXZvaWQgMCxyPS0xLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZS5jaGFyQ29kZUF0KGkpO2lmKG8+PTk3JiZvPD0xMjJ8fG8+PTY1JiZvPD05MHx8bz49NDgmJm88PTU3fHw0NT09PW98fDQ2PT09b3x8OTU9PT1vfHwxMjY9PT1vfHx0JiY0Nz09PW8pLTEhPT1yJiYobis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsaSkpLHI9LTEpLHZvaWQgMCE9PW4mJihuKz1lLmNoYXJBdChpKSk7ZWxzZXt2b2lkIDA9PT1uJiYobj1lLnN1YnN0cigwLGkpKTt2YXIgYT12W29dO3ZvaWQgMCE9PWE/KC0xIT09ciYmKG4rPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSxuKz1hKTotMT09PXImJihyPWkpfX1yZXR1cm4tMSE9PXImJihuKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocikpKSx2b2lkIDAhPT1uP246ZX1mdW5jdGlvbiBDKGUpe2Zvcih2YXIgdD12b2lkIDAsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lLmNoYXJDb2RlQXQobik7MzU9PT1yfHw2Mz09PXI/KHZvaWQgMD09PXQmJih0PWUuc3Vic3RyKDAsbikpLHQrPXZbcl0pOnZvaWQgMCE9PXQmJih0Kz1lW25dKX1yZXR1cm4gdm9pZCAwIT09dD90OmV9ZnVuY3Rpb24gdyhlLHQpe3ZhciBuO3JldHVybiBuPWUuYXV0aG9yaXR5JiZlLnBhdGgubGVuZ3RoPjEmJiJmaWxlIj09PWUuc2NoZW1lPyIvLyIuY29uY2F0KGUuYXV0aG9yaXR5KS5jb25jYXQoZS5wYXRoKTo0Nz09PWUucGF0aC5jaGFyQ29kZUF0KDApJiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJjU4PT09ZS5wYXRoLmNoYXJDb2RlQXQoMik/dD9lLnBhdGguc3Vic3RyKDEpOmUucGF0aFsxXS50b0xvd2VyQ2FzZSgpK2UucGF0aC5zdWJzdHIoMik6ZS5wYXRoLHImJihuPW4ucmVwbGFjZSgvXC8vZywiXFwiKSksbn1mdW5jdGlvbiBfKGUsdCl7dmFyIG49dD9DOnkscj0iIixpPWUuc2NoZW1lLG89ZS5hdXRob3JpdHksYT1lLnBhdGgscz1lLnF1ZXJ5LGw9ZS5mcmFnbWVudDtpZihpJiYocis9aSxyKz0iOiIpLChvfHwiZmlsZSI9PT1pKSYmKHIrPWQscis9ZCksbyl7dmFyIGM9by5pbmRleE9mKCJAIik7aWYoLTEhPT1jKXt2YXIgdT1vLnN1YnN0cigwLGMpO289by5zdWJzdHIoYysxKSwtMT09PShjPXUuaW5kZXhPZigiOiIpKT9yKz1uKHUsITEpOihyKz1uKHUuc3Vic3RyKDAsYyksITEpLHIrPSI6IixyKz1uKHUuc3Vic3RyKGMrMSksITEpKSxyKz0iQCJ9LTE9PT0oYz0obz1vLnRvTG93ZXJDYXNlKCkpLmluZGV4T2YoIjoiKSk/cis9bihvLCExKToocis9bihvLnN1YnN0cigwLGMpLCExKSxyKz1vLnN1YnN0cihjKSl9aWYoYSl7aWYoYS5sZW5ndGg+PTMmJjQ3PT09YS5jaGFyQ29kZUF0KDApJiY1OD09PWEuY2hhckNvZGVBdCgyKSkoaD1hLmNoYXJDb2RlQXQoMSkpPj02NSYmaDw9OTAmJihhPSIvIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShoKzMyKSwiOiIpLmNvbmNhdChhLnN1YnN0cigzKSkpO2Vsc2UgaWYoYS5sZW5ndGg+PTImJjU4PT09YS5jaGFyQ29kZUF0KDEpKXt2YXIgaDsoaD1hLmNoYXJDb2RlQXQoMCkpPj02NSYmaDw9OTAmJihhPSIiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGgrMzIpLCI6IikuY29uY2F0KGEuc3Vic3RyKDIpKSl9cis9bihhLCEwKX1yZXR1cm4gcyYmKHIrPSI/IixyKz1uKHMsITEpKSxsJiYocis9IiMiLHIrPXQ/bDp5KGwsITEpKSxyfWZ1bmN0aW9uIFMoZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2godCl7cmV0dXJuIGUubGVuZ3RoPjM/ZS5zdWJzdHIoMCwzKStTKGUuc3Vic3RyKDMpKTplfX12YXIgQT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBFKGUpe3JldHVybiBlLm1hdGNoKEEpP2UucmVwbGFjZShBLChmdW5jdGlvbihlKXtyZXR1cm4gUyhlKX0pKTplfXZhciBOLHgsTD1uKDQ3MCksaz1mdW5jdGlvbihlLHQsbil7aWYobnx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciByLGk9MCxvPXQubGVuZ3RoO2k8bztpKyspIXImJmkgaW4gdHx8KHJ8fChyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSkscltpXT10W2ldKTtyZXR1cm4gZS5jb25jYXQocnx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfSxUPUwucG9zaXh8fEw7KHg9Tnx8KE49e30pKS5qb2luUGF0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gZS53aXRoKHtwYXRoOlQuam9pbi5hcHBseShULGsoW2UucGF0aF0sdCwhMSkpfSl9LHgucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07dmFyIHI9ZS5wYXRofHwiLyI7cmV0dXJuIGUud2l0aCh7cGF0aDpULnJlc29sdmUuYXBwbHkoVCxrKFtyXSx0LCExKSl9KX0seC5kaXJuYW1lPWZ1bmN0aW9uKGUpe3ZhciB0PVQuZGlybmFtZShlLnBhdGgpO3JldHVybiAxPT09dC5sZW5ndGgmJjQ2PT09dC5jaGFyQ29kZUF0KDApP2U6ZS53aXRoKHtwYXRoOnR9KX0seC5iYXNlbmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gVC5iYXNlbmFtZShlLnBhdGgpfSx4LmV4dG5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFQuZXh0bmFtZShlLnBhdGgpfX19LHQ9e307ZnVuY3Rpb24gbihyKXtpZih0W3JdKXJldHVybiB0W3JdLmV4cG9ydHM7dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfXJldHVybiBuLmQ9KGUsdCk9Pntmb3IodmFyIHIgaW4gdCluLm8odCxyKSYmIW4ubyhlLHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDp0W3JdfSl9LG4ubz0oZSx0KT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCksbi5yPWU9PnsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuKDQ0Nyl9KSgpO3ZhcntVUkk6ZXMsVXRpbHM6dHN9PVhhO2Z1bmN0aW9uIG5zKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7Zm9yKHZhciBuLHI9U3RyaW5nKGUpLGk9IiIsbz0hIXQmJiEhdC5leHRlbmRlZCxhPSEhdCYmISF0Lmdsb2JzdGFyLHM9ITEsbD10JiYic3RyaW5nIj09dHlwZW9mIHQuZmxhZ3M/dC5mbGFnczoiIixjPTAsdT1yLmxlbmd0aDtjPHU7YysrKXN3aXRjaChuPXJbY10pe2Nhc2UiLyI6Y2FzZSIkIjpjYXNlIl4iOmNhc2UiKyI6Y2FzZSIuIjpjYXNlIigiOmNhc2UiKSI6Y2FzZSI9IjpjYXNlIiEiOmNhc2UifCI6aSs9IlxcIituO2JyZWFrO2Nhc2UiPyI6aWYobyl7aSs9Ii4iO2JyZWFrfWNhc2UiWyI6Y2FzZSJdIjppZihvKXtpKz1uO2JyZWFrfWNhc2UieyI6aWYobyl7cz0hMCxpKz0iKCI7YnJlYWt9Y2FzZSJ9IjppZihvKXtzPSExLGkrPSIpIjticmVha31jYXNlIiwiOmlmKHMpe2krPSJ8IjticmVha31pKz0iXFwiK247YnJlYWs7Y2FzZSIqIjpmb3IodmFyIGg9cltjLTFdLGY9MTsiKiI9PT1yW2MrMV07KWYrKyxjKys7dmFyIGQ9cltjKzFdO2lmKGEpZj4xJiYoIi8iPT09aHx8dm9pZCAwPT09aHx8InsiPT09aHx8IiwiPT09aCkmJigiLyI9PT1kfHx2b2lkIDA9PT1kfHwiLCI9PT1kfHwifSI9PT1kKT8oIi8iPT09ZD9jKys6Ii8iPT09aCYmaS5lbmRzV2l0aCgiXFwvIikmJihpPWkuc3Vic3RyKDAsaS5sZW5ndGgtMikpLGkrPSIoKD86W14vXSooPzovfCQpKSopIik6aSs9IihbXi9dKikiO2Vsc2UgaSs9Ii4qIjticmVhaztkZWZhdWx0OmkrPW59cmV0dXJuIGwmJn5sLmluZGV4T2YoImciKXx8KGk9Il4iK2krIiQiKSxuZXcgUmVnRXhwKGksbCl9dmFyIHJzLGlzPW9hKCksb3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5nbG9iV3JhcHBlcnM9W107dHJ5e2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxvPSIhIiE9PWlbMF07b3x8KGk9aS5zdWJzdHJpbmcoMSkpLGkubGVuZ3RoPjAmJigiLyI9PT1pWzBdJiYoaT1pLnN1YnN0cmluZygxKSksdGhpcy5nbG9iV3JhcHBlcnMucHVzaCh7cmVnZXhwOm5zKCIqKi8iK2kse2V4dGVuZGVkOiEwLGdsb2JzdGFyOiEwfSksaW5jbHVkZTpvfSkpfXRoaXMudXJpcz10fWNhdGNoKGUpe3RoaXMuZ2xvYldyYXBwZXJzLmxlbmd0aD0wLHRoaXMudXJpcz1bXX19cmV0dXJuIGUucHJvdG90eXBlLm1hdGNoZXNQYXR0ZXJuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMSxuPTAscj10aGlzLmdsb2JXcmFwcGVycztuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxvPWkucmVnZXhwLGE9aS5pbmNsdWRlO28udGVzdChlKSYmKHQ9YSl9cmV0dXJuIHR9LGUucHJvdG90eXBlLmdldFVSSXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cmlzfSxlfSgpLGFzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5zZXJ2aWNlPWUsdGhpcy51cmk9dCx0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0LHRoaXMuYW5jaG9ycz12b2lkIDAsbiYmKHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UucHJvbWlzZS5yZXNvbHZlKG5ldyBzcyhuKSkpfXJldHVybiBlLnByb3RvdHlwZS5nZXRVbnJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5yZXNvbHZlZFNjaGVtYXx8KHRoaXMudW5yZXNvbHZlZFNjaGVtYT10aGlzLnNlcnZpY2UubG9hZFNjaGVtYSh0aGlzLnVyaSkpLHRoaXMudW5yZXNvbHZlZFNjaGVtYX0sZS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLnJlc29sdmVkU2NoZW1hfHwodGhpcy5yZXNvbHZlZFNjaGVtYT10aGlzLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gZS5zZXJ2aWNlLnJlc29sdmVTY2hlbWFDb250ZW50KHQsZSl9KSkpLHRoaXMucmVzb2x2ZWRTY2hlbWF9LGUucHJvdG90eXBlLmNsZWFyU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIGU9ISF0aGlzLnVucmVzb2x2ZWRTY2hlbWE7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMudW5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKSx0aGlzLmFuY2hvcnM9dm9pZCAwLGV9LGV9KCksc3M9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fSxscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2b2lkIDA9PT10JiYodD1bXSksdGhpcy5zY2hlbWE9ZSx0aGlzLmVycm9ycz10fXJldHVybiBlLnByb3RvdHlwZS5nZXRTZWN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHRoaXMuc2NoZW1hKTtpZih0KXJldHVybiBDYSh0KX0sZS5wcm90b3R5cGUuZ2V0U2VjdGlvblJlY3Vyc2l2ZT1mdW5jdGlvbihlLHQpe2lmKCF0fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49ZS5zaGlmdCgpO2lmKHQucHJvcGVydGllcyYmKHQucHJvcGVydGllc1tuXSwxKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wcm9wZXJ0aWVzW25dKTtpZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgcj0wLGk9T2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcyk7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl0sYT1xaShvKTtpZihudWxsPT1hP3ZvaWQgMDphLnRlc3QobikpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQucGF0dGVyblByb3BlcnRpZXNbb10pfWVsc2V7aWYoIm9iamVjdCI9PXR5cGVvZiB0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtpZihuLm1hdGNoKCJbMC05XSsiKSlpZihBcnJheS5pc0FycmF5KHQuaXRlbXMpKXt2YXIgcz1wYXJzZUludChuLDEwKTtpZighaXNOYU4ocykmJnQuaXRlbXNbc10pcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuaXRlbXNbc10pfWVsc2UgaWYodC5pdGVtcylyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtcyl9fSxlfSgpLGNzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5jb250ZXh0U2VydmljZT10LHRoaXMucmVxdWVzdFNlcnZpY2U9ZSx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1ufHxQcm9taXNlLHRoaXMuY2FsbE9uRGlzcG9zZT1bXSx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXM9e30sdGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM9W10sdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e319cmV0dXJuIGUucHJvdG90eXBlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHMpLmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIG49ZXMucGFyc2UodCkuc2NoZW1lO3JldHVybiJzY2hlbWFzZXJ2aWNlIiE9PW4mJighZXx8ZShuKSl9KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwicHJvbWlzZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmNhbGxPbkRpc3Bvc2UubGVuZ3RoPjA7KXRoaXMuY2FsbE9uRGlzcG9zZS5wb3AoKSgpfSxlLnByb3RvdHlwZS5vblJlc291cmNlQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDA7Zm9yKHZhciBuPSExLHI9W2U9aHMoZSldLGk9T2JqZWN0LmtleXModGhpcy5zY2hlbWFzQnlJZCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2hlbWFzQnlJZFtlXX0pKTtyLmxlbmd0aDspZm9yKHZhciBvPXIucG9wKCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO3MmJihzLnVyaT09PW98fHMuZGVwZW5kZW5jaWVzLmhhcyhvKSkmJihzLnVyaSE9PW8mJnIucHVzaChzLnVyaSkscy5jbGVhclNjaGVtYSgpJiYobj0hMCksaVthXT12b2lkIDApfXJldHVybiBufSxlLnByb3RvdHlwZS5zZXRTY2hlbWFDb250cmlidXRpb25zPWZ1bmN0aW9uKGUpe2lmKGUuc2NoZW1hcyl7dmFyIHQ9ZS5zY2hlbWFzO2Zvcih2YXIgbiBpbiB0KXt2YXIgcj1ocyhuKTt0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbcl09dGhpcy5hZGRTY2hlbWFIYW5kbGUocix0W25dKX19aWYoQXJyYXkuaXNBcnJheShlLnNjaGVtYUFzc29jaWF0aW9ucykpZm9yKHZhciBpPTAsbz1lLnNjaGVtYUFzc29jaWF0aW9ucztpPG8ubGVuZ3RoO2krKyl7dmFyIGE9b1tpXSxzPWEudXJpcy5tYXAoaHMpLGw9dGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKGEucGF0dGVybixzKTt0aGlzLmNvbnRyaWJ1dGlvbkFzc29jaWF0aW9ucy5wdXNoKGwpfX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hSGFuZGxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IGFzKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXT1uLG59LGUucHJvdG90eXBlLmdldE9yQWRkU2NoZW1hSGFuZGxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbZV18fHRoaXMuYWRkU2NoZW1hSGFuZGxlKGUsdCl9LGUucHJvdG90eXBlLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgb3MoZSx0KTtyZXR1cm4gdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKG4pLG59LGUucHJvdG90eXBlLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWhzKGUpO3JldHVybiB0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW3JdPSEwLHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHQmJnRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbih0LFtyXSksbj90aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pOnRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocil9LGUucHJvdG90eXBlLmNsZWFyRXh0ZXJuYWxTY2hlbWFzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9LHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwLHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcyl0aGlzLnNjaGVtYXNCeUlkW2VdPXRoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tlXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW2VdPSEwO2Zvcih2YXIgdD0wLG49dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07dGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucy5wdXNoKHIpfX0sZS5wcm90b3R5cGUuZ2V0UmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oZSl7dmFyIHQ9aHMoZSksbj10aGlzLnNjaGVtYXNCeUlkW3RdO3JldHVybiBuP24uZ2V0UmVzb2x2ZWRTY2hlbWEoKTp0aGlzLnByb21pc2UucmVzb2x2ZSh2b2lkIDApfSxlLnByb3RvdHlwZS5sb2FkU2NoZW1hPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLnJlcXVlc3RTZXJ2aWNlKXt2YXIgdD1pcygianNvbi5zY2hlbWEubm9yZXF1ZXN0c2VydmljZSIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nLiBObyBzY2hlbWEgcmVxdWVzdCBzZXJ2aWNlIGF2YWlsYWJsZSIsZnMoZSkpO3JldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgc3Moe30sW3RdKSl9cmV0dXJuIHRoaXMucmVxdWVzdFNlcnZpY2UoZSkudGhlbigoZnVuY3Rpb24odCl7aWYoIXQpe3ZhciBuPWlzKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogTm8gY29udGVudC4iLGZzKGUpKTtyZXR1cm4gbmV3IHNzKHt9LFtuXSl9dmFyIHIsaT1bXTtyPVJpKHQsaSk7dmFyIG89aS5sZW5ndGg/W2lzKCJqc29uLnNjaGVtYS5pbnZhbGlkRm9ybWF0IiwiVW5hYmxlIHRvIHBhcnNlIGNvbnRlbnQgZnJvbSAnezB9JzogUGFyc2UgZXJyb3IgYXQgb2Zmc2V0IHsxfS4iLGZzKGUpLGlbMF0ub2Zmc2V0KV06W107cmV0dXJuIG5ldyBzcyhyLG8pfSksKGZ1bmN0aW9uKHQpe3ZhciBuPXQudG9TdHJpbmcoKSxyPXQudG9TdHJpbmcoKS5zcGxpdCgiRXJyb3I6ICIpO3JldHVybiByLmxlbmd0aD4xJiYobj1yWzFdKSxqaShuLCIuIikmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtMSkpLG5ldyBzcyh7fSxbaXMoImpzb24uc2NoZW1hLm5vY29udGVudCIsIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nOiB7MX0uIixmcyhlKSxuKV0pfSkpfSxlLnByb3RvdHlwZS5yZXNvbHZlU2NoZW1hQ29udGVudD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1lLmVycm9ycy5zbGljZSgwKSxpPWUuc2NoZW1hO2lmKGkuJHNjaGVtYSl7dmFyIG89aHMoaS4kc2NoZW1hKTtpZigiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wMy9zY2hlbWEiPT09bylyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IGxzKHt9LFtpcygianNvbi5zY2hlbWEuZHJhZnQwMy5ub3RzdXBwb3J0ZWQiLCJEcmFmdC0wMyBzY2hlbWFzIGFyZSBub3Qgc3VwcG9ydGVkLiIpXSkpOyJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDE5LTA5L3NjaGVtYSI9PT1vP3IucHVzaChpcygianNvbi5zY2hlbWEuZHJhZnQyMDE5MDkubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAxOS0wOSBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSk6Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIj09PW8mJnIucHVzaChpcygianNvbi5zY2hlbWEuZHJhZnQyMDIwMTIubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAyMC0xMiBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSl9dmFyIGE9dGhpcy5jb250ZXh0U2VydmljZSxzPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLGEscyxsO3ZvaWQgMD09PWl8fDA9PT1pLmxlbmd0aD9vPXQ6Ii8iPT09aS5jaGFyQXQoMCk/bz1mdW5jdGlvbihlLHQpe3Q9ZGVjb2RlVVJJQ29tcG9uZW50KHQpO3ZhciBuPWU7cmV0dXJuIi8iPT09dFswXSYmKHQ9dC5zdWJzdHJpbmcoMSkpLHQuc3BsaXQoIi8iKS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+IiksIShuPW5bZV0pfSkpLG59KHQsaSk6KGE9dCxsPWksKHM9bikuYW5jaG9yc3x8KHMuYW5jaG9ycz11KGEpKSxvPXMuYW5jaG9ycy5nZXQobCkpLG8/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYhZS5oYXNPd25Qcm9wZXJ0eShuKSYmImlkIiE9PW4mJiIkaWQiIT09biYmKGVbbl09dFtuXSl9KGUsbyk6ci5wdXNoKGlzKCJqc29uLnNjaGVtYS5pbnZhbGlkaWQiLCIkcmVmICd7MH0nIGluICd7MX0nIGNhbiBub3QgYmUgcmVzb2x2ZWQuIixpLG4udXJpKSl9LGw9ZnVuY3Rpb24oZSx0LGksbyl7YSYmIS9eW0EtWmEtel1bQS1aYS16MC05K1wtLitdKjpcL1wvLiovLnRlc3QodCkmJih0PWEucmVzb2x2ZVJlbGF0aXZlUGF0aCh0LG8udXJpKSksdD1ocyh0KTt2YXIgbD1uLmdldE9yQWRkU2NoZW1hSGFuZGxlKHQpO3JldHVybiBsLmdldFVucmVzb2x2ZWRTY2hlbWEoKS50aGVuKChmdW5jdGlvbihuKXtpZihvLmRlcGVuZGVuY2llcy5hZGQodCksbi5lcnJvcnMubGVuZ3RoKXt2YXIgYT1pP3QrIiMiK2k6dDtyLnB1c2goaXMoImpzb24uc2NoZW1hLnByb2JsZW1sb2FkaW5ncmVmIiwiUHJvYmxlbXMgbG9hZGluZyByZWZlcmVuY2UgJ3swfSc6IHsxfSIsYSxuLmVycm9yc1swXSkpfXJldHVybiBzKGUsbi5zY2hlbWEsbCxpKSxjKGUsbi5zY2hlbWEsbCl9KSl9LGM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPVtdO3JldHVybiBuLnRyYXZlcnNlTm9kZXMoZSwoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPW5ldyBTZXQ7ZS4kcmVmOyl7dmFyIG89ZS4kcmVmLGE9by5zcGxpdCgiIyIsMik7aWYoZGVsZXRlIGUuJHJlZixhWzBdLmxlbmd0aD4wKXJldHVybiB2b2lkIGkucHVzaChsKGUsYVswXSxhWzFdLHIpKTtpZighbi5oYXMobykpe3ZhciBjPWFbMV07cyhlLHQscixjKSxuLmFkZChvKX19fSkpLG4ucHJvbWlzZS5hbGwoaSl9LHU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE1hcDtyZXR1cm4gbi50cmF2ZXJzZU5vZGVzKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPWUuJGlkfHxlLmlkO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIiMiPT09bi5jaGFyQXQoMCkpe3ZhciBpPW4uc3Vic3RyaW5nKDEpO3QuaGFzKGkpP3IucHVzaChpcygianNvbi5zY2hlbWEuZHVwbGljYXRlaWQiLCJEdXBsaWNhdGUgaWQgZGVjbGFyYXRpb246ICd7MH0nIixuKSk6dC5zZXQoaSxlKX19KSksdH07cmV0dXJuIGMoaSxpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbHMoaSxyKX0pKX0sZS5wcm90b3R5cGUudHJhdmVyc2VOb2Rlcz1mdW5jdGlvbihlLHQpe2lmKCFlfHwib2JqZWN0IiE9dHlwZW9mIGUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtmb3IodmFyIG49bmV3IFNldCxyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgbj0wLHI9ZTtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTsib2JqZWN0Ij09dHlwZW9mIGkmJmEucHVzaChpKX19LGk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciBuPTAscj1lO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKCJvYmplY3QiPT10eXBlb2YgaSlmb3IodmFyIG8gaW4gaSl7dmFyIHM9byxsPWlbc107Im9iamVjdCI9PXR5cGVvZiBsJiZhLnB1c2gobCl9fX0sbz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtmb3IodmFyIG49MCxyPWU7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89MCxzPWk7bzxzLmxlbmd0aDtvKyspe3ZhciBsPXNbb107Im9iamVjdCI9PXR5cGVvZiBsJiZhLnB1c2gobCl9fX0sYT1bZV0scz1hLnBvcCgpO3M7KW4uaGFzKHMpfHwobi5hZGQocyksdChzKSxyKHMuaXRlbXMscy5hZGRpdGlvbmFsSXRlbXMscy5hZGRpdGlvbmFsUHJvcGVydGllcyxzLm5vdCxzLmNvbnRhaW5zLHMucHJvcGVydHlOYW1lcyxzLmlmLHMudGhlbixzLmVsc2UpLGkocy5kZWZpbml0aW9ucyxzLnByb3BlcnRpZXMscy5wYXR0ZXJuUHJvcGVydGllcyxzLmRlcGVuZGVuY2llcyksbyhzLmFueU9mLHMuYWxsT2Yscy5vbmVPZixzLml0ZW1zKSkscz1hLnBvcCgpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGcm9tUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt2YXIgbixyO2lmKCJvYmplY3QiPT09KG51bGw9PT0obj10LnJvb3QpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnR5cGUpKWZvcih2YXIgaT0wLG89dC5yb290LnByb3BlcnRpZXM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoIiRzY2hlbWEiPT09YS5rZXlOb2RlLnZhbHVlJiYic3RyaW5nIj09PShudWxsPT09KHI9YS52YWx1ZU5vZGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnR5cGUpKXt2YXIgcz1hLnZhbHVlTm9kZS52YWx1ZTtyZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZSYmIS9eXHdbXHdcZCsuLV0qOi8udGVzdChzKSYmKHM9dGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlUmVsYXRpdmVQYXRoKHMsZSkpLHN9fX0sZS5wcm90b3R5cGUuZ2V0QXNzb2NpYXRlZFNjaGVtYXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksbj1bXSxyPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gZXMucGFyc2UoZSkud2l0aCh7ZnJhZ21lbnQ6bnVsbCxxdWVyeTpudWxsfSkudG9TdHJpbmcoKX1jYXRjaCh0KXtyZXR1cm4gZX19KGUpLGk9MCxvPXRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoYS5tYXRjaGVzUGF0dGVybihyKSlmb3IodmFyIHM9MCxsPWEuZ2V0VVJJcygpO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3RbY118fChuLnB1c2goYyksdFtjXT0hMCl9fXJldHVybiBufSxlLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10JiZ0aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpO3JldHVybiBuP1tuXTp0aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKGUpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7aWYobil7dmFyIHI9aHMobik7cmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUocikuZ2V0UmVzb2x2ZWRTY2hlbWEoKX19aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PWUpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dmFyIGk9dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKSxvPWkubGVuZ3RoPjA/dGhpcy5jcmVhdGVDb21iaW5lZFNjaGVtYShlLGkpLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKTtyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT17cmVzb3VyY2U6ZSxyZXNvbHZlZFNjaGVtYTpvfSxvfSxlLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbihlLHQpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0WzBdKTt2YXIgbj0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KGUpLHI9e2FsbE9mOnQubWFwKChmdW5jdGlvbihlKXtyZXR1cm57JHJlZjplfX0pKX07cmV0dXJuIHRoaXMuYWRkU2NoZW1hSGFuZGxlKG4scil9LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbihlLHQsbil7aWYobil7dmFyIHI9bi5pZHx8InNjaGVtYXNlcnZpY2U6Ly91bnRpdGxlZC9tYXRjaGluZ1NjaGVtYXMvIit1cysrO3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShyLG4pLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpfSkpfXJldHVybiB0aGlzLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlP3QuZ2V0TWF0Y2hpbmdTY2hlbWFzKGUuc2NoZW1hKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmludmVydGVkfSkpOltdfSkpfSxlfSgpLHVzPTA7ZnVuY3Rpb24gaHMoZSl7dHJ5e3JldHVybiBlcy5wYXJzZShlKS50b1N0cmluZygpfWNhdGNoKHQpe3JldHVybiBlfX1mdW5jdGlvbiBmcyhlKXt0cnl7dmFyIHQ9ZXMucGFyc2UoZSk7aWYoImZpbGUiPT09dC5zY2hlbWUpcmV0dXJuIHQuZnNQYXRofWNhdGNoKGUpe31yZXR1cm4gZX1mdW5jdGlvbiBkcyhlLHQpe3ZhciBuPVtdLHI9W10saT1bXSxvPS0xLGE9SWkoZS5nZXRUZXh0KCksITEpLHM9YS5zY2FuKCk7ZnVuY3Rpb24gbChlKXtuLnB1c2goZSksci5wdXNoKGkubGVuZ3RoKX1mb3IoOzE3IT09czspe3N3aXRjaChzKXtjYXNlIDE6Y2FzZSAzOnZhciBjPXtzdGFydExpbmU6Zj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGVuZExpbmU6ZixraW5kOjE9PT1zPyJvYmplY3QiOiJhcnJheSJ9O2kucHVzaChjKTticmVhaztjYXNlIDI6Y2FzZSA0OnZhciB1PTI9PT1zPyJvYmplY3QiOiJhcnJheSI7aWYoaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS5raW5kPT09dSl7Yz1pLnBvcCgpO3ZhciBoPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7YyYmaD5jLnN0YXJ0TGluZSsxJiZvIT09Yy5zdGFydExpbmUmJihjLmVuZExpbmU9aC0xLGwoYyksbz1jLnN0YXJ0TGluZSl9YnJlYWs7Y2FzZSAxMzp2YXIgZj1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGQ9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSthLmdldFRva2VuTGVuZ3RoKCkpLmxpbmU7MT09PWEuZ2V0VG9rZW5FcnJvcigpJiZmKzE8ZS5saW5lQ291bnQ/YS5zZXRQb3NpdGlvbihlLm9mZnNldEF0KGpyLmNyZWF0ZShmKzEsMCkpKTpmPGQmJihsKHtzdGFydExpbmU6ZixlbmRMaW5lOmQsa2luZDpuaS5Db21tZW50fSksbz1mKTticmVhaztjYXNlIDEyOnZhciBtPWUuZ2V0VGV4dCgpLnN1YnN0cihhLmdldFRva2VuT2Zmc2V0KCksYS5nZXRUb2tlbkxlbmd0aCgpKS5tYXRjaCgvXlwvXC9ccyojKHJlZ2lvblxiKXwoZW5kcmVnaW9uXGIpLyk7aWYobSl7aD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2lmKG1bMV0pe2M9e3N0YXJ0TGluZTpoLGVuZExpbmU6aCxraW5kOm5pLlJlZ2lvbn07aS5wdXNoKGMpfWVsc2V7Zm9yKHZhciBnPWkubGVuZ3RoLTE7Zz49MCYmaVtnXS5raW5kIT09bmkuUmVnaW9uOylnLS07aWYoZz49MCl7Yz1pW2ddO2kubGVuZ3RoPWcsaD5jLnN0YXJ0TGluZSYmbyE9PWMuc3RhcnRMaW5lJiYoYy5lbmRMaW5lPWgsbChjKSxvPWMuc3RhcnRMaW5lKX19fX1zPWEuc2NhbigpfXZhciBwPXQmJnQucmFuZ2VMaW1pdDtpZigibnVtYmVyIiE9dHlwZW9mIHB8fG4ubGVuZ3RoPD1wKXJldHVybiBuO3QmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQmJnQub25SYW5nZUxpbWl0RXhjZWVkZWQoZS51cmkpO2Zvcih2YXIgYj1bXSx2PTAseT1yO3Y8eS5sZW5ndGg7disrKXsoQT15W3ZdKTwzMCYmKGJbQV09KGJbQV18fDApKzEpfXZhciBDPTAsdz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBfPWJbZ107aWYoXyl7aWYoXytDPnApe3c9ZzticmVha31DKz1ffX12YXIgUz1bXTtmb3IoZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgQTsibnVtYmVyIj09dHlwZW9mKEE9cltnXSkmJihBPHd8fEE9PT13JiZDKys8cCkmJlMucHVzaChuW2ddKX1yZXR1cm4gU31mdW5jdGlvbiBtcyhlLHQsbil7ZnVuY3Rpb24gcih0LG4pe3JldHVybiAkci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQpLGUucG9zaXRpb25BdChuKSl9dmFyIGk9SWkoZS5nZXRUZXh0KCksITApO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gaS5zZXRQb3NpdGlvbihlKSxpLnNjYW4oKT09PXQ/aS5nZXRUb2tlbk9mZnNldCgpK2kuZ2V0VG9rZW5MZW5ndGgoKTotMX1yZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1lLm9mZnNldEF0KHQpLGE9bi5nZXROb2RlRnJvbU9mZnNldChpLCEwKSxzPVtdO2E7KXtzd2l0Y2goYS50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJvYmplY3QiOmNhc2UiYXJyYXkiOnZhciBsPWEub2Zmc2V0KzEsYz1hLm9mZnNldCthLmxlbmd0aC0xO2w8YyYmaT49bCYmaTw9YyYmcy5wdXNoKHIobCxjKSkscy5wdXNoKHIoYS5vZmZzZXQsYS5vZmZzZXQrYS5sZW5ndGgpKTticmVhaztjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpjYXNlIm51bGwiOmNhc2UicHJvcGVydHkiOnMucHVzaChyKGEub2Zmc2V0LGEub2Zmc2V0K2EubGVuZ3RoKSl9aWYoInByb3BlcnR5Ij09PWEudHlwZXx8YS5wYXJlbnQmJiJhcnJheSI9PT1hLnBhcmVudC50eXBlKXt2YXIgdT1vKGEub2Zmc2V0K2EubGVuZ3RoLDUpOy0xIT09dSYmcy5wdXNoKHIoYS5vZmZzZXQsdSkpfWE9YS5wYXJlbnR9Zm9yKHZhciBoPXZvaWQgMCxmPXMubGVuZ3RoLTE7Zj49MDtmLS0paD1Lby5jcmVhdGUoc1tmXSxoKTtyZXR1cm4gaHx8KGg9S28uY3JlYXRlKCRyLmNyZWF0ZSh0LHQpKSksaH0pKX1mdW5jdGlvbiBncyhlLHQpe3ZhciBuPVtdO3JldHVybiB0LnZpc2l0KChmdW5jdGlvbihyKXt2YXIgaTtpZigicHJvcGVydHkiPT09ci50eXBlJiYiJHJlZiI9PT1yLmtleU5vZGUudmFsdWUmJiJzdHJpbmciPT09KG51bGw9PT0oaT1yLnZhbHVlTm9kZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkudHlwZSkpe3ZhciBvPXIudmFsdWVOb2RlLnZhbHVlLGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZigiIyI9PT1lKXJldHVybltdO2lmKCIjIiE9PWVbMF18fCIvIiE9PWVbMV0pcmV0dXJuIG51bGw7cmV0dXJuIGUuc3Vic3RyaW5nKDIpLnNwbGl0KC9cLy8pLm1hcCh2cyl9KHQpO2lmKCFuKXJldHVybiBudWxsO3JldHVybiBicyhuLGUucm9vdCl9KHQsbyk7aWYoYSl7dmFyIHM9ZS5wb3NpdGlvbkF0KGEub2Zmc2V0KTtuLnB1c2goe3RhcmdldDoiIi5jb25jYXQoZS51cmksIiMiKS5jb25jYXQocy5saW5lKzEsIiwiKS5jb25jYXQocy5jaGFyYWN0ZXIrMSkscmFuZ2U6cHMoZSxyLnZhbHVlTm9kZSl9KX19cmV0dXJuITB9KSksUHJvbWlzZS5yZXNvbHZlKG4pfWZ1bmN0aW9uIHBzKGUsdCl7cmV0dXJuICRyLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQrMSksZS5wb3NpdGlvbkF0KHQub2Zmc2V0K3QubGVuZ3RoLTEpKX1mdW5jdGlvbiBicyhlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodCYmIm9iamVjdCI9PT10LnR5cGUpe3ZhciByPXQucHJvcGVydGllcy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5rZXlOb2RlLnZhbHVlPT09bn0pKTtyZXR1cm4gcj9icyhlLHIudmFsdWVOb2RlKTpudWxsfWlmKHQmJiJhcnJheSI9PT10LnR5cGUmJm4ubWF0Y2goL14oMHxbMS05XVswLTldKikkLykpe3ZhciBpPU51bWJlci5wYXJzZUludChuKSxvPXQuaXRlbXNbaV07cmV0dXJuIG8/YnMoZSxvKTpudWxsfXJldHVybiBudWxsfWZ1bmN0aW9uIHZzKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24geXMoZSl7dmFyIHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Usbj1uZXcgY3MoZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCk7bi5zZXRTY2hlbWFDb250cmlidXRpb25zKFlhKTt2YXIgcj1uZXcgTWEobixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcyksaT1uZXcgSWEobixlLmNvbnRyaWJ1dGlvbnMsdCksbz1uZXcgcWEobiksYT1uZXcgRmEobix0KTtyZXR1cm57Y29uZmlndXJlOmZ1bmN0aW9uKGUpe24uY2xlYXJFeHRlcm5hbFNjaGVtYXMoKSxlLnNjaGVtYXMmJmUuc2NoZW1hcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuLnJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEoZS51cmksZS5maWxlTWF0Y2gsZS5zY2hlbWEpfSkpLGEuY29uZmlndXJlKGUpfSxyZXNldFNjaGVtYTpmdW5jdGlvbihlKXtyZXR1cm4gbi5vblJlc291cmNlQ2hhbmdlKGUpfSxkb1ZhbGlkYXRpb246YS5kb1ZhbGlkYXRpb24uYmluZChhKSxnZXRMYW5ndWFnZVN0YXR1czphLmdldExhbmd1YWdlU3RhdHVzLmJpbmQoYSkscGFyc2VKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGthKGUse2NvbGxlY3RDb21tZW50czohMH0pfSxuZXdKU09ORG9jdW1lbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9W10pLG5ldyB4YShlLHQsW10pfShlLHQpfSxnZXRNYXRjaGluZ1NjaGVtYXM6bi5nZXRNYXRjaGluZ1NjaGVtYXMuYmluZChuKSxkb1Jlc29sdmU6ci5kb1Jlc29sdmUuYmluZChyKSxkb0NvbXBsZXRlOnIuZG9Db21wbGV0ZS5iaW5kKHIpLGZpbmREb2N1bWVudFN5bWJvbHM6by5maW5kRG9jdW1lbnRTeW1ib2xzLmJpbmQobyksZmluZERvY3VtZW50U3ltYm9sczI6by5maW5kRG9jdW1lbnRTeW1ib2xzMi5iaW5kKG8pLGZpbmREb2N1bWVudENvbG9yczpvLmZpbmREb2N1bWVudENvbG9ycy5iaW5kKG8pLGdldENvbG9yUHJlc2VudGF0aW9uczpvLmdldENvbG9yUHJlc2VudGF0aW9ucy5iaW5kKG8pLGRvSG92ZXI6aS5kb0hvdmVyLmJpbmQoaSksZ2V0Rm9sZGluZ1JhbmdlczpkcyxnZXRTZWxlY3Rpb25SYW5nZXM6bXMsZmluZERlZmluaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX0sZmluZExpbmtzOmdzLGZvcm1hdDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dm9pZCAwO2lmKHQpe3ZhciBpPWUub2Zmc2V0QXQodC5zdGFydCk7cj17b2Zmc2V0OmksbGVuZ3RoOmUub2Zmc2V0QXQodC5lbmQpLWl9fXZhciBvPXt0YWJTaXplOm4/bi50YWJTaXplOjQsaW5zZXJ0U3BhY2VzOiEwPT09KG51bGw9PW4/dm9pZCAwOm4uaW5zZXJ0U3BhY2VzKSxpbnNlcnRGaW5hbE5ld2xpbmU6ITA9PT0obnVsbD09bj92b2lkIDA6bi5pbnNlcnRGaW5hbE5ld2xpbmUpLGVvbDoiXG4ifTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBScihlLHQsbil9KGUuZ2V0VGV4dCgpLHIsbykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gYmkucmVwbGFjZSgkci5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKSx0LmNvbnRlbnQpfSkpfX19InVuZGVmaW5lZCIhPXR5cGVvZiBmZXRjaCYmKHJzPWZ1bmN0aW9uKGUpe3JldHVybiBmZXRjaChlKS50aGVuKChlPT5lLnRleHQoKSkpfSk7dmFyIENzPSIvIi5jaGFyQ29kZUF0KDApLHdzPSIuIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIF9zKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSkwPT09bi5sZW5ndGh8fDE9PT1uLmxlbmd0aCYmbi5jaGFyQ29kZUF0KDApPT09d3N8fCgyPT09bi5sZW5ndGgmJm4uY2hhckNvZGVBdCgwKT09PXdzJiZuLmNoYXJDb2RlQXQoMSk9PT13cz90LnBvcCgpOnQucHVzaChuKSk7ZS5sZW5ndGg+MSYmMD09PWVbZS5sZW5ndGgtMV0ubGVuZ3RoJiZ0LnB1c2goIiIpO2xldCBuPXQuam9pbigiLyIpO3JldHVybiAwPT09ZVswXS5sZW5ndGgmJihuPSIvIituKSxufXNlbGYub25tZXNzYWdlPSgpPT57a3IoKChlLHQpPT5uZXcgY2xhc3N7X2N0eDtfbGFuZ3VhZ2VTZXJ2aWNlO19sYW5ndWFnZVNldHRpbmdzO19sYW5ndWFnZUlkO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY3R4PWUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncz10Lmxhbmd1YWdlU2V0dGluZ3MsdGhpcy5fbGFuZ3VhZ2VJZD10Lmxhbmd1YWdlSWQsdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlPXlzKHt3b3Jrc3BhY2VDb250ZXh0OntyZXNvbHZlUmVsYXRpdmVQYXRoOihlLHQpPT5mdW5jdGlvbihlLHQpe2lmKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT1Dc30odCkpe2NvbnN0IG49ZXMucGFyc2UoZSkscj10LnNwbGl0KCIvIik7cmV0dXJuIG4ud2l0aCh7cGF0aDpfcyhyKX0pLnRvU3RyaW5nKCl9cmV0dXJuIGZ1bmN0aW9uKGUsLi4udCl7Y29uc3Qgbj1lcy5wYXJzZShlKSxyPW4ucGF0aC5zcGxpdCgiLyIpO2ZvcihsZXQgZSBvZiB0KXIucHVzaCguLi5lLnNwbGl0KCIvIikpO3JldHVybiBuLndpdGgoe3BhdGg6X3Mocil9KS50b1N0cmluZygpfShlLHQpfSh0LnN1YnN0cigwLHQubGFzdEluZGV4T2YoIi8iKSsxKSxlKX0sc2NoZW1hUmVxdWVzdFNlcnZpY2U6dC5lbmFibGVTY2hlbWFSZXF1ZXN0P3JzOnZvaWQgMH0pLHRoaXMuX2xhbmd1YWdlU2VydmljZS5jb25maWd1cmUodGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9YXN5bmMgZG9WYWxpZGF0aW9uKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZih0KXtsZXQgZT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCk7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1ZhbGlkYXRpb24odCxlLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfXJldHVybiBQcm9taXNlLnJlc29sdmUoW10pfWFzeW5jIGRvQ29tcGxldGUoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShuLHQscil9YXN5bmMgZG9SZXNvbHZlKGUpe3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZXNvbHZlKGUpfWFzeW5jIGRvSG92ZXIoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KG4pO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Ib3ZlcihuLHQscil9YXN5bmMgZm9ybWF0KGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZvcm1hdChyLHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyByZXNldFNjaGVtYShlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5yZXNldFNjaGVtYShlKSl9YXN5bmMgZmluZERvY3VtZW50U3ltYm9scyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudFN5bWJvbHModCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGZpbmREb2N1bWVudENvbG9ycyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudENvbG9ycyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0Q29sb3JQcmVzZW50YXRpb25zKGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHIpLG89dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldENvbG9yUHJlc2VudGF0aW9ucyhyLGksdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG8pfWFzeW5jIGdldEZvbGRpbmdSYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldEZvbGRpbmdSYW5nZXMobix0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGdldFNlbGVjdGlvblJhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobiksaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0U2VsZWN0aW9uUmFuZ2VzKG4sdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfV9nZXRUZXh0RG9jdW1lbnQoZSl7bGV0IHQ9dGhpcy5fY3R4LmdldE1pcnJvck1vZGVscygpO2ZvcihsZXQgbiBvZiB0KWlmKG4udXJpLnRvU3RyaW5nKCk9PT1lKXJldHVybiBHby5jcmVhdGUoZSx0aGlzLl9sYW5ndWFnZUlkLG4udmVyc2lvbixuLmdldFZhbHVlKCkpO3JldHVybiBudWxsfX0oZSx0KSkpfX0oKTsKCg==', null, false);
|
|
4
4
|
/* eslint-enable */
|
|
5
5
|
|
|
6
6
|
export { WorkerFactory as default };
|