@vtj/designer 0.9.2 → 0.9.4
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/{Editor-C1dy1R3N.js → Editor-ZiUDqfgK.js} +1 -1
- package/dist/css.worker-DcQjDQkA.js +109 -0
- package/dist/editor.worker-lG8NyUhA.js +25 -0
- package/dist/html.worker-B83UVBG6.js +25 -0
- package/dist/index.mjs +1811 -1785
- package/dist/json.worker-Deqi-XXW.js +25 -0
- package/dist/style.css +1 -1
- package/dist/ts.worker-P1pVlN2Z.js +51359 -0
- package/package.json +8 -8
- package/types/components/editor/Editor.d.ts +1 -1
- package/types/components/editor/index.d.ts +1 -1
- package/types/components/regions/empty.d.ts +1 -1
- package/types/components/regions/index.d.ts +2 -2
- package/types/components/regions/toolbar.d.ts +1 -1
- package/types/components/setters/file.d.ts +1 -1
- package/types/components/setters/function.d.ts +1 -1
- package/types/components/setters/icon.d.ts +1 -1
- package/types/components/setters/index.d.ts +7 -7
- package/types/components/setters/json.d.ts +1 -1
- package/types/components/setters/section.d.ts +1 -1
- package/types/components/setters/slider.d.ts +1 -1
- package/types/components/setters/tag.d.ts +1 -1
- package/types/components/shared/binder.d.ts +2 -1
- package/types/components/shared/box.d.ts +3 -2
- package/types/components/shared/item.d.ts +2 -1
- package/types/components/shared/panel.d.ts +2 -1
- package/types/components/shared/tabs.d.ts +2 -1
- package/types/components/shared/viewer.d.ts +1 -1
- package/types/components/shared/viewport.d.ts +3 -2
- package/types/components/widgets/about/index.d.ts +1 -1
- package/types/components/widgets/actions/coder.d.ts +1 -1
- package/types/components/widgets/apis/base-info.d.ts +1 -1
- package/types/components/widgets/apis/jsonp-options.d.ts +1 -1
- package/types/components/widgets/apis/mock-template.d.ts +1 -1
- package/types/components/widgets/apis/request-settings.d.ts +1 -1
- package/types/components/widgets/designer/actions.d.ts +1 -1
- package/types/components/widgets/empty/index.d.ts +1 -1
- package/types/components/widgets/index.d.ts +3 -3
- package/types/components/widgets/previewer/index.d.ts +1 -1
- package/types/components/widgets/scripts/group.d.ts +3 -2
- package/types/components/widgets/style/spacing-input.d.ts +1 -1
- package/types/version.d.ts +3 -3
- package/dist/css.worker-BkwH8iYE.js +0 -25
- package/dist/editor.worker-C8k3yDdT.js +0 -25
- package/dist/html.worker-DefZQYbA.js +0 -25
- package/dist/json.worker-05I1Fjzo.js +0 -25
- package/dist/ts.worker-Dn3IQaLA.js +0 -25
@@ -1,25 +0,0 @@
|
|
1
|
-
const d = "dmFyIEJjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgcWM9KFhlLEVlLFJlKT0+RWUgaW4gWGU/QmMoWGUsRWUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlJlfSk6WGVbRWVdPVJlO3ZhciAkZT0oWGUsRWUsUmUpPT5xYyhYZSx0eXBlb2YgRWUhPSJzeW1ib2wiP0VlKyIiOkVlLFJlKTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIEhlLHVlLFg7Y2xhc3MgWGV7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24odCl7c2V0VGltZW91dCgoKT0+e3Rocm93IHQuc3RhY2s/ZXQuaXNFcnJvck5vVGVsZW1ldHJ5KHQpP25ldyBldCh0Lm1lc3NhZ2UrYAoKYCt0LnN0YWNrKTpuZXcgRXJyb3IodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6dH0sMCl9fWVtaXQodCl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChuPT57bih0KX0pfW9uVW5leHBlY3RlZEVycm9yKHQpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcih0KSx0aGlzLmVtaXQodCl9b25VbmV4cGVjdGVkRXh0ZXJuYWxFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCl9fWNvbnN0IEVlPW5ldyBYZTtmdW5jdGlvbiBSZShlKXtaYShlKXx8RWUub25VbmV4cGVjdGVkRXJyb3IoZSl9ZnVuY3Rpb24gUmkoZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lLGk9ZS5zdGFja3RyYWNlfHxlLnN0YWNrO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOmksbm9UZWxlbWV0cnk6ZXQuaXNFcnJvck5vVGVsZW1ldHJ5KGUpfX1yZXR1cm4gZX1jb25zdCB5bj0iQ2FuY2VsZWQiO2Z1bmN0aW9uIFphKGUpe3JldHVybiBlIGluc3RhbmNlb2YgS2E/ITA6ZSBpbnN0YW5jZW9mIEVycm9yJiZlLm5hbWU9PT15biYmZS5tZXNzYWdlPT09eW59Y2xhc3MgS2EgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHluKSx0aGlzLm5hbWU9dGhpcy5tZXNzYWdlfX1jbGFzcyBldCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMubmFtZT0iQ29kZUV4cGVjdGVkRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCl7aWYodCBpbnN0YW5jZW9mIGV0KXJldHVybiB0O2NvbnN0IG49bmV3IGV0O3JldHVybiBuLm1lc3NhZ2U9dC5tZXNzYWdlLG4uc3RhY2s9dC5zdGFjayxufXN0YXRpYyBpc0Vycm9yTm9UZWxlbWV0cnkodCl7cmV0dXJuIHQubmFtZT09PSJDb2RlRXhwZWN0ZWRFcnJvciJ9fWNsYXNzIG1lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIodHx8IkFuIHVuZXhwZWN0ZWQgYnVnIG9jY3VycmVkLiIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG1lLnByb3RvdHlwZSl9fWZ1bmN0aW9uIGVvKGUsdCl7Y29uc3Qgbj10aGlzO2xldCBpPSExLHI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl8fChpPSEwLHI9ZS5hcHBseShuLGFyZ3VtZW50cykpLHJ9fXZhciBIdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChSKXtyZXR1cm4gUiYmdHlwZW9mIFI9PSJvYmplY3QiJiZ0eXBlb2YgUltTeW1ib2wuaXRlcmF0b3JdPT0iZnVuY3Rpb24ifWUuaXM9dDtjb25zdCBuPU9iamVjdC5mcmVlemUoW10pO2Z1bmN0aW9uIGkoKXtyZXR1cm4gbn1lLmVtcHR5PWk7ZnVuY3Rpb24qcihSKXt5aWVsZCBSfWUuc2luZ2xlPXI7ZnVuY3Rpb24gcyhSKXtyZXR1cm4gdChSKT9SOnIoUil9ZS53cmFwPXM7ZnVuY3Rpb24gbyhSKXtyZXR1cm4gUnx8bn1lLmZyb209bztmdW5jdGlvbipsKFIpe2ZvcihsZXQgTj1SLmxlbmd0aC0xO04+PTA7Ti0tKXlpZWxkIFJbTl19ZS5yZXZlcnNlPWw7ZnVuY3Rpb24gYShSKXtyZXR1cm4hUnx8UltTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmU9PT0hMH1lLmlzRW1wdHk9YTtmdW5jdGlvbiB1KFIpe3JldHVybiBSW1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9ZS5maXJzdD11O2Z1bmN0aW9uIGMoUixOKXtsZXQgTT0wO2Zvcihjb25zdCBiIG9mIFIpaWYoTihiLE0rKykpcmV0dXJuITA7cmV0dXJuITF9ZS5zb21lPWM7ZnVuY3Rpb24gZChSLE4pe2Zvcihjb25zdCBNIG9mIFIpaWYoTihNKSlyZXR1cm4gTX1lLmZpbmQ9ZDtmdW5jdGlvbiptKFIsTil7Zm9yKGNvbnN0IE0gb2YgUilOKE0pJiYoeWllbGQgTSl9ZS5maWx0ZXI9bTtmdW5jdGlvbipmKFIsTil7bGV0IE09MDtmb3IoY29uc3QgYiBvZiBSKXlpZWxkIE4oYixNKyspfWUubWFwPWY7ZnVuY3Rpb24qXyhSLE4pe2xldCBNPTA7Zm9yKGNvbnN0IGIgb2YgUil5aWVsZCpOKGIsTSsrKX1lLmZsYXRNYXA9XztmdW5jdGlvbipnKC4uLlIpe2Zvcihjb25zdCBOIG9mIFIpeWllbGQqTn1lLmNvbmNhdD1nO2Z1bmN0aW9uIEEoUixOLE0pe2xldCBiPU07Zm9yKGNvbnN0IHAgb2YgUiliPU4oYixwKTtyZXR1cm4gYn1lLnJlZHVjZT1BO2Z1bmN0aW9uKnYoUixOLE09Ui5sZW5ndGgpe2ZvcihOPDAmJihOKz1SLmxlbmd0aCksTTwwP00rPVIubGVuZ3RoOk0+Ui5sZW5ndGgmJihNPVIubGVuZ3RoKTtOPE07TisrKXlpZWxkIFJbTl19ZS5zbGljZT12O2Z1bmN0aW9uIHkoUixOPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSl7Y29uc3QgTT1bXTtpZihOPT09MClyZXR1cm5bTSxSXTtjb25zdCBiPVJbU3ltYm9sLml0ZXJhdG9yXSgpO2ZvcihsZXQgcD0wO3A8TjtwKyspe2NvbnN0IFQ9Yi5uZXh0KCk7aWYoVC5kb25lKXJldHVybltNLGUuZW1wdHkoKV07TS5wdXNoKFQudmFsdWUpfXJldHVybltNLHtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBifX1dfWUuY29uc3VtZT15O2FzeW5jIGZ1bmN0aW9uIEUoUil7Y29uc3QgTj1bXTtmb3IgYXdhaXQoY29uc3QgTSBvZiBSKU4ucHVzaChNKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKE4pfWUuYXN5bmNUb0FycmF5PUV9KShIdHx8KEh0PXt9KSk7ZnVuY3Rpb24gT2MoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gVmMoZSx0KXt9ZnVuY3Rpb24gTWkoZSl7aWYoSHQuaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChpKXt0LnB1c2goaSl9aWYodC5sZW5ndGg9PT0xKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IodCwiRW5jb3VudGVyZWQgZXJyb3JzIHdoaWxlIGRpc3Bvc2luZyBvZiBzdG9yZSIpO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1tdOmV9ZWxzZSBpZihlKXJldHVybiBlLmRpc3Bvc2UoKSxlfWZ1bmN0aW9uIHRvKC4uLmUpe3JldHVybiBVdCgoKT0+TWkoZSkpfWZ1bmN0aW9uIFV0KGUpe3JldHVybntkaXNwb3NlOmVvKCgpPT57ZSgpfSl9fWNvbnN0IGZuPWNsYXNzIGZue2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7aWYodGhpcy5fdG9EaXNwb3NlLnNpemUhPT0wKXRyeXtNaSh0aGlzLl90b0Rpc3Bvc2UpfWZpbmFsbHl7dGhpcy5fdG9EaXNwb3NlLmNsZWFyKCl9fWFkZCh0KXtpZighdClyZXR1cm4gdDtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkP2ZuLkRJU0FCTEVfRElTUE9TRURfV0FSTklOR3x8Y29uc29sZS53YXJuKG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBhIGRpc3Bvc2FibGUgdG8gYSBEaXNwb3NhYmxlU3RvcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9mLiBUaGUgYWRkZWQgb2JqZWN0IHdpbGwgYmUgbGVha2VkISIpLnN0YWNrKTp0aGlzLl90b0Rpc3Bvc2UuYWRkKHQpLHR9ZGVsZXRlQW5kTGVhayh0KXt0JiZ0aGlzLl90b0Rpc3Bvc2UuaGFzKHQpJiZ0aGlzLl90b0Rpc3Bvc2UuZGVsZXRlKHQpfX07Zm4uRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HPSExO2xldCB2dD1mbjtjb25zdCBDaT1jbGFzcyBDaXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyB2dCx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3Rlcih0KXtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQodCl9fTtDaS5Ob25lPU9iamVjdC5mcmVlemUoe2Rpc3Bvc2UoKXt9fSk7bGV0IHR0PUNpLFo9KEhlPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZWxlbWVudD10LHRoaXMubmV4dD1IZS5VbmRlZmluZWQsdGhpcy5wcmV2PUhlLlVuZGVmaW5lZH19LEhlLlVuZGVmaW5lZD1uZXcgSGUodm9pZCAwKSxIZSk7Y2xhc3Mgbm97Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1aLlVuZGVmaW5lZCx0aGlzLl9sYXN0PVouVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1aLlVuZGVmaW5lZH1jbGVhcigpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PVouVW5kZWZpbmVkOyl7Y29uc3Qgbj10Lm5leHQ7dC5wcmV2PVouVW5kZWZpbmVkLHQubmV4dD1aLlVuZGVmaW5lZCx0PW59dGhpcy5fZmlyc3Q9Wi5VbmRlZmluZWQsdGhpcy5fbGFzdD1aLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITEpfXB1c2godCl7cmV0dXJuIHRoaXMuX2luc2VydCh0LCEwKX1faW5zZXJ0KHQsbil7Y29uc3QgaT1uZXcgWih0KTtpZih0aGlzLl9maXJzdD09PVouVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PWksdGhpcy5fbGFzdD1pO2Vsc2UgaWYobil7Y29uc3Qgcz10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9aSxpLnByZXY9cyxzLm5leHQ9aX1lbHNle2NvbnN0IHM9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9aSxpLm5leHQ9cyxzLnByZXY9aX10aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKGkpKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PVouVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksdH19cG9wKCl7aWYodGhpcy5fbGFzdCE9PVouVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLHR9fV9yZW1vdmUodCl7aWYodC5wcmV2IT09Wi5VbmRlZmluZWQmJnQubmV4dCE9PVouVW5kZWZpbmVkKXtjb25zdCBuPXQucHJldjtuLm5leHQ9dC5uZXh0LHQubmV4dC5wcmV2PW59ZWxzZSB0LnByZXY9PT1aLlVuZGVmaW5lZCYmdC5uZXh0PT09Wi5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PVouVW5kZWZpbmVkLHRoaXMuX2xhc3Q9Wi5VbmRlZmluZWQpOnQubmV4dD09PVouVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9Wi5VbmRlZmluZWQpOnQucHJldj09PVouVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PVouVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PVouVW5kZWZpbmVkOyl5aWVsZCB0LmVsZW1lbnQsdD10Lm5leHR9fWNvbnN0IGlvPWdsb2JhbFRoaXMucGVyZm9ybWFuY2UmJnR5cGVvZiBnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIjtjbGFzcyBXdHtzdGF0aWMgY3JlYXRlKHQpe3JldHVybiBuZXcgV3QodCl9Y29uc3RydWN0b3IodCl7dGhpcy5fbm93PWlvJiZ0PT09ITE/RGF0ZS5ub3c6Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZS5ub3cuYmluZChnbG9iYWxUaGlzLnBlcmZvcm1hbmNlKSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfXJlc2V0KCl7dGhpcy5fc3RhcnRUaW1lPXRoaXMuX25vdygpLHRoaXMuX3N0b3BUaW1lPS0xfWVsYXBzZWQoKXtyZXR1cm4gdGhpcy5fc3RvcFRpbWUhPT0tMT90aGlzLl9zdG9wVGltZS10aGlzLl9zdGFydFRpbWU6dGhpcy5fbm93KCktdGhpcy5fc3RhcnRUaW1lfX12YXIgeG47KGZ1bmN0aW9uKGUpe2UuTm9uZT0oKT0+dHQuTm9uZTtmdW5jdGlvbiB0KHcsayl7cmV0dXJuIGQodywoKT0+e30sMCx2b2lkIDAsITAsdm9pZCAwLGspfWUuZGVmZXI9dDtmdW5jdGlvbiBuKHcpe3JldHVybihrLHg9bnVsbCxTKT0+e2xldCBEPSExLEk7cmV0dXJuIEk9dyhGPT57aWYoIUQpcmV0dXJuIEk/SS5kaXNwb3NlKCk6RD0hMCxrLmNhbGwoeCxGKX0sbnVsbCxTKSxEJiZJLmRpc3Bvc2UoKSxJfX1lLm9uY2U9bjtmdW5jdGlvbiBpKHcsayx4KXtyZXR1cm4gdSgoUyxEPW51bGwsSSk9PncoRj0+Uy5jYWxsKEQsayhGKSksbnVsbCxJKSx4KX1lLm1hcD1pO2Z1bmN0aW9uIHIodyxrLHgpe3JldHVybiB1KChTLEQ9bnVsbCxJKT0+dyhGPT57ayhGKSxTLmNhbGwoRCxGKX0sbnVsbCxJKSx4KX1lLmZvckVhY2g9cjtmdW5jdGlvbiBzKHcsayx4KXtyZXR1cm4gdSgoUyxEPW51bGwsSSk9PncoRj0+ayhGKSYmUy5jYWxsKEQsRiksbnVsbCxJKSx4KX1lLmZpbHRlcj1zO2Z1bmN0aW9uIG8odyl7cmV0dXJuIHd9ZS5zaWduYWw9bztmdW5jdGlvbiBsKC4uLncpe3JldHVybihrLHg9bnVsbCxTKT0+e2NvbnN0IEQ9dG8oLi4udy5tYXAoST0+SShGPT5rLmNhbGwoeCxGKSkpKTtyZXR1cm4gYyhELFMpfX1lLmFueT1sO2Z1bmN0aW9uIGEodyxrLHgsUyl7bGV0IEQ9eDtyZXR1cm4gaSh3LEk9PihEPWsoRCxJKSxEKSxTKX1lLnJlZHVjZT1hO2Z1bmN0aW9uIHUodyxrKXtsZXQgeDtjb25zdCBTPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7eD13KEQuZmlyZSxEKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXt4Py5kaXNwb3NlKCl9fSxEPW5ldyB2ZShTKTtyZXR1cm4gaz8uYWRkKEQpLEQuZXZlbnR9ZnVuY3Rpb24gYyh3LGspe3JldHVybiBrIGluc3RhbmNlb2YgQXJyYXk/ay5wdXNoKHcpOmsmJmsuYWRkKHcpLHd9ZnVuY3Rpb24gZCh3LGsseD0xMDAsUz0hMSxEPSExLEksRil7bGV0IFcsVSxWLFk9MCxzZTtjb25zdCBHZT17bGVha1dhcm5pbmdUaHJlc2hvbGQ6SSxvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7Vz13KEZjPT57WSsrLFU9ayhVLEZjKSxTJiYhViYmKHd0LmZpcmUoVSksVT12b2lkIDApLHNlPSgpPT57Y29uc3QgUGM9VTtVPXZvaWQgMCxWPXZvaWQgMCwoIVN8fFk+MSkmJnd0LmZpcmUoUGMpLFk9MH0sdHlwZW9mIHg9PSJudW1iZXIiPyhjbGVhclRpbWVvdXQoViksVj1zZXRUaW1lb3V0KHNlLHgpKTpWPT09dm9pZCAwJiYoVj0wLHF1ZXVlTWljcm90YXNrKHNlKSl9KX0sb25XaWxsUmVtb3ZlTGlzdGVuZXIoKXtEJiZZPjAmJnNlPy4oKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtzZT12b2lkIDAsVy5kaXNwb3NlKCl9fSx3dD1uZXcgdmUoR2UpO3JldHVybiBGPy5hZGQod3QpLHd0LmV2ZW50fWUuZGVib3VuY2U9ZDtmdW5jdGlvbiBtKHcsaz0wLHgpe3JldHVybiBlLmRlYm91bmNlKHcsKFMsRCk9PlM/KFMucHVzaChEKSxTKTpbRF0sayx2b2lkIDAsITAsdm9pZCAwLHgpfWUuYWNjdW11bGF0ZT1tO2Z1bmN0aW9uIGYodyxrPShTLEQpPT5TPT09RCx4KXtsZXQgUz0hMCxEO3JldHVybiBzKHcsST0+e2NvbnN0IEY9U3x8IWsoSSxEKTtyZXR1cm4gUz0hMSxEPUksRn0seCl9ZS5sYXRjaD1mO2Z1bmN0aW9uIF8odyxrLHgpe3JldHVybltlLmZpbHRlcih3LGsseCksZS5maWx0ZXIodyxTPT4hayhTKSx4KV19ZS5zcGxpdD1fO2Z1bmN0aW9uIGcodyxrPSExLHg9W10sUyl7bGV0IEQ9eC5zbGljZSgpLEk9dyhVPT57RD9ELnB1c2goVSk6Vy5maXJlKFUpfSk7UyYmUy5hZGQoSSk7Y29uc3QgRj0oKT0+e0Q/LmZvckVhY2goVT0+Vy5maXJlKFUpKSxEPW51bGx9LFc9bmV3IHZlKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7SXx8KEk9dyhVPT5XLmZpcmUoVSkpLFMmJlMuYWRkKEkpKX0sb25EaWRBZGRGaXJzdExpc3RlbmVyKCl7RCYmKGs/c2V0VGltZW91dChGKTpGKCkpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe0kmJkkuZGlzcG9zZSgpLEk9bnVsbH19KTtyZXR1cm4gUyYmUy5hZGQoVyksVy5ldmVudH1lLmJ1ZmZlcj1nO2Z1bmN0aW9uIEEodyxrKXtyZXR1cm4oUyxELEkpPT57Y29uc3QgRj1rKG5ldyB5KTtyZXR1cm4gdyhmdW5jdGlvbihXKXtjb25zdCBVPUYuZXZhbHVhdGUoVyk7VSE9PXYmJlMuY2FsbChELFUpfSx2b2lkIDAsSSl9fWUuY2hhaW49QTtjb25zdCB2PVN5bWJvbCgiSGFsdENoYWluYWJsZSIpO2NsYXNzIHl7Y29uc3RydWN0b3IoKXt0aGlzLnN0ZXBzPVtdfW1hcChrKXtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKGspLHRoaXN9Zm9yRWFjaChrKXtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKHg9PihrKHgpLHgpKSx0aGlzfWZpbHRlcihrKXtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKHg9PmsoeCk/eDp2KSx0aGlzfXJlZHVjZShrLHgpe2xldCBTPXg7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChEPT4oUz1rKFMsRCksUykpLHRoaXN9bGF0Y2goaz0oeCxTKT0+eD09PVMpe2xldCB4PSEwLFM7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChEPT57Y29uc3QgST14fHwhayhELFMpO3JldHVybiB4PSExLFM9RCxJP0Q6dn0pLHRoaXN9ZXZhbHVhdGUoayl7Zm9yKGNvbnN0IHggb2YgdGhpcy5zdGVwcylpZihrPXgoayksaz09PXYpYnJlYWs7cmV0dXJuIGt9fWZ1bmN0aW9uIEUodyxrLHg9Uz0+Uyl7Y29uc3QgUz0oLi4uVyk9PkYuZmlyZSh4KC4uLlcpKSxEPSgpPT53Lm9uKGssUyksST0oKT0+dy5yZW1vdmVMaXN0ZW5lcihrLFMpLEY9bmV3IHZlKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOkQsb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6SX0pO3JldHVybiBGLmV2ZW50fWUuZnJvbU5vZGVFdmVudEVtaXR0ZXI9RTtmdW5jdGlvbiBSKHcsayx4PVM9PlMpe2NvbnN0IFM9KC4uLlcpPT5GLmZpcmUoeCguLi5XKSksRD0oKT0+dy5hZGRFdmVudExpc3RlbmVyKGssUyksST0oKT0+dy5yZW1vdmVFdmVudExpc3RlbmVyKGssUyksRj1uZXcgdmUoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6RCxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjpJfSk7cmV0dXJuIEYuZXZlbnR9ZS5mcm9tRE9NRXZlbnRFbWl0dGVyPVI7ZnVuY3Rpb24gTih3KXtyZXR1cm4gbmV3IFByb21pc2Uoaz0+bih3KShrKSl9ZS50b1Byb21pc2U9TjtmdW5jdGlvbiBNKHcpe2NvbnN0IGs9bmV3IHZlO3JldHVybiB3LnRoZW4oeD0+e2suZmlyZSh4KX0sKCk9PntrLmZpcmUodm9pZCAwKX0pLmZpbmFsbHkoKCk9PntrLmRpc3Bvc2UoKX0pLGsuZXZlbnR9ZS5mcm9tUHJvbWlzZT1NO2Z1bmN0aW9uIGIodyxrKXtyZXR1cm4gdyh4PT5rLmZpcmUoeCkpfWUuZm9yd2FyZD1iO2Z1bmN0aW9uIHAodyxrLHgpe3JldHVybiBrKHgpLHcoUz0+ayhTKSl9ZS5ydW5BbmRTdWJzY3JpYmU9cDtjbGFzcyBUe2NvbnN0cnVjdG9yKGsseCl7dGhpcy5fb2JzZXJ2YWJsZT1rLHRoaXMuX2NvdW50ZXI9MCx0aGlzLl9oYXNDaGFuZ2VkPSExO2NvbnN0IFM9e29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PntrLmFkZE9ic2VydmVyKHRoaXMpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e2sucmVtb3ZlT2JzZXJ2ZXIodGhpcyl9fTt0aGlzLmVtaXR0ZXI9bmV3IHZlKFMpLHgmJnguYWRkKHRoaXMuZW1pdHRlcil9YmVnaW5VcGRhdGUoayl7dGhpcy5fY291bnRlcisrfWhhbmRsZVBvc3NpYmxlQ2hhbmdlKGspe31oYW5kbGVDaGFuZ2Uoayx4KXt0aGlzLl9oYXNDaGFuZ2VkPSEwfWVuZFVwZGF0ZShrKXt0aGlzLl9jb3VudGVyLS0sdGhpcy5fY291bnRlcj09PTAmJih0aGlzLl9vYnNlcnZhYmxlLnJlcG9ydENoYW5nZXMoKSx0aGlzLl9oYXNDaGFuZ2VkJiYodGhpcy5faGFzQ2hhbmdlZD0hMSx0aGlzLmVtaXR0ZXIuZmlyZSh0aGlzLl9vYnNlcnZhYmxlLmdldCgpKSkpfX1mdW5jdGlvbiBIKHcsayl7cmV0dXJuIG5ldyBUKHcsaykuZW1pdHRlci5ldmVudH1lLmZyb21PYnNlcnZhYmxlPUg7ZnVuY3Rpb24gTCh3KXtyZXR1cm4oayx4LFMpPT57bGV0IEQ9MCxJPSExO2NvbnN0IEY9e2JlZ2luVXBkYXRlKCl7RCsrfSxlbmRVcGRhdGUoKXtELS0sRD09PTAmJih3LnJlcG9ydENoYW5nZXMoKSxJJiYoST0hMSxrLmNhbGwoeCkpKX0saGFuZGxlUG9zc2libGVDaGFuZ2UoKXt9LGhhbmRsZUNoYW5nZSgpe0k9ITB9fTt3LmFkZE9ic2VydmVyKEYpLHcucmVwb3J0Q2hhbmdlcygpO2NvbnN0IFc9e2Rpc3Bvc2UoKXt3LnJlbW92ZU9ic2VydmVyKEYpfX07cmV0dXJuIFMgaW5zdGFuY2VvZiB2dD9TLmFkZChXKTpBcnJheS5pc0FycmF5KFMpJiZTLnB1c2goVyksV319ZS5mcm9tT2JzZXJ2YWJsZUxpZ2h0PUx9KSh4bnx8KHhuPXt9KSk7Y29uc3QgcHQ9Y2xhc3MgcHR7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lckNvdW50PTAsdGhpcy5pbnZvY2F0aW9uQ291bnQ9MCx0aGlzLmVsYXBzZWRPdmVyYWxsPTAsdGhpcy5kdXJhdGlvbnM9W10sdGhpcy5uYW1lPWAke3R9XyR7cHQuX2lkUG9vbCsrfWAscHQuYWxsLmFkZCh0aGlzKX1zdGFydCh0KXt0aGlzLl9zdG9wV2F0Y2g9bmV3IFd0LHRoaXMubGlzdGVuZXJDb3VudD10fXN0b3AoKXtpZih0aGlzLl9zdG9wV2F0Y2gpe2NvbnN0IHQ9dGhpcy5fc3RvcFdhdGNoLmVsYXBzZWQoKTt0aGlzLmR1cmF0aW9ucy5wdXNoKHQpLHRoaXMuZWxhcHNlZE92ZXJhbGwrPXQsdGhpcy5pbnZvY2F0aW9uQ291bnQrPTEsdGhpcy5fc3RvcFdhdGNoPXZvaWQgMH19fTtwdC5hbGw9bmV3IFNldCxwdC5faWRQb29sPTA7bGV0IFRuPXB0LHJvPS0xO2NvbnN0IHBuPWNsYXNzIHBue2NvbnN0cnVjdG9yKHQsbixpPShwbi5faWRQb29sKyspLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgzLCIwIikpe3RoaXMuX2Vycm9ySGFuZGxlcj10LHRoaXMudGhyZXNob2xkPW4sdGhpcy5uYW1lPWksdGhpcy5fd2FybkNvdW50ZG93bj0wfWRpc3Bvc2UoKXt0aGlzLl9zdGFja3M/LmNsZWFyKCl9Y2hlY2sodCxuKXtjb25zdCBpPXRoaXMudGhyZXNob2xkO2lmKGk8PTB8fG48aSlyZXR1cm47dGhpcy5fc3RhY2tzfHwodGhpcy5fc3RhY2tzPW5ldyBNYXApO2NvbnN0IHI9dGhpcy5fc3RhY2tzLmdldCh0LnZhbHVlKXx8MDtpZih0aGlzLl9zdGFja3Muc2V0KHQudmFsdWUscisxKSx0aGlzLl93YXJuQ291bnRkb3duLT0xLHRoaXMuX3dhcm5Db3VudGRvd248PTApe3RoaXMuX3dhcm5Db3VudGRvd249aSouNTtjb25zdFtzLG9dPXRoaXMuZ2V0TW9zdEZyZXF1ZW50U3RhY2soKSxsPWBbJHt0aGlzLm5hbWV9XSBwb3RlbnRpYWwgbGlzdGVuZXIgTEVBSyBkZXRlY3RlZCwgaGF2aW5nICR7bn0gbGlzdGVuZXJzIGFscmVhZHkuIE1PU1QgZnJlcXVlbnQgbGlzdGVuZXIgKCR7b30pOmA7Y29uc29sZS53YXJuKGwpLGNvbnNvbGUud2FybihzKTtjb25zdCBhPW5ldyBzbyhsLHMpO3RoaXMuX2Vycm9ySGFuZGxlcihhKX1yZXR1cm4oKT0+e2NvbnN0IHM9dGhpcy5fc3RhY2tzLmdldCh0LnZhbHVlKXx8MDt0aGlzLl9zdGFja3Muc2V0KHQudmFsdWUscy0xKX19Z2V0TW9zdEZyZXF1ZW50U3RhY2soKXtpZighdGhpcy5fc3RhY2tzKXJldHVybjtsZXQgdCxuPTA7Zm9yKGNvbnN0W2kscl1vZiB0aGlzLl9zdGFja3MpKCF0fHxuPHIpJiYodD1baSxyXSxuPXIpO3JldHVybiB0fX07cG4uX2lkUG9vbD0xO2xldCBrbj1wbjtjbGFzcyBBbntzdGF0aWMgY3JlYXRlKCl7Y29uc3QgdD1uZXcgRXJyb3I7cmV0dXJuIG5ldyBBbih0LnN0YWNrPz8iIil9Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10fXByaW50KCl7Y29uc29sZS53YXJuKHRoaXMudmFsdWUuc3BsaXQoYApgKS5zbGljZSgyKS5qb2luKGAKYCkpfX1jbGFzcyBzbyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIodCksdGhpcy5uYW1lPSJMaXN0ZW5lckxlYWtFcnJvciIsdGhpcy5zdGFjaz1ufX1jbGFzcyBhbyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbil7c3VwZXIodCksdGhpcy5uYW1lPSJMaXN0ZW5lclJlZnVzYWxFcnJvciIsdGhpcy5zdGFjaz1ufX1jbGFzcyBTbntjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXR9fWNvbnN0IG9vPTI7Y2xhc3MgdmV7Y29uc3RydWN0b3IodCl7dGhpcy5fc2l6ZT0wLHRoaXMuX29wdGlvbnM9dCx0aGlzLl9sZWFrYWdlTW9uPXRoaXMuX29wdGlvbnM/LmxlYWtXYXJuaW5nVGhyZXNob2xkP25ldyBrbih0Py5vbkxpc3RlbmVyRXJyb3I/P1JlLHRoaXMuX29wdGlvbnM/LmxlYWtXYXJuaW5nVGhyZXNob2xkPz9ybyk6dm9pZCAwLHRoaXMuX3BlcmZNb249dGhpcy5fb3B0aW9ucz8uX3Byb2ZOYW1lP25ldyBUbih0aGlzLl9vcHRpb25zLl9wcm9mTmFtZSk6dm9pZCAwLHRoaXMuX2RlbGl2ZXJ5UXVldWU9dGhpcy5fb3B0aW9ucz8uZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCx0aGlzLl9kZWxpdmVyeVF1ZXVlPy5jdXJyZW50PT09dGhpcyYmdGhpcy5fZGVsaXZlcnlRdWV1ZS5yZXNldCgpLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz12b2lkIDAsdGhpcy5fc2l6ZT0wKSx0aGlzLl9vcHRpb25zPy5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcj8uKCksdGhpcy5fbGVha2FnZU1vbj8uZGlzcG9zZSgpKX1nZXQgZXZlbnQoKXtyZXR1cm4gdGhpcy5fZXZlbnQ/Pyh0aGlzLl9ldmVudD0odCxuLGkpPT57aWYodGhpcy5fbGVha2FnZU1vbiYmdGhpcy5fc2l6ZT50aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZCoqMil7Y29uc3QgbD1gWyR7dGhpcy5fbGVha2FnZU1vbi5uYW1lfV0gUkVGVVNFUyB0byBhY2NlcHQgbmV3IGxpc3RlbmVycyBiZWNhdXNlIGl0IGV4Y2VlZGVkIGl0cyB0aHJlc2hvbGQgYnkgZmFyICgke3RoaXMuX3NpemV9IHZzICR7dGhpcy5fbGVha2FnZU1vbi50aHJlc2hvbGR9KWA7Y29uc29sZS53YXJuKGwpO2NvbnN0IGE9dGhpcy5fbGVha2FnZU1vbi5nZXRNb3N0RnJlcXVlbnRTdGFjaygpPz9bIlVOS05PV04gc3RhY2siLC0xXSx1PW5ldyBhbyhgJHtsfS4gSElOVDogU3RhY2sgc2hvd3MgbW9zdCBmcmVxdWVudCBsaXN0ZW5lciAoJHthWzFdfS10aW1lcylgLGFbMF0pO3JldHVybih0aGlzLl9vcHRpb25zPy5vbkxpc3RlbmVyRXJyb3J8fFJlKSh1KSx0dC5Ob25lfWlmKHRoaXMuX2Rpc3Bvc2VkKXJldHVybiB0dC5Ob25lO24mJih0PXQuYmluZChuKSk7Y29uc3Qgcj1uZXcgU24odCk7bGV0IHM7dGhpcy5fbGVha2FnZU1vbiYmdGhpcy5fc2l6ZT49TWF0aC5jZWlsKHRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKi4yKSYmKHIuc3RhY2s9QW4uY3JlYXRlKCkscz10aGlzLl9sZWFrYWdlTW9uLmNoZWNrKHIuc3RhY2ssdGhpcy5fc2l6ZSsxKSksdGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycyBpbnN0YW5jZW9mIFNuPyh0aGlzLl9kZWxpdmVyeVF1ZXVlPz8odGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgbG8pLHRoaXMuX2xpc3RlbmVycz1bdGhpcy5fbGlzdGVuZXJzLHJdKTp0aGlzLl9saXN0ZW5lcnMucHVzaChyKToodGhpcy5fb3B0aW9ucz8ub25XaWxsQWRkRmlyc3RMaXN0ZW5lcj8uKHRoaXMpLHRoaXMuX2xpc3RlbmVycz1yLHRoaXMuX29wdGlvbnM/Lm9uRGlkQWRkRmlyc3RMaXN0ZW5lcj8uKHRoaXMpKSx0aGlzLl9zaXplKys7Y29uc3Qgbz1VdCgoKT0+e3M/LigpLHRoaXMuX3JlbW92ZUxpc3RlbmVyKHIpfSk7cmV0dXJuIGkgaW5zdGFuY2VvZiB2dD9pLmFkZChvKTpBcnJheS5pc0FycmF5KGkpJiZpLnB1c2gobyksb30pLHRoaXMuX2V2ZW50fV9yZW1vdmVMaXN0ZW5lcih0KXtpZih0aGlzLl9vcHRpb25zPy5vbldpbGxSZW1vdmVMaXN0ZW5lcj8uKHRoaXMpLCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2lmKHRoaXMuX3NpemU9PT0xKXt0aGlzLl9saXN0ZW5lcnM9dm9pZCAwLHRoaXMuX29wdGlvbnM/Lm9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyPy4odGhpcyksdGhpcy5fc2l6ZT0wO3JldHVybn1jb25zdCBuPXRoaXMuX2xpc3RlbmVycyxpPW4uaW5kZXhPZih0KTtpZihpPT09LTEpdGhyb3cgY29uc29sZS5sb2coImRpc3Bvc2VkPyIsdGhpcy5fZGlzcG9zZWQpLGNvbnNvbGUubG9nKCJzaXplPyIsdGhpcy5fc2l6ZSksY29uc29sZS5sb2coImFycj8iLEpTT04uc3RyaW5naWZ5KHRoaXMuX2xpc3RlbmVycykpLG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGRpc3Bvc2UgdW5rbm93biBsaXN0ZW5lciIpO3RoaXMuX3NpemUtLSxuW2ldPXZvaWQgMDtjb25zdCByPXRoaXMuX2RlbGl2ZXJ5UXVldWUuY3VycmVudD09PXRoaXM7aWYodGhpcy5fc2l6ZSpvbzw9bi5sZW5ndGgpe2xldCBzPTA7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspbltvXT9uW3MrK109bltvXTpyJiYodGhpcy5fZGVsaXZlcnlRdWV1ZS5lbmQtLSxzPHRoaXMuX2RlbGl2ZXJ5UXVldWUuaSYmdGhpcy5fZGVsaXZlcnlRdWV1ZS5pLS0pO24ubGVuZ3RoPXN9fV9kZWxpdmVyKHQsbil7aWYoIXQpcmV0dXJuO2NvbnN0IGk9dGhpcy5fb3B0aW9ucz8ub25MaXN0ZW5lckVycm9yfHxSZTtpZighaSl7dC52YWx1ZShuKTtyZXR1cm59dHJ5e3QudmFsdWUobil9Y2F0Y2gocil7aShyKX19X2RlbGl2ZXJRdWV1ZSh0KXtjb25zdCBuPXQuY3VycmVudC5fbGlzdGVuZXJzO2Zvcig7dC5pPHQuZW5kOyl0aGlzLl9kZWxpdmVyKG5bdC5pKytdLHQudmFsdWUpO3QucmVzZXQoKX1maXJlKHQpe2lmKHRoaXMuX2RlbGl2ZXJ5UXVldWU/LmN1cnJlbnQmJih0aGlzLl9kZWxpdmVyUXVldWUodGhpcy5fZGVsaXZlcnlRdWV1ZSksdGhpcy5fcGVyZk1vbj8uc3RvcCgpKSx0aGlzLl9wZXJmTW9uPy5zdGFydCh0aGlzLl9zaXplKSx0aGlzLl9saXN0ZW5lcnMpaWYodGhpcy5fbGlzdGVuZXJzIGluc3RhbmNlb2YgU24pdGhpcy5fZGVsaXZlcih0aGlzLl9saXN0ZW5lcnMsdCk7ZWxzZXtjb25zdCBuPXRoaXMuX2RlbGl2ZXJ5UXVldWU7bi5lbnF1ZXVlKHRoaXMsdCx0aGlzLl9saXN0ZW5lcnMubGVuZ3RoKSx0aGlzLl9kZWxpdmVyUXVldWUobil9dGhpcy5fcGVyZk1vbj8uc3RvcCgpfWhhc0xpc3RlbmVycygpe3JldHVybiB0aGlzLl9zaXplPjB9fWNsYXNzIGxve2NvbnN0cnVjdG9yKCl7dGhpcy5pPS0xLHRoaXMuZW5kPTB9ZW5xdWV1ZSh0LG4saSl7dGhpcy5pPTAsdGhpcy5lbmQ9aSx0aGlzLmN1cnJlbnQ9dCx0aGlzLnZhbHVlPW59cmVzZXQoKXt0aGlzLmk9dGhpcy5lbmQsdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLnZhbHVlPXZvaWQgMH19ZnVuY3Rpb24gdW8oZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1mdW5jdGlvbiBjbyhlKXtsZXQgdD1bXTtmb3IoO09iamVjdC5wcm90b3R5cGUhPT1lOyl0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gdH1mdW5jdGlvbiBMbihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGNvKGUpKXR5cGVvZiBlW25dPT0iZnVuY3Rpb24iJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gaG8oZSx0KXtjb25zdCBuPXI9PmZ1bmN0aW9uKCl7Y29uc3Qgcz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQocixzKX0saT17fTtmb3IoY29uc3QgciBvZiBlKWlbcl09bihyKTtyZXR1cm4gaX1mdW5jdGlvbiBtbygpe3JldHVybiBnbG9iYWxUaGlzLl9WU0NPREVfTkxTX01FU1NBR0VTfWZ1bmN0aW9uIE5pKCl7cmV0dXJuIGdsb2JhbFRoaXMuX1ZTQ09ERV9OTFNfTEFOR1VBR0V9Y29uc3QgZm89TmkoKT09PSJwc2V1ZG8ifHx0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5sb2NhdGlvbiYmZG9jdW1lbnQubG9jYXRpb24uaGFzaC5pbmRleE9mKCJwc2V1ZG89dHJ1ZSIpPj0wO2Z1bmN0aW9uIERpKGUsdCl7bGV0IG47cmV0dXJuIHQubGVuZ3RoPT09MD9uPWU6bj1lLnJlcGxhY2UoL1x7KFxkKylcfS9nLChpLHIpPT57Y29uc3Qgcz1yWzBdLG89dFtzXTtsZXQgbD1pO3JldHVybiB0eXBlb2Ygbz09InN0cmluZyI/bD1vOih0eXBlb2Ygbz09Im51bWJlciJ8fHR5cGVvZiBvPT0iYm9vbGVhbiJ8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKGw9U3RyaW5nKG8pKSxsfSksZm8mJihuPSLvvLsiK24ucmVwbGFjZSgvW2FvdWVpXS9nLCIkJiQmIikrIu+8vSIpLG59ZnVuY3Rpb24gUShlLHQsLi4ubil7cmV0dXJuIERpKHR5cGVvZiBlPT0ibnVtYmVyIj9wbyhlLHQpOnQsbil9ZnVuY3Rpb24gcG8oZSx0KXtjb25zdCBuPW1vKCk/LltlXTtpZih0eXBlb2YgbiE9InN0cmluZyIpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoYCEhISBOTFMgTUlTU0lORzogJHtlfSAhISFgKX1yZXR1cm4gbn1jb25zdCBudD0iZW4iO2xldCBDbj0hMSxFbj0hMSxSbj0hMSxGdCxNbj1udCxJaT1udCxnbyxNZTtjb25zdCBKZT1nbG9iYWxUaGlzO2xldCBmZTt0eXBlb2YgSmUudnNjb2RlPCJ1IiYmdHlwZW9mIEplLnZzY29kZS5wcm9jZXNzPCJ1Ij9mZT1KZS52c2NvZGUucHJvY2Vzczp0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzPy52ZXJzaW9ucz8ubm9kZT09InN0cmluZyImJihmZT1wcm9jZXNzKTtjb25zdCBibz10eXBlb2YgZmU/LnZlcnNpb25zPy5lbGVjdHJvbj09InN0cmluZyImJmZlPy50eXBlPT09InJlbmRlcmVyIjtpZih0eXBlb2YgZmU9PSJvYmplY3QiKXtDbj1mZS5wbGF0Zm9ybT09PSJ3aW4zMiIsRW49ZmUucGxhdGZvcm09PT0iZGFyd2luIixSbj1mZS5wbGF0Zm9ybT09PSJsaW51eCIsUm4mJmZlLmVudi5TTkFQJiZmZS5lbnYuU05BUF9SRVZJU0lPTixmZS5lbnYuQ0l8fGZlLmVudi5CVUlMRF9BUlRJRkFDVFNUQUdJTkdESVJFQ1RPUlksRnQ9bnQsTW49bnQ7Y29uc3QgZT1mZS5lbnYuVlNDT0RFX05MU19DT05GSUc7aWYoZSl0cnl7Y29uc3QgdD1KU09OLnBhcnNlKGUpO0Z0PXQudXNlckxvY2FsZSxJaT10Lm9zTG9jYWxlLE1uPXQucmVzb2x2ZWRMYW5ndWFnZXx8bnQsZ289dC5sYW5ndWFnZVBhY2s/LnRyYW5zbGF0aW9uc0NvbmZpZ0ZpbGV9Y2F0Y2h7fX1lbHNlIHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiYhYm8/KE1lPW5hdmlnYXRvci51c2VyQWdlbnQsQ249TWUuaW5kZXhPZigiV2luZG93cyIpPj0wLEVuPU1lLmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLChNZS5pbmRleE9mKCJNYWNpbnRvc2giKT49MHx8TWUuaW5kZXhPZigiaVBhZCIpPj0wfHxNZS5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjAsUm49TWUuaW5kZXhPZigiTGludXgiKT49MCxNZT8uaW5kZXhPZigiTW9iaSIpPj0wLE1uPU5pKCl8fG50LEZ0PW5hdmlnYXRvci5sYW5ndWFnZS50b0xvd2VyQ2FzZSgpLElpPUZ0KTpjb25zb2xlLmVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBwbGF0Zm9ybS4iKTtjb25zdCB5dD1Dbixfbz1FbixBZT1NZSx3bz10eXBlb2YgSmUucG9zdE1lc3NhZ2U9PSJmdW5jdGlvbiImJiFKZS5pbXBvcnRTY3JpcHRzOygoKT0+e2lmKHdvKXtjb25zdCBlPVtdO0plLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntpZihuLmRhdGEmJm4uZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspe2NvbnN0IHM9ZVtpXTtpZihzLmlkPT09bi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKXtlLnNwbGljZShpLDEpLHMuY2FsbGJhY2soKTtyZXR1cm59fX0pO2xldCB0PTA7cmV0dXJuIG49Pntjb25zdCBpPSsrdDtlLnB1c2goe2lkOmksY2FsbGJhY2s6bn0pLEplLnBvc3RNZXNzYWdlKHt2c2NvZGVTY2hlZHVsZUFzeW5jV29yazppfSwiKiIpfX1yZXR1cm4gZT0+c2V0VGltZW91dChlKX0pKCk7Y29uc3Qgdm89ISEoQWUmJkFlLmluZGV4T2YoIkNocm9tZSIpPj0wKTtBZSYmQWUuaW5kZXhPZigiRmlyZWZveCIpPj0wLCF2byYmQWUmJkFlLmluZGV4T2YoIlNhZmFyaSIpPj0wLEFlJiZBZS5pbmRleE9mKCJFZGcvIik+PTAsQWUmJkFlLmluZGV4T2YoIkFuZHJvaWQiKT49MDtmdW5jdGlvbiB5byhlKXtyZXR1cm4gZX1jbGFzcyB4b3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGFzdENhY2hlPXZvaWQgMCx0aGlzLmxhc3RBcmdLZXk9dm9pZCAwLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyh0aGlzLl9mbj10LHRoaXMuX2NvbXB1dGVLZXk9eW8pOih0aGlzLl9mbj1uLHRoaXMuX2NvbXB1dGVLZXk9dC5nZXRDYWNoZUtleSl9Z2V0KHQpe2NvbnN0IG49dGhpcy5fY29tcHV0ZUtleSh0KTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09biYmKHRoaXMubGFzdEFyZ0tleT1uLHRoaXMubGFzdENhY2hlPXRoaXMuX2ZuKHQpKSx0aGlzLmxhc3RDYWNoZX19Y2xhc3Mgeml7Y29uc3RydWN0b3IodCl7dGhpcy5leGVjdXRvcj10LHRoaXMuX2RpZFJ1bj0hMX1nZXQgdmFsdWUoKXtpZighdGhpcy5fZGlkUnVuKXRyeXt0aGlzLl92YWx1ZT10aGlzLmV4ZWN1dG9yKCl9Y2F0Y2godCl7dGhpcy5fZXJyb3I9dH1maW5hbGx5e3RoaXMuX2RpZFJ1bj0hMH1pZih0aGlzLl9lcnJvcil0aHJvdyB0aGlzLl9lcnJvcjtyZXR1cm4gdGhpcy5fdmFsdWV9Z2V0IHJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiBUbyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxce1x9XCpcK1w/XHxcXlwkXC5cW1xdXChcKV0vZywiXFwkJiIpfWZ1bmN0aW9uIGtvKGUpe3JldHVybiBlLnNwbGl0KC9cclxufFxyfFxuLyl9ZnVuY3Rpb24gQW8oZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBpPWUuY2hhckNvZGVBdCh0KTtpZihpIT09MzImJmkhPT05KXJldHVybiB0fXJldHVybi0xfWZ1bmN0aW9uIFNvKGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IG49dDtuPj0wO24tLSl7Y29uc3QgaT1lLmNoYXJDb2RlQXQobik7aWYoaSE9PTMyJiZpIT09OSlyZXR1cm4gbn1yZXR1cm4tMX1mdW5jdGlvbiBIaShlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIFB0KGUpe3JldHVybiA1NTI5Njw9ZSYmZTw9NTYzMTl9ZnVuY3Rpb24gTm4oZSl7cmV0dXJuIDU2MzIwPD1lJiZlPD01NzM0M31mdW5jdGlvbiBVaShlLHQpe3JldHVybihlLTU1Mjk2PDwxMCkrKHQtNTYzMjApKzY1NTM2fWZ1bmN0aW9uIExvKGUsdCxuKXtjb25zdCBpPWUuY2hhckNvZGVBdChuKTtpZihQdChpKSYmbisxPHQpe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4rMSk7aWYoTm4ocikpcmV0dXJuIFVpKGkscil9cmV0dXJuIGl9Y29uc3QgQ289L15bXHRcblxyXHgyMC1ceDdFXSokLztmdW5jdGlvbiBFbyhlKXtyZXR1cm4gQ28udGVzdChlKX1jb25zdCBDZT1jbGFzcyBDZXtzdGF0aWMgZ2V0SW5zdGFuY2UodCl7cmV0dXJuIENlLmNhY2hlLmdldChBcnJheS5mcm9tKHQpKX1zdGF0aWMgZ2V0TG9jYWxlcygpe3JldHVybiBDZS5fbG9jYWxlcy52YWx1ZX1jb25zdHJ1Y3Rvcih0KXt0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5PXR9aXNBbWJpZ3VvdXModCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuaGFzKHQpfWdldFByaW1hcnlDb25mdXNhYmxlKHQpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmdldCh0KX1nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpe3JldHVybiBuZXcgU2V0KHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkua2V5cygpKX19O0NlLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3IHppKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjUsMTE5ODQ2LDEwOV0sIl9kZWZhdWx0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImNzIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJkZSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZXMiOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSwxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZnIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiaXQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImphIjpbODIxMSw0NSw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyOTIsNDQsNjUzMDcsNTldLCJrbyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicGwiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicHQtQlIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicXBzLXBsb2MiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicnUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDMwNSwxMDUsOTIxLDczLDEwMDksMTEyLDIxNSwxMjAsNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ0ciI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ6aC1oYW5zIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1Mjg4LDQwLDY1Mjg5LDQxXSwiemgtaGFudCI6WzgyMTEsNDUsNjUzNzQsMTI2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTMwNyw1OV19JykpLENlLmNhY2hlPW5ldyB4byh7Z2V0Q2FjaGVLZXk6SlNPTi5zdHJpbmdpZnl9LHQ9PntmdW5jdGlvbiBuKGMpe2NvbnN0IGQ9bmV3IE1hcDtmb3IobGV0IG09MDttPGMubGVuZ3RoO20rPTIpZC5zZXQoY1ttXSxjW20rMV0pO3JldHVybiBkfWZ1bmN0aW9uIGkoYyxkKXtjb25zdCBtPW5ldyBNYXAoYyk7Zm9yKGNvbnN0W2YsX11vZiBkKW0uc2V0KGYsXyk7cmV0dXJuIG19ZnVuY3Rpb24gcihjLGQpe2lmKCFjKXJldHVybiBkO2NvbnN0IG09bmV3IE1hcDtmb3IoY29uc3RbZixfXW9mIGMpZC5oYXMoZikmJm0uc2V0KGYsXyk7cmV0dXJuIG19Y29uc3Qgcz1DZS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLnZhbHVlO2xldCBvPXQuZmlsdGVyKGM9PiFjLnN0YXJ0c1dpdGgoIl8iKSYmYyBpbiBzKTtvLmxlbmd0aD09PTAmJihvPVsiX2RlZmF1bHQiXSk7bGV0IGw7Zm9yKGNvbnN0IGMgb2Ygbyl7Y29uc3QgZD1uKHNbY10pO2w9cihsLGQpfWNvbnN0IGE9bihzLl9jb21tb24pLHU9aShhLGwpO3JldHVybiBuZXcgQ2UodSl9KSxDZS5fbG9jYWxlcz1uZXcgemkoKCk9Pk9iamVjdC5rZXlzKENlLmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWUpLmZpbHRlcih0PT4hdC5zdGFydHNXaXRoKCJfIikpKTtsZXQgeHQ9Q2U7Y29uc3QgZ3Q9Y2xhc3MgZ3R7c3RhdGljIGdldFJhd0RhdGEoKXtyZXR1cm4gSlNPTi5wYXJzZSgiWzksMTAsMTEsMTIsMTMsMzIsMTI3LDE2MCwxNzMsODQ3LDE1NjQsNDQ0Nyw0NDQ4LDYwNjgsNjA2OSw2MTU1LDYxNTYsNjE1Nyw2MTU4LDczNTUsNzM1Niw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgxOTksODIwMCw4MjAxLDgyMDIsODIwMyw4MjA0LDgyMDUsODIwNiw4MjA3LDgyMzQsODIzNSw4MjM2LDgyMzcsODIzOCw4MjM5LDgyODcsODI4OCw4Mjg5LDgyOTAsODI5MSw4MjkyLDgyOTMsODI5NCw4Mjk1LDgyOTYsODI5Nyw4Mjk4LDgyOTksODMwMCw4MzAxLDgzMDIsODMwMywxMDI0MCwxMjI4OCwxMjY0NCw2NTAyNCw2NTAyNSw2NTAyNiw2NTAyNyw2NTAyOCw2NTAyOSw2NTAzMCw2NTAzMSw2NTAzMiw2NTAzMyw2NTAzNCw2NTAzNSw2NTAzNiw2NTAzNyw2NTAzOCw2NTAzOSw2NTI3OSw2NTQ0MCw2NTUyMCw2NTUyMSw2NTUyMiw2NTUyMyw2NTUyNCw2NTUyNSw2NTUyNiw2NTUyNyw2NTUyOCw2NTUzMiw3ODg0NCwxMTkxNTUsMTE5MTU2LDExOTE1NywxMTkxNTgsMTE5MTU5LDExOTE2MCwxMTkxNjEsMTE5MTYyLDkxNzUwNCw5MTc1MDUsOTE3NTA2LDkxNzUwNyw5MTc1MDgsOTE3NTA5LDkxNzUxMCw5MTc1MTEsOTE3NTEyLDkxNzUxMyw5MTc1MTQsOTE3NTE1LDkxNzUxNiw5MTc1MTcsOTE3NTE4LDkxNzUxOSw5MTc1MjAsOTE3NTIxLDkxNzUyMiw5MTc1MjMsOTE3NTI0LDkxNzUyNSw5MTc1MjYsOTE3NTI3LDkxNzUyOCw5MTc1MjksOTE3NTMwLDkxNzUzMSw5MTc1MzIsOTE3NTMzLDkxNzUzNCw5MTc1MzUsOTE3NTM2LDkxNzUzNyw5MTc1MzgsOTE3NTM5LDkxNzU0MCw5MTc1NDEsOTE3NTQyLDkxNzU0Myw5MTc1NDQsOTE3NTQ1LDkxNzU0Niw5MTc1NDcsOTE3NTQ4LDkxNzU0OSw5MTc1NTAsOTE3NTUxLDkxNzU1Miw5MTc1NTMsOTE3NTU0LDkxNzU1NSw5MTc1NTYsOTE3NTU3LDkxNzU1OCw5MTc1NTksOTE3NTYwLDkxNzU2MSw5MTc1NjIsOTE3NTYzLDkxNzU2NCw5MTc1NjUsOTE3NTY2LDkxNzU2Nyw5MTc1NjgsOTE3NTY5LDkxNzU3MCw5MTc1NzEsOTE3NTcyLDkxNzU3Myw5MTc1NzQsOTE3NTc1LDkxNzU3Niw5MTc1NzcsOTE3NTc4LDkxNzU3OSw5MTc1ODAsOTE3NTgxLDkxNzU4Miw5MTc1ODMsOTE3NTg0LDkxNzU4NSw5MTc1ODYsOTE3NTg3LDkxNzU4OCw5MTc1ODksOTE3NTkwLDkxNzU5MSw5MTc1OTIsOTE3NTkzLDkxNzU5NCw5MTc1OTUsOTE3NTk2LDkxNzU5Nyw5MTc1OTgsOTE3NTk5LDkxNzYwMCw5MTc2MDEsOTE3NjAyLDkxNzYwMyw5MTc2MDQsOTE3NjA1LDkxNzYwNiw5MTc2MDcsOTE3NjA4LDkxNzYwOSw5MTc2MTAsOTE3NjExLDkxNzYxMiw5MTc2MTMsOTE3NjE0LDkxNzYxNSw5MTc2MTYsOTE3NjE3LDkxNzYxOCw5MTc2MTksOTE3NjIwLDkxNzYyMSw5MTc2MjIsOTE3NjIzLDkxNzYyNCw5MTc2MjUsOTE3NjI2LDkxNzYyNyw5MTc2MjgsOTE3NjI5LDkxNzYzMCw5MTc2MzEsOTE3NzYwLDkxNzc2MSw5MTc3NjIsOTE3NzYzLDkxNzc2NCw5MTc3NjUsOTE3NzY2LDkxNzc2Nyw5MTc3NjgsOTE3NzY5LDkxNzc3MCw5MTc3NzEsOTE3NzcyLDkxNzc3Myw5MTc3NzQsOTE3Nzc1LDkxNzc3Niw5MTc3NzcsOTE3Nzc4LDkxNzc3OSw5MTc3ODAsOTE3NzgxLDkxNzc4Miw5MTc3ODMsOTE3Nzg0LDkxNzc4NSw5MTc3ODYsOTE3Nzg3LDkxNzc4OCw5MTc3ODksOTE3NzkwLDkxNzc5MSw5MTc3OTIsOTE3NzkzLDkxNzc5NCw5MTc3OTUsOTE3Nzk2LDkxNzc5Nyw5MTc3OTgsOTE3Nzk5LDkxNzgwMCw5MTc4MDEsOTE3ODAyLDkxNzgwMyw5MTc4MDQsOTE3ODA1LDkxNzgwNiw5MTc4MDcsOTE3ODA4LDkxNzgwOSw5MTc4MTAsOTE3ODExLDkxNzgxMiw5MTc4MTMsOTE3ODE0LDkxNzgxNSw5MTc4MTYsOTE3ODE3LDkxNzgxOCw5MTc4MTksOTE3ODIwLDkxNzgyMSw5MTc4MjIsOTE3ODIzLDkxNzgyNCw5MTc4MjUsOTE3ODI2LDkxNzgyNyw5MTc4MjgsOTE3ODI5LDkxNzgzMCw5MTc4MzEsOTE3ODMyLDkxNzgzMyw5MTc4MzQsOTE3ODM1LDkxNzgzNiw5MTc4MzcsOTE3ODM4LDkxNzgzOSw5MTc4NDAsOTE3ODQxLDkxNzg0Miw5MTc4NDMsOTE3ODQ0LDkxNzg0NSw5MTc4NDYsOTE3ODQ3LDkxNzg0OCw5MTc4NDksOTE3ODUwLDkxNzg1MSw5MTc4NTIsOTE3ODUzLDkxNzg1NCw5MTc4NTUsOTE3ODU2LDkxNzg1Nyw5MTc4NTgsOTE3ODU5LDkxNzg2MCw5MTc4NjEsOTE3ODYyLDkxNzg2Myw5MTc4NjQsOTE3ODY1LDkxNzg2Niw5MTc4NjcsOTE3ODY4LDkxNzg2OSw5MTc4NzAsOTE3ODcxLDkxNzg3Miw5MTc4NzMsOTE3ODc0LDkxNzg3NSw5MTc4NzYsOTE3ODc3LDkxNzg3OCw5MTc4NzksOTE3ODgwLDkxNzg4MSw5MTc4ODIsOTE3ODgzLDkxNzg4NCw5MTc4ODUsOTE3ODg2LDkxNzg4Nyw5MTc4ODgsOTE3ODg5LDkxNzg5MCw5MTc4OTEsOTE3ODkyLDkxNzg5Myw5MTc4OTQsOTE3ODk1LDkxNzg5Niw5MTc4OTcsOTE3ODk4LDkxNzg5OSw5MTc5MDAsOTE3OTAxLDkxNzkwMiw5MTc5MDMsOTE3OTA0LDkxNzkwNSw5MTc5MDYsOTE3OTA3LDkxNzkwOCw5MTc5MDksOTE3OTEwLDkxNzkxMSw5MTc5MTIsOTE3OTEzLDkxNzkxNCw5MTc5MTUsOTE3OTE2LDkxNzkxNyw5MTc5MTgsOTE3OTE5LDkxNzkyMCw5MTc5MjEsOTE3OTIyLDkxNzkyMyw5MTc5MjQsOTE3OTI1LDkxNzkyNiw5MTc5MjcsOTE3OTI4LDkxNzkyOSw5MTc5MzAsOTE3OTMxLDkxNzkzMiw5MTc5MzMsOTE3OTM0LDkxNzkzNSw5MTc5MzYsOTE3OTM3LDkxNzkzOCw5MTc5MzksOTE3OTQwLDkxNzk0MSw5MTc5NDIsOTE3OTQzLDkxNzk0NCw5MTc5NDUsOTE3OTQ2LDkxNzk0Nyw5MTc5NDgsOTE3OTQ5LDkxNzk1MCw5MTc5NTEsOTE3OTUyLDkxNzk1Myw5MTc5NTQsOTE3OTU1LDkxNzk1Niw5MTc5NTcsOTE3OTU4LDkxNzk1OSw5MTc5NjAsOTE3OTYxLDkxNzk2Miw5MTc5NjMsOTE3OTY0LDkxNzk2NSw5MTc5NjYsOTE3OTY3LDkxNzk2OCw5MTc5NjksOTE3OTcwLDkxNzk3MSw5MTc5NzIsOTE3OTczLDkxNzk3NCw5MTc5NzUsOTE3OTc2LDkxNzk3Nyw5MTc5NzgsOTE3OTc5LDkxNzk4MCw5MTc5ODEsOTE3OTgyLDkxNzk4Myw5MTc5ODQsOTE3OTg1LDkxNzk4Niw5MTc5ODcsOTE3OTg4LDkxNzk4OSw5MTc5OTAsOTE3OTkxLDkxNzk5Miw5MTc5OTMsOTE3OTk0LDkxNzk5NSw5MTc5OTYsOTE3OTk3LDkxNzk5OCw5MTc5OTldIil9c3RhdGljIGdldERhdGEoKXtyZXR1cm4gdGhpcy5fZGF0YXx8KHRoaXMuX2RhdGE9bmV3IFNldChndC5nZXRSYXdEYXRhKCkpKSx0aGlzLl9kYXRhfXN0YXRpYyBpc0ludmlzaWJsZUNoYXJhY3Rlcih0KXtyZXR1cm4gZ3QuZ2V0RGF0YSgpLmhhcyh0KX1zdGF0aWMgZ2V0IGNvZGVQb2ludHMoKXtyZXR1cm4gZ3QuZ2V0RGF0YSgpfX07Z3QuX2RhdGE9dm9pZCAwO2xldCBUdD1ndDtjb25zdCBSbz0iJGluaXRpYWxpemUiO2NsYXNzIE1ve2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnJlcT1uLHRoaXMubWV0aG9kPWksdGhpcy5hcmdzPXIsdGhpcy50eXBlPTB9fWNsYXNzIFdpe2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnNlcT1uLHRoaXMucmVzPWksdGhpcy5lcnI9cix0aGlzLnR5cGU9MX19Y2xhc3MgTm97Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy5ldmVudE5hbWU9aSx0aGlzLmFyZz1yLHRoaXMudHlwZT0yfX1jbGFzcyBEb3tjb25zdHJ1Y3Rvcih0LG4saSl7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy5ldmVudD1pLHRoaXMudHlwZT0zfX1jbGFzcyBJb3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudnNXb3JrZXI9dCx0aGlzLnJlcT1uLHRoaXMudHlwZT00fX1jbGFzcyB6b3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl93b3JrZXJJZD0tMSx0aGlzLl9oYW5kbGVyPXQsdGhpcy5fbGFzdFNlbnRSZXE9MCx0aGlzLl9wZW5kaW5nUmVwbGllcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3BlbmRpbmdFbWl0dGVycz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdFdmVudHM9bmV3IE1hcH1zZXRXb3JrZXJJZCh0KXt0aGlzLl93b3JrZXJJZD10fXNlbmRNZXNzYWdlKHQsbil7Y29uc3QgaT1TdHJpbmcoKyt0aGlzLl9sYXN0U2VudFJlcSk7cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57dGhpcy5fcGVuZGluZ1JlcGxpZXNbaV09e3Jlc29sdmU6cixyZWplY3Q6c30sdGhpcy5fc2VuZChuZXcgTW8odGhpcy5fd29ya2VySWQsaSx0LG4pKX0pfWxpc3Rlbih0LG4pe2xldCBpPW51bGw7Y29uc3Qgcj1uZXcgdmUoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6KCk9PntpPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKSx0aGlzLl9wZW5kaW5nRW1pdHRlcnMuc2V0KGksciksdGhpcy5fc2VuZChuZXcgTm8odGhpcy5fd29ya2VySWQsaSx0LG4pKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9Pnt0aGlzLl9wZW5kaW5nRW1pdHRlcnMuZGVsZXRlKGkpLHRoaXMuX3NlbmQobmV3IElvKHRoaXMuX3dvcmtlcklkLGkpKSxpPW51bGx9fSk7cmV0dXJuIHIuZXZlbnR9aGFuZGxlTWVzc2FnZSh0KXshdHx8IXQudnNXb3JrZXJ8fHRoaXMuX3dvcmtlcklkIT09LTEmJnQudnNXb3JrZXIhPT10aGlzLl93b3JrZXJJZHx8dGhpcy5faGFuZGxlTWVzc2FnZSh0KX1faGFuZGxlTWVzc2FnZSh0KXtzd2l0Y2godC50eXBlKXtjYXNlIDE6cmV0dXJuIHRoaXMuX2hhbmRsZVJlcGx5TWVzc2FnZSh0KTtjYXNlIDA6cmV0dXJuIHRoaXMuX2hhbmRsZVJlcXVlc3RNZXNzYWdlKHQpO2Nhc2UgMjpyZXR1cm4gdGhpcy5faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKHQpO2Nhc2UgMzpyZXR1cm4gdGhpcy5faGFuZGxlRXZlbnRNZXNzYWdlKHQpO2Nhc2UgNDpyZXR1cm4gdGhpcy5faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UodCl9fV9oYW5kbGVSZXBseU1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXSl7Y29uc29sZS53YXJuKCJHb3QgcmVwbHkgdG8gdW5rbm93biBzZXEiKTtyZXR1cm59Y29uc3Qgbj10aGlzLl9wZW5kaW5nUmVwbGllc1t0LnNlcV07aWYoZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXSx0LmVycil7bGV0IGk9dC5lcnI7dC5lcnIuJGlzRXJyb3ImJihpPW5ldyBFcnJvcixpLm5hbWU9dC5lcnIubmFtZSxpLm1lc3NhZ2U9dC5lcnIubWVzc2FnZSxpLnN0YWNrPXQuZXJyLnN0YWNrKSxuLnJlamVjdChpKTtyZXR1cm59bi5yZXNvbHZlKHQucmVzKX1faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCl7Y29uc3Qgbj10LnJlcTt0aGlzLl9oYW5kbGVyLmhhbmRsZU1lc3NhZ2UodC5tZXRob2QsdC5hcmdzKS50aGVuKHI9Pnt0aGlzLl9zZW5kKG5ldyBXaSh0aGlzLl93b3JrZXJJZCxuLHIsdm9pZCAwKSl9LHI9PntyLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoci5kZXRhaWw9Umkoci5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBXaSh0aGlzLl93b3JrZXJJZCxuLHZvaWQgMCxSaShyKSkpfSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxLGk9dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudCh0LmV2ZW50TmFtZSx0LmFyZykocj0+e3RoaXMuX3NlbmQobmV3IERvKHRoaXMuX3dvcmtlcklkLG4scikpfSk7dGhpcy5fcGVuZGluZ0V2ZW50cy5zZXQobixpKX1faGFuZGxlRXZlbnRNZXNzYWdlKHQpe2lmKCF0aGlzLl9wZW5kaW5nRW1pdHRlcnMuaGFzKHQucmVxKSl7Y29uc29sZS53YXJuKCJHb3QgZXZlbnQgZm9yIHVua25vd24gcmVxIik7cmV0dXJufXRoaXMuX3BlbmRpbmdFbWl0dGVycy5nZXQodC5yZXEpLmZpcmUodC5ldmVudCl9X2hhbmRsZVVuc3Vic2NyaWJlRXZlbnRNZXNzYWdlKHQpe2lmKCF0aGlzLl9wZW5kaW5nRXZlbnRzLmhhcyh0LnJlcSkpe2NvbnNvbGUud2FybigiR290IHVuc3Vic2NyaWJlIGZvciB1bmtub3duIHJlcSIpO3JldHVybn10aGlzLl9wZW5kaW5nRXZlbnRzLmdldCh0LnJlcSkuZGlzcG9zZSgpLHRoaXMuX3BlbmRpbmdFdmVudHMuZGVsZXRlKHQucmVxKX1fc2VuZCh0KXtjb25zdCBuPVtdO2lmKHQudHlwZT09PTApZm9yKGxldCBpPTA7aTx0LmFyZ3MubGVuZ3RoO2krKyl0LmFyZ3NbaV1pbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZuLnB1c2godC5hcmdzW2ldKTtlbHNlIHQudHlwZT09PTEmJnQucmVzIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJm4ucHVzaCh0LnJlcyk7dGhpcy5faGFuZGxlci5zZW5kTWVzc2FnZSh0LG4pfX1mdW5jdGlvbiBGaShlKXtyZXR1cm4gZVswXT09PSJvIiYmZVsxXT09PSJuIiYmSGkoZS5jaGFyQ29kZUF0KDIpKX1mdW5jdGlvbiBQaShlKXtyZXR1cm4vXm9uRHluYW1pYy8udGVzdChlKSYmSGkoZS5jaGFyQ29kZUF0KDkpKX1mdW5jdGlvbiBIbyhlLHQsbil7Y29uc3QgaT1vPT5mdW5jdGlvbigpe2NvbnN0IGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KG8sbCl9LHI9bz0+ZnVuY3Rpb24obCl7cmV0dXJuIG4obyxsKX0scz17fTtmb3IoY29uc3QgbyBvZiBlKXtpZihQaShvKSl7c1tvXT1yKG8pO2NvbnRpbnVlfWlmKEZpKG8pKXtzW29dPW4obyx2b2lkIDApO2NvbnRpbnVlfXNbb109aShvKX1yZXR1cm4gc31jbGFzcyBVb3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT1uLHRoaXMuX3JlcXVlc3RIYW5kbGVyPW51bGwsdGhpcy5fcHJvdG9jb2w9bmV3IHpvKHtzZW5kTWVzc2FnZTooaSxyKT0+e3QoaSxyKX0saGFuZGxlTWVzc2FnZTooaSxyKT0+dGhpcy5faGFuZGxlTWVzc2FnZShpLHIpLGhhbmRsZUV2ZW50OihpLHIpPT50aGlzLl9oYW5kbGVFdmVudChpLHIpfSl9b25tZXNzYWdlKHQpe3RoaXMuX3Byb3RvY29sLmhhbmRsZU1lc3NhZ2UodCl9X2hhbmRsZU1lc3NhZ2UodCxuKXtpZih0PT09Um8pcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZShuWzBdLG5bMV0sblsyXSxuWzNdKTtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXJ8fHR5cGVvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlclt0XSE9ImZ1bmN0aW9uIilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIit0KSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmVxdWVzdEhhbmRsZXJbdF0uYXBwbHkodGhpcy5fcmVxdWVzdEhhbmRsZXIsbikpfWNhdGNoKGkpe3JldHVybiBQcm9taXNlLnJlamVjdChpKX19X2hhbmRsZUV2ZW50KHQsbil7aWYoIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciIpO2lmKFBpKHQpKXtjb25zdCBpPXRoaXMuX3JlcXVlc3RIYW5kbGVyW3RdLmNhbGwodGhpcy5fcmVxdWVzdEhhbmRsZXIsbik7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGR5bmFtaWMgZXZlbnQgJHt0fSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIGl9aWYoRmkodCkpe2NvbnN0IGk9dGhpcy5fcmVxdWVzdEhhbmRsZXJbdF07aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV2ZW50ICR7dH0gb24gcmVxdWVzdCBoYW5kbGVyLmApO3JldHVybiBpfXRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGV2ZW50IG5hbWUgJHt0fWApfWluaXRpYWxpemUodCxuLGkscil7dGhpcy5fcHJvdG9jb2wuc2V0V29ya2VySWQodCk7Y29uc3QgbD1IbyhyLChhLHUpPT50aGlzLl9wcm90b2NvbC5zZW5kTWVzc2FnZShhLHUpLChhLHUpPT50aGlzLl9wcm90b2NvbC5saXN0ZW4oYSx1KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeT8odGhpcy5fcmVxdWVzdEhhbmRsZXI9dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5KGwpLFByb21pc2UucmVzb2x2ZShMbih0aGlzLl9yZXF1ZXN0SGFuZGxlcikpKToobiYmKHR5cGVvZiBuLmJhc2VVcmw8InUiJiZkZWxldGUgbi5iYXNlVXJsLHR5cGVvZiBuLnBhdGhzPCJ1IiYmdHlwZW9mIG4ucGF0aHMudnM8InUiJiZkZWxldGUgbi5wYXRocy52cyx0eXBlb2Ygbi50cnVzdGVkVHlwZXNQb2xpY3k8InUiJiZkZWxldGUgbi50cnVzdGVkVHlwZXNQb2xpY3ksbi5jYXRjaEVycm9yPSEwLGdsb2JhbFRoaXMucmVxdWlyZS5jb25maWcobikpLG5ldyBQcm9taXNlKChhLHUpPT57Y29uc3QgYz1nbG9iYWxUaGlzLnJlcXVpcmU7YyhbaV0sZD0+e2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVyPWQuY3JlYXRlKGwpLCF0aGlzLl9yZXF1ZXN0SGFuZGxlcil7dShuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpKTtyZXR1cm59YShMbih0aGlzLl9yZXF1ZXN0SGFuZGxlcikpfSx1KX0pKX19Y2xhc3MgVWV7Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy5vcmlnaW5hbFN0YXJ0PXQsdGhpcy5vcmlnaW5hbExlbmd0aD1uLHRoaXMubW9kaWZpZWRTdGFydD1pLHRoaXMubW9kaWZpZWRMZW5ndGg9cn1nZXRPcmlnaW5hbEVuZCgpe3JldHVybiB0aGlzLm9yaWdpbmFsU3RhcnQrdGhpcy5vcmlnaW5hbExlbmd0aH1nZXRNb2RpZmllZEVuZCgpe3JldHVybiB0aGlzLm1vZGlmaWVkU3RhcnQrdGhpcy5tb2RpZmllZExlbmd0aH19ZnVuY3Rpb24gQmkoZSx0KXtyZXR1cm4odDw8NSktdCtlfDB9ZnVuY3Rpb24gV28oZSx0KXt0PUJpKDE0OTQxNyx0KTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKyspdD1CaShlLmNoYXJDb2RlQXQobiksdCk7cmV0dXJuIHR9ZnVuY3Rpb24gRG4oZSx0LG49MzIpe2NvbnN0IGk9bi10LHI9figoMTw8aSktMSk7cmV0dXJuKGU8PHR8KHImZSk+Pj5pKT4+PjB9ZnVuY3Rpb24gcWkoZSx0PTAsbj1lLmJ5dGVMZW5ndGgsaT0wKXtmb3IobGV0IHI9MDtyPG47cisrKWVbdCtyXT1pfWZ1bmN0aW9uIEZvKGUsdCxuPSIwIil7Zm9yKDtlLmxlbmd0aDx0OyllPW4rZTtyZXR1cm4gZX1mdW5jdGlvbiBrdChlLHQ9MzIpe3JldHVybiBlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/QXJyYXkuZnJvbShuZXcgVWludDhBcnJheShlKSkubWFwKG49Pm4udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSkuam9pbigiIik6Rm8oKGU+Pj4wKS50b1N0cmluZygxNiksdC80KX1jb25zdCBnbj1jbGFzcyBnbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2gwPTE3MzI1ODQxOTMsdGhpcy5faDE9NDAyMzIzMzQxNyx0aGlzLl9oMj0yNTYyMzgzMTAyLHRoaXMuX2gzPTI3MTczMzg3OCx0aGlzLl9oND0zMjg1Mzc3NTIwLHRoaXMuX2J1ZmY9bmV3IFVpbnQ4QXJyYXkoNjcpLHRoaXMuX2J1ZmZEVj1uZXcgRGF0YVZpZXcodGhpcy5fYnVmZi5idWZmZXIpLHRoaXMuX2J1ZmZMZW49MCx0aGlzLl90b3RhbExlbj0wLHRoaXMuX2xlZnRvdmVySGlnaFN1cnJvZ2F0ZT0wLHRoaXMuX2ZpbmlzaGVkPSExfXVwZGF0ZSh0KXtjb25zdCBuPXQubGVuZ3RoO2lmKG49PT0wKXJldHVybjtjb25zdCBpPXRoaXMuX2J1ZmY7bGV0IHI9dGhpcy5fYnVmZkxlbixzPXRoaXMuX2xlZnRvdmVySGlnaFN1cnJvZ2F0ZSxvLGw7Zm9yKHMhPT0wPyhvPXMsbD0tMSxzPTApOihvPXQuY2hhckNvZGVBdCgwKSxsPTApOzspe2xldCBhPW87aWYoUHQobykpaWYobCsxPG4pe2NvbnN0IHU9dC5jaGFyQ29kZUF0KGwrMSk7Tm4odSk/KGwrKyxhPVVpKG8sdSkpOmE9NjU1MzN9ZWxzZXtzPW87YnJlYWt9ZWxzZSBObihvKSYmKGE9NjU1MzMpO2lmKHI9dGhpcy5fcHVzaChpLHIsYSksbCsrLGw8bilvPXQuY2hhckNvZGVBdChsKTtlbHNlIGJyZWFrfXRoaXMuX2J1ZmZMZW49cix0aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGU9c31fcHVzaCh0LG4saSl7cmV0dXJuIGk8MTI4P3RbbisrXT1pOmk8MjA0OD8odFtuKytdPTE5MnwoaSYxOTg0KT4+PjYsdFtuKytdPTEyOHwoaSY2Myk+Pj4wKTppPDY1NTM2Pyh0W24rK109MjI0fChpJjYxNDQwKT4+PjEyLHRbbisrXT0xMjh8KGkmNDAzMik+Pj42LHRbbisrXT0xMjh8KGkmNjMpPj4+MCk6KHRbbisrXT0yNDB8KGkmMTgzNTAwOCk+Pj4xOCx0W24rK109MTI4fChpJjI1ODA0OCk+Pj4xMix0W24rK109MTI4fChpJjQwMzIpPj4+Nix0W24rK109MTI4fChpJjYzKT4+PjApLG4+PTY0JiYodGhpcy5fc3RlcCgpLG4tPTY0LHRoaXMuX3RvdGFsTGVuKz02NCx0WzBdPXRbNjRdLHRbMV09dFs2NV0sdFsyXT10WzY2XSksbn1kaWdlc3QoKXtyZXR1cm4gdGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGUmJih0aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGU9MCx0aGlzLl9idWZmTGVuPXRoaXMuX3B1c2godGhpcy5fYnVmZix0aGlzLl9idWZmTGVuLDY1NTMzKSksdGhpcy5fdG90YWxMZW4rPXRoaXMuX2J1ZmZMZW4sdGhpcy5fd3JhcFVwKCkpLGt0KHRoaXMuX2gwKStrdCh0aGlzLl9oMSkra3QodGhpcy5faDIpK2t0KHRoaXMuX2gzKStrdCh0aGlzLl9oNCl9X3dyYXBVcCgpe3RoaXMuX2J1ZmZbdGhpcy5fYnVmZkxlbisrXT0xMjgscWkodGhpcy5fYnVmZix0aGlzLl9idWZmTGVuKSx0aGlzLl9idWZmTGVuPjU2JiYodGhpcy5fc3RlcCgpLHFpKHRoaXMuX2J1ZmYpKTtjb25zdCB0PTgqdGhpcy5fdG90YWxMZW47dGhpcy5fYnVmZkRWLnNldFVpbnQzMig1NixNYXRoLmZsb29yKHQvNDI5NDk2NzI5NiksITEpLHRoaXMuX2J1ZmZEVi5zZXRVaW50MzIoNjAsdCU0Mjk0OTY3Mjk2LCExKSx0aGlzLl9zdGVwKCl9X3N0ZXAoKXtjb25zdCB0PWduLl9iaWdCbG9jazMyLG49dGhpcy5fYnVmZkRWO2ZvcihsZXQgZD0wO2Q8NjQ7ZCs9NCl0LnNldFVpbnQzMihkLG4uZ2V0VWludDMyKGQsITEpLCExKTtmb3IobGV0IGQ9NjQ7ZDwzMjA7ZCs9NCl0LnNldFVpbnQzMihkLERuKHQuZ2V0VWludDMyKGQtMTIsITEpXnQuZ2V0VWludDMyKGQtMzIsITEpXnQuZ2V0VWludDMyKGQtNTYsITEpXnQuZ2V0VWludDMyKGQtNjQsITEpLDEpLCExKTtsZXQgaT10aGlzLl9oMCxyPXRoaXMuX2gxLHM9dGhpcy5faDIsbz10aGlzLl9oMyxsPXRoaXMuX2g0LGEsdSxjO2ZvcihsZXQgZD0wO2Q8ODA7ZCsrKWQ8MjA/KGE9ciZzfH5yJm8sdT0xNTE4NTAwMjQ5KTpkPDQwPyhhPXJec15vLHU9MTg1OTc3NTM5Myk6ZDw2MD8oYT1yJnN8ciZvfHMmbyx1PTI0MDA5NTk3MDgpOihhPXJec15vLHU9MzM5NTQ2OTc4MiksYz1EbihpLDUpK2ErbCt1K3QuZ2V0VWludDMyKGQqNCwhMSkmNDI5NDk2NzI5NSxsPW8sbz1zLHM9RG4ociwzMCkscj1pLGk9Yzt0aGlzLl9oMD10aGlzLl9oMCtpJjQyOTQ5NjcyOTUsdGhpcy5faDE9dGhpcy5faDErciY0Mjk0OTY3Mjk1LHRoaXMuX2gyPXRoaXMuX2gyK3MmNDI5NDk2NzI5NSx0aGlzLl9oMz10aGlzLl9oMytvJjQyOTQ5NjcyOTUsdGhpcy5faDQ9dGhpcy5faDQrbCY0Mjk0OTY3Mjk1fX07Z24uX2JpZ0Jsb2NrMzI9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigzMjApKTtsZXQgT2k9Z247Y2xhc3MgVml7Y29uc3RydWN0b3IodCl7dGhpcy5zb3VyY2U9dH1nZXRFbGVtZW50cygpe2NvbnN0IHQ9dGhpcy5zb3VyY2Usbj1uZXcgSW50MzJBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKW5baV09dC5jaGFyQ29kZUF0KGkpO3JldHVybiBufX1mdW5jdGlvbiBQbyhlLHQsbil7cmV0dXJuIG5ldyBXZShuZXcgVmkoZSksbmV3IFZpKHQpKS5Db21wdXRlRGlmZihuKS5jaGFuZ2VzfWNsYXNzIGl0e3N0YXRpYyBBc3NlcnQodCxuKXtpZighdCl0aHJvdyBuZXcgRXJyb3Iobil9fWNsYXNzIHJ0e3N0YXRpYyBDb3B5KHQsbixpLHIscyl7Zm9yKGxldCBvPTA7bzxzO28rKylpW3Irb109dFtuK29dfXN0YXRpYyBDb3B5Mih0LG4saSxyLHMpe2ZvcihsZXQgbz0wO288cztvKyspaVtyK29dPXRbbitvXX19Y2xhc3Mgaml7Y29uc3RydWN0b3IoKXt0aGlzLm1fY2hhbmdlcz1bXSx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wfU1hcmtOZXh0Q2hhbmdlKCl7KHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLm1fY2hhbmdlcy5wdXNoKG5ldyBVZSh0aGlzLm1fb3JpZ2luYWxTdGFydCx0aGlzLm1fb3JpZ2luYWxDb3VudCx0aGlzLm1fbW9kaWZpZWRTdGFydCx0aGlzLm1fbW9kaWZpZWRDb3VudCkpLHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MCx0aGlzLm1fb3JpZ2luYWxTdGFydD0xMDczNzQxODI0LHRoaXMubV9tb2RpZmllZFN0YXJ0PTEwNzM3NDE4MjR9QWRkT3JpZ2luYWxFbGVtZW50KHQsbil7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsbiksdGhpcy5tX29yaWdpbmFsQ291bnQrK31BZGRNb2RpZmllZEVsZW1lbnQodCxuKXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCxuKSx0aGlzLm1fbW9kaWZpZWRDb3VudCsrfWdldENoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlc31nZXRSZXZlcnNlQ2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzLnJldmVyc2UoKSx0aGlzLm1fY2hhbmdlc319Y2xhc3MgV2V7Y29uc3RydWN0b3IodCxuLGk9bnVsbCl7dGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGU9aSx0aGlzLl9vcmlnaW5hbFNlcXVlbmNlPXQsdGhpcy5fbW9kaWZpZWRTZXF1ZW5jZT1uO2NvbnN0W3IscyxvXT1XZS5fZ2V0RWxlbWVudHModCksW2wsYSx1XT1XZS5fZ2V0RWxlbWVudHMobik7dGhpcy5faGFzU3RyaW5ncz1vJiZ1LHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHM9cix0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoPXMsdGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50cz1sLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2g9YSx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdfXN0YXRpYyBfaXNTdHJpbmdBcnJheSh0KXtyZXR1cm4gdC5sZW5ndGg+MCYmdHlwZW9mIHRbMF09PSJzdHJpbmcifXN0YXRpYyBfZ2V0RWxlbWVudHModCl7Y29uc3Qgbj10LmdldEVsZW1lbnRzKCk7aWYoV2UuX2lzU3RyaW5nQXJyYXkobikpe2NvbnN0IGk9bmV3IEludDMyQXJyYXkobi5sZW5ndGgpO2ZvcihsZXQgcj0wLHM9bi5sZW5ndGg7cjxzO3IrKylpW3JdPVdvKG5bcl0sMCk7cmV0dXJuW24saSwhMF19cmV0dXJuIG4gaW5zdGFuY2VvZiBJbnQzMkFycmF5P1tbXSxuLCExXTpbW10sbmV3IEludDMyQXJyYXkobiksITFdfUVsZW1lbnRzQXJlRXF1YWwodCxuKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSE9PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbbl0/ITE6dGhpcy5faGFzU3RyaW5ncz90aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdPT09dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tuXTohMH1FbGVtZW50c0FyZVN0cmljdEVxdWFsKHQsbil7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LG4pKXJldHVybiExO2NvbnN0IGk9V2UuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fb3JpZ2luYWxTZXF1ZW5jZSx0KSxyPVdlLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX21vZGlmaWVkU2VxdWVuY2Usbik7cmV0dXJuIGk9PT1yfXN0YXRpYyBfZ2V0U3RyaWN0RWxlbWVudCh0LG4pe3JldHVybiB0eXBlb2YgdC5nZXRTdHJpY3RFbGVtZW50PT0iZnVuY3Rpb24iP3QuZ2V0U3RyaWN0RWxlbWVudChuKTpudWxsfU9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbCh0LG4pe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdIT09dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFtuXT8hMTp0aGlzLl9oYXNTdHJpbmdzP3RoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF09PT10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW25dOiEwfU1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbCh0LG4pe3JldHVybiB0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW3RdIT09dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtuXT8hMTp0aGlzLl9oYXNTdHJpbmdzP3RoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW25dOiEwfUNvbXB1dGVEaWZmKHQpe3JldHVybiB0aGlzLl9Db21wdXRlRGlmZigwLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsMCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLHQpfV9Db21wdXRlRGlmZih0LG4saSxyLHMpe2NvbnN0IG89WyExXTtsZXQgbD10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsbixpLHIsbyk7cmV0dXJuIHMmJihsPXRoaXMuUHJldHRpZnlDaGFuZ2VzKGwpKSx7cXVpdEVhcmx5Om9bMF0sY2hhbmdlczpsfX1Db21wdXRlRGlmZlJlY3Vyc2l2ZSh0LG4saSxyLHMpe2ZvcihzWzBdPSExO3Q8PW4mJmk8PXImJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh0LGkpOyl0KyssaSsrO2Zvcig7bj49dCYmcj49aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKG4scik7KW4tLSxyLS07aWYodD5ufHxpPnIpe2xldCBkO3JldHVybiBpPD1yPyhpdC5Bc3NlcnQodD09PW4rMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksZD1bbmV3IFVlKHQsMCxpLHItaSsxKV0pOnQ8PW4/KGl0LkFzc2VydChpPT09cisxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxkPVtuZXcgVWUodCxuLXQrMSxpLDApXSk6KGl0LkFzc2VydCh0PT09bisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxpdC5Bc3NlcnQoaT09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksZD1bXSksZH1jb25zdCBvPVswXSxsPVswXSxhPXRoaXMuQ29tcHV0ZVJlY3Vyc2lvblBvaW50KHQsbixpLHIsbyxsLHMpLHU9b1swXSxjPWxbMF07aWYoYSE9PW51bGwpcmV0dXJuIGE7aWYoIXNbMF0pe2NvbnN0IGQ9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh0LHUsaSxjLHMpO2xldCBtPVtdO3JldHVybiBzWzBdP209W25ldyBVZSh1KzEsbi0odSsxKSsxLGMrMSxyLShjKzEpKzEpXTptPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodSsxLG4sYysxLHIscyksdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoZCxtKX1yZXR1cm5bbmV3IFVlKHQsbi10KzEsaSxyLWkrMSldfVdBTEtUUkFDRSh0LG4saSxyLHMsbyxsLGEsdSxjLGQsbSxmLF8sZyxBLHYseSl7bGV0IEU9bnVsbCxSPW51bGwsTj1uZXcgamksTT1uLGI9aSxwPWZbMF0tQVswXS1yLFQ9LTEwNzM3NDE4MjQsSD10aGlzLm1fZm9yd2FyZEhpc3RvcnkubGVuZ3RoLTE7ZG97Y29uc3QgTD1wK3Q7TD09PU18fEw8YiYmdVtMLTFdPHVbTCsxXT8oZD11W0wrMV0sXz1kLXAtcixkPFQmJk4uTWFya05leHRDaGFuZ2UoKSxUPWQsTi5BZGRNb2RpZmllZEVsZW1lbnQoZCsxLF8pLHA9TCsxLXQpOihkPXVbTC0xXSsxLF89ZC1wLXIsZDxUJiZOLk1hcmtOZXh0Q2hhbmdlKCksVD1kLTEsTi5BZGRPcmlnaW5hbEVsZW1lbnQoZCxfKzEpLHA9TC0xLXQpLEg+PTAmJih1PXRoaXMubV9mb3J3YXJkSGlzdG9yeVtIXSx0PXVbMF0sTT0xLGI9dS5sZW5ndGgtMSl9d2hpbGUoLS1IPj0tMSk7aWYoRT1OLmdldFJldmVyc2VDaGFuZ2VzKCkseVswXSl7bGV0IEw9ZlswXSsxLHc9QVswXSsxO2lmKEUhPT1udWxsJiZFLmxlbmd0aD4wKXtjb25zdCBrPUVbRS5sZW5ndGgtMV07TD1NYXRoLm1heChMLGsuZ2V0T3JpZ2luYWxFbmQoKSksdz1NYXRoLm1heCh3LGsuZ2V0TW9kaWZpZWRFbmQoKSl9Uj1bbmV3IFVlKEwsbS1MKzEsdyxnLXcrMSldfWVsc2V7Tj1uZXcgamksTT1vLGI9bCxwPWZbMF0tQVswXS1hLFQ9MTA3Mzc0MTgyNCxIPXY/dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0xOnRoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMjtkb3tjb25zdCBMPXArcztMPT09TXx8TDxiJiZjW0wtMV0+PWNbTCsxXT8oZD1jW0wrMV0tMSxfPWQtcC1hLGQ+VCYmTi5NYXJrTmV4dENoYW5nZSgpLFQ9ZCsxLE4uQWRkT3JpZ2luYWxFbGVtZW50KGQrMSxfKzEpLHA9TCsxLXMpOihkPWNbTC0xXSxfPWQtcC1hLGQ+VCYmTi5NYXJrTmV4dENoYW5nZSgpLFQ9ZCxOLkFkZE1vZGlmaWVkRWxlbWVudChkKzEsXysxKSxwPUwtMS1zKSxIPj0wJiYoYz10aGlzLm1fcmV2ZXJzZUhpc3RvcnlbSF0scz1jWzBdLE09MSxiPWMubGVuZ3RoLTEpfXdoaWxlKC0tSD49LTEpO1I9Ti5nZXRDaGFuZ2VzKCl9cmV0dXJuIHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKEUsUil9Q29tcHV0ZVJlY3Vyc2lvblBvaW50KHQsbixpLHIscyxvLGwpe2xldCBhPTAsdT0wLGM9MCxkPTAsbT0wLGY9MDt0LS0saS0tLHNbMF09MCxvWzBdPTAsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXTtjb25zdCBfPW4tdCsoci1pKSxnPV8rMSxBPW5ldyBJbnQzMkFycmF5KGcpLHY9bmV3IEludDMyQXJyYXkoZykseT1yLWksRT1uLXQsUj10LWksTj1uLXIsYj0oRS15KSUyPT09MDtBW3ldPXQsdltFXT1uLGxbMF09ITE7Zm9yKGxldCBwPTE7cDw9Xy8yKzE7cCsrKXtsZXQgVD0wLEg9MDtjPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoeS1wLHAseSxnKSxkPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoeStwLHAseSxnKTtmb3IobGV0IHc9Yzt3PD1kO3crPTIpe3c9PT1jfHx3PGQmJkFbdy0xXTxBW3crMV0/YT1BW3crMV06YT1BW3ctMV0rMSx1PWEtKHcteSktUjtjb25zdCBrPWE7Zm9yKDthPG4mJnU8ciYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKGErMSx1KzEpOylhKyssdSsrO2lmKEFbd109YSxhK3U+VCtIJiYoVD1hLEg9dSksIWImJk1hdGguYWJzKHctRSk8PXAtMSYmYT49dlt3XSlyZXR1cm4gc1swXT1hLG9bMF09dSxrPD12W3ddJiZwPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKHksYyxkLFIsRSxtLGYsTixBLHYsYSxuLHMsdSxyLG8sYixsKTpudWxsfWNvbnN0IEw9KFQtdCsoSC1pKS1wKS8yO2lmKHRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlIT09bnVsbCYmIXRoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlKFQsTCkpcmV0dXJuIGxbMF09ITAsc1swXT1ULG9bMF09SCxMPjAmJnA8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoeSxjLGQsUixFLG0sZixOLEEsdixhLG4scyx1LHIsbyxiLGwpOih0KyssaSsrLFtuZXcgVWUodCxuLXQrMSxpLHItaSsxKV0pO209dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChFLXAscCxFLGcpLGY9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChFK3AscCxFLGcpO2ZvcihsZXQgdz1tO3c8PWY7dys9Mil7dz09PW18fHc8ZiYmdlt3LTFdPj12W3crMV0/YT12W3crMV0tMTphPXZbdy0xXSx1PWEtKHctRSktTjtjb25zdCBrPWE7Zm9yKDthPnQmJnU+aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKGEsdSk7KWEtLSx1LS07aWYodlt3XT1hLGImJk1hdGguYWJzKHcteSk8PXAmJmE8PUFbd10pcmV0dXJuIHNbMF09YSxvWzBdPXUsaz49QVt3XSYmcDw9MTQ0OD90aGlzLldBTEtUUkFDRSh5LGMsZCxSLEUsbSxmLE4sQSx2LGEsbixzLHUscixvLGIsbCk6bnVsbH1pZihwPD0xNDQ3KXtsZXQgdz1uZXcgSW50MzJBcnJheShkLWMrMik7d1swXT15LWMrMSxydC5Db3B5MihBLGMsdywxLGQtYysxKSx0aGlzLm1fZm9yd2FyZEhpc3RvcnkucHVzaCh3KSx3PW5ldyBJbnQzMkFycmF5KGYtbSsyKSx3WzBdPUUtbSsxLHJ0LkNvcHkyKHYsbSx3LDEsZi1tKzEpLHRoaXMubV9yZXZlcnNlSGlzdG9yeS5wdXNoKHcpfX1yZXR1cm4gdGhpcy5XQUxLVFJBQ0UoeSxjLGQsUixFLG0sZixOLEEsdixhLG4scyx1LHIsbyxiLGwpfVByZXR0aWZ5Q2hhbmdlcyh0KXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7Y29uc3QgaT10W25dLHI9bjx0Lmxlbmd0aC0xP3RbbisxXS5vcmlnaW5hbFN0YXJ0OnRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLHM9bjx0Lmxlbmd0aC0xP3RbbisxXS5tb2RpZmllZFN0YXJ0OnRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLG89aS5vcmlnaW5hbExlbmd0aD4wLGw9aS5tb2RpZmllZExlbmd0aD4wO2Zvcig7aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGg8ciYmaS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGg8cyYmKCFvfHx0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChpLm9yaWdpbmFsU3RhcnQsaS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgpKSYmKCFsfHx0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChpLm1vZGlmaWVkU3RhcnQsaS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgpKTspe2NvbnN0IHU9dGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKGkub3JpZ2luYWxTdGFydCxpLm1vZGlmaWVkU3RhcnQpO2lmKHRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChpLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aCxpLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aCkmJiF1KWJyZWFrO2kub3JpZ2luYWxTdGFydCsrLGkubW9kaWZpZWRTdGFydCsrfWNvbnN0IGE9W251bGxdO2lmKG48dC5sZW5ndGgtMSYmdGhpcy5DaGFuZ2VzT3ZlcmxhcCh0W25dLHRbbisxXSxhKSl7dFtuXT1hWzBdLHQuc3BsaWNlKG4rMSwxKSxuLS07Y29udGludWV9fWZvcihsZXQgbj10Lmxlbmd0aC0xO24+PTA7bi0tKXtjb25zdCBpPXRbbl07bGV0IHI9MCxzPTA7aWYobj4wKXtjb25zdCBkPXRbbi0xXTtyPWQub3JpZ2luYWxTdGFydCtkLm9yaWdpbmFsTGVuZ3RoLHM9ZC5tb2RpZmllZFN0YXJ0K2QubW9kaWZpZWRMZW5ndGh9Y29uc3Qgbz1pLm9yaWdpbmFsTGVuZ3RoPjAsbD1pLm1vZGlmaWVkTGVuZ3RoPjA7bGV0IGE9MCx1PXRoaXMuX2JvdW5kYXJ5U2NvcmUoaS5vcmlnaW5hbFN0YXJ0LGkub3JpZ2luYWxMZW5ndGgsaS5tb2RpZmllZFN0YXJ0LGkubW9kaWZpZWRMZW5ndGgpO2ZvcihsZXQgZD0xOztkKyspe2NvbnN0IG09aS5vcmlnaW5hbFN0YXJ0LWQsZj1pLm1vZGlmaWVkU3RhcnQtZDtpZihtPHJ8fGY8c3x8byYmIXRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKG0sbStpLm9yaWdpbmFsTGVuZ3RoKXx8bCYmIXRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGYsZitpLm1vZGlmaWVkTGVuZ3RoKSlicmVhaztjb25zdCBnPShtPT09ciYmZj09PXM/NTowKSt0aGlzLl9ib3VuZGFyeVNjb3JlKG0saS5vcmlnaW5hbExlbmd0aCxmLGkubW9kaWZpZWRMZW5ndGgpO2c+dSYmKHU9ZyxhPWQpfWkub3JpZ2luYWxTdGFydC09YSxpLm1vZGlmaWVkU3RhcnQtPWE7Y29uc3QgYz1bbnVsbF07aWYobj4wJiZ0aGlzLkNoYW5nZXNPdmVybGFwKHRbbi0xXSx0W25dLGMpKXt0W24tMV09Y1swXSx0LnNwbGljZShuLDEpLG4rKztjb250aW51ZX19aWYodGhpcy5faGFzU3RyaW5ncylmb3IobGV0IG49MSxpPXQubGVuZ3RoO248aTtuKyspe2NvbnN0IHI9dFtuLTFdLHM9dFtuXSxvPXMub3JpZ2luYWxTdGFydC1yLm9yaWdpbmFsU3RhcnQtci5vcmlnaW5hbExlbmd0aCxsPXIub3JpZ2luYWxTdGFydCxhPXMub3JpZ2luYWxTdGFydCtzLm9yaWdpbmFsTGVuZ3RoLHU9YS1sLGM9ci5tb2RpZmllZFN0YXJ0LGQ9cy5tb2RpZmllZFN0YXJ0K3MubW9kaWZpZWRMZW5ndGgsbT1kLWM7aWYobzw1JiZ1PDIwJiZtPDIwKXtjb25zdCBmPXRoaXMuX2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UobCx1LGMsbSxvKTtpZihmKXtjb25zdFtfLGddPWY7KF8hPT1yLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aHx8ZyE9PXIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoKSYmKHIub3JpZ2luYWxMZW5ndGg9Xy1yLm9yaWdpbmFsU3RhcnQsci5tb2RpZmllZExlbmd0aD1nLXIubW9kaWZpZWRTdGFydCxzLm9yaWdpbmFsU3RhcnQ9XytvLHMubW9kaWZpZWRTdGFydD1nK28scy5vcmlnaW5hbExlbmd0aD1hLXMub3JpZ2luYWxTdGFydCxzLm1vZGlmaWVkTGVuZ3RoPWQtcy5tb2RpZmllZFN0YXJ0KX19fXJldHVybiB0fV9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKHQsbixpLHIscyl7aWYobjxzfHxyPHMpcmV0dXJuIG51bGw7Y29uc3Qgbz10K24tcysxLGw9aStyLXMrMTtsZXQgYT0wLHU9MCxjPTA7Zm9yKGxldCBkPXQ7ZDxvO2QrKylmb3IobGV0IG09aTttPGw7bSsrKXtjb25zdCBmPXRoaXMuX2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKGQsbSxzKTtmPjAmJmY+YSYmKGE9Zix1PWQsYz1tKX1yZXR1cm4gYT4wP1t1LGNdOm51bGx9X2NvbnRpZ3VvdXNTZXF1ZW5jZVNjb3JlKHQsbixpKXtsZXQgcj0wO2ZvcihsZXQgcz0wO3M8aTtzKyspe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwodCtzLG4rcykpcmV0dXJuIDA7cis9dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0K3NdLmxlbmd0aH1yZXR1cm4gcn1fT3JpZ2luYWxJc0JvdW5kYXJ5KHQpe3JldHVybiB0PD0wfHx0Pj10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xPyEwOnRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdKX1fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KHQsbil7aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHQpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkodC0xKSlyZXR1cm4hMDtpZihuPjApe2NvbnN0IGk9dCtuO2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShpLTEpfHx0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkoaSkpcmV0dXJuITB9cmV0dXJuITF9X01vZGlmaWVkSXNCb3VuZGFyeSh0KXtyZXR1cm4gdDw9MHx8dD49dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMT8hMDp0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1t0XSl9X01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeSh0LG4pe2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeSh0KXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHQtMSkpcmV0dXJuITA7aWYobj4wKXtjb25zdCBpPXQrbjtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoaS0xKXx8dGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KGkpKXJldHVybiEwfXJldHVybiExfV9ib3VuZGFyeVNjb3JlKHQsbixpLHIpe2NvbnN0IHM9dGhpcy5fT3JpZ2luYWxSZWdpb25Jc0JvdW5kYXJ5KHQsbik/MTowLG89dGhpcy5fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KGkscik/MTowO3JldHVybiBzK299Q29uY2F0ZW5hdGVDaGFuZ2VzKHQsbil7Y29uc3QgaT1bXTtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gbi5sZW5ndGg+MD9uOnQ7aWYodGhpcy5DaGFuZ2VzT3ZlcmxhcCh0W3QubGVuZ3RoLTFdLG5bMF0saSkpe2NvbnN0IHI9bmV3IEFycmF5KHQubGVuZ3RoK24ubGVuZ3RoLTEpO3JldHVybiBydC5Db3B5KHQsMCxyLDAsdC5sZW5ndGgtMSksclt0Lmxlbmd0aC0xXT1pWzBdLHJ0LkNvcHkobiwxLHIsdC5sZW5ndGgsbi5sZW5ndGgtMSkscn1lbHNle2NvbnN0IHI9bmV3IEFycmF5KHQubGVuZ3RoK24ubGVuZ3RoKTtyZXR1cm4gcnQuQ29weSh0LDAsciwwLHQubGVuZ3RoKSxydC5Db3B5KG4sMCxyLHQubGVuZ3RoLG4ubGVuZ3RoKSxyfX1DaGFuZ2VzT3ZlcmxhcCh0LG4saSl7aWYoaXQuQXNzZXJ0KHQub3JpZ2luYWxTdGFydDw9bi5vcmlnaW5hbFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLGl0LkFzc2VydCh0Lm1vZGlmaWVkU3RhcnQ8PW4ubW9kaWZpZWRTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSx0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aD49bi5vcmlnaW5hbFN0YXJ0fHx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0KXtjb25zdCByPXQub3JpZ2luYWxTdGFydDtsZXQgcz10Lm9yaWdpbmFsTGVuZ3RoO2NvbnN0IG89dC5tb2RpZmllZFN0YXJ0O2xldCBsPXQubW9kaWZpZWRMZW5ndGg7cmV0dXJuIHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoPj1uLm9yaWdpbmFsU3RhcnQmJihzPW4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLXQub3JpZ2luYWxTdGFydCksdC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGg+PW4ubW9kaWZpZWRTdGFydCYmKGw9bi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgtdC5tb2RpZmllZFN0YXJ0KSxpWzBdPW5ldyBVZShyLHMsbyxsKSwhMH1lbHNlIHJldHVybiBpWzBdPW51bGwsITF9Q2xpcERpYWdvbmFsQm91bmQodCxuLGkscil7aWYodD49MCYmdDxyKXJldHVybiB0O2NvbnN0IHM9aSxvPXItaS0xLGw9biUyPT09MDtpZih0PDApe2NvbnN0IGE9cyUyPT09MDtyZXR1cm4gbD09PWE/MDoxfWVsc2V7Y29uc3QgYT1vJTI9PT0wO3JldHVybiBsPT09YT9yLTE6ci0yfX19dmFyIEdpPXtFTlZfVFlQRToibG9jYWwiLE5PREVfRU5WOiJwcm9kdWN0aW9uIn07bGV0IHN0O2NvbnN0IEluPWdsb2JhbFRoaXMudnNjb2RlO2lmKHR5cGVvZiBJbjwidSImJnR5cGVvZiBJbi5wcm9jZXNzPCJ1Iil7Y29uc3QgZT1Jbi5wcm9jZXNzO3N0PXtnZXQgcGxhdGZvcm0oKXtyZXR1cm4gZS5wbGF0Zm9ybX0sZ2V0IGFyY2goKXtyZXR1cm4gZS5hcmNofSxnZXQgZW52KCl7cmV0dXJuIGUuZW52fSxjd2QoKXtyZXR1cm4gZS5jd2QoKX19fWVsc2UgdHlwZW9mIHByb2Nlc3M8InUiP3N0PXtnZXQgcGxhdGZvcm0oKXtyZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybX0sZ2V0IGFyY2goKXtyZXR1cm4gcHJvY2Vzcy5hcmNofSxnZXQgZW52KCl7cmV0dXJuIEdpfSxjd2QoKXtyZXR1cm4gR2kuVlNDT0RFX0NXRHx8cHJvY2Vzcy5jd2QoKX19OnN0PXtnZXQgcGxhdGZvcm0oKXtyZXR1cm4geXQ/IndpbjMyIjpfbz8iZGFyd2luIjoibGludXgifSxnZXQgYXJjaCgpe30sZ2V0IGVudigpe3JldHVybnt9fSxjd2QoKXtyZXR1cm4iLyJ9fTtjb25zdCBCdD1zdC5jd2QsQm89c3QuZW52LHFvPXN0LnBsYXRmb3JtLE9vPTY1LFZvPTk3LGpvPTkwLEdvPTEyMixGZT00NixhZT00NyxjZT05MixQZT01OCwkbz02MztjbGFzcyAkaSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbixpKXtsZXQgcjt0eXBlb2Ygbj09InN0cmluZyImJm4uaW5kZXhPZigibm90ICIpPT09MD8ocj0ibXVzdCBub3QgYmUiLG49bi5yZXBsYWNlKC9ebm90IC8sIiIpKTpyPSJtdXN0IGJlIjtjb25zdCBzPXQuaW5kZXhPZigiLiIpIT09LTE/InByb3BlcnR5IjoiYXJndW1lbnQiO2xldCBvPWBUaGUgIiR7dH0iICR7c30gJHtyfSBvZiB0eXBlICR7bn1gO28rPWAuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgaX1gLHN1cGVyKG8pLHRoaXMuY29kZT0iRVJSX0lOVkFMSURfQVJHX1RZUEUifX1mdW5jdGlvbiBYbyhlLHQpe2lmKGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpdGhyb3cgbmV3ICRpKHQsIk9iamVjdCIsZSl9ZnVuY3Rpb24gZWUoZSx0KXtpZih0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgbmV3ICRpKHQsInN0cmluZyIsZSl9Y29uc3QgQmU9cW89PT0id2luMzIiO2Z1bmN0aW9uIE8oZSl7cmV0dXJuIGU9PT1hZXx8ZT09PWNlfWZ1bmN0aW9uIHpuKGUpe3JldHVybiBlPT09YWV9ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGU+PU9vJiZlPD1qb3x8ZT49Vm8mJmU8PUdvfWZ1bmN0aW9uIHF0KGUsdCxuLGkpe2xldCByPSIiLHM9MCxvPS0xLGw9MCxhPTA7Zm9yKGxldCB1PTA7dTw9ZS5sZW5ndGg7Kyt1KXtpZih1PGUubGVuZ3RoKWE9ZS5jaGFyQ29kZUF0KHUpO2Vsc2V7aWYoaShhKSlicmVhazthPWFlfWlmKGkoYSkpe2lmKCEobz09PXUtMXx8bD09PTEpKWlmKGw9PT0yKXtpZihyLmxlbmd0aDwyfHxzIT09Mnx8ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpIT09RmV8fHIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSE9PUZlKXtpZihyLmxlbmd0aD4yKXtjb25zdCBjPXIubGFzdEluZGV4T2Yobik7Yz09PS0xPyhyPSIiLHM9MCk6KHI9ci5zbGljZSgwLGMpLHM9ci5sZW5ndGgtMS1yLmxhc3RJbmRleE9mKG4pKSxvPXUsbD0wO2NvbnRpbnVlfWVsc2UgaWYoci5sZW5ndGghPT0wKXtyPSIiLHM9MCxvPXUsbD0wO2NvbnRpbnVlfX10JiYocis9ci5sZW5ndGg+MD9gJHtufS4uYDoiLi4iLHM9Mil9ZWxzZSByLmxlbmd0aD4wP3IrPWAke259JHtlLnNsaWNlKG8rMSx1KX1gOnI9ZS5zbGljZShvKzEsdSkscz11LW8tMTtvPXUsbD0wfWVsc2UgYT09PUZlJiZsIT09LTE/KytsOmw9LTF9cmV0dXJuIHJ9ZnVuY3Rpb24gSm8oZSl7cmV0dXJuIGU/YCR7ZVswXT09PSIuIj8iIjoiLiJ9JHtlfWA6IiJ9ZnVuY3Rpb24gWGkoZSx0KXtYbyh0LCJwYXRoT2JqZWN0Iik7Y29uc3Qgbj10LmRpcnx8dC5yb290LGk9dC5iYXNlfHxgJHt0Lm5hbWV8fCIifSR7Sm8odC5leHQpfWA7cmV0dXJuIG4/bj09PXQucm9vdD9gJHtufSR7aX1gOmAke259JHtlfSR7aX1gOml9Y29uc3QgbGU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0iIixpPSExO2ZvcihsZXQgcj1lLmxlbmd0aC0xO3I+PS0xO3ItLSl7bGV0IHM7aWYocj49MCl7aWYocz1lW3JdLGVlKHMsYHBhdGhzWyR7cn1dYCkscy5sZW5ndGg9PT0wKWNvbnRpbnVlfWVsc2UgdC5sZW5ndGg9PT0wP3M9QnQoKToocz1Cb1tgPSR7dH1gXXx8QnQoKSwocz09PXZvaWQgMHx8cy5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJnMuY2hhckNvZGVBdCgyKT09PWNlKSYmKHM9YCR7dH1cXGApKTtjb25zdCBvPXMubGVuZ3RoO2xldCBsPTAsYT0iIix1PSExO2NvbnN0IGM9cy5jaGFyQ29kZUF0KDApO2lmKG89PT0xKU8oYykmJihsPTEsdT0hMCk7ZWxzZSBpZihPKGMpKWlmKHU9ITAsTyhzLmNoYXJDb2RlQXQoMSkpKXtsZXQgZD0yLG09ZDtmb3IoO2Q8byYmIU8ocy5jaGFyQ29kZUF0KGQpKTspZCsrO2lmKGQ8byYmZCE9PW0pe2NvbnN0IGY9cy5zbGljZShtLGQpO2ZvcihtPWQ7ZDxvJiZPKHMuY2hhckNvZGVBdChkKSk7KWQrKztpZihkPG8mJmQhPT1tKXtmb3IobT1kO2Q8byYmIU8ocy5jaGFyQ29kZUF0KGQpKTspZCsrOyhkPT09b3x8ZCE9PW0pJiYoYT1gXFxcXCR7Zn1cXCR7cy5zbGljZShtLGQpfWAsbD1kKX19fWVsc2UgbD0xO2Vsc2UgcWUoYykmJnMuY2hhckNvZGVBdCgxKT09PVBlJiYoYT1zLnNsaWNlKDAsMiksbD0yLG8+MiYmTyhzLmNoYXJDb2RlQXQoMikpJiYodT0hMCxsPTMpKTtpZihhLmxlbmd0aD4wKWlmKHQubGVuZ3RoPjApe2lmKGEudG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSljb250aW51ZX1lbHNlIHQ9YTtpZihpKXtpZih0Lmxlbmd0aD4wKWJyZWFrfWVsc2UgaWYobj1gJHtzLnNsaWNlKGwpfVxcJHtufWAsaT11LHUmJnQubGVuZ3RoPjApYnJlYWt9cmV0dXJuIG49cXQobiwhaSwiXFwiLE8pLGk/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe2VlKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKHQ9PT0wKXJldHVybiIuIjtsZXQgbj0wLGkscj0hMTtjb25zdCBzPWUuY2hhckNvZGVBdCgwKTtpZih0PT09MSlyZXR1cm4gem4ocyk/IlxcIjplO2lmKE8ocykpaWYocj0hMCxPKGUuY2hhckNvZGVBdCgxKSkpe2xldCBsPTIsYT1sO2Zvcig7bDx0JiYhTyhlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobDx0JiZsIT09YSl7Y29uc3QgdT1lLnNsaWNlKGEsbCk7Zm9yKGE9bDtsPHQmJk8oZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw8dCYmbCE9PWEpe2ZvcihhPWw7bDx0JiYhTyhlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobD09PXQpcmV0dXJuYFxcXFwke3V9XFwke2Uuc2xpY2UoYSl9XFxgO2whPT1hJiYoaT1gXFxcXCR7dX1cXCR7ZS5zbGljZShhLGwpfWAsbj1sKX19fWVsc2Ugbj0xO2Vsc2UgcWUocykmJmUuY2hhckNvZGVBdCgxKT09PVBlJiYoaT1lLnNsaWNlKDAsMiksbj0yLHQ+MiYmTyhlLmNoYXJDb2RlQXQoMikpJiYocj0hMCxuPTMpKTtsZXQgbz1uPHQ/cXQoZS5zbGljZShuKSwhciwiXFwiLE8pOiIiO3JldHVybiBvLmxlbmd0aD09PTAmJiFyJiYobz0iLiIpLG8ubGVuZ3RoPjAmJk8oZS5jaGFyQ29kZUF0KHQtMSkpJiYobys9IlxcIiksaT09PXZvaWQgMD9yP2BcXCR7b31gOm86cj9gJHtpfVxcJHtvfWA6YCR7aX0ke299YH0saXNBYnNvbHV0ZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4hMTtjb25zdCBuPWUuY2hhckNvZGVBdCgwKTtyZXR1cm4gTyhuKXx8dD4yJiZxZShuKSYmZS5jaGFyQ29kZUF0KDEpPT09UGUmJk8oZS5jaGFyQ29kZUF0KDIpKX0sam9pbiguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIi4iO2xldCB0LG47Zm9yKGxldCBzPTA7czxlLmxlbmd0aDsrK3Mpe2NvbnN0IG89ZVtzXTtlZShvLCJwYXRoIiksby5sZW5ndGg+MCYmKHQ9PT12b2lkIDA/dD1uPW86dCs9YFxcJHtvfWApfWlmKHQ9PT12b2lkIDApcmV0dXJuIi4iO2xldCBpPSEwLHI9MDtpZih0eXBlb2Ygbj09InN0cmluZyImJk8obi5jaGFyQ29kZUF0KDApKSl7KytyO2NvbnN0IHM9bi5sZW5ndGg7cz4xJiZPKG4uY2hhckNvZGVBdCgxKSkmJigrK3Iscz4yJiYoTyhuLmNoYXJDb2RlQXQoMikpPysrcjppPSExKSl9aWYoaSl7Zm9yKDtyPHQubGVuZ3RoJiZPKHQuY2hhckNvZGVBdChyKSk7KXIrKztyPj0yJiYodD1gXFwke3Quc2xpY2Uocil9YCl9cmV0dXJuIGxlLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihlZShlLCJmcm9tIiksZWUodCwidG8iKSxlPT09dClyZXR1cm4iIjtjb25zdCBuPWxlLnJlc29sdmUoZSksaT1sZS5yZXNvbHZlKHQpO2lmKG49PT1pfHwoZT1uLnRvTG93ZXJDYXNlKCksdD1pLnRvTG93ZXJDYXNlKCksZT09PXQpKXJldHVybiIiO2xldCByPTA7Zm9yKDtyPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQocik9PT1jZTspcisrO2xldCBzPWUubGVuZ3RoO2Zvcig7cy0xPnImJmUuY2hhckNvZGVBdChzLTEpPT09Y2U7KXMtLTtjb25zdCBvPXMtcjtsZXQgbD0wO2Zvcig7bDx0Lmxlbmd0aCYmdC5jaGFyQ29kZUF0KGwpPT09Y2U7KWwrKztsZXQgYT10Lmxlbmd0aDtmb3IoO2EtMT5sJiZ0LmNoYXJDb2RlQXQoYS0xKT09PWNlOylhLS07Y29uc3QgdT1hLWwsYz1vPHU/bzp1O2xldCBkPS0xLG09MDtmb3IoO208YzttKyspe2NvbnN0IF89ZS5jaGFyQ29kZUF0KHIrbSk7aWYoXyE9PXQuY2hhckNvZGVBdChsK20pKWJyZWFrO189PT1jZSYmKGQ9bSl9aWYobSE9PWMpe2lmKGQ9PT0tMSlyZXR1cm4gaX1lbHNle2lmKHU+Yyl7aWYodC5jaGFyQ29kZUF0KGwrbSk9PT1jZSlyZXR1cm4gaS5zbGljZShsK20rMSk7aWYobT09PTIpcmV0dXJuIGkuc2xpY2UobCttKX1vPmMmJihlLmNoYXJDb2RlQXQocittKT09PWNlP2Q9bTptPT09MiYmKGQ9MykpLGQ9PT0tMSYmKGQ9MCl9bGV0IGY9IiI7Zm9yKG09citkKzE7bTw9czsrK20pKG09PT1zfHxlLmNoYXJDb2RlQXQobSk9PT1jZSkmJihmKz1mLmxlbmd0aD09PTA/Ii4uIjoiXFwuLiIpO3JldHVybiBsKz1kLGYubGVuZ3RoPjA/YCR7Zn0ke2kuc2xpY2UobCxhKX1gOihpLmNoYXJDb2RlQXQobCk9PT1jZSYmKytsLGkuc2xpY2UobCxhKSl9LHRvTmFtZXNwYWNlZFBhdGgoZSl7aWYodHlwZW9mIGUhPSJzdHJpbmcifHxlLmxlbmd0aD09PTApcmV0dXJuIGU7Y29uc3QgdD1sZS5yZXNvbHZlKGUpO2lmKHQubGVuZ3RoPD0yKXJldHVybiBlO2lmKHQuY2hhckNvZGVBdCgwKT09PWNlKXtpZih0LmNoYXJDb2RlQXQoMSk9PT1jZSl7Y29uc3Qgbj10LmNoYXJDb2RlQXQoMik7aWYobiE9PSRvJiZuIT09RmUpcmV0dXJuYFxcXFw/XFxVTkNcXCR7dC5zbGljZSgyKX1gfX1lbHNlIGlmKHFlKHQuY2hhckNvZGVBdCgwKSkmJnQuY2hhckNvZGVBdCgxKT09PVBlJiZ0LmNoYXJDb2RlQXQoMik9PT1jZSlyZXR1cm5gXFxcXD9cXCR7dH1gO3JldHVybiBlfSxkaXJuYW1lKGUpe2VlKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKHQ9PT0wKXJldHVybiIuIjtsZXQgbj0tMSxpPTA7Y29uc3Qgcj1lLmNoYXJDb2RlQXQoMCk7aWYodD09PTEpcmV0dXJuIE8ocik/ZToiLiI7aWYoTyhyKSl7aWYobj1pPTEsTyhlLmNoYXJDb2RlQXQoMSkpKXtsZXQgbD0yLGE9bDtmb3IoO2w8dCYmIU8oZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw8dCYmbCE9PWEpe2ZvcihhPWw7bDx0JiZPKGUuY2hhckNvZGVBdChsKSk7KWwrKztpZihsPHQmJmwhPT1hKXtmb3IoYT1sO2w8dCYmIU8oZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw9PT10KXJldHVybiBlO2whPT1hJiYobj1pPWwrMSl9fX19ZWxzZSBxZShyKSYmZS5jaGFyQ29kZUF0KDEpPT09UGUmJihuPXQ+MiYmTyhlLmNoYXJDb2RlQXQoMikpPzM6MixpPW4pO2xldCBzPS0xLG89ITA7Zm9yKGxldCBsPXQtMTtsPj1pOy0tbClpZihPKGUuY2hhckNvZGVBdChsKSkpe2lmKCFvKXtzPWw7YnJlYWt9fWVsc2Ugbz0hMTtpZihzPT09LTEpe2lmKG49PT0tMSlyZXR1cm4iLiI7cz1ufXJldHVybiBlLnNsaWNlKDAscyl9LGJhc2VuYW1lKGUsdCl7dCE9PXZvaWQgMCYmZWUodCwic3VmZml4IiksZWUoZSwicGF0aCIpO2xldCBuPTAsaT0tMSxyPSEwLHM7aWYoZS5sZW5ndGg+PTImJnFlKGUuY2hhckNvZGVBdCgwKSkmJmUuY2hhckNvZGVBdCgxKT09PVBlJiYobj0yKSx0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBvPXQubGVuZ3RoLTEsbD0tMTtmb3Iocz1lLmxlbmd0aC0xO3M+PW47LS1zKXtjb25zdCBhPWUuY2hhckNvZGVBdChzKTtpZihPKGEpKXtpZighcil7bj1zKzE7YnJlYWt9fWVsc2UgbD09PS0xJiYocj0hMSxsPXMrMSksbz49MCYmKGE9PT10LmNoYXJDb2RlQXQobyk/LS1vPT09LTEmJihpPXMpOihvPS0xLGk9bCkpfXJldHVybiBuPT09aT9pPWw6aT09PS0xJiYoaT1lLmxlbmd0aCksZS5zbGljZShuLGkpfWZvcihzPWUubGVuZ3RoLTE7cz49bjstLXMpaWYoTyhlLmNoYXJDb2RlQXQocykpKXtpZighcil7bj1zKzE7YnJlYWt9fWVsc2UgaT09PS0xJiYocj0hMSxpPXMrMSk7cmV0dXJuIGk9PT0tMT8iIjplLnNsaWNlKG4saSl9LGV4dG5hbWUoZSl7ZWUoZSwicGF0aCIpO2xldCB0PTAsbj0tMSxpPTAscj0tMSxzPSEwLG89MDtlLmxlbmd0aD49MiYmZS5jaGFyQ29kZUF0KDEpPT09UGUmJnFlKGUuY2hhckNvZGVBdCgwKSkmJih0PWk9Mik7Zm9yKGxldCBsPWUubGVuZ3RoLTE7bD49dDstLWwpe2NvbnN0IGE9ZS5jaGFyQ29kZUF0KGwpO2lmKE8oYSkpe2lmKCFzKXtpPWwrMTticmVha31jb250aW51ZX1yPT09LTEmJihzPSExLHI9bCsxKSxhPT09RmU/bj09PS0xP249bDpvIT09MSYmKG89MSk6biE9PS0xJiYobz0tMSl9cmV0dXJuIG49PT0tMXx8cj09PS0xfHxvPT09MHx8bz09PTEmJm49PT1yLTEmJm49PT1pKzE/IiI6ZS5zbGljZShuLHIpfSxmb3JtYXQ6WGkuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe2VlKGUsInBhdGgiKTtjb25zdCB0PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihlLmxlbmd0aD09PTApcmV0dXJuIHQ7Y29uc3Qgbj1lLmxlbmd0aDtsZXQgaT0wLHI9ZS5jaGFyQ29kZUF0KDApO2lmKG49PT0xKXJldHVybiBPKHIpPyh0LnJvb3Q9dC5kaXI9ZSx0KToodC5iYXNlPXQubmFtZT1lLHQpO2lmKE8ocikpe2lmKGk9MSxPKGUuY2hhckNvZGVBdCgxKSkpe2xldCBkPTIsbT1kO2Zvcig7ZDxuJiYhTyhlLmNoYXJDb2RlQXQoZCkpOylkKys7aWYoZDxuJiZkIT09bSl7Zm9yKG09ZDtkPG4mJk8oZS5jaGFyQ29kZUF0KGQpKTspZCsrO2lmKGQ8biYmZCE9PW0pe2ZvcihtPWQ7ZDxuJiYhTyhlLmNoYXJDb2RlQXQoZCkpOylkKys7ZD09PW4/aT1kOmQhPT1tJiYoaT1kKzEpfX19fWVsc2UgaWYocWUocikmJmUuY2hhckNvZGVBdCgxKT09PVBlKXtpZihuPD0yKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2lmKGk9MixPKGUuY2hhckNvZGVBdCgyKSkpe2lmKG49PT0zKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O2k9M319aT4wJiYodC5yb290PWUuc2xpY2UoMCxpKSk7bGV0IHM9LTEsbz1pLGw9LTEsYT0hMCx1PWUubGVuZ3RoLTEsYz0wO2Zvcig7dT49aTstLXUpe2lmKHI9ZS5jaGFyQ29kZUF0KHUpLE8ocikpe2lmKCFhKXtvPXUrMTticmVha31jb250aW51ZX1sPT09LTEmJihhPSExLGw9dSsxKSxyPT09RmU/cz09PS0xP3M9dTpjIT09MSYmKGM9MSk6cyE9PS0xJiYoYz0tMSl9cmV0dXJuIGwhPT0tMSYmKHM9PT0tMXx8Yz09PTB8fGM9PT0xJiZzPT09bC0xJiZzPT09bysxP3QuYmFzZT10Lm5hbWU9ZS5zbGljZShvLGwpOih0Lm5hbWU9ZS5zbGljZShvLHMpLHQuYmFzZT1lLnNsaWNlKG8sbCksdC5leHQ9ZS5zbGljZShzLGwpKSksbz4wJiZvIT09aT90LmRpcj1lLnNsaWNlKDAsby0xKTp0LmRpcj10LnJvb3QsdH0sc2VwOiJcXCIsZGVsaW1pdGVyOiI7Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9LFlvPSgoKT0+e2lmKEJlKXtjb25zdCBlPS9cXC9nO3JldHVybigpPT57Y29uc3QgdD1CdCgpLnJlcGxhY2UoZSwiLyIpO3JldHVybiB0LnNsaWNlKHQuaW5kZXhPZigiLyIpKX19cmV0dXJuKCk9PkJ0KCl9KSgpLGhlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49ITE7Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49LTEmJiFuO2ktLSl7Y29uc3Qgcj1pPj0wP2VbaV06WW8oKTtlZShyLGBwYXRoc1ske2l9XWApLHIubGVuZ3RoIT09MCYmKHQ9YCR7cn0vJHt0fWAsbj1yLmNoYXJDb2RlQXQoMCk9PT1hZSl9cmV0dXJuIHQ9cXQodCwhbiwiLyIsem4pLG4/YC8ke3R9YDp0Lmxlbmd0aD4wP3Q6Ii4ifSxub3JtYWxpemUoZSl7aWYoZWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1hZSxuPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKT09PWFlO3JldHVybiBlPXF0KGUsIXQsIi8iLHpuKSxlLmxlbmd0aD09PTA/dD8iLyI6bj8iLi8iOiIuIjoobiYmKGUrPSIvIiksdD9gLyR7ZX1gOmUpfSxpc0Fic29sdXRlKGUpe3JldHVybiBlZShlLCJwYXRoIiksZS5sZW5ndGg+MCYmZS5jaGFyQ29kZUF0KDApPT09YWV9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbil7Y29uc3QgaT1lW25dO2VlKGksInBhdGgiKSxpLmxlbmd0aD4wJiYodD09PXZvaWQgMD90PWk6dCs9YC8ke2l9YCl9cmV0dXJuIHQ9PT12b2lkIDA/Ii4iOmhlLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihlZShlLCJmcm9tIiksZWUodCwidG8iKSxlPT09dHx8KGU9aGUucmVzb2x2ZShlKSx0PWhlLnJlc29sdmUodCksZT09PXQpKXJldHVybiIiO2NvbnN0IG49MSxpPWUubGVuZ3RoLHI9aS1uLHM9MSxvPXQubGVuZ3RoLXMsbD1yPG8/cjpvO2xldCBhPS0xLHU9MDtmb3IoO3U8bDt1Kyspe2NvbnN0IGQ9ZS5jaGFyQ29kZUF0KG4rdSk7aWYoZCE9PXQuY2hhckNvZGVBdChzK3UpKWJyZWFrO2Q9PT1hZSYmKGE9dSl9aWYodT09PWwpaWYobz5sKXtpZih0LmNoYXJDb2RlQXQocyt1KT09PWFlKXJldHVybiB0LnNsaWNlKHMrdSsxKTtpZih1PT09MClyZXR1cm4gdC5zbGljZShzK3UpfWVsc2Ugcj5sJiYoZS5jaGFyQ29kZUF0KG4rdSk9PT1hZT9hPXU6dT09PTAmJihhPTApKTtsZXQgYz0iIjtmb3IodT1uK2ErMTt1PD1pOysrdSkodT09PWl8fGUuY2hhckNvZGVBdCh1KT09PWFlKSYmKGMrPWMubGVuZ3RoPT09MD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtjfSR7dC5zbGljZShzK2EpfWB9LHRvTmFtZXNwYWNlZFBhdGgoZSl7cmV0dXJuIGV9LGRpcm5hbWUoZSl7aWYoZWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1hZTtsZXQgbj0tMSxpPSEwO2ZvcihsZXQgcj1lLmxlbmd0aC0xO3I+PTE7LS1yKWlmKGUuY2hhckNvZGVBdChyKT09PWFlKXtpZighaSl7bj1yO2JyZWFrfX1lbHNlIGk9ITE7cmV0dXJuIG49PT0tMT90PyIvIjoiLiI6dCYmbj09PTE/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dCE9PXZvaWQgMCYmZWUodCwiZXh0IiksZWUoZSwicGF0aCIpO2xldCBuPTAsaT0tMSxyPSEwLHM7aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgbz10Lmxlbmd0aC0xLGw9LTE7Zm9yKHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7Y29uc3QgYT1lLmNoYXJDb2RlQXQocyk7aWYoYT09PWFlKXtpZighcil7bj1zKzE7YnJlYWt9fWVsc2UgbD09PS0xJiYocj0hMSxsPXMrMSksbz49MCYmKGE9PT10LmNoYXJDb2RlQXQobyk/LS1vPT09LTEmJihpPXMpOihvPS0xLGk9bCkpfXJldHVybiBuPT09aT9pPWw6aT09PS0xJiYoaT1lLmxlbmd0aCksZS5zbGljZShuLGkpfWZvcihzPWUubGVuZ3RoLTE7cz49MDstLXMpaWYoZS5jaGFyQ29kZUF0KHMpPT09YWUpe2lmKCFyKXtuPXMrMTticmVha319ZWxzZSBpPT09LTEmJihyPSExLGk9cysxKTtyZXR1cm4gaT09PS0xPyIiOmUuc2xpY2UobixpKX0sZXh0bmFtZShlKXtlZShlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLGk9LTEscj0hMCxzPTA7Zm9yKGxldCBvPWUubGVuZ3RoLTE7bz49MDstLW8pe2NvbnN0IGw9ZS5jaGFyQ29kZUF0KG8pO2lmKGw9PT1hZSl7aWYoIXIpe249bysxO2JyZWFrfWNvbnRpbnVlfWk9PT0tMSYmKHI9ITEsaT1vKzEpLGw9PT1GZT90PT09LTE/dD1vOnMhPT0xJiYocz0xKTp0IT09LTEmJihzPS0xKX1yZXR1cm4gdD09PS0xfHxpPT09LTF8fHM9PT0wfHxzPT09MSYmdD09PWktMSYmdD09PW4rMT8iIjplLnNsaWNlKHQsaSl9LGZvcm1hdDpYaS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09YWU7bGV0IGk7bj8odC5yb290PSIvIixpPTEpOmk9MDtsZXQgcj0tMSxzPTAsbz0tMSxsPSEwLGE9ZS5sZW5ndGgtMSx1PTA7Zm9yKDthPj1pOy0tYSl7Y29uc3QgYz1lLmNoYXJDb2RlQXQoYSk7aWYoYz09PWFlKXtpZighbCl7cz1hKzE7YnJlYWt9Y29udGludWV9bz09PS0xJiYobD0hMSxvPWErMSksYz09PUZlP3I9PT0tMT9yPWE6dSE9PTEmJih1PTEpOnIhPT0tMSYmKHU9LTEpfWlmKG8hPT0tMSl7Y29uc3QgYz1zPT09MCYmbj8xOnM7cj09PS0xfHx1PT09MHx8dT09PTEmJnI9PT1vLTEmJnI9PT1zKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGMsbyk6KHQubmFtZT1lLnNsaWNlKGMsciksdC5iYXNlPWUuc2xpY2UoYyxvKSx0LmV4dD1lLnNsaWNlKHIsbykpfXJldHVybiBzPjA/dC5kaXI9ZS5zbGljZSgwLHMtMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07aGUud2luMzI9bGUud2luMzI9bGUsaGUucG9zaXg9bGUucG9zaXg9aGUsQmU/bGUubm9ybWFsaXplOmhlLm5vcm1hbGl6ZSxCZT9sZS5yZXNvbHZlOmhlLnJlc29sdmUsQmU/bGUucmVsYXRpdmU6aGUucmVsYXRpdmUsQmU/bGUuZGlybmFtZTpoZS5kaXJuYW1lLEJlP2xlLmJhc2VuYW1lOmhlLmJhc2VuYW1lLEJlP2xlLmV4dG5hbWU6aGUuZXh0bmFtZSxCZT9sZS5zZXA6aGUuc2VwO2NvbnN0IFFvPS9eXHdbXHdcZCsuLV0qJC8sWm89L15cLy8sS289L15cL1wvLztmdW5jdGlvbiBlbChlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVFvLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpe2lmKGUuYXV0aG9yaXR5KXtpZighWm8udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoS28udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1mdW5jdGlvbiB0bChlLHQpe3JldHVybiFlJiYhdD8iZmlsZSI6ZX1mdW5jdGlvbiBubChlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09eWUmJih0PXllK3QpOnQ9eWU7YnJlYWt9cmV0dXJuIHR9Y29uc3QgSj0iIix5ZT0iLyIsaWw9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87bGV0IEhuPWNsYXNzIHZue3N0YXRpYyBpc1VyaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHZuPyEwOnQ/dHlwZW9mIHQuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIHQuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2YgdC5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHQucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2YgdC5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2YgdC53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIjohMX1jb25zdHJ1Y3Rvcih0LG4saSxyLHMsbz0hMSl7dHlwZW9mIHQ9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT10LnNjaGVtZXx8Six0aGlzLmF1dGhvcml0eT10LmF1dGhvcml0eXx8Six0aGlzLnBhdGg9dC5wYXRofHxKLHRoaXMucXVlcnk9dC5xdWVyeXx8Six0aGlzLmZyYWdtZW50PXQuZnJhZ21lbnR8fEopOih0aGlzLnNjaGVtZT10bCh0LG8pLHRoaXMuYXV0aG9yaXR5PW58fEosdGhpcy5wYXRoPW5sKHRoaXMuc2NoZW1lLGl8fEopLHRoaXMucXVlcnk9cnx8Six0aGlzLmZyYWdtZW50PXN8fEosZWwodGhpcyxvKSl9Z2V0IGZzUGF0aCgpe3JldHVybiBVbih0aGlzLCExKX13aXRoKHQpe2lmKCF0KXJldHVybiB0aGlzO2xldHtzY2hlbWU6bixhdXRob3JpdHk6aSxwYXRoOnIscXVlcnk6cyxmcmFnbWVudDpvfT10O3JldHVybiBuPT09dm9pZCAwP249dGhpcy5zY2hlbWU6bj09PW51bGwmJihuPUopLGk9PT12b2lkIDA/aT10aGlzLmF1dGhvcml0eTppPT09bnVsbCYmKGk9Sikscj09PXZvaWQgMD9yPXRoaXMucGF0aDpyPT09bnVsbCYmKHI9Sikscz09PXZvaWQgMD9zPXRoaXMucXVlcnk6cz09PW51bGwmJihzPUopLG89PT12b2lkIDA/bz10aGlzLmZyYWdtZW50Om89PT1udWxsJiYobz1KKSxuPT09dGhpcy5zY2hlbWUmJmk9PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmcz09PXRoaXMucXVlcnkmJm89PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGF0KG4saSxyLHMsbyl9c3RhdGljIHBhcnNlKHQsbj0hMSl7Y29uc3QgaT1pbC5leGVjKHQpO3JldHVybiBpP25ldyBhdChpWzJdfHxKLE90KGlbNF18fEopLE90KGlbNV18fEopLE90KGlbN118fEopLE90KGlbOV18fEopLG4pOm5ldyBhdChKLEosSixKLEopfXN0YXRpYyBmaWxlKHQpe2xldCBuPUo7aWYoeXQmJih0PXQucmVwbGFjZSgvXFwvZyx5ZSkpLHRbMF09PT15ZSYmdFsxXT09PXllKXtjb25zdCBpPXQuaW5kZXhPZih5ZSwyKTtpPT09LTE/KG49dC5zdWJzdHJpbmcoMiksdD15ZSk6KG49dC5zdWJzdHJpbmcoMixpKSx0PXQuc3Vic3RyaW5nKGkpfHx5ZSl9cmV0dXJuIG5ldyBhdCgiZmlsZSIsbix0LEosSil9c3RhdGljIGZyb20odCxuKXtyZXR1cm4gbmV3IGF0KHQuc2NoZW1lLHQuYXV0aG9yaXR5LHQucGF0aCx0LnF1ZXJ5LHQuZnJhZ21lbnQsbil9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgaTtyZXR1cm4geXQmJnQuc2NoZW1lPT09ImZpbGUiP2k9dm4uZmlsZShsZS5qb2luKFVuKHQsITApLC4uLm4pKS5wYXRoOmk9aGUuam9pbih0LnBhdGgsLi4ubiksdC53aXRoKHtwYXRoOml9KX10b1N0cmluZyh0PSExKXtyZXR1cm4gV24odGhpcyx0KX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiB2bilyZXR1cm4gdDt7Y29uc3Qgbj1uZXcgYXQodCk7cmV0dXJuIG4uX2Zvcm1hdHRlZD10LmV4dGVybmFsPz9udWxsLG4uX2ZzUGF0aD10Ll9zZXA9PT1KaT90LmZzUGF0aD8/bnVsbDpudWxsLG59fWVsc2UgcmV0dXJuIHR9fTtjb25zdCBKaT15dD8xOnZvaWQgMDtjbGFzcyBhdCBleHRlbmRzIEhue2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb3JtYXR0ZWQ9bnVsbCx0aGlzLl9mc1BhdGg9bnVsbH1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1Vbih0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKHQ9ITEpe3JldHVybiB0P1duKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9V24odGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgdD17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYodC5mc1BhdGg9dGhpcy5fZnNQYXRoLHQuX3NlcD1KaSksdGhpcy5fZm9ybWF0dGVkJiYodC5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKHQucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYodC5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYodC5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJih0LnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJih0LmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLHR9fWNvbnN0IFlpPXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gUWkoZSx0LG4pe2xldCBpLHI9LTE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IG89ZS5jaGFyQ29kZUF0KHMpO2lmKG8+PTk3JiZvPD0xMjJ8fG8+PTY1JiZvPD05MHx8bz49NDgmJm88PTU3fHxvPT09NDV8fG89PT00Nnx8bz09PTk1fHxvPT09MTI2fHx0JiZvPT09NDd8fG4mJm89PT05MXx8biYmbz09PTkzfHxuJiZvPT09NTgpciE9PS0xJiYoaSs9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIscykpLHI9LTEpLGkhPT12b2lkIDAmJihpKz1lLmNoYXJBdChzKSk7ZWxzZXtpPT09dm9pZCAwJiYoaT1lLnN1YnN0cigwLHMpKTtjb25zdCBsPVlpW29dO2whPT12b2lkIDA/KHIhPT0tMSYmKGkrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLHMpKSxyPS0xKSxpKz1sKTpyPT09LTEmJihyPXMpfX1yZXR1cm4gciE9PS0xJiYoaSs9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIpKSksaSE9PXZvaWQgMD9pOmV9ZnVuY3Rpb24gcmwoZSl7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KG4pO2k9PT0zNXx8aT09PTYzPyh0PT09dm9pZCAwJiYodD1lLnN1YnN0cigwLG4pKSx0Kz1ZaVtpXSk6dCE9PXZvaWQgMCYmKHQrPWVbbl0pfXJldHVybiB0IT09dm9pZCAwP3Q6ZX1mdW5jdGlvbiBVbihlLHQpe2xldCBuO3JldHVybiBlLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiZlLnNjaGVtZT09PSJmaWxlIj9uPWAvLyR7ZS5hdXRob3JpdHl9JHtlLnBhdGh9YDplLnBhdGguY2hhckNvZGVBdCgwKT09PTQ3JiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJmUucGF0aC5jaGFyQ29kZUF0KDIpPT09NTg/dD9uPWUucGF0aC5zdWJzdHIoMSk6bj1lLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOm49ZS5wYXRoLHl0JiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gV24oZSx0KXtjb25zdCBuPXQ/cmw6UWk7bGV0IGk9IiIse3NjaGVtZTpyLGF1dGhvcml0eTpzLHBhdGg6byxxdWVyeTpsLGZyYWdtZW50OmF9PWU7aWYociYmKGkrPXIsaSs9IjoiKSwoc3x8cj09PSJmaWxlIikmJihpKz15ZSxpKz15ZSkscyl7bGV0IHU9cy5pbmRleE9mKCJAIik7aWYodSE9PS0xKXtjb25zdCBjPXMuc3Vic3RyKDAsdSk7cz1zLnN1YnN0cih1KzEpLHU9Yy5sYXN0SW5kZXhPZigiOiIpLHU9PT0tMT9pKz1uKGMsITEsITEpOihpKz1uKGMuc3Vic3RyKDAsdSksITEsITEpLGkrPSI6IixpKz1uKGMuc3Vic3RyKHUrMSksITEsITApKSxpKz0iQCJ9cz1zLnRvTG93ZXJDYXNlKCksdT1zLmxhc3RJbmRleE9mKCI6IiksdT09PS0xP2krPW4ocywhMSwhMCk6KGkrPW4ocy5zdWJzdHIoMCx1KSwhMSwhMCksaSs9cy5zdWJzdHIodSkpfWlmKG8pe2lmKG8ubGVuZ3RoPj0zJiZvLmNoYXJDb2RlQXQoMCk9PT00NyYmby5jaGFyQ29kZUF0KDIpPT09NTgpe2NvbnN0IHU9by5jaGFyQ29kZUF0KDEpO3U+PTY1JiZ1PD05MCYmKG89YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUodSszMil9OiR7by5zdWJzdHIoMyl9YCl9ZWxzZSBpZihvLmxlbmd0aD49MiYmby5jaGFyQ29kZUF0KDEpPT09NTgpe2NvbnN0IHU9by5jaGFyQ29kZUF0KDApO3U+PTY1JiZ1PD05MCYmKG89YCR7U3RyaW5nLmZyb21DaGFyQ29kZSh1KzMyKX06JHtvLnN1YnN0cigyKX1gKX1pKz1uKG8sITAsITEpfXJldHVybiBsJiYoaSs9Ij8iLGkrPW4obCwhMSwhMSkpLGEmJihpKz0iIyIsaSs9dD9hOlFpKGEsITEsITEpKSxpfWZ1bmN0aW9uIFppKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrWmkoZS5zdWJzdHIoMykpOmV9fWNvbnN0IEtpPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIE90KGUpe3JldHVybiBlLm1hdGNoKEtpKT9lLnJlcGxhY2UoS2ksdD0+WmkodCkpOmV9bGV0IHRlPWNsYXNzIEtle2NvbnN0cnVjdG9yKHQsbil7dGhpcy5saW5lTnVtYmVyPXQsdGhpcy5jb2x1bW49bn13aXRoKHQ9dGhpcy5saW5lTnVtYmVyLG49dGhpcy5jb2x1bW4pe3JldHVybiB0PT09dGhpcy5saW5lTnVtYmVyJiZuPT09dGhpcy5jb2x1bW4/dGhpczpuZXcgS2UodCxuKX1kZWx0YSh0PTAsbj0wKXtyZXR1cm4gdGhpcy53aXRoKHRoaXMubGluZU51bWJlcit0LHRoaXMuY29sdW1uK24pfWVxdWFscyh0KXtyZXR1cm4gS2UuZXF1YWxzKHRoaXMsdCl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiF0JiYhbj8hMDohIXQmJiEhbiYmdC5saW5lTnVtYmVyPT09bi5saW5lTnVtYmVyJiZ0LmNvbHVtbj09PW4uY29sdW1ufWlzQmVmb3JlKHQpe3JldHVybiBLZS5pc0JlZm9yZSh0aGlzLHQpfXN0YXRpYyBpc0JlZm9yZSh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI8bi5saW5lTnVtYmVyPyEwOm4ubGluZU51bWJlcjx0LmxpbmVOdW1iZXI/ITE6dC5jb2x1bW48bi5jb2x1bW59aXNCZWZvcmVPckVxdWFsKHQpe3JldHVybiBLZS5pc0JlZm9yZU9yRXF1YWwodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmVPckVxdWFsKHQsbil7cmV0dXJuIHQubGluZU51bWJlcjxuLmxpbmVOdW1iZXI/ITA6bi5saW5lTnVtYmVyPHQubGluZU51bWJlcj8hMTp0LmNvbHVtbjw9bi5jb2x1bW59c3RhdGljIGNvbXBhcmUodCxuKXtjb25zdCBpPXQubGluZU51bWJlcnwwLHI9bi5saW5lTnVtYmVyfDA7aWYoaT09PXIpe2NvbnN0IHM9dC5jb2x1bW58MCxvPW4uY29sdW1ufDA7cmV0dXJuIHMtb31yZXR1cm4gaS1yfWNsb25lKCl7cmV0dXJuIG5ldyBLZSh0aGlzLmxpbmVOdW1iZXIsdGhpcy5jb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMubGluZU51bWJlcisiLCIrdGhpcy5jb2x1bW4rIikifXN0YXRpYyBsaWZ0KHQpe3JldHVybiBuZXcgS2UodC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgaXNJUG9zaXRpb24odCl7cmV0dXJuIHQmJnR5cGVvZiB0LmxpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5jb2x1bW49PSJudW1iZXIifXRvSlNPTigpe3JldHVybntsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW46dGhpcy5jb2x1bW59fX0sJD1jbGFzcyBuZXtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0Pml8fHQ9PT1pJiZuPnI/KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWksdGhpcy5zdGFydENvbHVtbj1yLHRoaXMuZW5kTGluZU51bWJlcj10LHRoaXMuZW5kQ29sdW1uPW4pOih0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuc3RhcnRDb2x1bW49bix0aGlzLmVuZExpbmVOdW1iZXI9aSx0aGlzLmVuZENvbHVtbj1yKX1pc0VtcHR5KCl7cmV0dXJuIG5lLmlzRW1wdHkodGhpcyl9c3RhdGljIGlzRW1wdHkodCl7cmV0dXJuIHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW59Y29udGFpbnNQb3NpdGlvbih0KXtyZXR1cm4gbmUuY29udGFpbnNQb3NpdGlvbih0aGlzLHQpfXN0YXRpYyBjb250YWluc1Bvc2l0aW9uKHQsbil7cmV0dXJuIShuLmxpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmNvbHVtbjx0LnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uY29sdW1uPnQuZW5kQ29sdW1uKX1zdGF0aWMgc3RyaWN0Q29udGFpbnNQb3NpdGlvbih0LG4pe3JldHVybiEobi5saW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5jb2x1bW48PXQuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5jb2x1bW4+PXQuZW5kQ29sdW1uKX1jb250YWluc1JhbmdlKHQpe3JldHVybiBuZS5jb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjx0LnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPnQuZW5kQ29sdW1uKX1zdHJpY3RDb250YWluc1JhbmdlKHQpe3JldHVybiBuZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjw9dC5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbj49dC5lbmRDb2x1bW4pfXBsdXNSYW5nZSh0KXtyZXR1cm4gbmUucGx1c1JhbmdlKHRoaXMsdCl9c3RhdGljIHBsdXNSYW5nZSh0LG4pe2xldCBpLHIscyxvO3JldHVybiBuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcj8oaT1uLnN0YXJ0TGluZU51bWJlcixyPW4uc3RhcnRDb2x1bW4pOm4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/KGk9bi5zdGFydExpbmVOdW1iZXIscj1NYXRoLm1pbihuLnN0YXJ0Q29sdW1uLHQuc3RhcnRDb2x1bW4pKTooaT10LnN0YXJ0TGluZU51bWJlcixyPXQuc3RhcnRDb2x1bW4pLG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXI/KHM9bi5lbmRMaW5lTnVtYmVyLG89bi5lbmRDb2x1bW4pOm4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj8ocz1uLmVuZExpbmVOdW1iZXIsbz1NYXRoLm1heChuLmVuZENvbHVtbix0LmVuZENvbHVtbikpOihzPXQuZW5kTGluZU51bWJlcixvPXQuZW5kQ29sdW1uKSxuZXcgbmUoaSxyLHMsbyl9aW50ZXJzZWN0UmFuZ2VzKHQpe3JldHVybiBuZS5pbnRlcnNlY3RSYW5nZXModGhpcyx0KX1zdGF0aWMgaW50ZXJzZWN0UmFuZ2VzKHQsbil7bGV0IGk9dC5zdGFydExpbmVOdW1iZXIscj10LnN0YXJ0Q29sdW1uLHM9dC5lbmRMaW5lTnVtYmVyLG89dC5lbmRDb2x1bW47Y29uc3QgbD1uLnN0YXJ0TGluZU51bWJlcixhPW4uc3RhcnRDb2x1bW4sdT1uLmVuZExpbmVOdW1iZXIsYz1uLmVuZENvbHVtbjtyZXR1cm4gaTxsPyhpPWwscj1hKTppPT09bCYmKHI9TWF0aC5tYXgocixhKSkscz51PyhzPXUsbz1jKTpzPT09dSYmKG89TWF0aC5taW4obyxjKSksaT5zfHxpPT09cyYmcj5vP251bGw6bmV3IG5lKGkscixzLG8pfWVxdWFsc1JhbmdlKHQpe3JldHVybiBuZS5lcXVhbHNSYW5nZSh0aGlzLHQpfXN0YXRpYyBlcXVhbHNSYW5nZSh0LG4pe3JldHVybiF0JiYhbj8hMDohIXQmJiEhbiYmdC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbj09PW4uc3RhcnRDb2x1bW4mJnQuZW5kTGluZU51bWJlcj09PW4uZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW49PT1uLmVuZENvbHVtbn1nZXRFbmRQb3NpdGlvbigpe3JldHVybiBuZS5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24odCl7cmV0dXJuIG5ldyB0ZSh0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pfWdldFN0YXJ0UG9zaXRpb24oKXtyZXR1cm4gbmUuZ2V0U3RhcnRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0U3RhcnRQb3NpdGlvbih0KXtyZXR1cm4gbmV3IHRlKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLmVuZExpbmVOdW1iZXIrIiwiK3RoaXMuZW5kQ29sdW1uKyJdIn1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgbmUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbix0LG4pfXNldFN0YXJ0UG9zaXRpb24odCxuKXtyZXR1cm4gbmV3IG5lKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiBuZS5jb2xsYXBzZVRvU3RhcnQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9TdGFydCh0KXtyZXR1cm4gbmV3IG5lKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9Y29sbGFwc2VUb0VuZCgpe3JldHVybiBuZS5jb2xsYXBzZVRvRW5kKHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvRW5kKHQpe3JldHVybiBuZXcgbmUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9ZGVsdGEodCl7cmV0dXJuIG5ldyBuZSh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuc3RhcnRDb2x1bW4sdGhpcy5lbmRMaW5lTnVtYmVyK3QsdGhpcy5lbmRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IG5lKHQubGluZU51bWJlcix0LmNvbHVtbixuLmxpbmVOdW1iZXIsbi5jb2x1bW4pfXN0YXRpYyBsaWZ0KHQpe3JldHVybiB0P25ldyBuZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UodCl7cmV0dXJuIHQmJnR5cGVvZiB0LnN0YXJ0TGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnN0YXJ0Q29sdW1uPT0ibnVtYmVyIiYmdHlwZW9mIHQuZW5kTGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LmVuZENvbHVtbj09Im51bWJlciJ9c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPG4uc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPD1uLnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyh0LG4pe2lmKHQmJm4pe2NvbnN0IHM9dC5zdGFydExpbmVOdW1iZXJ8MCxvPW4uc3RhcnRMaW5lTnVtYmVyfDA7aWYocz09PW8pe2NvbnN0IGw9dC5zdGFydENvbHVtbnwwLGE9bi5zdGFydENvbHVtbnwwO2lmKGw9PT1hKXtjb25zdCB1PXQuZW5kTGluZU51bWJlcnwwLGM9bi5lbmRMaW5lTnVtYmVyfDA7aWYodT09PWMpe2NvbnN0IGQ9dC5lbmRDb2x1bW58MCxtPW4uZW5kQ29sdW1ufDA7cmV0dXJuIGQtbX1yZXR1cm4gdS1jfXJldHVybiBsLWF9cmV0dXJuIHMtb31yZXR1cm4odD8xOjApLShuPzE6MCl9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ0VuZHModCxuKXtyZXR1cm4gdC5lbmRMaW5lTnVtYmVyPT09bi5lbmRMaW5lTnVtYmVyP3QuZW5kQ29sdW1uPT09bi5lbmRDb2x1bW4/dC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlcj90LnN0YXJ0Q29sdW1uLW4uc3RhcnRDb2x1bW46dC5zdGFydExpbmVOdW1iZXItbi5zdGFydExpbmVOdW1iZXI6dC5lbmRDb2x1bW4tbi5lbmRDb2x1bW46dC5lbmRMaW5lTnVtYmVyLW4uZW5kTGluZU51bWJlcn1zdGF0aWMgc3BhbnNNdWx0aXBsZUxpbmVzKHQpe3JldHVybiB0LmVuZExpbmVOdW1iZXI+dC5zdGFydExpbmVOdW1iZXJ9dG9KU09OKCl7cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBzbChlLHQsbj0oaSxyKT0+aT09PXIpe2lmKGU9PT10KXJldHVybiEwO2lmKCFlfHwhdHx8ZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspaWYoIW4oZVtpXSx0W2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiphbChlLHQpe2xldCBuLGk7Zm9yKGNvbnN0IHIgb2YgZSlpIT09dm9pZCAwJiZ0KGkscik/bi5wdXNoKHIpOihuJiYoeWllbGQgbiksbj1bcl0pLGk9cjtuJiYoeWllbGQgbil9ZnVuY3Rpb24gb2woZSx0KXtmb3IobGV0IG49MDtuPD1lLmxlbmd0aDtuKyspdChuPT09MD92b2lkIDA6ZVtuLTFdLG49PT1lLmxlbmd0aD92b2lkIDA6ZVtuXSl9ZnVuY3Rpb24gbGwoZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0KG49PT0wP3ZvaWQgMDplW24tMV0sZVtuXSxuKzE9PT1lLmxlbmd0aD92b2lkIDA6ZVtuKzFdKX1mdW5jdGlvbiB1bChlLHQpe2Zvcihjb25zdCBuIG9mIHQpZS5wdXNoKG4pfXZhciBGbjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChzKXtyZXR1cm4gczwwfWUuaXNMZXNzVGhhbj10O2Z1bmN0aW9uIG4ocyl7cmV0dXJuIHM8PTB9ZS5pc0xlc3NUaGFuT3JFcXVhbD1uO2Z1bmN0aW9uIGkocyl7cmV0dXJuIHM+MH1lLmlzR3JlYXRlclRoYW49aTtmdW5jdGlvbiByKHMpe3JldHVybiBzPT09MH1lLmlzTmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPXIsZS5ncmVhdGVyVGhhbj0xLGUubGVzc1RoYW49LTEsZS5uZWl0aGVyTGVzc09yR3JlYXRlclRoYW49MH0pKEZufHwoRm49e30pKTtmdW5jdGlvbiBWdChlLHQpe3JldHVybihuLGkpPT50KGUobiksZShpKSl9Y29uc3QganQ9KGUsdCk9PmUtdDtmdW5jdGlvbiBjbChlKXtyZXR1cm4odCxuKT0+LWUodCxuKX1jb25zdCBidD1jbGFzcyBidHtjb25zdHJ1Y3Rvcih0KXt0aGlzLml0ZXJhdGU9dH10b0FycmF5KCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5pdGVyYXRlKG49Pih0LnB1c2gobiksITApKSx0fWZpbHRlcih0KXtyZXR1cm4gbmV3IGJ0KG49PnRoaXMuaXRlcmF0ZShpPT50KGkpP24oaSk6ITApKX1tYXAodCl7cmV0dXJuIG5ldyBidChuPT50aGlzLml0ZXJhdGUoaT0+bih0KGkpKSkpfWZpbmRMYXN0KHQpe2xldCBuO3JldHVybiB0aGlzLml0ZXJhdGUoaT0+KHQoaSkmJihuPWkpLCEwKSksbn1maW5kTGFzdE1heEJ5KHQpe2xldCBuLGk9ITA7cmV0dXJuIHRoaXMuaXRlcmF0ZShyPT4oKGl8fEZuLmlzR3JlYXRlclRoYW4odChyLG4pKSkmJihpPSExLG49ciksITApKSxufX07YnQuZW1wdHk9bmV3IGJ0KHQ9Pnt9KTtsZXQgZXI9YnQ7ZnVuY3Rpb24gdHIoZSl7cmV0dXJuIGU8MD8wOmU+MjU1PzI1NTplfDB9ZnVuY3Rpb24gb3QoZSl7cmV0dXJuIGU8MD8wOmU+NDI5NDk2NzI5NT80Mjk0OTY3Mjk1OmV8MH1jbGFzcyBobHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlcz10LHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0Lmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXModCxuKXt0PW90KHQpO2NvbnN0IGk9dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bSxzPW4ubGVuZ3RoO3JldHVybiBzPT09MD8hMToodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KGkubGVuZ3RoK3MpLHRoaXMudmFsdWVzLnNldChpLnN1YmFycmF5KDAsdCksMCksdGhpcy52YWx1ZXMuc2V0KGkuc3ViYXJyYXkodCksdCtzKSx0aGlzLnZhbHVlcy5zZXQobix0KSx0LTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPXQtMSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoci5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfXNldFZhbHVlKHQsbil7cmV0dXJuIHQ9b3QodCksbj1vdChuKSx0aGlzLnZhbHVlc1t0XT09PW4/ITE6KHRoaXMudmFsdWVzW3RdPW4sdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLCEwKX1yZW1vdmVWYWx1ZXModCxuKXt0PW90KHQpLG49b3Qobik7Y29uc3QgaT10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtO2lmKHQ+PWkubGVuZ3RoKXJldHVybiExO2NvbnN0IHM9aS5sZW5ndGgtdDtyZXR1cm4gbj49cyYmKG49cyksbj09PTA/ITE6KHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShpLmxlbmd0aC1uKSx0aGlzLnZhbHVlcy5zZXQoaS5zdWJhcnJheSgwLHQpLDApLHRoaXMudmFsdWVzLnNldChpLnN1YmFycmF5KHQrbiksdCksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg9PT0wPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0odCl7cmV0dXJuIHQ8MD8wOih0PW90KHQpLHRoaXMuX2dldFByZWZpeFN1bSh0KSl9X2dldFByZWZpeFN1bSh0KXtpZih0PD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW3RdO2xldCBuPXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxO249PT0wJiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sbisrKSx0Pj10aGlzLnZhbHVlcy5sZW5ndGgmJih0PXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IGk9bjtpPD10O2krKyl0aGlzLnByZWZpeFN1bVtpXT10aGlzLnByZWZpeFN1bVtpLTFdK3RoaXMudmFsdWVzW2ldO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLHQpLHRoaXMucHJlZml4U3VtW3RdfWdldEluZGV4T2YodCl7dD1NYXRoLmZsb29yKHQpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgbj0wLGk9dGhpcy52YWx1ZXMubGVuZ3RoLTEscj0wLHM9MCxvPTA7Zm9yKDtuPD1pOylpZihyPW4rKGktbikvMnwwLHM9dGhpcy5wcmVmaXhTdW1bcl0sbz1zLXRoaXMudmFsdWVzW3JdLHQ8bylpPXItMTtlbHNlIGlmKHQ+PXMpbj1yKzE7ZWxzZSBicmVhaztyZXR1cm4gbmV3IGRsKHIsdC1vKX19Y2xhc3MgZGx7Y29uc3RydWN0b3IodCxuKXt0aGlzLmluZGV4PXQsdGhpcy5yZW1haW5kZXI9bix0aGlzLl9wcmVmaXhTdW1JbmRleE9mUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMuaW5kZXg9dCx0aGlzLnJlbWFpbmRlcj1ufX1jbGFzcyBtbHtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLl91cmk9dCx0aGlzLl9saW5lcz1uLHRoaXMuX2VvbD1pLHRoaXMuX3ZlcnNpb25JZD1yLHRoaXMuX2xpbmVTdGFydHM9bnVsbCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbGluZXMubGVuZ3RoPTB9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbklkfWdldFRleHQoKXtyZXR1cm4gdGhpcy5fY2FjaGVkVGV4dFZhbHVlPT09bnVsbCYmKHRoaXMuX2NhY2hlZFRleHRWYWx1ZT10aGlzLl9saW5lcy5qb2luKHRoaXMuX2VvbCkpLHRoaXMuX2NhY2hlZFRleHRWYWx1ZX1vbkV2ZW50cyh0KXt0LmVvbCYmdC5lb2whPT10aGlzLl9lb2wmJih0aGlzLl9lb2w9dC5lb2wsdGhpcy5fbGluZVN0YXJ0cz1udWxsKTtjb25zdCBuPXQuY2hhbmdlcztmb3IoY29uc3QgaSBvZiBuKXRoaXMuX2FjY2VwdERlbGV0ZVJhbmdlKGkucmFuZ2UpLHRoaXMuX2FjY2VwdEluc2VydFRleHQobmV3IHRlKGkucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGkucmFuZ2Uuc3RhcnRDb2x1bW4pLGkudGV4dCk7dGhpcy5fdmVyc2lvbklkPXQudmVyc2lvbklkLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfV9lbnN1cmVMaW5lU3RhcnRzKCl7aWYoIXRoaXMuX2xpbmVTdGFydHMpe2NvbnN0IHQ9dGhpcy5fZW9sLmxlbmd0aCxuPXRoaXMuX2xpbmVzLmxlbmd0aCxpPW5ldyBVaW50MzJBcnJheShuKTtmb3IobGV0IHI9MDtyPG47cisrKWlbcl09dGhpcy5fbGluZXNbcl0ubGVuZ3RoK3Q7dGhpcy5fbGluZVN0YXJ0cz1uZXcgaGwoaSl9fV9zZXRMaW5lVGV4dCh0LG4pe3RoaXMuX2xpbmVzW3RdPW4sdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5zZXRWYWx1ZSh0LHRoaXMuX2xpbmVzW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoKX1fYWNjZXB0RGVsZXRlUmFuZ2UodCl7aWYodC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXIpe2lmKHQuc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbilyZXR1cm47dGhpcy5fc2V0TGluZVRleHQodC5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmVuZENvbHVtbi0xKSk7cmV0dXJufXRoaXMuX3NldExpbmVUZXh0KHQuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1t0LmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UodC5zdGFydExpbmVOdW1iZXIsdC5lbmRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXIpfV9hY2NlcHRJbnNlcnRUZXh0KHQsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBpPWtvKG4pO2lmKGkubGVuZ3RoPT09MSl7dGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK2lbMF0rdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSk7cmV0dXJufWlbaS5sZW5ndGgtMV0rPXRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSksdGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK2lbMF0pO2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KGkubGVuZ3RoLTEpO2ZvcihsZXQgcz0xO3M8aS5sZW5ndGg7cysrKXRoaXMuX2xpbmVzLnNwbGljZSh0LmxpbmVOdW1iZXIrcy0xLDAsaVtzXSkscltzLTFdPWlbc10ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGg7dGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5pbnNlcnRWYWx1ZXModC5saW5lTnVtYmVyLHIpfX1jb25zdCBmbD0iYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLC48Pi8/IjtmdW5jdGlvbiBwbChlPSIiKXtsZXQgdD0iKC0/XFxkKlxcLlxcZFxcdyopfChbXiI7Zm9yKGNvbnN0IG4gb2YgZmwpZS5pbmRleE9mKG4pPj0wfHwodCs9IlxcIituKTtyZXR1cm4gdCs9Ilxcc10rKSIsbmV3IFJlZ0V4cCh0LCJnIil9Y29uc3QgbnI9cGwoKTtmdW5jdGlvbiBpcihlKXtsZXQgdD1ucjtpZihlJiZlIGluc3RhbmNlb2YgUmVnRXhwKWlmKGUuZ2xvYmFsKXQ9ZTtlbHNle2xldCBuPSJnIjtlLmlnbm9yZUNhc2UmJihuKz0iaSIpLGUubXVsdGlsaW5lJiYobis9Im0iKSxlLnVuaWNvZGUmJihuKz0idSIpLHQ9bmV3IFJlZ0V4cChlLnNvdXJjZSxuKX1yZXR1cm4gdC5sYXN0SW5kZXg9MCx0fWNvbnN0IHJyPW5ldyBubztyci51bnNoaWZ0KHttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9KTtmdW5jdGlvbiBQbihlLHQsbixpLHIpe2lmKHQ9aXIodCkscnx8KHI9SHQuZmlyc3QocnIpKSxuLmxlbmd0aD5yLm1heExlbil7bGV0IHU9ZS1yLm1heExlbi8yO3JldHVybiB1PDA/dT0wOmkrPXUsbj1uLnN1YnN0cmluZyh1LGUrci5tYXhMZW4vMiksUG4oZSx0LG4saSxyKX1jb25zdCBzPURhdGUubm93KCksbz1lLTEtaTtsZXQgbD0tMSxhPW51bGw7Zm9yKGxldCB1PTE7IShEYXRlLm5vdygpLXM+PXIudGltZUJ1ZGdldCk7dSsrKXtjb25zdCBjPW8tci53aW5kb3dTaXplKnU7dC5sYXN0SW5kZXg9TWF0aC5tYXgoMCxjKTtjb25zdCBkPWdsKHQsbixvLGwpO2lmKCFkJiZhfHwoYT1kLGM8PTApKWJyZWFrO2w9Y31pZihhKXtjb25zdCB1PXt3b3JkOmFbMF0sc3RhcnRDb2x1bW46aSsxK2EuaW5kZXgsZW5kQ29sdW1uOmkrMSthLmluZGV4K2FbMF0ubGVuZ3RofTtyZXR1cm4gdC5sYXN0SW5kZXg9MCx1fXJldHVybiBudWxsfWZ1bmN0aW9uIGdsKGUsdCxuLGkpe2xldCByO2Zvcig7cj1lLmV4ZWModCk7KXtjb25zdCBzPXIuaW5kZXh8fDA7aWYoczw9biYmZS5sYXN0SW5kZXg+PW4pcmV0dXJuIHI7aWYoaT4wJiZzPmkpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9Y2xhc3MgQm57Y29uc3RydWN0b3IodCl7Y29uc3Qgbj10cih0KTt0aGlzLl9kZWZhdWx0VmFsdWU9bix0aGlzLl9hc2NpaU1hcD1Cbi5fY3JlYXRlQXNjaWlNYXAobiksdGhpcy5fbWFwPW5ldyBNYXB9c3RhdGljIF9jcmVhdGVBc2NpaU1hcCh0KXtjb25zdCBuPW5ldyBVaW50OEFycmF5KDI1Nik7cmV0dXJuIG4uZmlsbCh0KSxufXNldCh0LG4pe2NvbnN0IGk9dHIobik7dD49MCYmdDwyNTY/dGhpcy5fYXNjaWlNYXBbdF09aTp0aGlzLl9tYXAuc2V0KHQsaSl9Z2V0KHQpe3JldHVybiB0Pj0wJiZ0PDI1Nj90aGlzLl9hc2NpaU1hcFt0XTp0aGlzLl9tYXAuZ2V0KHQpfHx0aGlzLl9kZWZhdWx0VmFsdWV9Y2xlYXIoKXt0aGlzLl9hc2NpaU1hcC5maWxsKHRoaXMuX2RlZmF1bHRWYWx1ZSksdGhpcy5fbWFwLmNsZWFyKCl9fWNsYXNzIGJse2NvbnN0cnVjdG9yKHQsbixpKXtjb25zdCByPW5ldyBVaW50OEFycmF5KHQqbik7Zm9yKGxldCBzPTAsbz10Km47czxvO3MrKylyW3NdPWk7dGhpcy5fZGF0YT1yLHRoaXMucm93cz10LHRoaXMuY29scz1ufWdldCh0LG4pe3JldHVybiB0aGlzLl9kYXRhW3QqdGhpcy5jb2xzK25dfXNldCh0LG4saSl7dGhpcy5fZGF0YVt0KnRoaXMuY29scytuXT1pfX1jbGFzcyBfbHtjb25zdHJ1Y3Rvcih0KXtsZXQgbj0wLGk9MDtmb3IobGV0IHM9MCxvPXQubGVuZ3RoO3M8bztzKyspe2NvbnN0W2wsYSx1XT10W3NdO2E+biYmKG49YSksbD5pJiYoaT1sKSx1PmkmJihpPXUpfW4rKyxpKys7Y29uc3Qgcj1uZXcgYmwoaSxuLDApO2ZvcihsZXQgcz0wLG89dC5sZW5ndGg7czxvO3MrKyl7Y29uc3RbbCxhLHVdPXRbc107ci5zZXQobCxhLHUpfXRoaXMuX3N0YXRlcz1yLHRoaXMuX21heENoYXJDb2RlPW59bmV4dFN0YXRlKHQsbil7cmV0dXJuIG48MHx8bj49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KHQsbil9fWxldCBxbj1udWxsO2Z1bmN0aW9uIHdsKCl7cmV0dXJuIHFuPT09bnVsbCYmKHFuPW5ldyBfbChbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSkscW59bGV0IEF0PW51bGw7ZnVuY3Rpb24gdmwoKXtpZihBdD09PW51bGwpe0F0PW5ldyBCbigwKTtjb25zdCBlPWAgCTw+JyLjgIHjgILvvaHvvaTvvIzvvI7vvJrvvJvigJjjgIjjgIzjgI7jgJTvvIjvvLvvvZvvvaLvvaPvvZ3vvL3vvInjgJXjgI/jgI3jgInigJnvvYDvvZ7igKZgO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKUF0LnNldChlLmNoYXJDb2RlQXQobiksMSk7Y29uc3QgdD0iLiw7OiI7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspQXQuc2V0KHQuY2hhckNvZGVBdChuKSwyKX1yZXR1cm4gQXR9Y2xhc3MgR3R7c3RhdGljIF9jcmVhdGVMaW5rKHQsbixpLHIscyl7bGV0IG89cy0xO2Rve2NvbnN0IGw9bi5jaGFyQ29kZUF0KG8pO2lmKHQuZ2V0KGwpIT09MilicmVhaztvLS19d2hpbGUobz5yKTtpZihyPjApe2NvbnN0IGw9bi5jaGFyQ29kZUF0KHItMSksYT1uLmNoYXJDb2RlQXQobyk7KGw9PT00MCYmYT09PTQxfHxsPT09OTEmJmE9PT05M3x8bD09PTEyMyYmYT09PTEyNSkmJm8tLX1yZXR1cm57cmFuZ2U6e3N0YXJ0TGluZU51bWJlcjppLHN0YXJ0Q29sdW1uOnIrMSxlbmRMaW5lTnVtYmVyOmksZW5kQ29sdW1uOm8rMn0sdXJsOm4uc3Vic3RyaW5nKHIsbysxKX19c3RhdGljIGNvbXB1dGVMaW5rcyh0LG49d2woKSl7Y29uc3QgaT12bCgpLHI9W107Zm9yKGxldCBzPTEsbz10LmdldExpbmVDb3VudCgpO3M8PW87cysrKXtjb25zdCBsPXQuZ2V0TGluZUNvbnRlbnQocyksYT1sLmxlbmd0aDtsZXQgdT0wLGM9MCxkPTAsbT0xLGY9ITEsXz0hMSxnPSExLEE9ITE7Zm9yKDt1PGE7KXtsZXQgdj0hMTtjb25zdCB5PWwuY2hhckNvZGVBdCh1KTtpZihtPT09MTMpe2xldCBFO3N3aXRjaCh5KXtjYXNlIDQwOmY9ITAsRT0wO2JyZWFrO2Nhc2UgNDE6RT1mPzA6MTticmVhaztjYXNlIDkxOmc9ITAsXz0hMCxFPTA7YnJlYWs7Y2FzZSA5MzpnPSExLEU9Xz8wOjE7YnJlYWs7Y2FzZSAxMjM6QT0hMCxFPTA7YnJlYWs7Y2FzZSAxMjU6RT1BPzA6MTticmVhaztjYXNlIDM5OmNhc2UgMzQ6Y2FzZSA5NjpkPT09eT9FPTE6ZD09PTM5fHxkPT09MzR8fGQ9PT05Nj9FPTA6RT0xO2JyZWFrO2Nhc2UgNDI6RT1kPT09NDI/MTowO2JyZWFrO2Nhc2UgMTI0OkU9ZD09PTEyND8xOjA7YnJlYWs7Y2FzZSAzMjpFPWc/MDoxO2JyZWFrO2RlZmF1bHQ6RT1pLmdldCh5KX1FPT09MSYmKHIucHVzaChHdC5fY3JlYXRlTGluayhpLGwscyxjLHUpKSx2PSEwKX1lbHNlIGlmKG09PT0xMil7bGV0IEU7eT09PTkxPyhfPSEwLEU9MCk6RT1pLmdldCh5KSxFPT09MT92PSEwOm09MTN9ZWxzZSBtPW4ubmV4dFN0YXRlKG0seSksbT09PTAmJih2PSEwKTt2JiYobT0xLGY9ITEsXz0hMSxBPSExLGM9dSsxLGQ9eSksdSsrfW09PT0xMyYmci5wdXNoKEd0Ll9jcmVhdGVMaW5rKGksbCxzLGMsYSkpfXJldHVybiByfX1mdW5jdGlvbiB5bChlKXtyZXR1cm4hZXx8dHlwZW9mIGUuZ2V0TGluZUNvdW50IT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5nZXRMaW5lQ29udGVudCE9ImZ1bmN0aW9uIj9bXTpHdC5jb21wdXRlTGlua3MoZSl9Y29uc3QgYm49Y2xhc3MgYm57Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VmFsdWVTZXQ9W1sidHJ1ZSIsImZhbHNlIl0sWyJUcnVlIiwiRmFsc2UiXSxbIlByaXZhdGUiLCJQdWJsaWMiLCJGcmllbmQiLCJSZWFkT25seSIsIlBhcnRpYWwiLCJQcm90ZWN0ZWQiLCJXcml0ZU9ubHkiXSxbInB1YmxpYyIsInByb3RlY3RlZCIsInByaXZhdGUiXV19bmF2aWdhdGVWYWx1ZVNldCh0LG4saSxyLHMpe2lmKHQmJm4pe2NvbnN0IG89dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQobixzKTtpZihvKXJldHVybntyYW5nZTp0LHZhbHVlOm99fWlmKGkmJnIpe2NvbnN0IG89dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQocixzKTtpZihvKXJldHVybntyYW5nZTppLHZhbHVlOm99fXJldHVybiBudWxsfWRvTmF2aWdhdGVWYWx1ZVNldCh0LG4pe2NvbnN0IGk9dGhpcy5udW1iZXJSZXBsYWNlKHQsbik7cmV0dXJuIGkhPT1udWxsP2k6dGhpcy50ZXh0UmVwbGFjZSh0LG4pfW51bWJlclJlcGxhY2UodCxuKXtjb25zdCBpPU1hdGgucG93KDEwLHQubGVuZ3RoLSh0Lmxhc3RJbmRleE9mKCIuIikrMSkpO2xldCByPU51bWJlcih0KTtjb25zdCBzPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKHIpJiYhaXNOYU4ocykmJnI9PT1zP3I9PT0wJiYhbj9udWxsOihyPU1hdGguZmxvb3IocippKSxyKz1uP2k6LWksU3RyaW5nKHIvaSkpOm51bGx9dGV4dFJlcGxhY2UodCxuKXtyZXR1cm4gdGhpcy52YWx1ZVNldHNSZXBsYWNlKHRoaXMuX2RlZmF1bHRWYWx1ZVNldCx0LG4pfXZhbHVlU2V0c1JlcGxhY2UodCxuLGkpe2xldCByPW51bGw7Zm9yKGxldCBzPTAsbz10Lmxlbmd0aDtyPT09bnVsbCYmczxvO3MrKylyPXRoaXMudmFsdWVTZXRSZXBsYWNlKHRbc10sbixpKTtyZXR1cm4gcn12YWx1ZVNldFJlcGxhY2UodCxuLGkpe2xldCByPXQuaW5kZXhPZihuKTtyZXR1cm4gcj49MD8ocis9aT8xOi0xLHI8MD9yPXQubGVuZ3RoLTE6ciU9dC5sZW5ndGgsdFtyXSk6bnVsbH19O2JuLklOU1RBTkNFPW5ldyBibjtsZXQgT249Ym47Y29uc3Qgc3I9T2JqZWN0LmZyZWV6ZShmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pO3ZhciAkdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4gbj09PWUuTm9uZXx8bj09PWUuQ2FuY2VsbGVkfHxuIGluc3RhbmNlb2YgWHQ/ITA6IW58fHR5cGVvZiBuIT0ib2JqZWN0Ij8hMTp0eXBlb2Ygbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZD09ImJvb2xlYW4iJiZ0eXBlb2Ygbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZD09ImZ1bmN0aW9uIn1lLmlzQ2FuY2VsbGF0aW9uVG9rZW49dCxlLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6eG4uTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOnNyfSl9KSgkdHx8KCR0PXt9KSk7Y2xhc3MgWHR7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP3NyOih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgdmUpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj1udWxsKX19Y2xhc3MgeGx7Y29uc3RydWN0b3IodCl7dGhpcy5fdG9rZW49dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj10JiZ0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKHRoaXMuY2FuY2VsLHRoaXMpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyBYdCksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBYdCYmdGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49JHQuQ2FuY2VsbGVkfWRpc3Bvc2UodD0hMSl7dCYmdGhpcy5jYW5jZWwoKSx0aGlzLl9wYXJlbnRMaXN0ZW5lcj8uZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgWHQmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj0kdC5Ob25lfX1jbGFzcyBWbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUodCxuKXt0aGlzLl9rZXlDb2RlVG9TdHJbdF09bix0aGlzLl9zdHJUb0tleUNvZGVbbi50b0xvd2VyQ2FzZSgpXT10fWtleUNvZGVUb1N0cih0KXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW3RdfXN0clRvS2V5Q29kZSh0KXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IEp0PW5ldyBWbixqbj1uZXcgVm4sR249bmV3IFZuLFRsPW5ldyBBcnJheSgyMzApLGtsPU9iamVjdC5jcmVhdGUobnVsbCksQWw9T2JqZWN0LmNyZWF0ZShudWxsKTsoZnVuY3Rpb24oKXtjb25zdCBlPSIiLHQ9W1sxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLGUsZV0sWzEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMSwyLCJTdXBlciIsMCxlLDAsZSxlLGVdLFsxLDMsIkZuIiwwLGUsMCxlLGUsZV0sWzEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzEsNSwiU3VzcGVuZCIsMCxlLDAsZSxlLGVdLFsxLDYsIlJlc3VtZSIsMCxlLDAsZSxlLGVdLFsxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzEsOCwiU2xlZXAiLDAsZSwwLCJWS19TTEVFUCIsZSxlXSxbMSw5LCJXYWtlVXAiLDAsZSwwLGUsZSxlXSxbMCwxMCwiS2V5QSIsMzEsIkEiLDY1LCJWS19BIixlLGVdLFswLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLGUsZV0sWzAsMTIsIktleUMiLDMzLCJDIiw2NywiVktfQyIsZSxlXSxbMCwxMywiS2V5RCIsMzQsIkQiLDY4LCJWS19EIixlLGVdLFswLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLGUsZV0sWzAsMTUsIktleUYiLDM2LCJGIiw3MCwiVktfRiIsZSxlXSxbMCwxNiwiS2V5RyIsMzcsIkciLDcxLCJWS19HIixlLGVdLFswLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLGUsZV0sWzAsMTgsIktleUkiLDM5LCJJIiw3MywiVktfSSIsZSxlXSxbMCwxOSwiS2V5SiIsNDAsIkoiLDc0LCJWS19KIixlLGVdLFswLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLGUsZV0sWzAsMjEsIktleUwiLDQyLCJMIiw3NiwiVktfTCIsZSxlXSxbMCwyMiwiS2V5TSIsNDMsIk0iLDc3LCJWS19NIixlLGVdLFswLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLGUsZV0sWzAsMjQsIktleU8iLDQ1LCJPIiw3OSwiVktfTyIsZSxlXSxbMCwyNSwiS2V5UCIsNDYsIlAiLDgwLCJWS19QIixlLGVdLFswLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLGUsZV0sWzAsMjcsIktleVIiLDQ4LCJSIiw4MiwiVktfUiIsZSxlXSxbMCwyOCwiS2V5UyIsNDksIlMiLDgzLCJWS19TIixlLGVdLFswLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLGUsZV0sWzAsMzAsIktleVUiLDUxLCJVIiw4NSwiVktfVSIsZSxlXSxbMCwzMSwiS2V5ViIsNTIsIlYiLDg2LCJWS19WIixlLGVdLFswLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLGUsZV0sWzAsMzMsIktleVgiLDU0LCJYIiw4OCwiVktfWCIsZSxlXSxbMCwzNCwiS2V5WSIsNTUsIlkiLDg5LCJWS19ZIixlLGVdLFswLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLGUsZV0sWzAsMzYsIkRpZ2l0MSIsMjIsIjEiLDQ5LCJWS18xIixlLGVdLFswLDM3LCJEaWdpdDIiLDIzLCIyIiw1MCwiVktfMiIsZSxlXSxbMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLGUsZV0sWzAsMzksIkRpZ2l0NCIsMjUsIjQiLDUyLCJWS180IixlLGVdLFswLDQwLCJEaWdpdDUiLDI2LCI1Iiw1MywiVktfNSIsZSxlXSxbMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLGUsZV0sWzAsNDIsIkRpZ2l0NyIsMjgsIjciLDU1LCJWS183IixlLGVdLFswLDQzLCJEaWdpdDgiLDI5LCI4Iiw1NiwiVktfOCIsZSxlXSxbMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLGUsZV0sWzAsNDUsIkRpZ2l0MCIsMjEsIjAiLDQ4LCJWS18wIixlLGVdLFsxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzEsNDcsIkVzY2FwZSIsOSwiRXNjYXBlIiwyNywiVktfRVNDQVBFIixlLGVdLFsxLDQ4LCJCYWNrc3BhY2UiLDEsIkJhY2tzcGFjZSIsOCwiVktfQkFDSyIsZSxlXSxbMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFswLDUxLCJNaW51cyIsODgsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFswLDUyLCJFcXVhbCIsODYsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbMCw1MywiQnJhY2tldExlZnQiLDkyLCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzAsNTQsIkJyYWNrZXRSaWdodCIsOTQsIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbMCw1NSwiQmFja3NsYXNoIiw5MywiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsNTYsIkludGxIYXNoIiwwLGUsMCxlLGUsZV0sWzAsNTcsIlNlbWljb2xvbiIsODUsIjsiLDE4NiwiVktfT0VNXzEiLCI7IiwiT0VNXzEiXSxbMCw1OCwiUXVvdGUiLDk1LCInIiwyMjIsIlZLX09FTV83IiwiJyIsIk9FTV83Il0sWzAsNTksIkJhY2txdW90ZSIsOTEsImAiLDE5MiwiVktfT0VNXzMiLCJgIiwiT0VNXzMiXSxbMCw2MCwiQ29tbWEiLDg3LCIsIiwxODgsIlZLX09FTV9DT01NQSIsIiwiLCJPRU1fQ09NTUEiXSxbMCw2MSwiUGVyaW9kIiw4OSwiLiIsMTkwLCJWS19PRU1fUEVSSU9EIiwiLiIsIk9FTV9QRVJJT0QiXSxbMCw2MiwiU2xhc2giLDkwLCIvIiwxOTEsIlZLX09FTV8yIiwiLyIsIk9FTV8yIl0sWzEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLGUsZV0sWzEsNjQsIkYxIiw1OSwiRjEiLDExMiwiVktfRjEiLGUsZV0sWzEsNjUsIkYyIiw2MCwiRjIiLDExMywiVktfRjIiLGUsZV0sWzEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLGUsZV0sWzEsNjcsIkY0Iiw2MiwiRjQiLDExNSwiVktfRjQiLGUsZV0sWzEsNjgsIkY1Iiw2MywiRjUiLDExNiwiVktfRjUiLGUsZV0sWzEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLGUsZV0sWzEsNzAsIkY3Iiw2NSwiRjciLDExOCwiVktfRjciLGUsZV0sWzEsNzEsIkY4Iiw2NiwiRjgiLDExOSwiVktfRjgiLGUsZV0sWzEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLGUsZV0sWzEsNzMsIkYxMCIsNjgsIkYxMCIsMTIxLCJWS19GMTAiLGUsZV0sWzEsNzQsIkYxMSIsNjksIkYxMSIsMTIyLCJWS19GMTEiLGUsZV0sWzEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLGUsZV0sWzEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzEsNzcsIlNjcm9sbExvY2siLDg0LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsZSxlXSxbMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIixlLGVdLFsxLDgwLCJIb21lIiwxNCwiSG9tZSIsMzYsIlZLX0hPTUUiLGUsZV0sWzEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIixlLGVdLFsxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLGUsZV0sWzEsODMsIkVuZCIsMTMsIkVuZCIsMzUsIlZLX0VORCIsZSxlXSxbMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLGUsZV0sWzEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsZV0sWzEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IixlXSxbMSw4NywiQXJyb3dEb3duIiwxOCwiRG93bkFycm93Iiw0MCwiVktfRE9XTiIsIkRvd24iLGVdLFsxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLGVdLFsxLDg5LCJOdW1Mb2NrIiw4MywiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIixlLGVdLFsxLDkwLCJOdW1wYWREaXZpZGUiLDExMywiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDgsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsZSxlXSxbMSw5MiwiTnVtcGFkU3VidHJhY3QiLDExMSwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIixlLGVdLFsxLDkzLCJOdW1wYWRBZGQiLDEwOSwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzEsOTQsIk51bXBhZEVudGVyIiwzLGUsMCxlLGUsZV0sWzEsOTUsIk51bXBhZDEiLDk5LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsZSxlXSxbMSw5NiwiTnVtcGFkMiIsMTAwLCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsZSxlXSxbMSw5NywiTnVtcGFkMyIsMTAxLCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbMSw5OCwiTnVtcGFkNCIsMTAyLCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLGUsZV0sWzEsOTksIk51bXBhZDUiLDEwMywiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IixlLGVdLFsxLDEwMCwiTnVtcGFkNiIsMTA0LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEsMTAxLCJOdW1wYWQ3IiwxMDUsIk51bVBhZDciLDEwMywiVktfTlVNUEFENyIsZSxlXSxbMSwxMDIsIk51bXBhZDgiLDEwNiwiTnVtUGFkOCIsMTA0LCJWS19OVU1QQUQ4IixlLGVdLFsxLDEwMywiTnVtcGFkOSIsMTA3LCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzEsMTA0LCJOdW1wYWQwIiw5OCwiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMTIsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLGUsZV0sWzAsMTA2LCJJbnRsQmFja3NsYXNoIiw5NywiT0VNXzEwMiIsMjI2LCJWS19PRU1fMTAyIixlLGVdLFsxLDEwNywiQ29udGV4dE1lbnUiLDU4LCJDb250ZXh0TWVudSIsOTMsZSxlLGVdLFsxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMSwxMDksIk51bXBhZEVxdWFsIiwwLGUsMCxlLGUsZV0sWzEsMTEwLCJGMTMiLDcxLCJGMTMiLDEyNCwiVktfRjEzIixlLGVdLFsxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsZSxlXSxbMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLGUsZV0sWzEsMTEzLCJGMTYiLDc0LCJGMTYiLDEyNywiVktfRjE2IixlLGVdLFsxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsZSxlXSxbMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLGUsZV0sWzEsMTE2LCJGMTkiLDc3LCJGMTkiLDEzMCwiVktfRjE5IixlLGVdLFsxLDExNywiRjIwIiw3OCwiRjIwIiwxMzEsIlZLX0YyMCIsZSxlXSxbMSwxMTgsIkYyMSIsNzksIkYyMSIsMTMyLCJWS19GMjEiLGUsZV0sWzEsMTE5LCJGMjIiLDgwLCJGMjIiLDEzMywiVktfRjIyIixlLGVdLFsxLDEyMCwiRjIzIiw4MSwiRjIzIiwxMzQsIlZLX0YyMyIsZSxlXSxbMSwxMjEsIkYyNCIsODIsIkYyNCIsMTM1LCJWS19GMjQiLGUsZV0sWzEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzEsMTIzLCJIZWxwIiwwLGUsMCxlLGUsZV0sWzEsMTI0LCJTZWxlY3QiLDAsZSwwLGUsZSxlXSxbMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzEsMTI2LCJVbmRvIiwwLGUsMCxlLGUsZV0sWzEsMTI3LCJDdXQiLDAsZSwwLGUsZSxlXSxbMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMSwxMjksIlBhc3RlIiwwLGUsMCxlLGUsZV0sWzEsMTMwLCJGaW5kIiwwLGUsMCxlLGUsZV0sWzEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExNywiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFsxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTE4LCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsZSxlXSxbMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE5LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLGUsZV0sWzEsMTM0LCJOdW1wYWRDb21tYSIsMTEwLCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsZSxlXSxbMCwxMzUsIkludGxSbyIsMTE1LCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzEsMTM2LCJLYW5hTW9kZSIsMCxlLDAsZSxlLGVdLFswLDEzNywiSW50bFllbiIsMCxlLDAsZSxlLGVdLFsxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDEzOSwiTm9uQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDE0MCwiTGFuZzEiLDAsZSwwLGUsZSxlXSxbMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzEsMTQyLCJMYW5nMyIsMCxlLDAsZSxlLGVdLFsxLDE0MywiTGFuZzQiLDAsZSwwLGUsZSxlXSxbMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzEsMTQ1LCJBYm9ydCIsMCxlLDAsZSxlLGVdLFsxLDE0NiwiUHJvcHMiLDAsZSwwLGUsZSxlXSxbMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFsxLDE0OCwiTnVtcGFkUGFyZW5SaWdodCIsMCxlLDAsZSxlLGVdLFsxLDE0OSwiTnVtcGFkQmFja3NwYWNlIiwwLGUsMCxlLGUsZV0sWzEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFsxLDE1MSwiTnVtcGFkTWVtb3J5UmVjYWxsIiwwLGUsMCxlLGUsZV0sWzEsMTUyLCJOdW1wYWRNZW1vcnlDbGVhciIsMCxlLDAsZSxlLGVdLFsxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzEsMTU0LCJOdW1wYWRNZW1vcnlTdWJ0cmFjdCIsMCxlLDAsZSxlLGVdLFsxLDE1NSwiTnVtcGFkQ2xlYXIiLDEzMSwiQ2xlYXIiLDEyLCJWS19DTEVBUiIsZSxlXSxbMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbMSwwLGUsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLGUsZV0sWzEsMCxlLDQsIlNoaWZ0IiwxNiwiVktfU0hJRlQiLGUsZV0sWzEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzEsMCxlLDU3LCJNZXRhIiw5MSwiVktfQ09NTUFORCIsZSxlXSxbMSwxNTcsIkNvbnRyb2xMZWZ0Iiw1LGUsMCwiVktfTENPTlRST0wiLGUsZV0sWzEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzEsMTU5LCJBbHRMZWZ0Iiw2LGUsMCwiVktfTE1FTlUiLGUsZV0sWzEsMTYwLCJNZXRhTGVmdCIsNTcsZSwwLCJWS19MV0lOIixlLGVdLFsxLDE2MSwiQ29udHJvbFJpZ2h0Iiw1LGUsMCwiVktfUkNPTlRST0wiLGUsZV0sWzEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFsxLDE2MywiQWx0UmlnaHQiLDYsZSwwLCJWS19STUVOVSIsZSxlXSxbMSwxNjQsIk1ldGFSaWdodCIsNTcsZSwwLCJWS19SV0lOIixlLGVdLFsxLDE2NSwiQnJpZ2h0bmVzc1VwIiwwLGUsMCxlLGUsZV0sWzEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFsxLDE2NywiTWVkaWFQbGF5IiwwLGUsMCxlLGUsZV0sWzEsMTY4LCJNZWRpYVJlY29yZCIsMCxlLDAsZSxlLGVdLFsxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFsxLDE3MCwiTWVkaWFSZXdpbmQiLDAsZSwwLGUsZSxlXSxbMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMjQsIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyNSwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLGUsZV0sWzEsMTczLCJNZWRpYVN0b3AiLDEyNiwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLGUsZV0sWzEsMTc0LCJFamVjdCIsMCxlLDAsZSxlLGVdLFsxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyNywiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsZSxlXSxbMSwxNzYsIk1lZGlhU2VsZWN0IiwxMjgsIkxhdW5jaE1lZGlhUGxheWVyIiwxODEsIlZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QiLGUsZV0sWzEsMTc3LCJMYXVuY2hNYWlsIiwxMjksIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzEsMTc4LCJMYXVuY2hBcHAyIiwxMzAsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLGUsZV0sWzEsMTc5LCJMYXVuY2hBcHAxIiwwLGUsMCwiVktfTUVESUFfTEFVTkNIX0FQUDEiLGUsZV0sWzEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCxlLDAsZSxlLGVdLFsxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTIwLCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIixlLGVdLFsxLDE4MywiQnJvd3NlckhvbWUiLDEyMSwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxLDE4NCwiQnJvd3NlckJhY2siLDEyMiwiQnJvd3NlckJhY2siLDE2NiwiVktfQlJPV1NFUl9CQUNLIixlLGVdLFsxLDE4NSwiQnJvd3NlckZvcndhcmQiLDEyMywiQnJvd3NlckZvcndhcmQiLDE2NywiVktfQlJPV1NFUl9GT1JXQVJEIixlLGVdLFsxLDE4NiwiQnJvd3NlclN0b3AiLDAsZSwwLCJWS19CUk9XU0VSX1NUT1AiLGUsZV0sWzEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsZSwwLCJWS19CUk9XU0VSX0ZBVk9SSVRFUyIsZSxlXSxbMSwxODksIlpvb21Ub2dnbGUiLDAsZSwwLGUsZSxlXSxbMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFsxLDE5MSwiTWFpbEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxOTIsIk1haWxTZW5kIiwwLGUsMCxlLGUsZV0sWzEsMCxlLDExNCwiS2V5SW5Db21wb3NpdGlvbiIsMjI5LGUsZSxlXSxbMSwwLGUsMTE2LCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzEsMCxlLDk2LCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0tBTkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IQU5HVUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0ZJTkFMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NPTlZFUlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19OT05DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTU9ERUNIQU5HRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NFTEVDVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhFQ1VURSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NOQVBTSE9UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FQUFMiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUk9DRVNTS0VZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX1NCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX0RCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NSU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhTRUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BMQVkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19aT09NIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEExIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfT0VNX0NMRUFSIixlLGVdXSxuPVtdLGk9W107Zm9yKGNvbnN0IHIgb2YgdCl7Y29uc3RbcyxvLGwsYSx1LGMsZCxtLGZdPXI7aWYoaVtvXXx8KGlbb109ITAsa2xbbF09byxBbFtsLnRvTG93ZXJDYXNlKCldPW8pLCFuW2FdKXtpZihuW2FdPSEwLCF1KXRocm93IG5ldyBFcnJvcihgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG1pc3NpbmcgZm9yIGtleSBjb2RlICR7YX0gYXJvdW5kIHNjYW4gY29kZSAke2x9YCk7SnQuZGVmaW5lKGEsdSksam4uZGVmaW5lKGEsbXx8dSksR24uZGVmaW5lKGEsZnx8bXx8dSl9YyYmKFRsW2NdPWEpfX0pKCk7dmFyIGFyOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGwpe3JldHVybiBKdC5rZXlDb2RlVG9TdHIobCl9ZS50b1N0cmluZz10O2Z1bmN0aW9uIG4obCl7cmV0dXJuIEp0LnN0clRvS2V5Q29kZShsKX1lLmZyb21TdHJpbmc9bjtmdW5jdGlvbiBpKGwpe3JldHVybiBqbi5rZXlDb2RlVG9TdHIobCl9ZS50b1VzZXJTZXR0aW5nc1VTPWk7ZnVuY3Rpb24gcihsKXtyZXR1cm4gR24ua2V5Q29kZVRvU3RyKGwpfWUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPXI7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gam4uc3RyVG9LZXlDb2RlKGwpfHxHbi5zdHJUb0tleUNvZGUobCl9ZS5mcm9tVXNlclNldHRpbmdzPXM7ZnVuY3Rpb24gbyhsKXtpZihsPj05OCYmbDw9MTEzKXJldHVybiBudWxsO3N3aXRjaChsKXtjYXNlIDE2OnJldHVybiJVcCI7Y2FzZSAxODpyZXR1cm4iRG93biI7Y2FzZSAxNTpyZXR1cm4iTGVmdCI7Y2FzZSAxNzpyZXR1cm4iUmlnaHQifXJldHVybiBKdC5rZXlDb2RlVG9TdHIobCl9ZS50b0VsZWN0cm9uQWNjZWxlcmF0b3I9b30pKGFyfHwoYXI9e30pKTtmdW5jdGlvbiBTbChlLHQpe2NvbnN0IG49KHQmNjU1MzUpPDwxNj4+PjA7cmV0dXJuKGV8bik+Pj4wfWNsYXNzIHBlIGV4dGVuZHMgJHtjb25zdHJ1Y3Rvcih0LG4saSxyKXtzdXBlcih0LG4saSxyKSx0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj10LHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49bix0aGlzLnBvc2l0aW9uTGluZU51bWJlcj1pLHRoaXMucG9zaXRpb25Db2x1bW49cn10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbisiIC0+ICIrdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIrIiwiK3RoaXMucG9zaXRpb25Db2x1bW4rIl0ifWVxdWFsc1NlbGVjdGlvbih0KXtyZXR1cm4gcGUuc2VsZWN0aW9uc0VxdWFsKHRoaXMsdCl9c3RhdGljIHNlbGVjdGlvbnNFcXVhbCh0LG4pe3JldHVybiB0LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PW4uc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiZ0LnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09bi5zZWxlY3Rpb25TdGFydENvbHVtbiYmdC5wb3NpdGlvbkxpbmVOdW1iZXI9PT1uLnBvc2l0aW9uTGluZU51bWJlciYmdC5wb3NpdGlvbkNvbHVtbj09PW4ucG9zaXRpb25Db2x1bW59Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dGhpcy5zdGFydExpbmVOdW1iZXImJnRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10aGlzLnN0YXJ0Q29sdW1uPzA6MX1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiB0aGlzLmdldERpcmVjdGlvbigpPT09MD9uZXcgcGUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbix0LG4pOm5ldyBwZSh0LG4sdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbil9Z2V0UG9zaXRpb24oKXtyZXR1cm4gbmV3IHRlKHRoaXMucG9zaXRpb25MaW5lTnVtYmVyLHRoaXMucG9zaXRpb25Db2x1bW4pfWdldFNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIG5ldyB0ZSh0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcix0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKX1zZXRTdGFydFBvc2l0aW9uKHQsbil7cmV0dXJuIHRoaXMuZ2V0RGlyZWN0aW9uKCk9PT0wP25ldyBwZSh0LG4sdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKTpuZXcgcGUodGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uLHQsbil9c3RhdGljIGZyb21Qb3NpdGlvbnModCxuPXQpe3JldHVybiBuZXcgcGUodC5saW5lTnVtYmVyLHQuY29sdW1uLG4ubGluZU51bWJlcixuLmNvbHVtbil9c3RhdGljIGZyb21SYW5nZSh0LG4pe3JldHVybiBuPT09MD9uZXcgcGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOm5ldyBwZSh0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4sdC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9c3RhdGljIGxpZnRTZWxlY3Rpb24odCl7cmV0dXJuIG5ldyBwZSh0LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcix0LnNlbGVjdGlvblN0YXJ0Q29sdW1uLHQucG9zaXRpb25MaW5lTnVtYmVyLHQucG9zaXRpb25Db2x1bW4pfXN0YXRpYyBzZWxlY3Rpb25zQXJyRXF1YWwodCxuKXtpZih0JiYhbnx8IXQmJm4pcmV0dXJuITE7aWYoIXQmJiFuKXJldHVybiEwO2lmKHQubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKWlmKCF0aGlzLnNlbGVjdGlvbnNFcXVhbCh0W2ldLG5baV0pKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBpc0lTZWxlY3Rpb24odCl7cmV0dXJuIHQmJnR5cGVvZiB0LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnNlbGVjdGlvblN0YXJ0Q29sdW1uPT0ibnVtYmVyIiYmdHlwZW9mIHQucG9zaXRpb25MaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQucG9zaXRpb25Db2x1bW49PSJudW1iZXIifXN0YXRpYyBjcmVhdGVXaXRoRGlyZWN0aW9uKHQsbixpLHIscyl7cmV0dXJuIHM9PT0wP25ldyBwZSh0LG4saSxyKTpuZXcgcGUoaSxyLHQsbil9fWNvbnN0IG9yPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gaChlLHQpe2lmKHVvKHQpKXtjb25zdCBuPW9yW3RdO2lmKG49PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGAke2V9IHJlZmVyZW5jZXMgYW4gdW5rbm93biBjb2RpY29uOiAke3R9YCk7dD1ufXJldHVybiBvcltlXT10LHtpZDplfX1jb25zdCBMbD17YWRkOmgoImFkZCIsNmU0KSxwbHVzOmgoInBsdXMiLDZlNCksZ2lzdE5ldzpoKCJnaXN0LW5ldyIsNmU0KSxyZXBvQ3JlYXRlOmgoInJlcG8tY3JlYXRlIiw2ZTQpLGxpZ2h0YnVsYjpoKCJsaWdodGJ1bGIiLDYwMDAxKSxsaWdodEJ1bGI6aCgibGlnaHQtYnVsYiIsNjAwMDEpLHJlcG86aCgicmVwbyIsNjAwMDIpLHJlcG9EZWxldGU6aCgicmVwby1kZWxldGUiLDYwMDAyKSxnaXN0Rm9yazpoKCJnaXN0LWZvcmsiLDYwMDAzKSxyZXBvRm9ya2VkOmgoInJlcG8tZm9ya2VkIiw2MDAwMyksZ2l0UHVsbFJlcXVlc3Q6aCgiZ2l0LXB1bGwtcmVxdWVzdCIsNjAwMDQpLGdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkOmgoImdpdC1wdWxsLXJlcXVlc3QtYWJhbmRvbmVkIiw2MDAwNCkscmVjb3JkS2V5czpoKCJyZWNvcmQta2V5cyIsNjAwMDUpLGtleWJvYXJkOmgoImtleWJvYXJkIiw2MDAwNSksdGFnOmgoInRhZyIsNjAwMDYpLGdpdFB1bGxSZXF1ZXN0TGFiZWw6aCgiZ2l0LXB1bGwtcmVxdWVzdC1sYWJlbCIsNjAwMDYpLHRhZ0FkZDpoKCJ0YWctYWRkIiw2MDAwNiksdGFnUmVtb3ZlOmgoInRhZy1yZW1vdmUiLDYwMDA2KSxwZXJzb246aCgicGVyc29uIiw2MDAwNykscGVyc29uRm9sbG93OmgoInBlcnNvbi1mb2xsb3ciLDYwMDA3KSxwZXJzb25PdXRsaW5lOmgoInBlcnNvbi1vdXRsaW5lIiw2MDAwNykscGVyc29uRmlsbGVkOmgoInBlcnNvbi1maWxsZWQiLDYwMDA3KSxnaXRCcmFuY2g6aCgiZ2l0LWJyYW5jaCIsNjAwMDgpLGdpdEJyYW5jaENyZWF0ZTpoKCJnaXQtYnJhbmNoLWNyZWF0ZSIsNjAwMDgpLGdpdEJyYW5jaERlbGV0ZTpoKCJnaXQtYnJhbmNoLWRlbGV0ZSIsNjAwMDgpLHNvdXJjZUNvbnRyb2w6aCgic291cmNlLWNvbnRyb2wiLDYwMDA4KSxtaXJyb3I6aCgibWlycm9yIiw2MDAwOSksbWlycm9yUHVibGljOmgoIm1pcnJvci1wdWJsaWMiLDYwMDA5KSxzdGFyOmgoInN0YXIiLDYwMDEwKSxzdGFyQWRkOmgoInN0YXItYWRkIiw2MDAxMCksc3RhckRlbGV0ZTpoKCJzdGFyLWRlbGV0ZSIsNjAwMTApLHN0YXJFbXB0eTpoKCJzdGFyLWVtcHR5Iiw2MDAxMCksY29tbWVudDpoKCJjb21tZW50Iiw2MDAxMSksY29tbWVudEFkZDpoKCJjb21tZW50LWFkZCIsNjAwMTEpLGFsZXJ0OmgoImFsZXJ0Iiw2MDAxMiksd2FybmluZzpoKCJ3YXJuaW5nIiw2MDAxMiksc2VhcmNoOmgoInNlYXJjaCIsNjAwMTMpLHNlYXJjaFNhdmU6aCgic2VhcmNoLXNhdmUiLDYwMDEzKSxsb2dPdXQ6aCgibG9nLW91dCIsNjAwMTQpLHNpZ25PdXQ6aCgic2lnbi1vdXQiLDYwMDE0KSxsb2dJbjpoKCJsb2ctaW4iLDYwMDE1KSxzaWduSW46aCgic2lnbi1pbiIsNjAwMTUpLGV5ZTpoKCJleWUiLDYwMDE2KSxleWVVbndhdGNoOmgoImV5ZS11bndhdGNoIiw2MDAxNiksZXllV2F0Y2g6aCgiZXllLXdhdGNoIiw2MDAxNiksY2lyY2xlRmlsbGVkOmgoImNpcmNsZS1maWxsZWQiLDYwMDE3KSxwcmltaXRpdmVEb3Q6aCgicHJpbWl0aXZlLWRvdCIsNjAwMTcpLGNsb3NlRGlydHk6aCgiY2xvc2UtZGlydHkiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnQ6aCgiZGVidWctYnJlYWtwb2ludCIsNjAwMTcpLGRlYnVnQnJlYWtwb2ludERpc2FibGVkOmgoImRlYnVnLWJyZWFrcG9pbnQtZGlzYWJsZWQiLDYwMDE3KSxkZWJ1Z0hpbnQ6aCgiZGVidWctaGludCIsNjAwMTcpLHRlcm1pbmFsRGVjb3JhdGlvblN1Y2Nlc3M6aCgidGVybWluYWwtZGVjb3JhdGlvbi1zdWNjZXNzIiw2MDAxNykscHJpbWl0aXZlU3F1YXJlOmgoInByaW1pdGl2ZS1zcXVhcmUiLDYwMDE4KSxlZGl0OmgoImVkaXQiLDYwMDE5KSxwZW5jaWw6aCgicGVuY2lsIiw2MDAxOSksaW5mbzpoKCJpbmZvIiw2MDAyMCksaXNzdWVPcGVuZWQ6aCgiaXNzdWUtb3BlbmVkIiw2MDAyMCksZ2lzdFByaXZhdGU6aCgiZ2lzdC1wcml2YXRlIiw2MDAyMSksZ2l0Rm9ya1ByaXZhdGU6aCgiZ2l0LWZvcmstcHJpdmF0ZSIsNjAwMjEpLGxvY2s6aCgibG9jayIsNjAwMjEpLG1pcnJvclByaXZhdGU6aCgibWlycm9yLXByaXZhdGUiLDYwMDIxKSxjbG9zZTpoKCJjbG9zZSIsNjAwMjIpLHJlbW92ZUNsb3NlOmgoInJlbW92ZS1jbG9zZSIsNjAwMjIpLHg6aCgieCIsNjAwMjIpLHJlcG9TeW5jOmgoInJlcG8tc3luYyIsNjAwMjMpLHN5bmM6aCgic3luYyIsNjAwMjMpLGNsb25lOmgoImNsb25lIiw2MDAyNCksZGVza3RvcERvd25sb2FkOmgoImRlc2t0b3AtZG93bmxvYWQiLDYwMDI0KSxiZWFrZXI6aCgiYmVha2VyIiw2MDAyNSksbWljcm9zY29wZTpoKCJtaWNyb3Njb3BlIiw2MDAyNSksdm06aCgidm0iLDYwMDI2KSxkZXZpY2VEZXNrdG9wOmgoImRldmljZS1kZXNrdG9wIiw2MDAyNiksZmlsZTpoKCJmaWxlIiw2MDAyNyksZmlsZVRleHQ6aCgiZmlsZS10ZXh0Iiw2MDAyNyksbW9yZTpoKCJtb3JlIiw2MDAyOCksZWxsaXBzaXM6aCgiZWxsaXBzaXMiLDYwMDI4KSxrZWJhYkhvcml6b250YWw6aCgia2ViYWItaG9yaXpvbnRhbCIsNjAwMjgpLG1haWxSZXBseTpoKCJtYWlsLXJlcGx5Iiw2MDAyOSkscmVwbHk6aCgicmVwbHkiLDYwMDI5KSxvcmdhbml6YXRpb246aCgib3JnYW5pemF0aW9uIiw2MDAzMCksb3JnYW5pemF0aW9uRmlsbGVkOmgoIm9yZ2FuaXphdGlvbi1maWxsZWQiLDYwMDMwKSxvcmdhbml6YXRpb25PdXRsaW5lOmgoIm9yZ2FuaXphdGlvbi1vdXRsaW5lIiw2MDAzMCksbmV3RmlsZTpoKCJuZXctZmlsZSIsNjAwMzEpLGZpbGVBZGQ6aCgiZmlsZS1hZGQiLDYwMDMxKSxuZXdGb2xkZXI6aCgibmV3LWZvbGRlciIsNjAwMzIpLGZpbGVEaXJlY3RvcnlDcmVhdGU6aCgiZmlsZS1kaXJlY3RvcnktY3JlYXRlIiw2MDAzMiksdHJhc2g6aCgidHJhc2giLDYwMDMzKSx0cmFzaGNhbjpoKCJ0cmFzaGNhbiIsNjAwMzMpLGhpc3Rvcnk6aCgiaGlzdG9yeSIsNjAwMzQpLGNsb2NrOmgoImNsb2NrIiw2MDAzNCksZm9sZGVyOmgoImZvbGRlciIsNjAwMzUpLGZpbGVEaXJlY3Rvcnk6aCgiZmlsZS1kaXJlY3RvcnkiLDYwMDM1KSxzeW1ib2xGb2xkZXI6aCgic3ltYm9sLWZvbGRlciIsNjAwMzUpLGxvZ29HaXRodWI6aCgibG9nby1naXRodWIiLDYwMDM2KSxtYXJrR2l0aHViOmgoIm1hcmstZ2l0aHViIiw2MDAzNiksZ2l0aHViOmgoImdpdGh1YiIsNjAwMzYpLHRlcm1pbmFsOmgoInRlcm1pbmFsIiw2MDAzNyksY29uc29sZTpoKCJjb25zb2xlIiw2MDAzNykscmVwbDpoKCJyZXBsIiw2MDAzNyksemFwOmgoInphcCIsNjAwMzgpLHN5bWJvbEV2ZW50OmgoInN5bWJvbC1ldmVudCIsNjAwMzgpLGVycm9yOmgoImVycm9yIiw2MDAzOSksc3RvcDpoKCJzdG9wIiw2MDAzOSksdmFyaWFibGU6aCgidmFyaWFibGUiLDYwMDQwKSxzeW1ib2xWYXJpYWJsZTpoKCJzeW1ib2wtdmFyaWFibGUiLDYwMDQwKSxhcnJheTpoKCJhcnJheSIsNjAwNDIpLHN5bWJvbEFycmF5OmgoInN5bWJvbC1hcnJheSIsNjAwNDIpLHN5bWJvbE1vZHVsZTpoKCJzeW1ib2wtbW9kdWxlIiw2MDA0Myksc3ltYm9sUGFja2FnZTpoKCJzeW1ib2wtcGFja2FnZSIsNjAwNDMpLHN5bWJvbE5hbWVzcGFjZTpoKCJzeW1ib2wtbmFtZXNwYWNlIiw2MDA0Myksc3ltYm9sT2JqZWN0OmgoInN5bWJvbC1vYmplY3QiLDYwMDQzKSxzeW1ib2xNZXRob2Q6aCgic3ltYm9sLW1ldGhvZCIsNjAwNDQpLHN5bWJvbEZ1bmN0aW9uOmgoInN5bWJvbC1mdW5jdGlvbiIsNjAwNDQpLHN5bWJvbENvbnN0cnVjdG9yOmgoInN5bWJvbC1jb25zdHJ1Y3RvciIsNjAwNDQpLHN5bWJvbEJvb2xlYW46aCgic3ltYm9sLWJvb2xlYW4iLDYwMDQ3KSxzeW1ib2xOdWxsOmgoInN5bWJvbC1udWxsIiw2MDA0Nyksc3ltYm9sTnVtZXJpYzpoKCJzeW1ib2wtbnVtZXJpYyIsNjAwNDgpLHN5bWJvbE51bWJlcjpoKCJzeW1ib2wtbnVtYmVyIiw2MDA0OCksc3ltYm9sU3RydWN0dXJlOmgoInN5bWJvbC1zdHJ1Y3R1cmUiLDYwMDQ5KSxzeW1ib2xTdHJ1Y3Q6aCgic3ltYm9sLXN0cnVjdCIsNjAwNDkpLHN5bWJvbFBhcmFtZXRlcjpoKCJzeW1ib2wtcGFyYW1ldGVyIiw2MDA1MCksc3ltYm9sVHlwZVBhcmFtZXRlcjpoKCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLDYwMDUwKSxzeW1ib2xLZXk6aCgic3ltYm9sLWtleSIsNjAwNTEpLHN5bWJvbFRleHQ6aCgic3ltYm9sLXRleHQiLDYwMDUxKSxzeW1ib2xSZWZlcmVuY2U6aCgic3ltYm9sLXJlZmVyZW5jZSIsNjAwNTIpLGdvVG9GaWxlOmgoImdvLXRvLWZpbGUiLDYwMDUyKSxzeW1ib2xFbnVtOmgoInN5bWJvbC1lbnVtIiw2MDA1Myksc3ltYm9sVmFsdWU6aCgic3ltYm9sLXZhbHVlIiw2MDA1Myksc3ltYm9sUnVsZXI6aCgic3ltYm9sLXJ1bGVyIiw2MDA1NCksc3ltYm9sVW5pdDpoKCJzeW1ib2wtdW5pdCIsNjAwNTQpLGFjdGl2YXRlQnJlYWtwb2ludHM6aCgiYWN0aXZhdGUtYnJlYWtwb2ludHMiLDYwMDU1KSxhcmNoaXZlOmgoImFyY2hpdmUiLDYwMDU2KSxhcnJvd0JvdGg6aCgiYXJyb3ctYm90aCIsNjAwNTcpLGFycm93RG93bjpoKCJhcnJvdy1kb3duIiw2MDA1OCksYXJyb3dMZWZ0OmgoImFycm93LWxlZnQiLDYwMDU5KSxhcnJvd1JpZ2h0OmgoImFycm93LXJpZ2h0Iiw2MDA2MCksYXJyb3dTbWFsbERvd246aCgiYXJyb3ctc21hbGwtZG93biIsNjAwNjEpLGFycm93U21hbGxMZWZ0OmgoImFycm93LXNtYWxsLWxlZnQiLDYwMDYyKSxhcnJvd1NtYWxsUmlnaHQ6aCgiYXJyb3ctc21hbGwtcmlnaHQiLDYwMDYzKSxhcnJvd1NtYWxsVXA6aCgiYXJyb3ctc21hbGwtdXAiLDYwMDY0KSxhcnJvd1VwOmgoImFycm93LXVwIiw2MDA2NSksYmVsbDpoKCJiZWxsIiw2MDA2NiksYm9sZDpoKCJib2xkIiw2MDA2NyksYm9vazpoKCJib29rIiw2MDA2OCksYm9va21hcms6aCgiYm9va21hcmsiLDYwMDY5KSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbFVudmVyaWZpZWQ6aCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIiw2MDA3MCksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWw6aCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIsNjAwNzEpLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsRGlzYWJsZWQ6aCgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC1kaXNhYmxlZCIsNjAwNzEpLGRlYnVnQnJlYWtwb2ludERhdGFVbnZlcmlmaWVkOmgoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIiw2MDA3MiksZGVidWdCcmVha3BvaW50RGF0YTpoKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLDYwMDczKSxkZWJ1Z0JyZWFrcG9pbnREYXRhRGlzYWJsZWQ6aCgiZGVidWctYnJlYWtwb2ludC1kYXRhLWRpc2FibGVkIiw2MDA3MyksZGVidWdCcmVha3BvaW50TG9nVW52ZXJpZmllZDpoKCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIiw2MDA3NCksZGVidWdCcmVha3BvaW50TG9nOmgoImRlYnVnLWJyZWFrcG9pbnQtbG9nIiw2MDA3NSksZGVidWdCcmVha3BvaW50TG9nRGlzYWJsZWQ6aCgiZGVidWctYnJlYWtwb2ludC1sb2ctZGlzYWJsZWQiLDYwMDc1KSxicmllZmNhc2U6aCgiYnJpZWZjYXNlIiw2MDA3NiksYnJvYWRjYXN0OmgoImJyb2FkY2FzdCIsNjAwNzcpLGJyb3dzZXI6aCgiYnJvd3NlciIsNjAwNzgpLGJ1ZzpoKCJidWciLDYwMDc5KSxjYWxlbmRhcjpoKCJjYWxlbmRhciIsNjAwODApLGNhc2VTZW5zaXRpdmU6aCgiY2FzZS1zZW5zaXRpdmUiLDYwMDgxKSxjaGVjazpoKCJjaGVjayIsNjAwODIpLGNoZWNrbGlzdDpoKCJjaGVja2xpc3QiLDYwMDgzKSxjaGV2cm9uRG93bjpoKCJjaGV2cm9uLWRvd24iLDYwMDg0KSxjaGV2cm9uTGVmdDpoKCJjaGV2cm9uLWxlZnQiLDYwMDg1KSxjaGV2cm9uUmlnaHQ6aCgiY2hldnJvbi1yaWdodCIsNjAwODYpLGNoZXZyb25VcDpoKCJjaGV2cm9uLXVwIiw2MDA4NyksY2hyb21lQ2xvc2U6aCgiY2hyb21lLWNsb3NlIiw2MDA4OCksY2hyb21lTWF4aW1pemU6aCgiY2hyb21lLW1heGltaXplIiw2MDA4OSksY2hyb21lTWluaW1pemU6aCgiY2hyb21lLW1pbmltaXplIiw2MDA5MCksY2hyb21lUmVzdG9yZTpoKCJjaHJvbWUtcmVzdG9yZSIsNjAwOTEpLGNpcmNsZU91dGxpbmU6aCgiY2lyY2xlLW91dGxpbmUiLDYwMDkyKSxjaXJjbGU6aCgiY2lyY2xlIiw2MDA5MiksZGVidWdCcmVha3BvaW50VW52ZXJpZmllZDpoKCJkZWJ1Zy1icmVha3BvaW50LXVudmVyaWZpZWQiLDYwMDkyKSx0ZXJtaW5hbERlY29yYXRpb25JbmNvbXBsZXRlOmgoInRlcm1pbmFsLWRlY29yYXRpb24taW5jb21wbGV0ZSIsNjAwOTIpLGNpcmNsZVNsYXNoOmgoImNpcmNsZS1zbGFzaCIsNjAwOTMpLGNpcmN1aXRCb2FyZDpoKCJjaXJjdWl0LWJvYXJkIiw2MDA5NCksY2xlYXJBbGw6aCgiY2xlYXItYWxsIiw2MDA5NSksY2xpcHB5OmgoImNsaXBweSIsNjAwOTYpLGNsb3NlQWxsOmgoImNsb3NlLWFsbCIsNjAwOTcpLGNsb3VkRG93bmxvYWQ6aCgiY2xvdWQtZG93bmxvYWQiLDYwMDk4KSxjbG91ZFVwbG9hZDpoKCJjbG91ZC11cGxvYWQiLDYwMDk5KSxjb2RlOmgoImNvZGUiLDYwMTAwKSxjb2xsYXBzZUFsbDpoKCJjb2xsYXBzZS1hbGwiLDYwMTAxKSxjb2xvck1vZGU6aCgiY29sb3ItbW9kZSIsNjAxMDIpLGNvbW1lbnREaXNjdXNzaW9uOmgoImNvbW1lbnQtZGlzY3Vzc2lvbiIsNjAxMDMpLGNyZWRpdENhcmQ6aCgiY3JlZGl0LWNhcmQiLDYwMTA1KSxkYXNoOmgoImRhc2giLDYwMTA4KSxkYXNoYm9hcmQ6aCgiZGFzaGJvYXJkIiw2MDEwOSksZGF0YWJhc2U6aCgiZGF0YWJhc2UiLDYwMTEwKSxkZWJ1Z0NvbnRpbnVlOmgoImRlYnVnLWNvbnRpbnVlIiw2MDExMSksZGVidWdEaXNjb25uZWN0OmgoImRlYnVnLWRpc2Nvbm5lY3QiLDYwMTEyKSxkZWJ1Z1BhdXNlOmgoImRlYnVnLXBhdXNlIiw2MDExMyksZGVidWdSZXN0YXJ0OmgoImRlYnVnLXJlc3RhcnQiLDYwMTE0KSxkZWJ1Z1N0YXJ0OmgoImRlYnVnLXN0YXJ0Iiw2MDExNSksZGVidWdTdGVwSW50bzpoKCJkZWJ1Zy1zdGVwLWludG8iLDYwMTE2KSxkZWJ1Z1N0ZXBPdXQ6aCgiZGVidWctc3RlcC1vdXQiLDYwMTE3KSxkZWJ1Z1N0ZXBPdmVyOmgoImRlYnVnLXN0ZXAtb3ZlciIsNjAxMTgpLGRlYnVnU3RvcDpoKCJkZWJ1Zy1zdG9wIiw2MDExOSksZGVidWc6aCgiZGVidWciLDYwMTIwKSxkZXZpY2VDYW1lcmFWaWRlbzpoKCJkZXZpY2UtY2FtZXJhLXZpZGVvIiw2MDEyMSksZGV2aWNlQ2FtZXJhOmgoImRldmljZS1jYW1lcmEiLDYwMTIyKSxkZXZpY2VNb2JpbGU6aCgiZGV2aWNlLW1vYmlsZSIsNjAxMjMpLGRpZmZBZGRlZDpoKCJkaWZmLWFkZGVkIiw2MDEyNCksZGlmZklnbm9yZWQ6aCgiZGlmZi1pZ25vcmVkIiw2MDEyNSksZGlmZk1vZGlmaWVkOmgoImRpZmYtbW9kaWZpZWQiLDYwMTI2KSxkaWZmUmVtb3ZlZDpoKCJkaWZmLXJlbW92ZWQiLDYwMTI3KSxkaWZmUmVuYW1lZDpoKCJkaWZmLXJlbmFtZWQiLDYwMTI4KSxkaWZmOmgoImRpZmYiLDYwMTI5KSxkaWZmU2lkZWJ5c2lkZTpoKCJkaWZmLXNpZGVieXNpZGUiLDYwMTI5KSxkaXNjYXJkOmgoImRpc2NhcmQiLDYwMTMwKSxlZGl0b3JMYXlvdXQ6aCgiZWRpdG9yLWxheW91dCIsNjAxMzEpLGVtcHR5V2luZG93OmgoImVtcHR5LXdpbmRvdyIsNjAxMzIpLGV4Y2x1ZGU6aCgiZXhjbHVkZSIsNjAxMzMpLGV4dGVuc2lvbnM6aCgiZXh0ZW5zaW9ucyIsNjAxMzQpLGV5ZUNsb3NlZDpoKCJleWUtY2xvc2VkIiw2MDEzNSksZmlsZUJpbmFyeTpoKCJmaWxlLWJpbmFyeSIsNjAxMzYpLGZpbGVDb2RlOmgoImZpbGUtY29kZSIsNjAxMzcpLGZpbGVNZWRpYTpoKCJmaWxlLW1lZGlhIiw2MDEzOCksZmlsZVBkZjpoKCJmaWxlLXBkZiIsNjAxMzkpLGZpbGVTdWJtb2R1bGU6aCgiZmlsZS1zdWJtb2R1bGUiLDYwMTQwKSxmaWxlU3ltbGlua0RpcmVjdG9yeTpoKCJmaWxlLXN5bWxpbmstZGlyZWN0b3J5Iiw2MDE0MSksZmlsZVN5bWxpbmtGaWxlOmgoImZpbGUtc3ltbGluay1maWxlIiw2MDE0MiksZmlsZVppcDpoKCJmaWxlLXppcCIsNjAxNDMpLGZpbGVzOmgoImZpbGVzIiw2MDE0NCksZmlsdGVyOmgoImZpbHRlciIsNjAxNDUpLGZsYW1lOmgoImZsYW1lIiw2MDE0NiksZm9sZERvd246aCgiZm9sZC1kb3duIiw2MDE0NyksZm9sZFVwOmgoImZvbGQtdXAiLDYwMTQ4KSxmb2xkOmgoImZvbGQiLDYwMTQ5KSxmb2xkZXJBY3RpdmU6aCgiZm9sZGVyLWFjdGl2ZSIsNjAxNTApLGZvbGRlck9wZW5lZDpoKCJmb2xkZXItb3BlbmVkIiw2MDE1MSksZ2VhcjpoKCJnZWFyIiw2MDE1MiksZ2lmdDpoKCJnaWZ0Iiw2MDE1MyksZ2lzdFNlY3JldDpoKCJnaXN0LXNlY3JldCIsNjAxNTQpLGdpc3Q6aCgiZ2lzdCIsNjAxNTUpLGdpdENvbW1pdDpoKCJnaXQtY29tbWl0Iiw2MDE1NiksZ2l0Q29tcGFyZTpoKCJnaXQtY29tcGFyZSIsNjAxNTcpLGNvbXBhcmVDaGFuZ2VzOmgoImNvbXBhcmUtY2hhbmdlcyIsNjAxNTcpLGdpdE1lcmdlOmgoImdpdC1tZXJnZSIsNjAxNTgpLGdpdGh1YkFjdGlvbjpoKCJnaXRodWItYWN0aW9uIiw2MDE1OSksZ2l0aHViQWx0OmgoImdpdGh1Yi1hbHQiLDYwMTYwKSxnbG9iZTpoKCJnbG9iZSIsNjAxNjEpLGdyYWJiZXI6aCgiZ3JhYmJlciIsNjAxNjIpLGdyYXBoOmgoImdyYXBoIiw2MDE2MyksZ3JpcHBlcjpoKCJncmlwcGVyIiw2MDE2NCksaGVhcnQ6aCgiaGVhcnQiLDYwMTY1KSxob21lOmgoImhvbWUiLDYwMTY2KSxob3Jpem9udGFsUnVsZTpoKCJob3Jpem9udGFsLXJ1bGUiLDYwMTY3KSxodWJvdDpoKCJodWJvdCIsNjAxNjgpLGluYm94OmgoImluYm94Iiw2MDE2OSksaXNzdWVSZW9wZW5lZDpoKCJpc3N1ZS1yZW9wZW5lZCIsNjAxNzEpLGlzc3VlczpoKCJpc3N1ZXMiLDYwMTcyKSxpdGFsaWM6aCgiaXRhbGljIiw2MDE3MyksamVyc2V5OmgoImplcnNleSIsNjAxNzQpLGpzb246aCgianNvbiIsNjAxNzUpLGtlYmFiVmVydGljYWw6aCgia2ViYWItdmVydGljYWwiLDYwMTc2KSxrZXk6aCgia2V5Iiw2MDE3NyksbGF3OmgoImxhdyIsNjAxNzgpLGxpZ2h0YnVsYkF1dG9maXg6aCgibGlnaHRidWxiLWF1dG9maXgiLDYwMTc5KSxsaW5rRXh0ZXJuYWw6aCgibGluay1leHRlcm5hbCIsNjAxODApLGxpbms6aCgibGluayIsNjAxODEpLGxpc3RPcmRlcmVkOmgoImxpc3Qtb3JkZXJlZCIsNjAxODIpLGxpc3RVbm9yZGVyZWQ6aCgibGlzdC11bm9yZGVyZWQiLDYwMTgzKSxsaXZlU2hhcmU6aCgibGl2ZS1zaGFyZSIsNjAxODQpLGxvYWRpbmc6aCgibG9hZGluZyIsNjAxODUpLGxvY2F0aW9uOmgoImxvY2F0aW9uIiw2MDE4NiksbWFpbFJlYWQ6aCgibWFpbC1yZWFkIiw2MDE4NyksbWFpbDpoKCJtYWlsIiw2MDE4OCksbWFya2Rvd246aCgibWFya2Rvd24iLDYwMTg5KSxtZWdhcGhvbmU6aCgibWVnYXBob25lIiw2MDE5MCksbWVudGlvbjpoKCJtZW50aW9uIiw2MDE5MSksbWlsZXN0b25lOmgoIm1pbGVzdG9uZSIsNjAxOTIpLGdpdFB1bGxSZXF1ZXN0TWlsZXN0b25lOmgoImdpdC1wdWxsLXJlcXVlc3QtbWlsZXN0b25lIiw2MDE5MiksbW9ydGFyQm9hcmQ6aCgibW9ydGFyLWJvYXJkIiw2MDE5MyksbW92ZTpoKCJtb3ZlIiw2MDE5NCksbXVsdGlwbGVXaW5kb3dzOmgoIm11bHRpcGxlLXdpbmRvd3MiLDYwMTk1KSxtdXRlOmgoIm11dGUiLDYwMTk2KSxub05ld2xpbmU6aCgibm8tbmV3bGluZSIsNjAxOTcpLG5vdGU6aCgibm90ZSIsNjAxOTgpLG9jdG9mYWNlOmgoIm9jdG9mYWNlIiw2MDE5OSksb3BlblByZXZpZXc6aCgib3Blbi1wcmV2aWV3Iiw2MDIwMCkscGFja2FnZTpoKCJwYWNrYWdlIiw2MDIwMSkscGFpbnRjYW46aCgicGFpbnRjYW4iLDYwMjAyKSxwaW46aCgicGluIiw2MDIwMykscGxheTpoKCJwbGF5Iiw2MDIwNCkscnVuOmgoInJ1biIsNjAyMDQpLHBsdWc6aCgicGx1ZyIsNjAyMDUpLHByZXNlcnZlQ2FzZTpoKCJwcmVzZXJ2ZS1jYXNlIiw2MDIwNikscHJldmlldzpoKCJwcmV2aWV3Iiw2MDIwNykscHJvamVjdDpoKCJwcm9qZWN0Iiw2MDIwOCkscHVsc2U6aCgicHVsc2UiLDYwMjA5KSxxdWVzdGlvbjpoKCJxdWVzdGlvbiIsNjAyMTApLHF1b3RlOmgoInF1b3RlIiw2MDIxMSkscmFkaW9Ub3dlcjpoKCJyYWRpby10b3dlciIsNjAyMTIpLHJlYWN0aW9uczpoKCJyZWFjdGlvbnMiLDYwMjEzKSxyZWZlcmVuY2VzOmgoInJlZmVyZW5jZXMiLDYwMjE0KSxyZWZyZXNoOmgoInJlZnJlc2giLDYwMjE1KSxyZWdleDpoKCJyZWdleCIsNjAyMTYpLHJlbW90ZUV4cGxvcmVyOmgoInJlbW90ZS1leHBsb3JlciIsNjAyMTcpLHJlbW90ZTpoKCJyZW1vdGUiLDYwMjE4KSxyZW1vdmU6aCgicmVtb3ZlIiw2MDIxOSkscmVwbGFjZUFsbDpoKCJyZXBsYWNlLWFsbCIsNjAyMjApLHJlcGxhY2U6aCgicmVwbGFjZSIsNjAyMjEpLHJlcG9DbG9uZTpoKCJyZXBvLWNsb25lIiw2MDIyMikscmVwb0ZvcmNlUHVzaDpoKCJyZXBvLWZvcmNlLXB1c2giLDYwMjIzKSxyZXBvUHVsbDpoKCJyZXBvLXB1bGwiLDYwMjI0KSxyZXBvUHVzaDpoKCJyZXBvLXB1c2giLDYwMjI1KSxyZXBvcnQ6aCgicmVwb3J0Iiw2MDIyNikscmVxdWVzdENoYW5nZXM6aCgicmVxdWVzdC1jaGFuZ2VzIiw2MDIyNykscm9ja2V0OmgoInJvY2tldCIsNjAyMjgpLHJvb3RGb2xkZXJPcGVuZWQ6aCgicm9vdC1mb2xkZXItb3BlbmVkIiw2MDIyOSkscm9vdEZvbGRlcjpoKCJyb290LWZvbGRlciIsNjAyMzApLHJzczpoKCJyc3MiLDYwMjMxKSxydWJ5OmgoInJ1YnkiLDYwMjMyKSxzYXZlQWxsOmgoInNhdmUtYWxsIiw2MDIzMyksc2F2ZUFzOmgoInNhdmUtYXMiLDYwMjM0KSxzYXZlOmgoInNhdmUiLDYwMjM1KSxzY3JlZW5GdWxsOmgoInNjcmVlbi1mdWxsIiw2MDIzNiksc2NyZWVuTm9ybWFsOmgoInNjcmVlbi1ub3JtYWwiLDYwMjM3KSxzZWFyY2hTdG9wOmgoInNlYXJjaC1zdG9wIiw2MDIzOCksc2VydmVyOmgoInNlcnZlciIsNjAyNDApLHNldHRpbmdzR2VhcjpoKCJzZXR0aW5ncy1nZWFyIiw2MDI0MSksc2V0dGluZ3M6aCgic2V0dGluZ3MiLDYwMjQyKSxzaGllbGQ6aCgic2hpZWxkIiw2MDI0Myksc21pbGV5OmgoInNtaWxleSIsNjAyNDQpLHNvcnRQcmVjZWRlbmNlOmgoInNvcnQtcHJlY2VkZW5jZSIsNjAyNDUpLHNwbGl0SG9yaXpvbnRhbDpoKCJzcGxpdC1ob3Jpem9udGFsIiw2MDI0Niksc3BsaXRWZXJ0aWNhbDpoKCJzcGxpdC12ZXJ0aWNhbCIsNjAyNDcpLHNxdWlycmVsOmgoInNxdWlycmVsIiw2MDI0OCksc3RhckZ1bGw6aCgic3Rhci1mdWxsIiw2MDI0OSksc3RhckhhbGY6aCgic3Rhci1oYWxmIiw2MDI1MCksc3ltYm9sQ2xhc3M6aCgic3ltYm9sLWNsYXNzIiw2MDI1MSksc3ltYm9sQ29sb3I6aCgic3ltYm9sLWNvbG9yIiw2MDI1Miksc3ltYm9sQ29uc3RhbnQ6aCgic3ltYm9sLWNvbnN0YW50Iiw2MDI1Myksc3ltYm9sRW51bU1lbWJlcjpoKCJzeW1ib2wtZW51bS1tZW1iZXIiLDYwMjU0KSxzeW1ib2xGaWVsZDpoKCJzeW1ib2wtZmllbGQiLDYwMjU1KSxzeW1ib2xGaWxlOmgoInN5bWJvbC1maWxlIiw2MDI1Niksc3ltYm9sSW50ZXJmYWNlOmgoInN5bWJvbC1pbnRlcmZhY2UiLDYwMjU3KSxzeW1ib2xLZXl3b3JkOmgoInN5bWJvbC1rZXl3b3JkIiw2MDI1OCksc3ltYm9sTWlzYzpoKCJzeW1ib2wtbWlzYyIsNjAyNTkpLHN5bWJvbE9wZXJhdG9yOmgoInN5bWJvbC1vcGVyYXRvciIsNjAyNjApLHN5bWJvbFByb3BlcnR5OmgoInN5bWJvbC1wcm9wZXJ0eSIsNjAyNjEpLHdyZW5jaDpoKCJ3cmVuY2giLDYwMjYxKSx3cmVuY2hTdWJhY3Rpb246aCgid3JlbmNoLXN1YmFjdGlvbiIsNjAyNjEpLHN5bWJvbFNuaXBwZXQ6aCgic3ltYm9sLXNuaXBwZXQiLDYwMjYyKSx0YXNrbGlzdDpoKCJ0YXNrbGlzdCIsNjAyNjMpLHRlbGVzY29wZTpoKCJ0ZWxlc2NvcGUiLDYwMjY0KSx0ZXh0U2l6ZTpoKCJ0ZXh0LXNpemUiLDYwMjY1KSx0aHJlZUJhcnM6aCgidGhyZWUtYmFycyIsNjAyNjYpLHRodW1ic2Rvd246aCgidGh1bWJzZG93biIsNjAyNjcpLHRodW1ic3VwOmgoInRodW1ic3VwIiw2MDI2OCksdG9vbHM6aCgidG9vbHMiLDYwMjY5KSx0cmlhbmdsZURvd246aCgidHJpYW5nbGUtZG93biIsNjAyNzApLHRyaWFuZ2xlTGVmdDpoKCJ0cmlhbmdsZS1sZWZ0Iiw2MDI3MSksdHJpYW5nbGVSaWdodDpoKCJ0cmlhbmdsZS1yaWdodCIsNjAyNzIpLHRyaWFuZ2xlVXA6aCgidHJpYW5nbGUtdXAiLDYwMjczKSx0d2l0dGVyOmgoInR3aXR0ZXIiLDYwMjc0KSx1bmZvbGQ6aCgidW5mb2xkIiw2MDI3NSksdW5sb2NrOmgoInVubG9jayIsNjAyNzYpLHVubXV0ZTpoKCJ1bm11dGUiLDYwMjc3KSx1bnZlcmlmaWVkOmgoInVudmVyaWZpZWQiLDYwMjc4KSx2ZXJpZmllZDpoKCJ2ZXJpZmllZCIsNjAyNzkpLHZlcnNpb25zOmgoInZlcnNpb25zIiw2MDI4MCksdm1BY3RpdmU6aCgidm0tYWN0aXZlIiw2MDI4MSksdm1PdXRsaW5lOmgoInZtLW91dGxpbmUiLDYwMjgyKSx2bVJ1bm5pbmc6aCgidm0tcnVubmluZyIsNjAyODMpLHdhdGNoOmgoIndhdGNoIiw2MDI4NCksd2hpdGVzcGFjZTpoKCJ3aGl0ZXNwYWNlIiw2MDI4NSksd2hvbGVXb3JkOmgoIndob2xlLXdvcmQiLDYwMjg2KSx3aW5kb3c6aCgid2luZG93Iiw2MDI4Nyksd29yZFdyYXA6aCgid29yZC13cmFwIiw2MDI4OCksem9vbUluOmgoInpvb20taW4iLDYwMjg5KSx6b29tT3V0OmgoInpvb20tb3V0Iiw2MDI5MCksbGlzdEZpbHRlcjpoKCJsaXN0LWZpbHRlciIsNjAyOTEpLGxpc3RGbGF0OmgoImxpc3QtZmxhdCIsNjAyOTIpLGxpc3RTZWxlY3Rpb246aCgibGlzdC1zZWxlY3Rpb24iLDYwMjkzKSxzZWxlY3Rpb246aCgic2VsZWN0aW9uIiw2MDI5MyksbGlzdFRyZWU6aCgibGlzdC10cmVlIiw2MDI5NCksZGVidWdCcmVha3BvaW50RnVuY3Rpb25VbnZlcmlmaWVkOmgoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tdW52ZXJpZmllZCIsNjAyOTUpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uOmgoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24iLDYwMjk2KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbkRpc2FibGVkOmgoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tZGlzYWJsZWQiLDYwMjk2KSxkZWJ1Z1N0YWNrZnJhbWVBY3RpdmU6aCgiZGVidWctc3RhY2tmcmFtZS1hY3RpdmUiLDYwMjk3KSxjaXJjbGVTbWFsbEZpbGxlZDpoKCJjaXJjbGUtc21hbGwtZmlsbGVkIiw2MDI5OCksZGVidWdTdGFja2ZyYW1lRG90OmgoImRlYnVnLXN0YWNrZnJhbWUtZG90Iiw2MDI5OCksdGVybWluYWxEZWNvcmF0aW9uTWFyazpoKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLW1hcmsiLDYwMjk4KSxkZWJ1Z1N0YWNrZnJhbWU6aCgiZGVidWctc3RhY2tmcmFtZSIsNjAyOTkpLGRlYnVnU3RhY2tmcmFtZUZvY3VzZWQ6aCgiZGVidWctc3RhY2tmcmFtZS1mb2N1c2VkIiw2MDI5OSksZGVidWdCcmVha3BvaW50VW5zdXBwb3J0ZWQ6aCgiZGVidWctYnJlYWtwb2ludC11bnN1cHBvcnRlZCIsNjAzMDApLHN5bWJvbFN0cmluZzpoKCJzeW1ib2wtc3RyaW5nIiw2MDMwMSksZGVidWdSZXZlcnNlQ29udGludWU6aCgiZGVidWctcmV2ZXJzZS1jb250aW51ZSIsNjAzMDIpLGRlYnVnU3RlcEJhY2s6aCgiZGVidWctc3RlcC1iYWNrIiw2MDMwMyksZGVidWdSZXN0YXJ0RnJhbWU6aCgiZGVidWctcmVzdGFydC1mcmFtZSIsNjAzMDQpLGRlYnVnQWx0OmgoImRlYnVnLWFsdCIsNjAzMDUpLGNhbGxJbmNvbWluZzpoKCJjYWxsLWluY29taW5nIiw2MDMwNiksY2FsbE91dGdvaW5nOmgoImNhbGwtb3V0Z29pbmciLDYwMzA3KSxtZW51OmgoIm1lbnUiLDYwMzA4KSxleHBhbmRBbGw6aCgiZXhwYW5kLWFsbCIsNjAzMDkpLGZlZWRiYWNrOmgoImZlZWRiYWNrIiw2MDMxMCksZ2l0UHVsbFJlcXVlc3RSZXZpZXdlcjpoKCJnaXQtcHVsbC1yZXF1ZXN0LXJldmlld2VyIiw2MDMxMCksZ3JvdXBCeVJlZlR5cGU6aCgiZ3JvdXAtYnktcmVmLXR5cGUiLDYwMzExKSx1bmdyb3VwQnlSZWZUeXBlOmgoInVuZ3JvdXAtYnktcmVmLXR5cGUiLDYwMzEyKSxhY2NvdW50OmgoImFjY291bnQiLDYwMzEzKSxnaXRQdWxsUmVxdWVzdEFzc2lnbmVlOmgoImdpdC1wdWxsLXJlcXVlc3QtYXNzaWduZWUiLDYwMzEzKSxiZWxsRG90OmgoImJlbGwtZG90Iiw2MDMxNCksZGVidWdDb25zb2xlOmgoImRlYnVnLWNvbnNvbGUiLDYwMzE1KSxsaWJyYXJ5OmgoImxpYnJhcnkiLDYwMzE2KSxvdXRwdXQ6aCgib3V0cHV0Iiw2MDMxNykscnVuQWxsOmgoInJ1bi1hbGwiLDYwMzE4KSxzeW5jSWdub3JlZDpoKCJzeW5jLWlnbm9yZWQiLDYwMzE5KSxwaW5uZWQ6aCgicGlubmVkIiw2MDMyMCksZ2l0aHViSW52ZXJ0ZWQ6aCgiZ2l0aHViLWludmVydGVkIiw2MDMyMSksc2VydmVyUHJvY2VzczpoKCJzZXJ2ZXItcHJvY2VzcyIsNjAzMjIpLHNlcnZlckVudmlyb25tZW50OmgoInNlcnZlci1lbnZpcm9ubWVudCIsNjAzMjMpLHBhc3M6aCgicGFzcyIsNjAzMjQpLGlzc3VlQ2xvc2VkOmgoImlzc3VlLWNsb3NlZCIsNjAzMjQpLHN0b3BDaXJjbGU6aCgic3RvcC1jaXJjbGUiLDYwMzI1KSxwbGF5Q2lyY2xlOmgoInBsYXktY2lyY2xlIiw2MDMyNikscmVjb3JkOmgoInJlY29yZCIsNjAzMjcpLGRlYnVnQWx0U21hbGw6aCgiZGVidWctYWx0LXNtYWxsIiw2MDMyOCksdm1Db25uZWN0OmgoInZtLWNvbm5lY3QiLDYwMzI5KSxjbG91ZDpoKCJjbG91ZCIsNjAzMzApLG1lcmdlOmgoIm1lcmdlIiw2MDMzMSksZXhwb3J0OmgoImV4cG9ydCIsNjAzMzIpLGdyYXBoTGVmdDpoKCJncmFwaC1sZWZ0Iiw2MDMzMyksbWFnbmV0OmgoIm1hZ25ldCIsNjAzMzQpLG5vdGVib29rOmgoIm5vdGVib29rIiw2MDMzNSkscmVkbzpoKCJyZWRvIiw2MDMzNiksY2hlY2tBbGw6aCgiY2hlY2stYWxsIiw2MDMzNykscGlubmVkRGlydHk6aCgicGlubmVkLWRpcnR5Iiw2MDMzOCkscGFzc0ZpbGxlZDpoKCJwYXNzLWZpbGxlZCIsNjAzMzkpLGNpcmNsZUxhcmdlRmlsbGVkOmgoImNpcmNsZS1sYXJnZS1maWxsZWQiLDYwMzQwKSxjaXJjbGVMYXJnZTpoKCJjaXJjbGUtbGFyZ2UiLDYwMzQxKSxjaXJjbGVMYXJnZU91dGxpbmU6aCgiY2lyY2xlLWxhcmdlLW91dGxpbmUiLDYwMzQxKSxjb21iaW5lOmgoImNvbWJpbmUiLDYwMzQyKSxnYXRoZXI6aCgiZ2F0aGVyIiw2MDM0MiksdGFibGU6aCgidGFibGUiLDYwMzQzKSx2YXJpYWJsZUdyb3VwOmgoInZhcmlhYmxlLWdyb3VwIiw2MDM0NCksdHlwZUhpZXJhcmNoeTpoKCJ0eXBlLWhpZXJhcmNoeSIsNjAzNDUpLHR5cGVIaWVyYXJjaHlTdWI6aCgidHlwZS1oaWVyYXJjaHktc3ViIiw2MDM0NiksdHlwZUhpZXJhcmNoeVN1cGVyOmgoInR5cGUtaGllcmFyY2h5LXN1cGVyIiw2MDM0NyksZ2l0UHVsbFJlcXVlc3RDcmVhdGU6aCgiZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUiLDYwMzQ4KSxydW5BYm92ZTpoKCJydW4tYWJvdmUiLDYwMzQ5KSxydW5CZWxvdzpoKCJydW4tYmVsb3ciLDYwMzUwKSxub3RlYm9va1RlbXBsYXRlOmgoIm5vdGVib29rLXRlbXBsYXRlIiw2MDM1MSksZGVidWdSZXJ1bjpoKCJkZWJ1Zy1yZXJ1biIsNjAzNTIpLHdvcmtzcGFjZVRydXN0ZWQ6aCgid29ya3NwYWNlLXRydXN0ZWQiLDYwMzUzKSx3b3Jrc3BhY2VVbnRydXN0ZWQ6aCgid29ya3NwYWNlLXVudHJ1c3RlZCIsNjAzNTQpLHdvcmtzcGFjZVVua25vd246aCgid29ya3NwYWNlLXVua25vd24iLDYwMzU1KSx0ZXJtaW5hbENtZDpoKCJ0ZXJtaW5hbC1jbWQiLDYwMzU2KSx0ZXJtaW5hbERlYmlhbjpoKCJ0ZXJtaW5hbC1kZWJpYW4iLDYwMzU3KSx0ZXJtaW5hbExpbnV4OmgoInRlcm1pbmFsLWxpbnV4Iiw2MDM1OCksdGVybWluYWxQb3dlcnNoZWxsOmgoInRlcm1pbmFsLXBvd2Vyc2hlbGwiLDYwMzU5KSx0ZXJtaW5hbFRtdXg6aCgidGVybWluYWwtdG11eCIsNjAzNjApLHRlcm1pbmFsVWJ1bnR1OmgoInRlcm1pbmFsLXVidW50dSIsNjAzNjEpLHRlcm1pbmFsQmFzaDpoKCJ0ZXJtaW5hbC1iYXNoIiw2MDM2MiksYXJyb3dTd2FwOmgoImFycm93LXN3YXAiLDYwMzYzKSxjb3B5OmgoImNvcHkiLDYwMzY0KSxwZXJzb25BZGQ6aCgicGVyc29uLWFkZCIsNjAzNjUpLGZpbHRlckZpbGxlZDpoKCJmaWx0ZXItZmlsbGVkIiw2MDM2Niksd2FuZDpoKCJ3YW5kIiw2MDM2NyksZGVidWdMaW5lQnlMaW5lOmgoImRlYnVnLWxpbmUtYnktbGluZSIsNjAzNjgpLGluc3BlY3Q6aCgiaW5zcGVjdCIsNjAzNjkpLGxheWVyczpoKCJsYXllcnMiLDYwMzcwKSxsYXllcnNEb3Q6aCgibGF5ZXJzLWRvdCIsNjAzNzEpLGxheWVyc0FjdGl2ZTpoKCJsYXllcnMtYWN0aXZlIiw2MDM3MiksY29tcGFzczpoKCJjb21wYXNzIiw2MDM3MyksY29tcGFzc0RvdDpoKCJjb21wYXNzLWRvdCIsNjAzNzQpLGNvbXBhc3NBY3RpdmU6aCgiY29tcGFzcy1hY3RpdmUiLDYwMzc1KSxhenVyZTpoKCJhenVyZSIsNjAzNzYpLGlzc3VlRHJhZnQ6aCgiaXNzdWUtZHJhZnQiLDYwMzc3KSxnaXRQdWxsUmVxdWVzdENsb3NlZDpoKCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIsNjAzNzgpLGdpdFB1bGxSZXF1ZXN0RHJhZnQ6aCgiZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdCIsNjAzNzkpLGRlYnVnQWxsOmgoImRlYnVnLWFsbCIsNjAzODApLGRlYnVnQ292ZXJhZ2U6aCgiZGVidWctY292ZXJhZ2UiLDYwMzgxKSxydW5FcnJvcnM6aCgicnVuLWVycm9ycyIsNjAzODIpLGZvbGRlckxpYnJhcnk6aCgiZm9sZGVyLWxpYnJhcnkiLDYwMzgzKSxkZWJ1Z0NvbnRpbnVlU21hbGw6aCgiZGVidWctY29udGludWUtc21hbGwiLDYwMzg0KSxiZWFrZXJTdG9wOmgoImJlYWtlci1zdG9wIiw2MDM4NSksZ3JhcGhMaW5lOmgoImdyYXBoLWxpbmUiLDYwMzg2KSxncmFwaFNjYXR0ZXI6aCgiZ3JhcGgtc2NhdHRlciIsNjAzODcpLHBpZUNoYXJ0OmgoInBpZS1jaGFydCIsNjAzODgpLGJyYWNrZXQ6aCgiYnJhY2tldCIsNjAxNzUpLGJyYWNrZXREb3Q6aCgiYnJhY2tldC1kb3QiLDYwMzg5KSxicmFja2V0RXJyb3I6aCgiYnJhY2tldC1lcnJvciIsNjAzOTApLGxvY2tTbWFsbDpoKCJsb2NrLXNtYWxsIiw2MDM5MSksYXp1cmVEZXZvcHM6aCgiYXp1cmUtZGV2b3BzIiw2MDM5MiksdmVyaWZpZWRGaWxsZWQ6aCgidmVyaWZpZWQtZmlsbGVkIiw2MDM5MyksbmV3bGluZTpoKCJuZXdsaW5lIiw2MDM5NCksbGF5b3V0OmgoImxheW91dCIsNjAzOTUpLGxheW91dEFjdGl2aXR5YmFyTGVmdDpoKCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIsNjAzOTYpLGxheW91dEFjdGl2aXR5YmFyUmlnaHQ6aCgibGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0Iiw2MDM5NyksbGF5b3V0UGFuZWxMZWZ0OmgoImxheW91dC1wYW5lbC1sZWZ0Iiw2MDM5OCksbGF5b3V0UGFuZWxDZW50ZXI6aCgibGF5b3V0LXBhbmVsLWNlbnRlciIsNjAzOTkpLGxheW91dFBhbmVsSnVzdGlmeTpoKCJsYXlvdXQtcGFuZWwtanVzdGlmeSIsNjA0MDApLGxheW91dFBhbmVsUmlnaHQ6aCgibGF5b3V0LXBhbmVsLXJpZ2h0Iiw2MDQwMSksbGF5b3V0UGFuZWw6aCgibGF5b3V0LXBhbmVsIiw2MDQwMiksbGF5b3V0U2lkZWJhckxlZnQ6aCgibGF5b3V0LXNpZGViYXItbGVmdCIsNjA0MDMpLGxheW91dFNpZGViYXJSaWdodDpoKCJsYXlvdXQtc2lkZWJhci1yaWdodCIsNjA0MDQpLGxheW91dFN0YXR1c2JhcjpoKCJsYXlvdXQtc3RhdHVzYmFyIiw2MDQwNSksbGF5b3V0TWVudWJhcjpoKCJsYXlvdXQtbWVudWJhciIsNjA0MDYpLGxheW91dENlbnRlcmVkOmgoImxheW91dC1jZW50ZXJlZCIsNjA0MDcpLHRhcmdldDpoKCJ0YXJnZXQiLDYwNDA4KSxpbmRlbnQ6aCgiaW5kZW50Iiw2MDQwOSkscmVjb3JkU21hbGw6aCgicmVjb3JkLXNtYWxsIiw2MDQxMCksZXJyb3JTbWFsbDpoKCJlcnJvci1zbWFsbCIsNjA0MTEpLHRlcm1pbmFsRGVjb3JhdGlvbkVycm9yOmgoInRlcm1pbmFsLWRlY29yYXRpb24tZXJyb3IiLDYwNDExKSxhcnJvd0NpcmNsZURvd246aCgiYXJyb3ctY2lyY2xlLWRvd24iLDYwNDEyKSxhcnJvd0NpcmNsZUxlZnQ6aCgiYXJyb3ctY2lyY2xlLWxlZnQiLDYwNDEzKSxhcnJvd0NpcmNsZVJpZ2h0OmgoImFycm93LWNpcmNsZS1yaWdodCIsNjA0MTQpLGFycm93Q2lyY2xlVXA6aCgiYXJyb3ctY2lyY2xlLXVwIiw2MDQxNSksbGF5b3V0U2lkZWJhclJpZ2h0T2ZmOmgoImxheW91dC1zaWRlYmFyLXJpZ2h0LW9mZiIsNjA0MTYpLGxheW91dFBhbmVsT2ZmOmgoImxheW91dC1wYW5lbC1vZmYiLDYwNDE3KSxsYXlvdXRTaWRlYmFyTGVmdE9mZjpoKCJsYXlvdXQtc2lkZWJhci1sZWZ0LW9mZiIsNjA0MTgpLGJsYW5rOmgoImJsYW5rIiw2MDQxOSksaGVhcnRGaWxsZWQ6aCgiaGVhcnQtZmlsbGVkIiw2MDQyMCksbWFwOmgoIm1hcCIsNjA0MjEpLG1hcEhvcml6b250YWw6aCgibWFwLWhvcml6b250YWwiLDYwNDIxKSxmb2xkSG9yaXpvbnRhbDpoKCJmb2xkLWhvcml6b250YWwiLDYwNDIxKSxtYXBGaWxsZWQ6aCgibWFwLWZpbGxlZCIsNjA0MjIpLG1hcEhvcml6b250YWxGaWxsZWQ6aCgibWFwLWhvcml6b250YWwtZmlsbGVkIiw2MDQyMiksZm9sZEhvcml6b250YWxGaWxsZWQ6aCgiZm9sZC1ob3Jpem9udGFsLWZpbGxlZCIsNjA0MjIpLGNpcmNsZVNtYWxsOmgoImNpcmNsZS1zbWFsbCIsNjA0MjMpLGJlbGxTbGFzaDpoKCJiZWxsLXNsYXNoIiw2MDQyNCksYmVsbFNsYXNoRG90OmgoImJlbGwtc2xhc2gtZG90Iiw2MDQyNSksY29tbWVudFVucmVzb2x2ZWQ6aCgiY29tbWVudC11bnJlc29sdmVkIiw2MDQyNiksZ2l0UHVsbFJlcXVlc3RHb1RvQ2hhbmdlczpoKCJnaXQtcHVsbC1yZXF1ZXN0LWdvLXRvLWNoYW5nZXMiLDYwNDI3KSxnaXRQdWxsUmVxdWVzdE5ld0NoYW5nZXM6aCgiZ2l0LXB1bGwtcmVxdWVzdC1uZXctY2hhbmdlcyIsNjA0MjgpLHNlYXJjaEZ1enp5OmgoInNlYXJjaC1mdXp6eSIsNjA0MjkpLGNvbW1lbnREcmFmdDpoKCJjb21tZW50LWRyYWZ0Iiw2MDQzMCksc2VuZDpoKCJzZW5kIiw2MDQzMSksc3BhcmtsZTpoKCJzcGFya2xlIiw2MDQzMiksaW5zZXJ0OmgoImluc2VydCIsNjA0MzMpLG1pYzpoKCJtaWMiLDYwNDM0KSx0aHVtYnNkb3duRmlsbGVkOmgoInRodW1ic2Rvd24tZmlsbGVkIiw2MDQzNSksdGh1bWJzdXBGaWxsZWQ6aCgidGh1bWJzdXAtZmlsbGVkIiw2MDQzNiksY29mZmVlOmgoImNvZmZlZSIsNjA0MzcpLHNuYWtlOmgoInNuYWtlIiw2MDQzOCksZ2FtZTpoKCJnYW1lIiw2MDQzOSksdnI6aCgidnIiLDYwNDQwKSxjaGlwOmgoImNoaXAiLDYwNDQxKSxwaWFubzpoKCJwaWFubyIsNjA0NDIpLG11c2ljOmgoIm11c2ljIiw2MDQ0MyksbWljRmlsbGVkOmgoIm1pYy1maWxsZWQiLDYwNDQ0KSxyZXBvRmV0Y2g6aCgicmVwby1mZXRjaCIsNjA0NDUpLGNvcGlsb3Q6aCgiY29waWxvdCIsNjA0NDYpLGxpZ2h0YnVsYlNwYXJrbGU6aCgibGlnaHRidWxiLXNwYXJrbGUiLDYwNDQ3KSxyb2JvdDpoKCJyb2JvdCIsNjA0NDgpLHNwYXJrbGVGaWxsZWQ6aCgic3BhcmtsZS1maWxsZWQiLDYwNDQ5KSxkaWZmU2luZ2xlOmgoImRpZmYtc2luZ2xlIiw2MDQ1MCksZGlmZk11bHRpcGxlOmgoImRpZmYtbXVsdGlwbGUiLDYwNDUxKSxzdXJyb3VuZFdpdGg6aCgic3Vycm91bmQtd2l0aCIsNjA0NTIpLHNoYXJlOmgoInNoYXJlIiw2MDQ1MyksZ2l0U3Rhc2g6aCgiZ2l0LXN0YXNoIiw2MDQ1NCksZ2l0U3Rhc2hBcHBseTpoKCJnaXQtc3Rhc2gtYXBwbHkiLDYwNDU1KSxnaXRTdGFzaFBvcDpoKCJnaXQtc3Rhc2gtcG9wIiw2MDQ1NiksdnNjb2RlOmgoInZzY29kZSIsNjA0NTcpLHZzY29kZUluc2lkZXJzOmgoInZzY29kZS1pbnNpZGVycyIsNjA0NTgpLGNvZGVPc3M6aCgiY29kZS1vc3MiLDYwNDU5KSxydW5Db3ZlcmFnZTpoKCJydW4tY292ZXJhZ2UiLDYwNDYwKSxydW5BbGxDb3ZlcmFnZTpoKCJydW4tYWxsLWNvdmVyYWdlIiw2MDQ2MSksY292ZXJhZ2U6aCgiY292ZXJhZ2UiLDYwNDYyKSxnaXRodWJQcm9qZWN0OmgoImdpdGh1Yi1wcm9qZWN0Iiw2MDQ2MyksbWFwVmVydGljYWw6aCgibWFwLXZlcnRpY2FsIiw2MDQ2NCksZm9sZFZlcnRpY2FsOmgoImZvbGQtdmVydGljYWwiLDYwNDY0KSxtYXBWZXJ0aWNhbEZpbGxlZDpoKCJtYXAtdmVydGljYWwtZmlsbGVkIiw2MDQ2NSksZm9sZFZlcnRpY2FsRmlsbGVkOmgoImZvbGQtdmVydGljYWwtZmlsbGVkIiw2MDQ2NSksZ29Ub1NlYXJjaDpoKCJnby10by1zZWFyY2giLDYwNDY2KSxwZXJjZW50YWdlOmgoInBlcmNlbnRhZ2UiLDYwNDY3KSxzb3J0UGVyY2VudGFnZTpoKCJzb3J0LXBlcmNlbnRhZ2UiLDYwNDY3KSxhdHRhY2g6aCgiYXR0YWNoIiw2MDQ2OCl9LENsPXtkaWFsb2dFcnJvcjpoKCJkaWFsb2ctZXJyb3IiLCJlcnJvciIpLGRpYWxvZ1dhcm5pbmc6aCgiZGlhbG9nLXdhcm5pbmciLCJ3YXJuaW5nIiksZGlhbG9nSW5mbzpoKCJkaWFsb2ctaW5mbyIsImluZm8iKSxkaWFsb2dDbG9zZTpoKCJkaWFsb2ctY2xvc2UiLCJjbG9zZSIpLHRyZWVJdGVtRXhwYW5kZWQ6aCgidHJlZS1pdGVtLWV4cGFuZGVkIiwiY2hldnJvbi1kb3duIiksdHJlZUZpbHRlck9uVHlwZU9uOmgoInRyZWUtZmlsdGVyLW9uLXR5cGUtb24iLCJsaXN0LWZpbHRlciIpLHRyZWVGaWx0ZXJPblR5cGVPZmY6aCgidHJlZS1maWx0ZXItb24tdHlwZS1vZmYiLCJsaXN0LXNlbGVjdGlvbiIpLHRyZWVGaWx0ZXJDbGVhcjpoKCJ0cmVlLWZpbHRlci1jbGVhciIsImNsb3NlIiksdHJlZUl0ZW1Mb2FkaW5nOmgoInRyZWUtaXRlbS1sb2FkaW5nIiwibG9hZGluZyIpLG1lbnVTZWxlY3Rpb246aCgibWVudS1zZWxlY3Rpb24iLCJjaGVjayIpLG1lbnVTdWJtZW51OmgoIm1lbnUtc3VibWVudSIsImNoZXZyb24tcmlnaHQiKSxtZW51QmFyTW9yZTpoKCJtZW51YmFyLW1vcmUiLCJtb3JlIiksc2Nyb2xsYmFyQnV0dG9uTGVmdDpoKCJzY3JvbGxiYXItYnV0dG9uLWxlZnQiLCJ0cmlhbmdsZS1sZWZ0Iiksc2Nyb2xsYmFyQnV0dG9uUmlnaHQ6aCgic2Nyb2xsYmFyLWJ1dHRvbi1yaWdodCIsInRyaWFuZ2xlLXJpZ2h0Iiksc2Nyb2xsYmFyQnV0dG9uVXA6aCgic2Nyb2xsYmFyLWJ1dHRvbi11cCIsInRyaWFuZ2xlLXVwIiksc2Nyb2xsYmFyQnV0dG9uRG93bjpoKCJzY3JvbGxiYXItYnV0dG9uLWRvd24iLCJ0cmlhbmdsZS1kb3duIiksdG9vbEJhck1vcmU6aCgidG9vbGJhci1tb3JlIiwibW9yZSIpLHF1aWNrSW5wdXRCYWNrOmgoInF1aWNrLWlucHV0LWJhY2siLCJhcnJvdy1sZWZ0IiksZHJvcERvd25CdXR0b246aCgiZHJvcC1kb3duLWJ1dHRvbiIsNjAwODQpLHN5bWJvbEN1c3RvbUNvbG9yOmgoInN5bWJvbC1jdXN0b21jb2xvciIsNjAyNTIpLGV4cG9ydEljb246aCgiZXhwb3J0Iiw2MDMzMiksd29ya3NwYWNlVW5zcGVjaWZpZWQ6aCgid29ya3NwYWNlLXVuc3BlY2lmaWVkIiw2MDM1NSksbmV3TGluZTpoKCJuZXdsaW5lIiw2MDM5NCksdGh1bWJzRG93bkZpbGxlZDpoKCJ0aHVtYnNkb3duLWZpbGxlZCIsNjA0MzUpLHRodW1ic1VwRmlsbGVkOmgoInRodW1ic3VwLWZpbGxlZCIsNjA0MzYpLGdpdEZldGNoOmgoImdpdC1mZXRjaCIsNjA0NDUpLGxpZ2h0YnVsYlNwYXJrbGVBdXRvZml4OmgoImxpZ2h0YnVsYi1zcGFya2xlLWF1dG9maXgiLDYwNDQ3KSxkZWJ1Z0JyZWFrcG9pbnRQZW5kaW5nOmgoImRlYnVnLWJyZWFrcG9pbnQtcGVuZGluZyIsNjAzNzcpfSxQPXsuLi5MbCwuLi5DbH07Y2xhc3MgRWx7Y29uc3RydWN0b3IoKXt0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cz1uZXcgTWFwLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwLHRoaXMuX29uRGlkQ2hhbmdlPW5ldyB2ZSx0aGlzLm9uRGlkQ2hhbmdlPXRoaXMuX29uRGlkQ2hhbmdlLmV2ZW50LHRoaXMuX2NvbG9yTWFwPW51bGx9aGFuZGxlQ2hhbmdlKHQpe3RoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6dCxjaGFuZ2VkQ29sb3JNYXA6ITF9KX1yZWdpc3Rlcih0LG4pe3JldHVybiB0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5zZXQodCxuKSx0aGlzLmhhbmRsZUNoYW5nZShbdF0pLFV0KCgpPT57dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZ2V0KHQpPT09biYmKHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmRlbGV0ZSh0KSx0aGlzLmhhbmRsZUNoYW5nZShbdF0pKX0pfWdldCh0KXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZ2V0KHQpfHxudWxsfXJlZ2lzdGVyRmFjdG9yeSh0LG4pe3RoaXMuX2ZhY3Rvcmllcy5nZXQodCk/LmRpc3Bvc2UoKTtjb25zdCBpPW5ldyBSbCh0aGlzLHQsbik7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQodCxpKSxVdCgoKT0+e2NvbnN0IHI9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTshcnx8ciE9PWl8fCh0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKHQpLHIuZGlzcG9zZSgpKX0pfWFzeW5jIGdldE9yQ3JlYXRlKHQpe2NvbnN0IG49dGhpcy5nZXQodCk7aWYobilyZXR1cm4gbjtjb25zdCBpPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuIWl8fGkuaXNSZXNvbHZlZD9udWxsOihhd2FpdCBpLnJlc29sdmUoKSx0aGlzLmdldCh0KSl9aXNSZXNvbHZlZCh0KXtpZih0aGlzLmdldCh0KSlyZXR1cm4hMDtjb25zdCBpPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuISEoIWl8fGkuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAodCl7dGhpcy5fY29sb3JNYXA9dCx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19Y2xhc3MgUmwgZXh0ZW5kcyB0dHtnZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWNvbnN0cnVjdG9yKHQsbixpKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PXQsdGhpcy5fbGFuZ3VhZ2VJZD1uLHRoaXMuX2ZhY3Rvcnk9aSx0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMCxzdXBlci5kaXNwb3NlKCl9YXN5bmMgcmVzb2x2ZSgpe3JldHVybiB0aGlzLl9yZXNvbHZlUHJvbWlzZXx8KHRoaXMuX3Jlc29sdmVQcm9taXNlPXRoaXMuX2NyZWF0ZSgpKSx0aGlzLl9yZXNvbHZlUHJvbWlzZX1hc3luYyBfY3JlYXRlKCl7Y29uc3QgdD1hd2FpdCB0aGlzLl9mYWN0b3J5LnRva2VuaXphdGlvblN1cHBvcnQ7dGhpcy5faXNSZXNvbHZlZD0hMCx0JiYhdGhpcy5faXNEaXNwb3NlZCYmdGhpcy5fcmVnaXN0ZXIodGhpcy5fcmVnaXN0cnkucmVnaXN0ZXIodGhpcy5fbGFuZ3VhZ2VJZCx0KSl9fWNsYXNzIE1se2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLm9mZnNldD10LHRoaXMudHlwZT1uLHRoaXMubGFuZ3VhZ2U9aSx0aGlzLl90b2tlbkJyYW5kPXZvaWQgMH10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fXZhciBscjsoZnVuY3Rpb24oZSl7ZVtlLkluY3JlYXNlPTBdPSJJbmNyZWFzZSIsZVtlLkRlY3JlYXNlPTFdPSJEZWNyZWFzZSJ9KShscnx8KGxyPXt9KSk7dmFyIHVyOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxQLnN5bWJvbE1ldGhvZCksdC5zZXQoMSxQLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgyLFAuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMsUC5zeW1ib2xGaWVsZCksdC5zZXQoNCxQLnN5bWJvbFZhcmlhYmxlKSx0LnNldCg1LFAuc3ltYm9sQ2xhc3MpLHQuc2V0KDYsUC5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcsUC5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDgsUC5zeW1ib2xNb2R1bGUpLHQuc2V0KDksUC5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAsUC5zeW1ib2xFdmVudCksdC5zZXQoMTEsUC5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIsUC5zeW1ib2xVbml0KSx0LnNldCgxMyxQLnN5bWJvbFZhbHVlKSx0LnNldCgxNSxQLnN5bWJvbEVudW0pLHQuc2V0KDE0LFAuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LFAuc3ltYm9sRW51bSksdC5zZXQoMTYsUC5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyxQLnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LFAuc3ltYm9sU25pcHBldCksdC5zZXQoMTgsUC5zeW1ib2xUZXh0KSx0LnNldCgxOSxQLnN5bWJvbENvbG9yKSx0LnNldCgyMCxQLnN5bWJvbEZpbGUpLHQuc2V0KDIxLFAuc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMixQLnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxQLnN5bWJvbEZvbGRlciksdC5zZXQoMjQsUC5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSxQLmFjY291bnQpLHQuc2V0KDI2LFAuaXNzdWVzKTtmdW5jdGlvbiBuKHMpe2xldCBvPXQuZ2V0KHMpO3JldHVybiBvfHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitzKSxvPVAuc3ltYm9sUHJvcGVydHkpLG99ZS50b0ljb249bjtjb25zdCBpPW5ldyBNYXA7aS5zZXQoIm1ldGhvZCIsMCksaS5zZXQoImZ1bmN0aW9uIiwxKSxpLnNldCgiY29uc3RydWN0b3IiLDIpLGkuc2V0KCJmaWVsZCIsMyksaS5zZXQoInZhcmlhYmxlIiw0KSxpLnNldCgiY2xhc3MiLDUpLGkuc2V0KCJzdHJ1Y3QiLDYpLGkuc2V0KCJpbnRlcmZhY2UiLDcpLGkuc2V0KCJtb2R1bGUiLDgpLGkuc2V0KCJwcm9wZXJ0eSIsOSksaS5zZXQoImV2ZW50IiwxMCksaS5zZXQoIm9wZXJhdG9yIiwxMSksaS5zZXQoInVuaXQiLDEyKSxpLnNldCgidmFsdWUiLDEzKSxpLnNldCgiY29uc3RhbnQiLDE0KSxpLnNldCgiZW51bSIsMTUpLGkuc2V0KCJlbnVtLW1lbWJlciIsMTYpLGkuc2V0KCJlbnVtTWVtYmVyIiwxNiksaS5zZXQoImtleXdvcmQiLDE3KSxpLnNldCgic25pcHBldCIsMjcpLGkuc2V0KCJ0ZXh0IiwxOCksaS5zZXQoImNvbG9yIiwxOSksaS5zZXQoImZpbGUiLDIwKSxpLnNldCgicmVmZXJlbmNlIiwyMSksaS5zZXQoImN1c3RvbWNvbG9yIiwyMiksaS5zZXQoImZvbGRlciIsMjMpLGkuc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLGkuc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCksaS5zZXQoImFjY291bnQiLDI1KSxpLnNldCgiaXNzdWUiLDI2KTtmdW5jdGlvbiByKHMsbyl7bGV0IGw9aS5nZXQocyk7cmV0dXJuIHR5cGVvZiBsPiJ1IiYmIW8mJihsPTkpLGx9ZS5mcm9tU3RyaW5nPXJ9KSh1cnx8KHVyPXt9KSk7dmFyIGNyOyhmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifSkoY3J8fChjcj17fSkpO3ZhciBocjsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuUGFzdGVBcz0xXT0iUGFzdGVBcyJ9KShocnx8KGhyPXt9KSk7dmFyIGRyOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KShkcnx8KGRyPXt9KSk7dmFyIG1yOyhmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifSkobXJ8fChtcj17fSkpLFEoIkFycmF5IiwiYXJyYXkiKSxRKCJCb29sZWFuIiwiYm9vbGVhbiIpLFEoIkNsYXNzIiwiY2xhc3MiKSxRKCJDb25zdGFudCIsImNvbnN0YW50IiksUSgiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIpLFEoIkVudW0iLCJlbnVtZXJhdGlvbiIpLFEoIkVudW1NZW1iZXIiLCJlbnVtZXJhdGlvbiBtZW1iZXIiKSxRKCJFdmVudCIsImV2ZW50IiksUSgiRmllbGQiLCJmaWVsZCIpLFEoIkZpbGUiLCJmaWxlIiksUSgiRnVuY3Rpb24iLCJmdW5jdGlvbiIpLFEoIkludGVyZmFjZSIsImludGVyZmFjZSIpLFEoIktleSIsImtleSIpLFEoIk1ldGhvZCIsIm1ldGhvZCIpLFEoIk1vZHVsZSIsIm1vZHVsZSIpLFEoIk5hbWVzcGFjZSIsIm5hbWVzcGFjZSIpLFEoIk51bGwiLCJudWxsIiksUSgiTnVtYmVyIiwibnVtYmVyIiksUSgiT2JqZWN0Iiwib2JqZWN0IiksUSgiT3BlcmF0b3IiLCJvcGVyYXRvciIpLFEoIlBhY2thZ2UiLCJwYWNrYWdlIiksUSgiUHJvcGVydHkiLCJwcm9wZXJ0eSIpLFEoIlN0cmluZyIsInN0cmluZyIpLFEoIlN0cnVjdCIsInN0cnVjdCIpLFEoIlR5cGVQYXJhbWV0ZXIiLCJ0eXBlIHBhcmFtZXRlciIpLFEoIlZhcmlhYmxlIiwidmFyaWFibGUiKTt2YXIgZnI7KGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLFAuc3ltYm9sRmlsZSksdC5zZXQoMSxQLnN5bWJvbE1vZHVsZSksdC5zZXQoMixQLnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyxQLnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQsUC5zeW1ib2xDbGFzcyksdC5zZXQoNSxQLnN5bWJvbE1ldGhvZCksdC5zZXQoNixQLnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LFAuc3ltYm9sRmllbGQpLHQuc2V0KDgsUC5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSxQLnN5bWJvbEVudW0pLHQuc2V0KDEwLFAuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCgxMSxQLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMixQLnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxQLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNCxQLnN5bWJvbFN0cmluZyksdC5zZXQoMTUsUC5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LFAuc3ltYm9sQm9vbGVhbiksdC5zZXQoMTcsUC5zeW1ib2xBcnJheSksdC5zZXQoMTgsUC5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LFAuc3ltYm9sS2V5KSx0LnNldCgyMCxQLnN5bWJvbE51bGwpLHQuc2V0KDIxLFAuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIsUC5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDIzLFAuc3ltYm9sRXZlbnQpLHQuc2V0KDI0LFAuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LFAuc3ltYm9sVHlwZVBhcmFtZXRlcik7ZnVuY3Rpb24gbihpKXtsZXQgcj10LmdldChpKTtyZXR1cm4gcnx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK2kpLHI9UC5zeW1ib2xQcm9wZXJ0eSkscn1lLnRvSWNvbj1ufSkoZnJ8fChmcj17fSkpO2xldCBHYz0odWU9Y2xhc3N7c3RhdGljIGZyb21WYWx1ZSh0KXtzd2l0Y2godCl7Y2FzZSJjb21tZW50IjpyZXR1cm4gdWUuQ29tbWVudDtjYXNlImltcG9ydHMiOnJldHVybiB1ZS5JbXBvcnRzO2Nhc2UicmVnaW9uIjpyZXR1cm4gdWUuUmVnaW9ufXJldHVybiBuZXcgdWUodCl9Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10fX0sdWUuQ29tbWVudD1uZXcgdWUoImNvbW1lbnQiKSx1ZS5JbXBvcnRzPW5ldyB1ZSgiaW1wb3J0cyIpLHVlLlJlZ2lvbj1uZXcgdWUoInJlZ2lvbiIpLHVlKTt2YXIgcHI7KGZ1bmN0aW9uKGUpe2VbZS5BSUdlbmVyYXRlZD0xXT0iQUlHZW5lcmF0ZWQifSkocHJ8fChwcj17fSkpO3ZhciBncjsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoZ3J8fChncj17fSkpO3ZhciBicjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4hbnx8dHlwZW9mIG4hPSJvYmplY3QiPyExOnR5cGVvZiBuLmlkPT0ic3RyaW5nIiYmdHlwZW9mIG4udGl0bGU9PSJzdHJpbmcifWUuaXM9dH0pKGJyfHwoYnI9e30pKTt2YXIgX3I7KGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSkoX3J8fChfcj17fSkpLG5ldyBFbDt2YXIgd3I7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLkF1dG9tYXRpYz0xXT0iQXV0b21hdGljIn0pKHdyfHwod3I9e30pKTt2YXIgdnI7KGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRGlzYWJsZWQ9MV09IkRpc2FibGVkIixlW2UuRW5hYmxlZD0yXT0iRW5hYmxlZCJ9KSh2cnx8KHZyPXt9KSk7dmFyIHlyOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5BdXRvPTJdPSJBdXRvIn0pKHlyfHwoeXI9e30pKTt2YXIgeHI7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifSkoeHJ8fCh4cj17fSkpO3ZhciBUcjsoZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KShUcnx8KFRyPXt9KSk7dmFyIGtyOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KShrcnx8KGtyPXt9KSk7dmFyIEFyOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KShBcnx8KEFyPXt9KSk7dmFyIFNyOyhmdW5jdGlvbihlKXtlW2UuRVhBQ1Q9MF09IkVYQUNUIixlW2UuQUJPVkU9MV09IkFCT1ZFIixlW2UuQkVMT1c9Ml09IkJFTE9XIn0pKFNyfHwoU3I9e30pKTt2YXIgTHI7KGZ1bmN0aW9uKGUpe2VbZS5Ob3RTZXQ9MF09Ik5vdFNldCIsZVtlLkNvbnRlbnRGbHVzaD0xXT0iQ29udGVudEZsdXNoIixlW2UuUmVjb3ZlckZyb21NYXJrZXJzPTJdPSJSZWNvdmVyRnJvbU1hcmtlcnMiLGVbZS5FeHBsaWNpdD0zXT0iRXhwbGljaXQiLGVbZS5QYXN0ZT00XT0iUGFzdGUiLGVbZS5VbmRvPTVdPSJVbmRvIixlW2UuUmVkbz02XT0iUmVkbyJ9KShMcnx8KExyPXt9KSk7dmFyIENyOyhmdW5jdGlvbihlKXtlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KShDcnx8KENyPXt9KSk7dmFyIEVyOyhmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifSkoRXJ8fChFcj17fSkpO3ZhciBScjsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwPTFdPSJLZWVwIixlW2UuQnJhY2tldHM9Ml09IkJyYWNrZXRzIixlW2UuQWR2YW5jZWQ9M109IkFkdmFuY2VkIixlW2UuRnVsbD00XT0iRnVsbCJ9KShScnx8KFJyPXt9KSk7dmFyIE1yOyhmdW5jdGlvbihlKXtlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyPTBdPSJhY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXIiLGVbZS5hY2NlcHRTdWdnZXN0aW9uT25FbnRlcj0xXT0iYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXIiLGVbZS5hY2Nlc3NpYmlsaXR5U3VwcG9ydD0yXT0iYWNjZXNzaWJpbGl0eVN1cHBvcnQiLGVbZS5hY2Nlc3NpYmlsaXR5UGFnZVNpemU9M109ImFjY2Vzc2liaWxpdHlQYWdlU2l6ZSIsZVtlLmFyaWFMYWJlbD00XT0iYXJpYUxhYmVsIixlW2UuYXJpYVJlcXVpcmVkPTVdPSJhcmlhUmVxdWlyZWQiLGVbZS5hdXRvQ2xvc2luZ0JyYWNrZXRzPTZdPSJhdXRvQ2xvc2luZ0JyYWNrZXRzIixlW2UuYXV0b0Nsb3NpbmdDb21tZW50cz03XT0iYXV0b0Nsb3NpbmdDb21tZW50cyIsZVtlLnNjcmVlblJlYWRlckFubm91bmNlSW5saW5lU3VnZ2VzdGlvbj04XT0ic2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9OV09ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT0xMF09ImF1dG9DbG9zaW5nT3ZlcnR5cGUiLGVbZS5hdXRvQ2xvc2luZ1F1b3Rlcz0xMV09ImF1dG9DbG9zaW5nUXVvdGVzIixlW2UuYXV0b0luZGVudD0xMl09ImF1dG9JbmRlbnQiLGVbZS5hdXRvbWF0aWNMYXlvdXQ9MTNdPSJhdXRvbWF0aWNMYXlvdXQiLGVbZS5hdXRvU3Vycm91bmQ9MTRdPSJhdXRvU3Vycm91bmQiLGVbZS5icmFja2V0UGFpckNvbG9yaXphdGlvbj0xNV09ImJyYWNrZXRQYWlyQ29sb3JpemF0aW9uIixlW2UuZ3VpZGVzPTE2XT0iZ3VpZGVzIixlW2UuY29kZUxlbnM9MTddPSJjb2RlTGVucyIsZVtlLmNvZGVMZW5zRm9udEZhbWlseT0xOF09ImNvZGVMZW5zRm9udEZhbWlseSIsZVtlLmNvZGVMZW5zRm9udFNpemU9MTldPSJjb2RlTGVuc0ZvbnRTaXplIixlW2UuY29sb3JEZWNvcmF0b3JzPTIwXT0iY29sb3JEZWNvcmF0b3JzIixlW2UuY29sb3JEZWNvcmF0b3JzTGltaXQ9MjFdPSJjb2xvckRlY29yYXRvcnNMaW1pdCIsZVtlLmNvbHVtblNlbGVjdGlvbj0yMl09ImNvbHVtblNlbGVjdGlvbiIsZVtlLmNvbW1lbnRzPTIzXT0iY29tbWVudHMiLGVbZS5jb250ZXh0bWVudT0yNF09ImNvbnRleHRtZW51IixlW2UuY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmc9MjVdPSJjb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZyIsZVtlLmN1cnNvckJsaW5raW5nPTI2XT0iY3Vyc29yQmxpbmtpbmciLGVbZS5jdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbj0yN109ImN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uIixlW2UuY3Vyc29yU3R5bGU9MjhdPSJjdXJzb3JTdHlsZSIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXM9MjldPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlPTMwXT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlIixlW2UuY3Vyc29yV2lkdGg9MzFdPSJjdXJzb3JXaWR0aCIsZVtlLmRpc2FibGVMYXllckhpbnRpbmc9MzJdPSJkaXNhYmxlTGF5ZXJIaW50aW5nIixlW2UuZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnM9MzNdPSJkaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucyIsZVtlLmRvbVJlYWRPbmx5PTM0XT0iZG9tUmVhZE9ubHkiLGVbZS5kcmFnQW5kRHJvcD0zNV09ImRyYWdBbmREcm9wIixlW2UuZHJvcEludG9FZGl0b3I9MzZdPSJkcm9wSW50b0VkaXRvciIsZVtlLmVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkPTM3XT0iZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5leHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nPTM4XT0iZXhwZXJpbWVudGFsV2hpdGVzcGFjZVJlbmRlcmluZyIsZVtlLmV4dHJhRWRpdG9yQ2xhc3NOYW1lPTM5XT0iZXh0cmFFZGl0b3JDbGFzc05hbWUiLGVbZS5mYXN0U2Nyb2xsU2Vuc2l0aXZpdHk9NDBdPSJmYXN0U2Nyb2xsU2Vuc2l0aXZpdHkiLGVbZS5maW5kPTQxXT0iZmluZCIsZVtlLmZpeGVkT3ZlcmZsb3dXaWRnZXRzPTQyXT0iZml4ZWRPdmVyZmxvd1dpZGdldHMiLGVbZS5mb2xkaW5nPTQzXT0iZm9sZGluZyIsZVtlLmZvbGRpbmdTdHJhdGVneT00NF09ImZvbGRpbmdTdHJhdGVneSIsZVtlLmZvbGRpbmdIaWdobGlnaHQ9NDVdPSJmb2xkaW5nSGlnaGxpZ2h0IixlW2UuZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQ9NDZdPSJmb2xkaW5nSW1wb3J0c0J5RGVmYXVsdCIsZVtlLmZvbGRpbmdNYXhpbXVtUmVnaW9ucz00N109ImZvbGRpbmdNYXhpbXVtUmVnaW9ucyIsZVtlLnVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZT00OF09InVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZSIsZVtlLmZvbnRGYW1pbHk9NDldPSJmb250RmFtaWx5IixlW2UuZm9udEluZm89NTBdPSJmb250SW5mbyIsZVtlLmZvbnRMaWdhdHVyZXM9NTFdPSJmb250TGlnYXR1cmVzIixlW2UuZm9udFNpemU9NTJdPSJmb250U2l6ZSIsZVtlLmZvbnRXZWlnaHQ9NTNdPSJmb250V2VpZ2h0IixlW2UuZm9udFZhcmlhdGlvbnM9NTRdPSJmb250VmFyaWF0aW9ucyIsZVtlLmZvcm1hdE9uUGFzdGU9NTVdPSJmb3JtYXRPblBhc3RlIixlW2UuZm9ybWF0T25UeXBlPTU2XT0iZm9ybWF0T25UeXBlIixlW2UuZ2x5cGhNYXJnaW49NTddPSJnbHlwaE1hcmdpbiIsZVtlLmdvdG9Mb2NhdGlvbj01OF09ImdvdG9Mb2NhdGlvbiIsZVtlLmhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXI9NTldPSJoaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyIixlW2UuaG92ZXI9NjBdPSJob3ZlciIsZVtlLmluRGlmZkVkaXRvcj02MV09ImluRGlmZkVkaXRvciIsZVtlLmlubGluZVN1Z2dlc3Q9NjJdPSJpbmxpbmVTdWdnZXN0IixlW2UuaW5saW5lRWRpdD02M109ImlubGluZUVkaXQiLGVbZS5sZXR0ZXJTcGFjaW5nPTY0XT0ibGV0dGVyU3BhY2luZyIsZVtlLmxpZ2h0YnVsYj02NV09ImxpZ2h0YnVsYiIsZVtlLmxpbmVEZWNvcmF0aW9uc1dpZHRoPTY2XT0ibGluZURlY29yYXRpb25zV2lkdGgiLGVbZS5saW5lSGVpZ2h0PTY3XT0ibGluZUhlaWdodCIsZVtlLmxpbmVOdW1iZXJzPTY4XT0ibGluZU51bWJlcnMiLGVbZS5saW5lTnVtYmVyc01pbkNoYXJzPTY5XT0ibGluZU51bWJlcnNNaW5DaGFycyIsZVtlLmxpbmtlZEVkaXRpbmc9NzBdPSJsaW5rZWRFZGl0aW5nIixlW2UubGlua3M9NzFdPSJsaW5rcyIsZVtlLm1hdGNoQnJhY2tldHM9NzJdPSJtYXRjaEJyYWNrZXRzIixlW2UubWluaW1hcD03M109Im1pbmltYXAiLGVbZS5tb3VzZVN0eWxlPTc0XT0ibW91c2VTdHlsZSIsZVtlLm1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eT03NV09Im1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eSIsZVtlLm1vdXNlV2hlZWxab29tPTc2XT0ibW91c2VXaGVlbFpvb20iLGVbZS5tdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmc9NzddPSJtdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmciLGVbZS5tdWx0aUN1cnNvck1vZGlmaWVyPTc4XT0ibXVsdGlDdXJzb3JNb2RpZmllciIsZVtlLm11bHRpQ3Vyc29yUGFzdGU9NzldPSJtdWx0aUN1cnNvclBhc3RlIixlW2UubXVsdGlDdXJzb3JMaW1pdD04MF09Im11bHRpQ3Vyc29yTGltaXQiLGVbZS5vY2N1cnJlbmNlc0hpZ2hsaWdodD04MV09Im9jY3VycmVuY2VzSGlnaGxpZ2h0IixlW2Uub3ZlcnZpZXdSdWxlckJvcmRlcj04Ml09Im92ZXJ2aWV3UnVsZXJCb3JkZXIiLGVbZS5vdmVydmlld1J1bGVyTGFuZXM9ODNdPSJvdmVydmlld1J1bGVyTGFuZXMiLGVbZS5wYWRkaW5nPTg0XT0icGFkZGluZyIsZVtlLnBhc3RlQXM9ODVdPSJwYXN0ZUFzIixlW2UucGFyYW1ldGVySGludHM9ODZdPSJwYXJhbWV0ZXJIaW50cyIsZVtlLnBlZWtXaWRnZXREZWZhdWx0Rm9jdXM9ODddPSJwZWVrV2lkZ2V0RGVmYXVsdEZvY3VzIixlW2UucGxhY2Vob2xkZXI9ODhdPSJwbGFjZWhvbGRlciIsZVtlLmRlZmluaXRpb25MaW5rT3BlbnNJblBlZWs9ODldPSJkZWZpbml0aW9uTGlua09wZW5zSW5QZWVrIixlW2UucXVpY2tTdWdnZXN0aW9ucz05MF09InF1aWNrU3VnZ2VzdGlvbnMiLGVbZS5xdWlja1N1Z2dlc3Rpb25zRGVsYXk9OTFdPSJxdWlja1N1Z2dlc3Rpb25zRGVsYXkiLGVbZS5yZWFkT25seT05Ml09InJlYWRPbmx5IixlW2UucmVhZE9ubHlNZXNzYWdlPTkzXT0icmVhZE9ubHlNZXNzYWdlIixlW2UucmVuYW1lT25UeXBlPTk0XT0icmVuYW1lT25UeXBlIixlW2UucmVuZGVyQ29udHJvbENoYXJhY3RlcnM9OTVdPSJyZW5kZXJDb250cm9sQ2hhcmFjdGVycyIsZVtlLnJlbmRlckZpbmFsTmV3bGluZT05Nl09InJlbmRlckZpbmFsTmV3bGluZSIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHQ9OTddPSJyZW5kZXJMaW5lSGlnaGxpZ2h0IixlW2UucmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXM9OThdPSJyZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cyIsZVtlLnJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucz05OV09InJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucyIsZVtlLnJlbmRlcldoaXRlc3BhY2U9MTAwXT0icmVuZGVyV2hpdGVzcGFjZSIsZVtlLnJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmc9MTAxXT0icmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZyIsZVtlLnJvdW5kZWRTZWxlY3Rpb249MTAyXT0icm91bmRlZFNlbGVjdGlvbiIsZVtlLnJ1bGVycz0xMDNdPSJydWxlcnMiLGVbZS5zY3JvbGxiYXI9MTA0XT0ic2Nyb2xsYmFyIixlW2Uuc2Nyb2xsQmV5b25kTGFzdENvbHVtbj0xMDVdPSJzY3JvbGxCZXlvbmRMYXN0Q29sdW1uIixlW2Uuc2Nyb2xsQmV5b25kTGFzdExpbmU9MTA2XT0ic2Nyb2xsQmV5b25kTGFzdExpbmUiLGVbZS5zY3JvbGxQcmVkb21pbmFudEF4aXM9MTA3XT0ic2Nyb2xsUHJlZG9taW5hbnRBeGlzIixlW2Uuc2VsZWN0aW9uQ2xpcGJvYXJkPTEwOF09InNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLnNlbGVjdGlvbkhpZ2hsaWdodD0xMDldPSJzZWxlY3Rpb25IaWdobGlnaHQiLGVbZS5zZWxlY3RPbkxpbmVOdW1iZXJzPTExMF09InNlbGVjdE9uTGluZU51bWJlcnMiLGVbZS5zaG93Rm9sZGluZ0NvbnRyb2xzPTExMV09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTExMl09InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTEzXT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTE0XT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTE1XT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5U2Nyb2xsPTExNl09InN0aWNreVNjcm9sbCIsZVtlLnN0aWNreVRhYlN0b3BzPTExN109InN0aWNreVRhYlN0b3BzIixlW2Uuc3RvcFJlbmRlcmluZ0xpbmVBZnRlcj0xMThdPSJzdG9wUmVuZGVyaW5nTGluZUFmdGVyIixlW2Uuc3VnZ2VzdD0xMTldPSJzdWdnZXN0IixlW2Uuc3VnZ2VzdEZvbnRTaXplPTEyMF09InN1Z2dlc3RGb250U2l6ZSIsZVtlLnN1Z2dlc3RMaW5lSGVpZ2h0PTEyMV09InN1Z2dlc3RMaW5lSGVpZ2h0IixlW2Uuc3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnM9MTIyXT0ic3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnMiLGVbZS5zdWdnZXN0U2VsZWN0aW9uPTEyM109InN1Z2dlc3RTZWxlY3Rpb24iLGVbZS50YWJDb21wbGV0aW9uPTEyNF09InRhYkNvbXBsZXRpb24iLGVbZS50YWJJbmRleD0xMjVdPSJ0YWJJbmRleCIsZVtlLnVuaWNvZGVIaWdobGlnaHRpbmc9MTI2XT0idW5pY29kZUhpZ2hsaWdodGluZyIsZVtlLnVudXN1YWxMaW5lVGVybWluYXRvcnM9MTI3XT0idW51c3VhbExpbmVUZXJtaW5hdG9ycyIsZVtlLnVzZVNoYWRvd0RPTT0xMjhdPSJ1c2VTaGFkb3dET00iLGVbZS51c2VUYWJTdG9wcz0xMjldPSJ1c2VUYWJTdG9wcyIsZVtlLndvcmRCcmVhaz0xMzBdPSJ3b3JkQnJlYWsiLGVbZS53b3JkU2VnbWVudGVyTG9jYWxlcz0xMzFdPSJ3b3JkU2VnbWVudGVyTG9jYWxlcyIsZVtlLndvcmRTZXBhcmF0b3JzPTEzMl09IndvcmRTZXBhcmF0b3JzIixlW2Uud29yZFdyYXA9MTMzXT0id29yZFdyYXAiLGVbZS53b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzPTEzNF09IndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycz0xMzVdPSJ3b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQ29sdW1uPTEzNl09IndvcmRXcmFwQ29sdW1uIixlW2Uud29yZFdyYXBPdmVycmlkZTE9MTM3XT0id29yZFdyYXBPdmVycmlkZTEiLGVbZS53b3JkV3JhcE92ZXJyaWRlMj0xMzhdPSJ3b3JkV3JhcE92ZXJyaWRlMiIsZVtlLndyYXBwaW5nSW5kZW50PTEzOV09IndyYXBwaW5nSW5kZW50IixlW2Uud3JhcHBpbmdTdHJhdGVneT0xNDBdPSJ3cmFwcGluZ1N0cmF0ZWd5IixlW2Uuc2hvd0RlcHJlY2F0ZWQ9MTQxXT0ic2hvd0RlcHJlY2F0ZWQiLGVbZS5pbmxheUhpbnRzPTE0Ml09ImlubGF5SGludHMiLGVbZS5lZGl0b3JDbGFzc05hbWU9MTQzXT0iZWRpdG9yQ2xhc3NOYW1lIixlW2UucGl4ZWxSYXRpbz0xNDRdPSJwaXhlbFJhdGlvIixlW2UudGFiRm9jdXNNb2RlPTE0NV09InRhYkZvY3VzTW9kZSIsZVtlLmxheW91dEluZm89MTQ2XT0ibGF5b3V0SW5mbyIsZVtlLndyYXBwaW5nSW5mbz0xNDddPSJ3cmFwcGluZ0luZm8iLGVbZS5kZWZhdWx0Q29sb3JEZWNvcmF0b3JzPTE0OF09ImRlZmF1bHRDb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNBY3RpdmF0ZWRPbj0xNDldPSJjb2xvckRlY29yYXRvcnNBY3RpdmF0ZWRPbiIsZVtlLmlubGluZUNvbXBsZXRpb25zQWNjZXNzaWJpbGl0eVZlcmJvc2U9MTUwXT0iaW5saW5lQ29tcGxldGlvbnNBY2Nlc3NpYmlsaXR5VmVyYm9zZSJ9KShNcnx8KE1yPXt9KSk7dmFyIE5yOyhmdW5jdGlvbihlKXtlW2UuVGV4dERlZmluZWQ9MF09IlRleHREZWZpbmVkIixlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KShOcnx8KE5yPXt9KSk7dmFyIERyOyhmdW5jdGlvbihlKXtlW2UuTEY9MF09IkxGIixlW2UuQ1JMRj0xXT0iQ1JMRiJ9KShEcnx8KERyPXt9KSk7dmFyIElyOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9M109IlJpZ2h0In0pKElyfHwoSXI9e30pKTt2YXIgenI7KGZ1bmN0aW9uKGUpe2VbZS5JbmNyZWFzZT0wXT0iSW5jcmVhc2UiLGVbZS5EZWNyZWFzZT0xXT0iRGVjcmVhc2UifSkoenJ8fCh6cj17fSkpO3ZhciBIcjsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5JbmRlbnQ9MV09IkluZGVudCIsZVtlLkluZGVudE91dGRlbnQ9Ml09IkluZGVudE91dGRlbnQiLGVbZS5PdXRkZW50PTNdPSJPdXRkZW50In0pKEhyfHwoSHI9e30pKTt2YXIgVXI7KGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifSkoVXJ8fChVcj17fSkpO3ZhciBXcjsoZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KShXcnx8KFdyPXt9KSk7dmFyIEZyOyhmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifSkoRnJ8fChGcj17fSkpO3ZhciBQcjsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoUHJ8fChQcj17fSkpO3ZhciAkbjsoZnVuY3Rpb24oZSl7ZVtlLkRlcGVuZHNPbktiTGF5b3V0PS0xXT0iRGVwZW5kc09uS2JMYXlvdXQiLGVbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuQmFja3NwYWNlPTFdPSJCYWNrc3BhY2UiLGVbZS5UYWI9Ml09IlRhYiIsZVtlLkVudGVyPTNdPSJFbnRlciIsZVtlLlNoaWZ0PTRdPSJTaGlmdCIsZVtlLkN0cmw9NV09IkN0cmwiLGVbZS5BbHQ9Nl09IkFsdCIsZVtlLlBhdXNlQnJlYWs9N109IlBhdXNlQnJlYWsiLGVbZS5DYXBzTG9jaz04XT0iQ2Fwc0xvY2siLGVbZS5Fc2NhcGU9OV09IkVzY2FwZSIsZVtlLlNwYWNlPTEwXT0iU3BhY2UiLGVbZS5QYWdlVXA9MTFdPSJQYWdlVXAiLGVbZS5QYWdlRG93bj0xMl09IlBhZ2VEb3duIixlW2UuRW5kPTEzXT0iRW5kIixlW2UuSG9tZT0xNF09IkhvbWUiLGVbZS5MZWZ0QXJyb3c9MTVdPSJMZWZ0QXJyb3ciLGVbZS5VcEFycm93PTE2XT0iVXBBcnJvdyIsZVtlLlJpZ2h0QXJyb3c9MTddPSJSaWdodEFycm93IixlW2UuRG93bkFycm93PTE4XT0iRG93bkFycm93IixlW2UuSW5zZXJ0PTE5XT0iSW5zZXJ0IixlW2UuRGVsZXRlPTIwXT0iRGVsZXRlIixlW2UuRGlnaXQwPTIxXT0iRGlnaXQwIixlW2UuRGlnaXQxPTIyXT0iRGlnaXQxIixlW2UuRGlnaXQyPTIzXT0iRGlnaXQyIixlW2UuRGlnaXQzPTI0XT0iRGlnaXQzIixlW2UuRGlnaXQ0PTI1XT0iRGlnaXQ0IixlW2UuRGlnaXQ1PTI2XT0iRGlnaXQ1IixlW2UuRGlnaXQ2PTI3XT0iRGlnaXQ2IixlW2UuRGlnaXQ3PTI4XT0iRGlnaXQ3IixlW2UuRGlnaXQ4PTI5XT0iRGlnaXQ4IixlW2UuRGlnaXQ5PTMwXT0iRGlnaXQ5IixlW2UuS2V5QT0zMV09IktleUEiLGVbZS5LZXlCPTMyXT0iS2V5QiIsZVtlLktleUM9MzNdPSJLZXlDIixlW2UuS2V5RD0zNF09IktleUQiLGVbZS5LZXlFPTM1XT0iS2V5RSIsZVtlLktleUY9MzZdPSJLZXlGIixlW2UuS2V5Rz0zN109IktleUciLGVbZS5LZXlIPTM4XT0iS2V5SCIsZVtlLktleUk9MzldPSJLZXlJIixlW2UuS2V5Sj00MF09IktleUoiLGVbZS5LZXlLPTQxXT0iS2V5SyIsZVtlLktleUw9NDJdPSJLZXlMIixlW2UuS2V5TT00M109IktleU0iLGVbZS5LZXlOPTQ0XT0iS2V5TiIsZVtlLktleU89NDVdPSJLZXlPIixlW2UuS2V5UD00Nl09IktleVAiLGVbZS5LZXlRPTQ3XT0iS2V5USIsZVtlLktleVI9NDhdPSJLZXlSIixlW2UuS2V5Uz00OV09IktleVMiLGVbZS5LZXlUPTUwXT0iS2V5VCIsZVtlLktleVU9NTFdPSJLZXlVIixlW2UuS2V5Vj01Ml09IktleVYiLGVbZS5LZXlXPTUzXT0iS2V5VyIsZVtlLktleVg9NTRdPSJLZXlYIixlW2UuS2V5WT01NV09IktleVkiLGVbZS5LZXlaPTU2XT0iS2V5WiIsZVtlLk1ldGE9NTddPSJNZXRhIixlW2UuQ29udGV4dE1lbnU9NThdPSJDb250ZXh0TWVudSIsZVtlLkYxPTU5XT0iRjEiLGVbZS5GMj02MF09IkYyIixlW2UuRjM9NjFdPSJGMyIsZVtlLkY0PTYyXT0iRjQiLGVbZS5GNT02M109IkY1IixlW2UuRjY9NjRdPSJGNiIsZVtlLkY3PTY1XT0iRjciLGVbZS5GOD02Nl09IkY4IixlW2UuRjk9NjddPSJGOSIsZVtlLkYxMD02OF09IkYxMCIsZVtlLkYxMT02OV09IkYxMSIsZVtlLkYxMj03MF09IkYxMiIsZVtlLkYxMz03MV09IkYxMyIsZVtlLkYxND03Ml09IkYxNCIsZVtlLkYxNT03M109IkYxNSIsZVtlLkYxNj03NF09IkYxNiIsZVtlLkYxNz03NV09IkYxNyIsZVtlLkYxOD03Nl09IkYxOCIsZVtlLkYxOT03N109IkYxOSIsZVtlLkYyMD03OF09IkYyMCIsZVtlLkYyMT03OV09IkYyMSIsZVtlLkYyMj04MF09IkYyMiIsZVtlLkYyMz04MV09IkYyMyIsZVtlLkYyND04Ml09IkYyNCIsZVtlLk51bUxvY2s9ODNdPSJOdW1Mb2NrIixlW2UuU2Nyb2xsTG9jaz04NF09IlNjcm9sbExvY2siLGVbZS5TZW1pY29sb249ODVdPSJTZW1pY29sb24iLGVbZS5FcXVhbD04Nl09IkVxdWFsIixlW2UuQ29tbWE9ODddPSJDb21tYSIsZVtlLk1pbnVzPTg4XT0iTWludXMiLGVbZS5QZXJpb2Q9ODldPSJQZXJpb2QiLGVbZS5TbGFzaD05MF09IlNsYXNoIixlW2UuQmFja3F1b3RlPTkxXT0iQmFja3F1b3RlIixlW2UuQnJhY2tldExlZnQ9OTJdPSJCcmFja2V0TGVmdCIsZVtlLkJhY2tzbGFzaD05M109IkJhY2tzbGFzaCIsZVtlLkJyYWNrZXRSaWdodD05NF09IkJyYWNrZXRSaWdodCIsZVtlLlF1b3RlPTk1XT0iUXVvdGUiLGVbZS5PRU1fOD05Nl09Ik9FTV84IixlW2UuSW50bEJhY2tzbGFzaD05N109IkludGxCYWNrc2xhc2giLGVbZS5OdW1wYWQwPTk4XT0iTnVtcGFkMCIsZVtlLk51bXBhZDE9OTldPSJOdW1wYWQxIixlW2UuTnVtcGFkMj0xMDBdPSJOdW1wYWQyIixlW2UuTnVtcGFkMz0xMDFdPSJOdW1wYWQzIixlW2UuTnVtcGFkND0xMDJdPSJOdW1wYWQ0IixlW2UuTnVtcGFkNT0xMDNdPSJOdW1wYWQ1IixlW2UuTnVtcGFkNj0xMDRdPSJOdW1wYWQ2IixlW2UuTnVtcGFkNz0xMDVdPSJOdW1wYWQ3IixlW2UuTnVtcGFkOD0xMDZdPSJOdW1wYWQ4IixlW2UuTnVtcGFkOT0xMDddPSJOdW1wYWQ5IixlW2UuTnVtcGFkTXVsdGlwbHk9MTA4XT0iTnVtcGFkTXVsdGlwbHkiLGVbZS5OdW1wYWRBZGQ9MTA5XT0iTnVtcGFkQWRkIixlW2UuTlVNUEFEX1NFUEFSQVRPUj0xMTBdPSJOVU1QQURfU0VQQVJBVE9SIixlW2UuTnVtcGFkU3VidHJhY3Q9MTExXT0iTnVtcGFkU3VidHJhY3QiLGVbZS5OdW1wYWREZWNpbWFsPTExMl09Ik51bXBhZERlY2ltYWwiLGVbZS5OdW1wYWREaXZpZGU9MTEzXT0iTnVtcGFkRGl2aWRlIixlW2UuS0VZX0lOX0NPTVBPU0lUSU9OPTExNF09IktFWV9JTl9DT01QT1NJVElPTiIsZVtlLkFCTlRfQzE9MTE1XT0iQUJOVF9DMSIsZVtlLkFCTlRfQzI9MTE2XT0iQUJOVF9DMiIsZVtlLkF1ZGlvVm9sdW1lTXV0ZT0xMTddPSJBdWRpb1ZvbHVtZU11dGUiLGVbZS5BdWRpb1ZvbHVtZVVwPTExOF09IkF1ZGlvVm9sdW1lVXAiLGVbZS5BdWRpb1ZvbHVtZURvd249MTE5XT0iQXVkaW9Wb2x1bWVEb3duIixlW2UuQnJvd3NlclNlYXJjaD0xMjBdPSJCcm93c2VyU2VhcmNoIixlW2UuQnJvd3NlckhvbWU9MTIxXT0iQnJvd3NlckhvbWUiLGVbZS5Ccm93c2VyQmFjaz0xMjJdPSJCcm93c2VyQmFjayIsZVtlLkJyb3dzZXJGb3J3YXJkPTEyM109IkJyb3dzZXJGb3J3YXJkIixlW2UuTWVkaWFUcmFja05leHQ9MTI0XT0iTWVkaWFUcmFja05leHQiLGVbZS5NZWRpYVRyYWNrUHJldmlvdXM9MTI1XT0iTWVkaWFUcmFja1ByZXZpb3VzIixlW2UuTWVkaWFTdG9wPTEyNl09Ik1lZGlhU3RvcCIsZVtlLk1lZGlhUGxheVBhdXNlPTEyN109Ik1lZGlhUGxheVBhdXNlIixlW2UuTGF1bmNoTWVkaWFQbGF5ZXI9MTI4XT0iTGF1bmNoTWVkaWFQbGF5ZXIiLGVbZS5MYXVuY2hNYWlsPTEyOV09IkxhdW5jaE1haWwiLGVbZS5MYXVuY2hBcHAyPTEzMF09IkxhdW5jaEFwcDIiLGVbZS5DbGVhcj0xMzFdPSJDbGVhciIsZVtlLk1BWF9WQUxVRT0xMzJdPSJNQVhfVkFMVUUifSkoJG58fCgkbj17fSkpO3ZhciBYbjsoZnVuY3Rpb24oZSl7ZVtlLkhpbnQ9MV09IkhpbnQiLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz00XT0iV2FybmluZyIsZVtlLkVycm9yPThdPSJFcnJvciJ9KShYbnx8KFhuPXt9KSk7dmFyIEpuOyhmdW5jdGlvbihlKXtlW2UuVW5uZWNlc3Nhcnk9MV09IlVubmVjZXNzYXJ5IixlW2UuRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCJ9KShKbnx8KEpuPXt9KSk7dmFyIEJyOyhmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KShCcnx8KEJyPXt9KSk7dmFyIHFyOyhmdW5jdGlvbihlKXtlW2UuTm9ybWFsPTFdPSJOb3JtYWwiLGVbZS5VbmRlcmxpbmVkPTJdPSJVbmRlcmxpbmVkIn0pKHFyfHwocXI9e30pKTt2YXIgT3I7KGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPSJVTktOT1dOIixlW2UuVEVYVEFSRUE9MV09IlRFWFRBUkVBIixlW2UuR1VUVEVSX0dMWVBIX01BUkdJTj0yXT0iR1VUVEVSX0dMWVBIX01BUkdJTiIsZVtlLkdVVFRFUl9MSU5FX05VTUJFUlM9M109IkdVVFRFUl9MSU5FX05VTUJFUlMiLGVbZS5HVVRURVJfTElORV9ERUNPUkFUSU9OUz00XT0iR1VUVEVSX0xJTkVfREVDT1JBVElPTlMiLGVbZS5HVVRURVJfVklFV19aT05FPTVdPSJHVVRURVJfVklFV19aT05FIixlW2UuQ09OVEVOVF9URVhUPTZdPSJDT05URU5UX1RFWFQiLGVbZS5DT05URU5UX0VNUFRZPTddPSJDT05URU5UX0VNUFRZIixlW2UuQ09OVEVOVF9WSUVXX1pPTkU9OF09IkNPTlRFTlRfVklFV19aT05FIixlW2UuQ09OVEVOVF9XSURHRVQ9OV09IkNPTlRFTlRfV0lER0VUIixlW2UuT1ZFUlZJRVdfUlVMRVI9MTBdPSJPVkVSVklFV19SVUxFUiIsZVtlLlNDUk9MTEJBUj0xMV09IlNDUk9MTEJBUiIsZVtlLk9WRVJMQVlfV0lER0VUPTEyXT0iT1ZFUkxBWV9XSURHRVQiLGVbZS5PVVRTSURFX0VESVRPUj0xM109Ik9VVFNJREVfRURJVE9SIn0pKE9yfHwoT3I9e30pKTt2YXIgVnI7KGZ1bmN0aW9uKGUpe2VbZS5BSUdlbmVyYXRlZD0xXT0iQUlHZW5lcmF0ZWQifSkoVnJ8fChWcj17fSkpO3ZhciBqcjsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoanJ8fChqcj17fSkpO3ZhciBHcjsoZnVuY3Rpb24oZSl7ZVtlLlRPUF9SSUdIVF9DT1JORVI9MF09IlRPUF9SSUdIVF9DT1JORVIiLGVbZS5CT1RUT01fUklHSFRfQ09STkVSPTFdPSJCT1RUT01fUklHSFRfQ09STkVSIixlW2UuVE9QX0NFTlRFUj0yXT0iVE9QX0NFTlRFUiJ9KShHcnx8KEdyPXt9KSk7dmFyICRyOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KSgkcnx8KCRyPXt9KSk7dmFyIFhyOyhmdW5jdGlvbihlKXtlW2UuV29yZD0wXT0iV29yZCIsZVtlLkxpbmU9MV09IkxpbmUiLGVbZS5TdWdnZXN0PTJdPSJTdWdnZXN0In0pKFhyfHwoWHI9e30pKTt2YXIgSnI7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTBdPSJMZWZ0IixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTm9uZT0yXT0iTm9uZSIsZVtlLkxlZnRPZkluamVjdGVkVGV4dD0zXT0iTGVmdE9mSW5qZWN0ZWRUZXh0IixlW2UuUmlnaHRPZkluamVjdGVkVGV4dD00XT0iUmlnaHRPZkluamVjdGVkVGV4dCJ9KShKcnx8KEpyPXt9KSk7dmFyIFlyOyhmdW5jdGlvbihlKXtlW2UuT2ZmPTBdPSJPZmYiLGVbZS5Pbj0xXT0iT24iLGVbZS5SZWxhdGl2ZT0yXT0iUmVsYXRpdmUiLGVbZS5JbnRlcnZhbD0zXT0iSW50ZXJ2YWwiLGVbZS5DdXN0b209NF09IkN1c3RvbSJ9KShZcnx8KFlyPXt9KSk7dmFyIFFyOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlRleHQ9MV09IlRleHQiLGVbZS5CbG9ja3M9Ml09IkJsb2NrcyJ9KShRcnx8KFFyPXt9KSk7dmFyIFpyOyhmdW5jdGlvbihlKXtlW2UuU21vb3RoPTBdPSJTbW9vdGgiLGVbZS5JbW1lZGlhdGU9MV09IkltbWVkaWF0ZSJ9KShacnx8KFpyPXt9KSk7dmFyIEtyOyhmdW5jdGlvbihlKXtlW2UuQXV0bz0xXT0iQXV0byIsZVtlLkhpZGRlbj0yXT0iSGlkZGVuIixlW2UuVmlzaWJsZT0zXT0iVmlzaWJsZSJ9KShLcnx8KEtyPXt9KSk7dmFyIFluOyhmdW5jdGlvbihlKXtlW2UuTFRSPTBdPSJMVFIiLGVbZS5SVEw9MV09IlJUTCJ9KShZbnx8KFluPXt9KSk7dmFyIGVzOyhmdW5jdGlvbihlKXtlLk9mZj0ib2ZmIixlLk9uQ29kZT0ib25Db2RlIixlLk9uPSJvbiJ9KShlc3x8KGVzPXt9KSk7dmFyIHRzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KSh0c3x8KHRzPXt9KSk7dmFyIG5zOyhmdW5jdGlvbihlKXtlW2UuRmlsZT0wXT0iRmlsZSIsZVtlLk1vZHVsZT0xXT0iTW9kdWxlIixlW2UuTmFtZXNwYWNlPTJdPSJOYW1lc3BhY2UiLGVbZS5QYWNrYWdlPTNdPSJQYWNrYWdlIixlW2UuQ2xhc3M9NF09IkNsYXNzIixlW2UuTWV0aG9kPTVdPSJNZXRob2QiLGVbZS5Qcm9wZXJ0eT02XT0iUHJvcGVydHkiLGVbZS5GaWVsZD03XT0iRmllbGQiLGVbZS5Db25zdHJ1Y3Rvcj04XT0iQ29uc3RydWN0b3IiLGVbZS5FbnVtPTldPSJFbnVtIixlW2UuSW50ZXJmYWNlPTEwXT0iSW50ZXJmYWNlIixlW2UuRnVuY3Rpb249MTFdPSJGdW5jdGlvbiIsZVtlLlZhcmlhYmxlPTEyXT0iVmFyaWFibGUiLGVbZS5Db25zdGFudD0xM109IkNvbnN0YW50IixlW2UuU3RyaW5nPTE0XT0iU3RyaW5nIixlW2UuTnVtYmVyPTE1XT0iTnVtYmVyIixlW2UuQm9vbGVhbj0xNl09IkJvb2xlYW4iLGVbZS5BcnJheT0xN109IkFycmF5IixlW2UuT2JqZWN0PTE4XT0iT2JqZWN0IixlW2UuS2V5PTE5XT0iS2V5IixlW2UuTnVsbD0yMF09Ik51bGwiLGVbZS5FbnVtTWVtYmVyPTIxXT0iRW51bU1lbWJlciIsZVtlLlN0cnVjdD0yMl09IlN0cnVjdCIsZVtlLkV2ZW50PTIzXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0yNF09Ik9wZXJhdG9yIixlW2UuVHlwZVBhcmFtZXRlcj0yNV09IlR5cGVQYXJhbWV0ZXIifSkobnN8fChucz17fSkpO3ZhciBpczsoZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifSkoaXN8fChpcz17fSkpO3ZhciByczsoZnVuY3Rpb24oZSl7ZVtlLkhpZGRlbj0wXT0iSGlkZGVuIixlW2UuQmxpbms9MV09IkJsaW5rIixlW2UuU21vb3RoPTJdPSJTbW9vdGgiLGVbZS5QaGFzZT0zXT0iUGhhc2UiLGVbZS5FeHBhbmQ9NF09IkV4cGFuZCIsZVtlLlNvbGlkPTVdPSJTb2xpZCJ9KShyc3x8KHJzPXt9KSk7dmFyIHNzOyhmdW5jdGlvbihlKXtlW2UuTGluZT0xXT0iTGluZSIsZVtlLkJsb2NrPTJdPSJCbG9jayIsZVtlLlVuZGVybGluZT0zXT0iVW5kZXJsaW5lIixlW2UuTGluZVRoaW49NF09IkxpbmVUaGluIixlW2UuQmxvY2tPdXRsaW5lPTVdPSJCbG9ja091dGxpbmUiLGVbZS5VbmRlcmxpbmVUaGluPTZdPSJVbmRlcmxpbmVUaGluIn0pKHNzfHwoc3M9e30pKTt2YXIgYXM7KGZ1bmN0aW9uKGUpe2VbZS5BbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTBdPSJBbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTFdPSJOZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlPTJdPSJHcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyPTNdPSJHcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXIifSkoYXN8fChhcz17fSkpO3ZhciBvczsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5TYW1lPTFdPSJTYW1lIixlW2UuSW5kZW50PTJdPSJJbmRlbnQiLGVbZS5EZWVwSW5kZW50PTNdPSJEZWVwSW5kZW50In0pKG9zfHwob3M9e30pKTtjb25zdCBfdD1jbGFzcyBfdHtzdGF0aWMgY2hvcmQodCxuKXtyZXR1cm4gU2wodCxuKX19O190LkN0cmxDbWQ9MjA0OCxfdC5TaGlmdD0xMDI0LF90LkFsdD01MTIsX3QuV2luQ3RybD0yNTY7bGV0IFFuPV90O2Z1bmN0aW9uIE5sKCl7cmV0dXJue2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTp4bCxFbWl0dGVyOnZlLEtleUNvZGU6JG4sS2V5TW9kOlFuLFBvc2l0aW9uOnRlLFJhbmdlOiQsU2VsZWN0aW9uOnBlLFNlbGVjdGlvbkRpcmVjdGlvbjpZbixNYXJrZXJTZXZlcml0eTpYbixNYXJrZXJUYWc6Sm4sVXJpOkhuLFRva2VuOk1sfX12YXIgbHM7Y2xhc3MgRGx7Y29uc3RydWN0b3IoKXt0aGlzW2xzXT0iTGlua2VkTWFwIix0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGU9MH1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZSsrfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5faGVhZCYmIXRoaXMuX3RhaWx9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1nZXQgZmlyc3QoKXtyZXR1cm4gdGhpcy5faGVhZD8udmFsdWV9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5fdGFpbD8udmFsdWV9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfWdldCh0LG49MCl7Y29uc3QgaT10aGlzLl9tYXAuZ2V0KHQpO2lmKGkpcmV0dXJuIG4hPT0wJiZ0aGlzLnRvdWNoKGksbiksaS52YWx1ZX1zZXQodCxuLGk9MCl7bGV0IHI9dGhpcy5fbWFwLmdldCh0KTtpZihyKXIudmFsdWU9bixpIT09MCYmdGhpcy50b3VjaChyLGkpO2Vsc2V7c3dpdGNoKHI9e2tleTp0LHZhbHVlOm4sbmV4dDp2b2lkIDAscHJldmlvdXM6dm9pZCAwfSxpKXtjYXNlIDA6dGhpcy5hZGRJdGVtTGFzdChyKTticmVhaztjYXNlIDE6dGhpcy5hZGRJdGVtRmlyc3Qocik7YnJlYWs7Y2FzZSAyOnRoaXMuYWRkSXRlbUxhc3Qocik7YnJlYWs7ZGVmYXVsdDp0aGlzLmFkZEl0ZW1MYXN0KHIpO2JyZWFrfXRoaXMuX21hcC5zZXQodCxyKSx0aGlzLl9zaXplKyt9cmV0dXJuIHRoaXN9ZGVsZXRlKHQpe3JldHVybiEhdGhpcy5yZW1vdmUodCl9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtpZihuKXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXMucmVtb3ZlSXRlbShuKSx0aGlzLl9zaXplLS0sbi52YWx1ZX1zaGlmdCgpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbClyZXR1cm47aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7Y29uc3QgdD10aGlzLl9oZWFkO3JldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQua2V5KSx0aGlzLnJlbW92ZUl0ZW0odCksdGhpcy5fc2l6ZS0tLHQudmFsdWV9Zm9yRWFjaCh0LG4pe2NvbnN0IGk9dGhpcy5fc3RhdGU7bGV0IHI9dGhpcy5faGVhZDtmb3IoO3I7KXtpZihuP3QuYmluZChuKShyLnZhbHVlLHIua2V5LHRoaXMpOnQoci52YWx1ZSxyLmtleSx0aGlzKSx0aGlzLl9zdGF0ZSE9PWkpdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7cj1yLm5leHR9fWtleXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgaT10aGlzLl9oZWFkO2NvbnN0IHI9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHJ9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYoaSl7Y29uc3Qgcz17dmFsdWU6aS5rZXksZG9uZTohMX07cmV0dXJuIGk9aS5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIHJ9dmFsdWVzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IGk9dGhpcy5faGVhZDtjb25zdCByPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiByfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKGkpe2NvbnN0IHM9e3ZhbHVlOmkudmFsdWUsZG9uZTohMX07cmV0dXJuIGk9aS5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIHJ9ZW50cmllcygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCBpPXRoaXMuX2hlYWQ7Y29uc3Qgcj17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gcn0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihpKXtjb25zdCBzPXt2YWx1ZTpbaS5rZXksaS52YWx1ZV0sZG9uZTohMX07cmV0dXJuIGk9aS5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIHJ9Wyhscz1TeW1ib2wudG9TdHJpbmdUYWcsU3ltYm9sLml0ZXJhdG9yKV0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9dHJpbU9sZCh0KXtpZih0Pj10aGlzLnNpemUpcmV0dXJuO2lmKHQ9PT0wKXt0aGlzLmNsZWFyKCk7cmV0dXJufWxldCBuPXRoaXMuX2hlYWQsaT10aGlzLnNpemU7Zm9yKDtuJiZpPnQ7KXRoaXMuX21hcC5kZWxldGUobi5rZXkpLG49bi5uZXh0LGktLTt0aGlzLl9oZWFkPW4sdGhpcy5fc2l6ZT1pLG4mJihuLnByZXZpb3VzPXZvaWQgMCksdGhpcy5fc3RhdGUrK310cmltTmV3KHQpe2lmKHQ+PXRoaXMuc2l6ZSlyZXR1cm47aWYodD09PTApe3RoaXMuY2xlYXIoKTtyZXR1cm59bGV0IG49dGhpcy5fdGFpbCxpPXRoaXMuc2l6ZTtmb3IoO24mJmk+dDspdGhpcy5fbWFwLmRlbGV0ZShuLmtleSksbj1uLnByZXZpb3VzLGktLTt0aGlzLl90YWlsPW4sdGhpcy5fc2l6ZT1pLG4mJihuLm5leHQ9dm9pZCAwKSx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1GaXJzdCh0KXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpdGhpcy5fdGFpbD10O2Vsc2UgaWYodGhpcy5faGVhZCl0Lm5leHQ9dGhpcy5faGVhZCx0aGlzLl9oZWFkLnByZXZpb3VzPXQ7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3RoaXMuX2hlYWQ9dCx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1MYXN0KHQpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbCl0aGlzLl9oZWFkPXQ7ZWxzZSBpZih0aGlzLl90YWlsKXQucHJldmlvdXM9dGhpcy5fdGFpbCx0aGlzLl90YWlsLm5leHQ9dDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dGhpcy5fdGFpbD10LHRoaXMuX3N0YXRlKyt9cmVtb3ZlSXRlbSh0KXtpZih0PT09dGhpcy5faGVhZCYmdD09PXRoaXMuX3RhaWwpdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDA7ZWxzZSBpZih0PT09dGhpcy5faGVhZCl7aWYoIXQubmV4dCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3QubmV4dC5wcmV2aW91cz12b2lkIDAsdGhpcy5faGVhZD10Lm5leHR9ZWxzZSBpZih0PT09dGhpcy5fdGFpbCl7aWYoIXQucHJldmlvdXMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0LnByZXZpb3VzLm5leHQ9dm9pZCAwLHRoaXMuX3RhaWw9dC5wcmV2aW91c31lbHNle2NvbnN0IG49dC5uZXh0LGk9dC5wcmV2aW91cztpZighbnx8IWkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtuLnByZXZpb3VzPWksaS5uZXh0PW59dC5uZXh0PXZvaWQgMCx0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9zdGF0ZSsrfXRvdWNoKHQsbil7aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7aWYoIShuIT09MSYmbiE9PTIpKXtpZihuPT09MSl7aWYodD09PXRoaXMuX2hlYWQpcmV0dXJuO2NvbnN0IGk9dC5uZXh0LHI9dC5wcmV2aW91czt0PT09dGhpcy5fdGFpbD8oci5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPXIpOihpLnByZXZpb3VzPXIsci5uZXh0PWkpLHQucHJldmlvdXM9dm9pZCAwLHQubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9dCx0aGlzLl9oZWFkPXQsdGhpcy5fc3RhdGUrK31lbHNlIGlmKG49PT0yKXtpZih0PT09dGhpcy5fdGFpbClyZXR1cm47Y29uc3QgaT10Lm5leHQscj10LnByZXZpb3VzO3Q9PT10aGlzLl9oZWFkPyhpLnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPWkpOihpLnByZXZpb3VzPXIsci5uZXh0PWkpLHQubmV4dD12b2lkIDAsdC5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD10LHRoaXMuX3RhaWw9dCx0aGlzLl9zdGF0ZSsrfX19dG9KU09OKCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChuLGkpPT57dC5wdXNoKFtpLG5dKX0pLHR9ZnJvbUpTT04odCl7dGhpcy5jbGVhcigpO2Zvcihjb25zdFtuLGldb2YgdCl0aGlzLnNldChuLGkpfX1jbGFzcyBJbCBleHRlbmRzIERse2NvbnN0cnVjdG9yKHQsbj0xKXtzdXBlcigpLHRoaXMuX2xpbWl0PXQsdGhpcy5fcmF0aW89TWF0aC5taW4oTWF0aC5tYXgoMCxuKSwxKX1nZXQgbGltaXQoKXtyZXR1cm4gdGhpcy5fbGltaXR9c2V0IGxpbWl0KHQpe3RoaXMuX2xpbWl0PXQsdGhpcy5jaGVja1RyaW0oKX1nZXQodCxuPTIpe3JldHVybiBzdXBlci5nZXQodCxuKX1wZWVrKHQpe3JldHVybiBzdXBlci5nZXQodCwwKX1zZXQodCxuKXtyZXR1cm4gc3VwZXIuc2V0KHQsbiwyKSx0aGlzfWNoZWNrVHJpbSgpe3RoaXMuc2l6ZT50aGlzLl9saW1pdCYmdGhpcy50cmltKE1hdGgucm91bmQodGhpcy5fbGltaXQqdGhpcy5fcmF0aW8pKX19Y2xhc3MgemwgZXh0ZW5kcyBJbHtjb25zdHJ1Y3Rvcih0LG49MSl7c3VwZXIodCxuKX10cmltKHQpe3RoaXMudHJpbU9sZCh0KX1zZXQodCxuKXtyZXR1cm4gc3VwZXIuc2V0KHQsbiksdGhpcy5jaGVja1RyaW0oKSx0aGlzfX1jbGFzcyBIbHtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9YWRkKHQsbil7bGV0IGk9dGhpcy5tYXAuZ2V0KHQpO2l8fChpPW5ldyBTZXQsdGhpcy5tYXAuc2V0KHQsaSkpLGkuYWRkKG4pfWRlbGV0ZSh0LG4pe2NvbnN0IGk9dGhpcy5tYXAuZ2V0KHQpO2kmJihpLmRlbGV0ZShuKSxpLnNpemU9PT0wJiZ0aGlzLm1hcC5kZWxldGUodCkpfWZvckVhY2godCxuKXtjb25zdCBpPXRoaXMubWFwLmdldCh0KTtpJiZpLmZvckVhY2gobil9Z2V0KHQpe2NvbnN0IG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBufHxuZXcgU2V0fX1uZXcgemwoMTApO3ZhciB1czsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSkodXN8fCh1cz17fSkpO3ZhciBjczsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTNdPSJSaWdodCJ9KShjc3x8KGNzPXt9KSk7dmFyIGhzOyhmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0pKGhzfHwoaHM9e30pKTtmdW5jdGlvbiBVbChlLHQsbixpLHIpe2lmKGk9PT0wKXJldHVybiEwO2NvbnN0IHM9dC5jaGFyQ29kZUF0KGktMSk7aWYoZS5nZXQocykhPT0wfHxzPT09MTN8fHM9PT0xMClyZXR1cm4hMDtpZihyPjApe2NvbnN0IG89dC5jaGFyQ29kZUF0KGkpO2lmKGUuZ2V0KG8pIT09MClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBXbChlLHQsbixpLHIpe2lmKGkrcj09PW4pcmV0dXJuITA7Y29uc3Qgcz10LmNoYXJDb2RlQXQoaStyKTtpZihlLmdldChzKSE9PTB8fHM9PT0xM3x8cz09PTEwKXJldHVybiEwO2lmKHI+MCl7Y29uc3Qgbz10LmNoYXJDb2RlQXQoaStyLTEpO2lmKGUuZ2V0KG8pIT09MClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBGbChlLHQsbixpLHIpe3JldHVybiBVbChlLHQsbixpLHIpJiZXbChlLHQsbixpLHIpfWNsYXNzIFBse2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fd29yZFNlcGFyYXRvcnM9dCx0aGlzLl9zZWFyY2hSZWdleD1uLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQodCl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PXQsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KHQpe2NvbnN0IG49dC5sZW5ndGg7bGV0IGk7ZG97aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCt0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9PT1ufHwoaT10aGlzLl9zZWFyY2hSZWdleC5leGVjKHQpLCFpKSlyZXR1cm4gbnVsbDtjb25zdCByPWkuaW5kZXgscz1pWzBdLmxlbmd0aDtpZihyPT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCYmcz09PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYocz09PTApe0xvKHQsbix0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpPjY1NTM1P3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTE7Y29udGludWV9cmV0dXJuIG51bGx9aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1yLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1zLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8RmwodGhpcy5fd29yZFNlcGFyYXRvcnMsdCxuLHIscykpcmV0dXJuIGl9d2hpbGUoaSk7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEJsKGUsdD0iVW5yZWFjaGFibGUiKXt0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gWXQoZSl7aWYoIWUoKSl7ZGVidWdnZXI7ZSgpLFJlKG5ldyBtZSgiQXNzZXJ0aW9uIEZhaWxlZCIpKX19ZnVuY3Rpb24gZHMoZSx0KXtsZXQgbj0wO2Zvcig7bjxlLmxlbmd0aC0xOyl7Y29uc3QgaT1lW25dLHI9ZVtuKzFdO2lmKCF0KGkscikpcmV0dXJuITE7bisrfXJldHVybiEwfWNsYXNzIHFse3N0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCxuLGkpe2NvbnN0IHI9aT9pLnN0YXJ0TGluZU51bWJlcjoxLHM9aT9pLmVuZExpbmVOdW1iZXI6dC5nZXRMaW5lQ291bnQoKSxvPW5ldyBtcyhuKSxsPW8uZ2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpO2xldCBhO2w9PT0iYWxsTm9uQmFzaWNBc2NpaSI/YT1uZXcgUmVnRXhwKCJbXlxcdFxcblxcclxceDIwLVxceDdFXSIsImciKTphPW5ldyBSZWdFeHAoYCR7T2woQXJyYXkuZnJvbShsKSl9YCwiZyIpO2NvbnN0IHU9bmV3IFBsKG51bGwsYSksYz1bXTtsZXQgZD0hMSxtLGY9MCxfPTAsZz0wO2U6Zm9yKGxldCBBPXIsdj1zO0E8PXY7QSsrKXtjb25zdCB5PXQuZ2V0TGluZUNvbnRlbnQoQSksRT15Lmxlbmd0aDt1LnJlc2V0KDApO2RvIGlmKG09dS5uZXh0KHkpLG0pe2xldCBSPW0uaW5kZXgsTj1tLmluZGV4K21bMF0ubGVuZ3RoO2lmKFI+MCl7Y29uc3QgVD15LmNoYXJDb2RlQXQoUi0xKTtQdChUKSYmUi0tfWlmKE4rMTxFKXtjb25zdCBUPXkuY2hhckNvZGVBdChOLTEpO1B0KFQpJiZOKyt9Y29uc3QgTT15LnN1YnN0cmluZyhSLE4pO2xldCBiPVBuKFIrMSxucix5LDApO2ImJmIuZW5kQ29sdW1uPD1SKzEmJihiPW51bGwpO2NvbnN0IHA9by5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKE0sYj9iLndvcmQ6bnVsbCk7aWYocCE9PTApe2lmKHA9PT0zP2YrKzpwPT09Mj9fKys6cD09PTE/ZysrOkJsKCksYy5sZW5ndGg+PTFlMyl7ZD0hMDticmVhayBlfWMucHVzaChuZXcgJChBLFIrMSxBLE4rMSkpfX13aGlsZShtKX1yZXR1cm57cmFuZ2VzOmMsaGFzTW9yZTpkLGFtYmlndW91c0NoYXJhY3RlckNvdW50OmYsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6Xyxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6Z319c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKHQsbil7Y29uc3QgaT1uZXcgbXMobik7c3dpdGNoKGkuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3Qgcz10LmNvZGVQb2ludEF0KDApLG89aS5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKHMpLGw9eHQuZ2V0TG9jYWxlcygpLmZpbHRlcihhPT4heHQuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4ubi5hbGxvd2VkTG9jYWxlcyxhXSkpLmlzQW1iaWd1b3VzKHMpKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KG8pLG5vdEFtYmlndW91c0luTG9jYWxlczpsfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX1mdW5jdGlvbiBPbChlLHQpe3JldHVybmBbJHtUbyhlLm1hcChpPT5TdHJpbmcuZnJvbUNvZGVQb2ludChpKSkuam9pbigiIikpfV1gfWNsYXNzIG1ze2NvbnN0cnVjdG9yKHQpe3RoaXMub3B0aW9ucz10LHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldCh0LmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9eHQuZ2V0SW5zdGFuY2UobmV3IFNldCh0LmFsbG93ZWRMb2NhbGVzKSl9Z2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpe2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiJhbGxOb25CYXNpY0FzY2lpIjtjb25zdCB0PW5ldyBTZXQ7aWYodGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMpZm9yKGNvbnN0IG4gb2YgVHQuY29kZVBvaW50cylmcyhTdHJpbmcuZnJvbUNvZGVQb2ludChuKSl8fHQuYWRkKG4pO2lmKHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzKWZvcihjb25zdCBuIG9mIHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpKXQuYWRkKG4pO2Zvcihjb25zdCBuIG9mIHRoaXMuYWxsb3dlZENvZGVQb2ludHMpdC5kZWxldGUobik7cmV0dXJuIHR9c2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG4pe2NvbnN0IGk9dC5jb2RlUG9pbnRBdCgwKTtpZih0aGlzLmFsbG93ZWRDb2RlUG9pbnRzLmhhcyhpKSlyZXR1cm4gMDtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4gMTtsZXQgcj0hMSxzPSExO2lmKG4pZm9yKGNvbnN0IG8gb2Ygbil7Y29uc3QgbD1vLmNvZGVQb2ludEF0KDApLGE9RW8obyk7cj1yfHxhLCFhJiYhdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKGwpJiYhVHQuaXNJbnZpc2libGVDaGFyYWN0ZXIobCkmJihzPSEwKX1yZXR1cm4hciYmcz8wOnRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzJiYhZnModCkmJlR0LmlzSW52aXNpYmxlQ2hhcmFjdGVyKGkpPzI6dGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMmJnRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhpKT8zOjB9fWZ1bmN0aW9uIGZzKGUpe3JldHVybiBlPT09IiAifHxlPT09YApgfHxlPT09IgkifWNsYXNzIFF0e2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLmNoYW5nZXM9dCx0aGlzLm1vdmVzPW4sdGhpcy5oaXRUaW1lb3V0PWl9fWNsYXNzIFZse2NvbnN0cnVjdG9yKHQsbil7dGhpcy5saW5lUmFuZ2VNYXBwaW5nPXQsdGhpcy5jaGFuZ2VzPW59fWNsYXNzIGp7c3RhdGljIGFkZFJhbmdlKHQsbil7bGV0IGk9MDtmb3IoO2k8bi5sZW5ndGgmJm5baV0uZW5kRXhjbHVzaXZlPHQuc3RhcnQ7KWkrKztsZXQgcj1pO2Zvcig7cjxuLmxlbmd0aCYmbltyXS5zdGFydDw9dC5lbmRFeGNsdXNpdmU7KXIrKztpZihpPT09ciluLnNwbGljZShpLDAsdCk7ZWxzZXtjb25zdCBzPU1hdGgubWluKHQuc3RhcnQsbltpXS5zdGFydCksbz1NYXRoLm1heCh0LmVuZEV4Y2x1c2l2ZSxuW3ItMV0uZW5kRXhjbHVzaXZlKTtuLnNwbGljZShpLHItaSxuZXcgaihzLG8pKX19c3RhdGljIHRyeUNyZWF0ZSh0LG4pe2lmKCEodD5uKSlyZXR1cm4gbmV3IGoodCxuKX1zdGF0aWMgb2ZMZW5ndGgodCl7cmV0dXJuIG5ldyBqKDAsdCl9c3RhdGljIG9mU3RhcnRBbmRMZW5ndGgodCxuKXtyZXR1cm4gbmV3IGoodCx0K24pfWNvbnN0cnVjdG9yKHQsbil7aWYodGhpcy5zdGFydD10LHRoaXMuZW5kRXhjbHVzaXZlPW4sdD5uKXRocm93IG5ldyBtZShgSW52YWxpZCByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCl9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydD09PXRoaXMuZW5kRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgaih0aGlzLnN0YXJ0K3QsdGhpcy5lbmRFeGNsdXNpdmUrdCl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gbmV3IGoodGhpcy5zdGFydCt0LHRoaXMuZW5kRXhjbHVzaXZlKX1kZWx0YUVuZCh0KXtyZXR1cm4gbmV3IGoodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSt0KX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kRXhjbHVzaXZlLXRoaXMuc3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydH0sICR7dGhpcy5lbmRFeGNsdXNpdmV9KWB9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuc3RhcnQ8PXQmJnQ8dGhpcy5lbmRFeGNsdXNpdmV9am9pbih0KXtyZXR1cm4gbmV3IGooTWF0aC5taW4odGhpcy5zdGFydCx0LnN0YXJ0KSxNYXRoLm1heCh0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSkpfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnQsdC5zdGFydCksaT1NYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSk7aWYobjw9aSlyZXR1cm4gbmV3IGoobixpKX1pbnRlcnNlY3RzKHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydCx0LnN0YXJ0KSxpPU1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLHQuZW5kRXhjbHVzaXZlKTtyZXR1cm4gbjxpfWlzQmVmb3JlKHQpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZTw9dC5zdGFydH1pc0FmdGVyKHQpe3JldHVybiB0aGlzLnN0YXJ0Pj10LmVuZEV4Y2x1c2l2ZX1zbGljZSh0KXtyZXR1cm4gdC5zbGljZSh0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlKX1zdWJzdHJpbmcodCl7cmV0dXJuIHQuc3Vic3RyaW5nKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUpfWNsaXAodCl7aWYodGhpcy5pc0VtcHR5KXRocm93IG5ldyBtZShgSW52YWxpZCBjbGlwcGluZyByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCk7cmV0dXJuIE1hdGgubWF4KHRoaXMuc3RhcnQsTWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUtMSx0KSl9Y2xpcEN5Y2xpYyh0KXtpZih0aGlzLmlzRW1wdHkpdGhyb3cgbmV3IG1lKGBJbnZhbGlkIGNsaXBwaW5nIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKTtyZXR1cm4gdDx0aGlzLnN0YXJ0P3RoaXMuZW5kRXhjbHVzaXZlLSh0aGlzLnN0YXJ0LXQpJXRoaXMubGVuZ3RoOnQ+PXRoaXMuZW5kRXhjbHVzaXZlP3RoaXMuc3RhcnQrKHQtdGhpcy5zdGFydCkldGhpcy5sZW5ndGg6dH1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0O248dGhpcy5lbmRFeGNsdXNpdmU7bisrKXQobil9fWZ1bmN0aW9uIGx0KGUsdCl7Y29uc3Qgbj1TdChlLHQpO3JldHVybiBuPT09LTE/dm9pZCAwOmVbbl19ZnVuY3Rpb24gU3QoZSx0LG49MCxpPWUubGVuZ3RoKXtsZXQgcj1uLHM9aTtmb3IoO3I8czspe2NvbnN0IG89TWF0aC5mbG9vcigocitzKS8yKTt0KGVbb10pP3I9bysxOnM9b31yZXR1cm4gci0xfWZ1bmN0aW9uIGpsKGUsdCl7Y29uc3Qgbj1abihlLHQpO3JldHVybiBuPT09ZS5sZW5ndGg/dm9pZCAwOmVbbl19ZnVuY3Rpb24gWm4oZSx0LG49MCxpPWUubGVuZ3RoKXtsZXQgcj1uLHM9aTtmb3IoO3I8czspe2NvbnN0IG89TWF0aC5mbG9vcigocitzKS8yKTt0KGVbb10pP3M9bzpyPW8rMX1yZXR1cm4gcn1jb25zdCBfbj1jbGFzcyBfbntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9hcnJheT10LHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9MH1maW5kTGFzdE1vbm90b25vdXModCl7aWYoX24uYXNzZXJ0SW52YXJpYW50cyl7aWYodGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlKXtmb3IoY29uc3QgaSBvZiB0aGlzLl9hcnJheSlpZih0aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGUoaSkmJiF0KGkpKXRocm93IG5ldyBFcnJvcigiTW9ub3Rvbm91c0FycmF5OiBjdXJyZW50IHByZWRpY2F0ZSBtdXN0IGJlIHdlYWtlciB0aGFuIChvciBlcXVhbCB0bykgdGhlIHByZXZpb3VzIHByZWRpY2F0ZS4iKX10aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGU9dH1jb25zdCBuPVN0KHRoaXMuX2FycmF5LHQsdGhpcy5fZmluZExhc3RNb25vdG9ub3VzTGFzdElkeCk7cmV0dXJuIHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9bisxLG49PT0tMT92b2lkIDA6dGhpcy5fYXJyYXlbbl19fTtfbi5hc3NlcnRJbnZhcmlhbnRzPSExO2xldCBadD1fbjtjbGFzcyBxe3N0YXRpYyBmcm9tUmFuZ2VJbmNsdXNpdmUodCl7cmV0dXJuIG5ldyBxKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlcisxKX1zdGF0aWMgam9pbk1hbnkodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybltdO2xldCBuPW5ldyBTZSh0WzBdLnNsaWNlKCkpO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGg7aSsrKW49bi5nZXRVbmlvbihuZXcgU2UodFtpXS5zbGljZSgpKSk7cmV0dXJuIG4ucmFuZ2VzfXN0YXRpYyBqb2luKHQpe2lmKHQubGVuZ3RoPT09MCl0aHJvdyBuZXcgbWUoImxpbmVSYW5nZXMgY2Fubm90IGJlIGVtcHR5Iik7bGV0IG49dFswXS5zdGFydExpbmVOdW1iZXIsaT10WzBdLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7Zm9yKGxldCByPTE7cjx0Lmxlbmd0aDtyKyspbj1NYXRoLm1pbihuLHRbcl0uc3RhcnRMaW5lTnVtYmVyKSxpPU1hdGgubWF4KGksdFtyXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gbmV3IHEobixpKX1zdGF0aWMgb2ZMZW5ndGgodCxuKXtyZXR1cm4gbmV3IHEodCx0K24pfXN0YXRpYyBkZXNlcmlhbGl6ZSh0KXtyZXR1cm4gbmV3IHEodFswXSx0WzFdKX1jb25zdHJ1Y3Rvcih0LG4pe2lmKHQ+bil0aHJvdyBuZXcgbWUoYHN0YXJ0TGluZU51bWJlciAke3R9IGNhbm5vdCBiZSBhZnRlciBlbmRMaW5lTnVtYmVyRXhjbHVzaXZlICR7bn1gKTt0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT1ufWNvbnRhaW5zKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjw9dCYmdDx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI9PT10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZGVsdGEodCl7cmV0dXJuIG5ldyBxKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWRlbHRhTGVuZ3RoKHQpe3JldHVybiBuZXcgcSh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrdCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtdGhpcy5zdGFydExpbmVOdW1iZXJ9am9pbih0KXtyZXR1cm4gbmV3IHEoTWF0aC5taW4odGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLE1hdGgubWF4KHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKX10b1N0cmluZygpe3JldHVybmBbJHt0aGlzLnN0YXJ0TGluZU51bWJlcn0sJHt0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9KWB9aW50ZXJzZWN0KHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLGk9TWF0aC5taW4odGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7aWYobjw9aSlyZXR1cm4gbmV3IHEobixpKX1pbnRlcnNlY3RzU3RyaWN0KHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1vdmVybGFwT3JUb3VjaCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmdC5zdGFydExpbmVOdW1iZXI8PXRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1lcXVhbHModCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJnRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX10b0luY2x1c2l2ZVJhbmdlKCl7cmV0dXJuIHRoaXMuaXNFbXB0eT9udWxsOm5ldyAkKHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpfXRvRXhjbHVzaXZlUmFuZ2UoKXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydExpbmVOdW1iZXIsMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSl9bWFwVG9MaW5lQXJyYXkodCl7Y29uc3Qgbj1bXTtmb3IobGV0IGk9dGhpcy5zdGFydExpbmVOdW1iZXI7aTx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aSsrKW4ucHVzaCh0KGkpKTtyZXR1cm4gbn1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0TGluZU51bWJlcjtuPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTtuKyspdChuKX1zZXJpYWxpemUoKXtyZXR1cm5bdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlXX1pbmNsdWRlcyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfXRvT2Zmc2V0UmFuZ2UoKXtyZXR1cm4gbmV3IGoodGhpcy5zdGFydExpbmVOdW1iZXItMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSl9fWNsYXNzIFNle2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMuX25vcm1hbGl6ZWRSYW5nZXM9dH1nZXQgcmFuZ2VzKCl7cmV0dXJuIHRoaXMuX25vcm1hbGl6ZWRSYW5nZXN9YWRkUmFuZ2UodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBuPVpuKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscj0+ci5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj10LnN0YXJ0TGluZU51bWJlciksaT1TdCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHI9PnIuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKzE7aWYobj09PWkpdGhpcy5fbm9ybWFsaXplZFJhbmdlcy5zcGxpY2UobiwwLHQpO2Vsc2UgaWYobj09PWktMSl7Y29uc3Qgcj10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXNbbl09ci5qb2luKHQpfWVsc2V7Y29uc3Qgcj10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dLmpvaW4odGhpcy5fbm9ybWFsaXplZFJhbmdlc1tpLTFdKS5qb2luKHQpO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXMuc3BsaWNlKG4saS1uLHIpfX1jb250YWlucyh0KXtjb25zdCBuPWx0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsaT0+aS5zdGFydExpbmVOdW1iZXI8PXQpO3JldHVybiEhbiYmbi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnR9aW50ZXJzZWN0cyh0KXtjb25zdCBuPWx0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsaT0+aS5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4hIW4mJm4uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT50LnN0YXJ0TGluZU51bWJlcn1nZXRVbmlvbih0KXtpZih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD09PTApcmV0dXJuIHQ7aWYodC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg9PT0wKXJldHVybiB0aGlzO2NvbnN0IG49W107bGV0IGk9MCxyPTAscz1udWxsO2Zvcig7aTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aHx8cjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aDspe2xldCBvPW51bGw7aWYoaTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCYmcjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCl7Y29uc3QgbD10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2ldLGE9dC5fbm9ybWFsaXplZFJhbmdlc1tyXTtsLnN0YXJ0TGluZU51bWJlcjxhLnN0YXJ0TGluZU51bWJlcj8obz1sLGkrKyk6KG89YSxyKyspfWVsc2UgaTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD8obz10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2ldLGkrKyk6KG89dC5fbm9ybWFsaXplZFJhbmdlc1tyXSxyKyspO3M9PT1udWxsP3M9bzpzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PW8uc3RhcnRMaW5lTnVtYmVyP3M9bmV3IHEocy5zdGFydExpbmVOdW1iZXIsTWF0aC5tYXgocy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLG8uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpOihuLnB1c2gocykscz1vKX1yZXR1cm4gcyE9PW51bGwmJm4ucHVzaChzKSxuZXcgU2Uobil9c3VidHJhY3RGcm9tKHQpe2NvbnN0IG49Wm4odGhpcy5fbm9ybWFsaXplZFJhbmdlcyxvPT5vLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PXQuc3RhcnRMaW5lTnVtYmVyKSxpPVN0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsbz0+by5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkrMTtpZihuPT09aSlyZXR1cm4gbmV3IFNlKFt0XSk7Y29uc3Qgcj1bXTtsZXQgcz10LnN0YXJ0TGluZU51bWJlcjtmb3IobGV0IG89bjtvPGk7bysrKXtjb25zdCBsPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbb107bC5zdGFydExpbmVOdW1iZXI+cyYmci5wdXNoKG5ldyBxKHMsbC5zdGFydExpbmVOdW1iZXIpKSxzPWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1yZXR1cm4gczx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnIucHVzaChuZXcgcShzLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpLG5ldyBTZShyKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcCh0PT50LnRvU3RyaW5nKCkpLmpvaW4oIiwgIil9Z2V0SW50ZXJzZWN0aW9uKHQpe2NvbnN0IG49W107bGV0IGk9MCxyPTA7Zm9yKDtpPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoJiZyPHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoOyl7Y29uc3Qgcz10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2ldLG89dC5fbm9ybWFsaXplZFJhbmdlc1tyXSxsPXMuaW50ZXJzZWN0KG8pO2wmJiFsLmlzRW1wdHkmJm4ucHVzaChsKSxzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8by5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlP2krKzpyKyt9cmV0dXJuIG5ldyBTZShuKX1nZXRXaXRoRGVsdGEodCl7cmV0dXJuIG5ldyBTZSh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcChuPT5uLmRlbHRhKHQpKSl9fWNvbnN0IGplPWNsYXNzIGple3N0YXRpYyBiZXR3ZWVuUG9zaXRpb25zKHQsbil7cmV0dXJuIHQubGluZU51bWJlcj09PW4ubGluZU51bWJlcj9uZXcgamUoMCxuLmNvbHVtbi10LmNvbHVtbik6bmV3IGplKG4ubGluZU51bWJlci10LmxpbmVOdW1iZXIsbi5jb2x1bW4tMSl9c3RhdGljIG9mUmFuZ2UodCl7cmV0dXJuIGplLmJldHdlZW5Qb3NpdGlvbnModC5nZXRTdGFydFBvc2l0aW9uKCksdC5nZXRFbmRQb3NpdGlvbigpKX1zdGF0aWMgb2ZUZXh0KHQpe2xldCBuPTAsaT0wO2Zvcihjb25zdCByIG9mIHQpcj09PWAKYD8obisrLGk9MCk6aSsrO3JldHVybiBuZXcgamUobixpKX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZUNvdW50PXQsdGhpcy5jb2x1bW5Db3VudD1ufWlzR3JlYXRlclRoYW5PckVxdWFsVG8odCl7cmV0dXJuIHRoaXMubGluZUNvdW50IT09dC5saW5lQ291bnQ/dGhpcy5saW5lQ291bnQ+dC5saW5lQ291bnQ6dGhpcy5jb2x1bW5Db3VudD49dC5jb2x1bW5Db3VudH1jcmVhdGVSYW5nZSh0KXtyZXR1cm4gdGhpcy5saW5lQ291bnQ9PT0wP25ldyAkKHQubGluZU51bWJlcix0LmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4rdGhpcy5jb2x1bW5Db3VudCk6bmV3ICQodC5saW5lTnVtYmVyLHQuY29sdW1uLHQubGluZU51bWJlcit0aGlzLmxpbmVDb3VudCx0aGlzLmNvbHVtbkNvdW50KzEpfWFkZFRvUG9zaXRpb24odCl7cmV0dXJuIHRoaXMubGluZUNvdW50PT09MD9uZXcgdGUodC5saW5lTnVtYmVyLHQuY29sdW1uK3RoaXMuY29sdW1uQ291bnQpOm5ldyB0ZSh0LmxpbmVOdW1iZXIrdGhpcy5saW5lQ291bnQsdGhpcy5jb2x1bW5Db3VudCsxKX10b1N0cmluZygpe3JldHVybmAke3RoaXMubGluZUNvdW50fSwke3RoaXMuY29sdW1uQ291bnR9YH19O2plLnplcm89bmV3IGplKDAsMCk7bGV0IHBzPWplO2NsYXNzIEdse2NvbnN0cnVjdG9yKHQsbil7dGhpcy5yYW5nZT10LHRoaXMudGV4dD1ufXRvU2luZ2xlRWRpdE9wZXJhdGlvbigpe3JldHVybntyYW5nZTp0aGlzLnJhbmdlLHRleHQ6dGhpcy50ZXh0fX19Y2xhc3MgX2V7c3RhdGljIGludmVyc2UodCxuLGkpe2NvbnN0IHI9W107bGV0IHM9MSxvPTE7Zm9yKGNvbnN0IGEgb2YgdCl7Y29uc3QgdT1uZXcgX2UobmV3IHEocyxhLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciksbmV3IHEobyxhLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpO3UubW9kaWZpZWQuaXNFbXB0eXx8ci5wdXNoKHUpLHM9YS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLG89YS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWNvbnN0IGw9bmV3IF9lKG5ldyBxKHMsbisxKSxuZXcgcShvLGkrMSkpO3JldHVybiBsLm1vZGlmaWVkLmlzRW1wdHl8fHIucHVzaChsKSxyfXN0YXRpYyBjbGlwKHQsbixpKXtjb25zdCByPVtdO2Zvcihjb25zdCBzIG9mIHQpe2NvbnN0IG89cy5vcmlnaW5hbC5pbnRlcnNlY3QobiksbD1zLm1vZGlmaWVkLmludGVyc2VjdChpKTtvJiYhby5pc0VtcHR5JiZsJiYhbC5pc0VtcHR5JiZyLnB1c2gobmV3IF9lKG8sbCkpfXJldHVybiByfWNvbnN0cnVjdG9yKHQsbil7dGhpcy5vcmlnaW5hbD10LHRoaXMubW9kaWZpZWQ9bn10b1N0cmluZygpe3JldHVybmB7JHt0aGlzLm9yaWdpbmFsLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWQudG9TdHJpbmcoKX19YH1mbGlwKCl7cmV0dXJuIG5ldyBfZSh0aGlzLm1vZGlmaWVkLHRoaXMub3JpZ2luYWwpfWpvaW4odCl7cmV0dXJuIG5ldyBfZSh0aGlzLm9yaWdpbmFsLmpvaW4odC5vcmlnaW5hbCksdGhpcy5tb2RpZmllZC5qb2luKHQubW9kaWZpZWQpKX10b1JhbmdlTWFwcGluZygpe2NvbnN0IHQ9dGhpcy5vcmlnaW5hbC50b0luY2x1c2l2ZVJhbmdlKCksbj10aGlzLm1vZGlmaWVkLnRvSW5jbHVzaXZlUmFuZ2UoKTtpZih0JiZuKXJldHVybiBuZXcgeGUodCxuKTtpZih0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcj09PTF8fHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPT09MSl7aWYoISh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcj09PTEmJnRoaXMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyPT09MSkpdGhyb3cgbmV3IG1lKCJub3QgYSB2YWxpZCBkaWZmIik7cmV0dXJuIG5ldyB4ZShuZXcgJCh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciwxLHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSxuZXcgJCh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciwxLHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSl9ZWxzZSByZXR1cm4gbmV3IHhlKG5ldyAkKHRoaXMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG5ldyAkKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKX10b1JhbmdlTWFwcGluZzIodCxuKXtpZihncyh0aGlzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsdCkmJmdzKHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxuKSlyZXR1cm4gbmV3IHhlKG5ldyAkKHRoaXMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpLG5ldyAkKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpKTtpZighdGhpcy5vcmlnaW5hbC5pc0VtcHR5JiYhdGhpcy5tb2RpZmllZC5pc0VtcHR5KXJldHVybiBuZXcgeGUoJC5mcm9tUG9zaXRpb25zKG5ldyB0ZSh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciwxKSx1dChuZXcgdGUodGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLHQpKSwkLmZyb21Qb3NpdGlvbnMobmV3IHRlKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLDEpLHV0KG5ldyB0ZSh0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksbikpKTtpZih0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcj4xJiZ0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcj4xKXJldHVybiBuZXcgeGUoJC5mcm9tUG9zaXRpb25zKHV0KG5ldyB0ZSh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSx0KSx1dChuZXcgdGUodGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLHQpKSwkLmZyb21Qb3NpdGlvbnModXQobmV3IHRlKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG4pLHV0KG5ldyB0ZSh0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksbikpKTt0aHJvdyBuZXcgbWV9fWZ1bmN0aW9uIHV0KGUsdCl7aWYoZS5saW5lTnVtYmVyPDEpcmV0dXJuIG5ldyB0ZSgxLDEpO2lmKGUubGluZU51bWJlcj50Lmxlbmd0aClyZXR1cm4gbmV3IHRlKHQubGVuZ3RoLHRbdC5sZW5ndGgtMV0ubGVuZ3RoKzEpO2NvbnN0IG49dFtlLmxpbmVOdW1iZXItMV07cmV0dXJuIGUuY29sdW1uPm4ubGVuZ3RoKzE/bmV3IHRlKGUubGluZU51bWJlcixuLmxlbmd0aCsxKTplfWZ1bmN0aW9uIGdzKGUsdCl7cmV0dXJuIGU+PTEmJmU8PXQubGVuZ3RofWNsYXNzIE5lIGV4dGVuZHMgX2V7c3RhdGljIGZyb21SYW5nZU1hcHBpbmdzKHQpe2NvbnN0IG49cS5qb2luKHQubWFwKHI9PnEuZnJvbVJhbmdlSW5jbHVzaXZlKHIub3JpZ2luYWxSYW5nZSkpKSxpPXEuam9pbih0Lm1hcChyPT5xLmZyb21SYW5nZUluY2x1c2l2ZShyLm1vZGlmaWVkUmFuZ2UpKSk7cmV0dXJuIG5ldyBOZShuLGksdCl9Y29uc3RydWN0b3IodCxuLGkpe3N1cGVyKHQsbiksdGhpcy5pbm5lckNoYW5nZXM9aX1mbGlwKCl7cmV0dXJuIG5ldyBOZSh0aGlzLm1vZGlmaWVkLHRoaXMub3JpZ2luYWwsdGhpcy5pbm5lckNoYW5nZXM/Lm1hcCh0PT50LmZsaXAoKSkpfXdpdGhJbm5lckNoYW5nZXNGcm9tTGluZVJhbmdlcygpe3JldHVybiBuZXcgTmUodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLFt0aGlzLnRvUmFuZ2VNYXBwaW5nKCldKX19Y2xhc3MgeGV7c3RhdGljIGFzc2VydFNvcnRlZCh0KXtmb3IobGV0IG49MTtuPHQubGVuZ3RoO24rKyl7Y29uc3QgaT10W24tMV0scj10W25dO2lmKCEoaS5vcmlnaW5hbFJhbmdlLmdldEVuZFBvc2l0aW9uKCkuaXNCZWZvcmVPckVxdWFsKHIub3JpZ2luYWxSYW5nZS5nZXRTdGFydFBvc2l0aW9uKCkpJiZpLm1vZGlmaWVkUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKS5pc0JlZm9yZU9yRXF1YWwoci5tb2RpZmllZFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSkpKXRocm93IG5ldyBtZSgiUmFuZ2UgbWFwcGluZ3MgbXVzdCBiZSBzb3J0ZWQiKX19Y29uc3RydWN0b3IodCxuKXt0aGlzLm9yaWdpbmFsUmFuZ2U9dCx0aGlzLm1vZGlmaWVkUmFuZ2U9bn10b1N0cmluZygpe3JldHVybmB7JHt0aGlzLm9yaWdpbmFsUmFuZ2UudG9TdHJpbmcoKX0tPiR7dGhpcy5tb2RpZmllZFJhbmdlLnRvU3RyaW5nKCl9fWB9ZmxpcCgpe3JldHVybiBuZXcgeGUodGhpcy5tb2RpZmllZFJhbmdlLHRoaXMub3JpZ2luYWxSYW5nZSl9dG9UZXh0RWRpdCh0KXtjb25zdCBuPXQuZ2V0VmFsdWVPZlJhbmdlKHRoaXMubW9kaWZpZWRSYW5nZSk7cmV0dXJuIG5ldyBHbCh0aGlzLm9yaWdpbmFsUmFuZ2Usbil9fWNvbnN0ICRsPTM7Y2xhc3MgWGx7Y29tcHV0ZURpZmYodCxuLGkpe2NvbnN0IHM9bmV3IFFsKHQsbix7bWF4Q29tcHV0YXRpb25UaW1lOmkubWF4Q29tcHV0YXRpb25UaW1lTXMsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6aS5pZ25vcmVUcmltV2hpdGVzcGFjZSxzaG91bGRDb21wdXRlQ2hhckNoYW5nZXM6ITAsc2hvdWxkTWFrZVByZXR0eURpZmY6ITAsc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlczohMH0pLmNvbXB1dGVEaWZmKCksbz1bXTtsZXQgbD1udWxsO2Zvcihjb25zdCBhIG9mIHMuY2hhbmdlcyl7bGV0IHU7YS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT0wP3U9bmV3IHEoYS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcisxLGEub3JpZ2luYWxTdGFydExpbmVOdW1iZXIrMSk6dT1uZXcgcShhLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyLGEub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzEpO2xldCBjO2EubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09MD9jPW5ldyBxKGEubW9kaWZpZWRTdGFydExpbmVOdW1iZXIrMSxhLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyKzEpOmM9bmV3IHEoYS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcixhLm1vZGlmaWVkRW5kTGluZU51bWJlcisxKTtsZXQgZD1uZXcgTmUodSxjLGEuY2hhckNoYW5nZXM/Lm1hcChtPT5uZXcgeGUobmV3ICQobS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcixtLm9yaWdpbmFsU3RhcnRDb2x1bW4sbS5vcmlnaW5hbEVuZExpbmVOdW1iZXIsbS5vcmlnaW5hbEVuZENvbHVtbiksbmV3ICQobS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcixtLm1vZGlmaWVkU3RhcnRDb2x1bW4sbS5tb2RpZmllZEVuZExpbmVOdW1iZXIsbS5tb2RpZmllZEVuZENvbHVtbikpKSk7bCYmKGwubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PWQubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyfHxsLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1kLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikmJihkPW5ldyBOZShsLm9yaWdpbmFsLmpvaW4oZC5vcmlnaW5hbCksbC5tb2RpZmllZC5qb2luKGQubW9kaWZpZWQpLGwuaW5uZXJDaGFuZ2VzJiZkLmlubmVyQ2hhbmdlcz9sLmlubmVyQ2hhbmdlcy5jb25jYXQoZC5pbm5lckNoYW5nZXMpOnZvaWQgMCksby5wb3AoKSksby5wdXNoKGQpLGw9ZH1yZXR1cm4gWXQoKCk9PmRzKG8sKGEsdSk9PnUub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLWEub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PXUubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLWEubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmYS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHUub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyJiZhLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8dS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKSxuZXcgUXQobyxbXSxzLnF1aXRFYXJseSl9fWZ1bmN0aW9uIGJzKGUsdCxuLGkpe3JldHVybiBuZXcgV2UoZSx0LG4pLkNvbXB1dGVEaWZmKGkpfWxldCBfcz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPVtdLGk9W107Zm9yKGxldCByPTAscz10Lmxlbmd0aDtyPHM7cisrKW5bcl09S24odFtyXSwxKSxpW3JdPWVpKHRbcl0sMSk7dGhpcy5saW5lcz10LHRoaXMuX3N0YXJ0Q29sdW1ucz1uLHRoaXMuX2VuZENvbHVtbnM9aX1nZXRFbGVtZW50cygpe2NvbnN0IHQ9W107Zm9yKGxldCBuPTAsaT10aGlzLmxpbmVzLmxlbmd0aDtuPGk7bisrKXRbbl09dGhpcy5saW5lc1tuXS5zdWJzdHJpbmcodGhpcy5fc3RhcnRDb2x1bW5zW25dLTEsdGhpcy5fZW5kQ29sdW1uc1tuXS0xKTtyZXR1cm4gdH1nZXRTdHJpY3RFbGVtZW50KHQpe3JldHVybiB0aGlzLmxpbmVzW3RdfWdldFN0YXJ0TGluZU51bWJlcih0KXtyZXR1cm4gdCsxfWdldEVuZExpbmVOdW1iZXIodCl7cmV0dXJuIHQrMX1jcmVhdGVDaGFyU2VxdWVuY2UodCxuLGkpe2NvbnN0IHI9W10scz1bXSxvPVtdO2xldCBsPTA7Zm9yKGxldCBhPW47YTw9aTthKyspe2NvbnN0IHU9dGhpcy5saW5lc1thXSxjPXQ/dGhpcy5fc3RhcnRDb2x1bW5zW2FdOjEsZD10P3RoaXMuX2VuZENvbHVtbnNbYV06dS5sZW5ndGgrMTtmb3IobGV0IG09YzttPGQ7bSsrKXJbbF09dS5jaGFyQ29kZUF0KG0tMSksc1tsXT1hKzEsb1tsXT1tLGwrKzshdCYmYTxpJiYocltsXT0xMCxzW2xdPWErMSxvW2xdPXUubGVuZ3RoKzEsbCsrKX1yZXR1cm4gbmV3IEpsKHIscyxvKX19O2NsYXNzIEpse2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLl9jaGFyQ29kZXM9dCx0aGlzLl9saW5lTnVtYmVycz1uLHRoaXMuX2NvbHVtbnM9aX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLl9jaGFyQ29kZXMubWFwKCh0LG4pPT4odD09PTEwPyJcXG4iOlN0cmluZy5mcm9tQ2hhckNvZGUodCkpK2AtKCR7dGhpcy5fbGluZU51bWJlcnNbbl19LCR7dGhpcy5fY29sdW1uc1tuXX0pYCkuam9pbigiLCAiKSsiXSJ9X2Fzc2VydEluZGV4KHQsbil7aWYodDwwfHx0Pj1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgaW5kZXgiKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKHQpe3JldHVybiB0PjAmJnQ9PT10aGlzLl9saW5lTnVtYmVycy5sZW5ndGg/dGhpcy5nZXRFbmRMaW5lTnVtYmVyKHQtMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2xpbmVOdW1iZXJzW3RdKX1nZXRFbmRMaW5lTnVtYmVyKHQpe3JldHVybiB0PT09LTE/dGhpcy5nZXRTdGFydExpbmVOdW1iZXIodCsxKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9saW5lTnVtYmVycyksdGhpcy5fY2hhckNvZGVzW3RdPT09MTA/dGhpcy5fbGluZU51bWJlcnNbdF0rMTp0aGlzLl9saW5lTnVtYmVyc1t0XSl9Z2V0U3RhcnRDb2x1bW4odCl7cmV0dXJuIHQ+MCYmdD09PXRoaXMuX2NvbHVtbnMubGVuZ3RoP3RoaXMuZ2V0RW5kQ29sdW1uKHQtMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fY29sdW1ucyksdGhpcy5fY29sdW1uc1t0XSl9Z2V0RW5kQ29sdW1uKHQpe3JldHVybiB0PT09LTE/dGhpcy5nZXRTdGFydENvbHVtbih0KzEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2NvbHVtbnMpLHRoaXMuX2NoYXJDb2Rlc1t0XT09PTEwPzE6dGhpcy5fY29sdW1uc1t0XSsxKX19Y2xhc3MgY3R7Y29uc3RydWN0b3IodCxuLGkscixzLG8sbCxhKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5vcmlnaW5hbFN0YXJ0Q29sdW1uPW4sdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9aSx0aGlzLm9yaWdpbmFsRW5kQ29sdW1uPXIsdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1zLHRoaXMubW9kaWZpZWRTdGFydENvbHVtbj1vLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWwsdGhpcy5tb2RpZmllZEVuZENvbHVtbj1hfXN0YXRpYyBjcmVhdGVGcm9tRGlmZkNoYW5nZSh0LG4saSl7Y29uc3Qgcj1uLmdldFN0YXJ0TGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQpLHM9bi5nZXRTdGFydENvbHVtbih0Lm9yaWdpbmFsU3RhcnQpLG89bi5nZXRFbmRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpLGw9bi5nZXRFbmRDb2x1bW4odC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSksYT1pLmdldFN0YXJ0TGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQpLHU9aS5nZXRTdGFydENvbHVtbih0Lm1vZGlmaWVkU3RhcnQpLGM9aS5nZXRFbmRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpLGQ9aS5nZXRFbmRDb2x1bW4odC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSk7cmV0dXJuIG5ldyBjdChyLHMsbyxsLGEsdSxjLGQpfX1mdW5jdGlvbiBZbChlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCB0PVtlWzBdXTtsZXQgbj10WzBdO2ZvcihsZXQgaT0xLHI9ZS5sZW5ndGg7aTxyO2krKyl7Y29uc3Qgcz1lW2ldLG89cy5vcmlnaW5hbFN0YXJ0LShuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCksbD1zLm1vZGlmaWVkU3RhcnQtKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKTtNYXRoLm1pbihvLGwpPCRsPyhuLm9yaWdpbmFsTGVuZ3RoPXMub3JpZ2luYWxTdGFydCtzLm9yaWdpbmFsTGVuZ3RoLW4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkTGVuZ3RoPXMubW9kaWZpZWRTdGFydCtzLm1vZGlmaWVkTGVuZ3RoLW4ubW9kaWZpZWRTdGFydCk6KHQucHVzaChzKSxuPXMpfXJldHVybiB0fWNsYXNzIEx0e2NvbnN0cnVjdG9yKHQsbixpLHIscyl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1pLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPXIsdGhpcy5jaGFyQ2hhbmdlcz1zfXN0YXRpYyBjcmVhdGVGcm9tRGlmZlJlc3VsdCh0LG4saSxyLHMsbyxsKXtsZXQgYSx1LGMsZCxtO2lmKG4ub3JpZ2luYWxMZW5ndGg9PT0wPyhhPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCktMSx1PTApOihhPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCksdT1pLmdldEVuZExpbmVOdW1iZXIobi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtMSkpLG4ubW9kaWZpZWRMZW5ndGg9PT0wPyhjPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCktMSxkPTApOihjPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCksZD1yLmdldEVuZExpbmVOdW1iZXIobi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgtMSkpLG8mJm4ub3JpZ2luYWxMZW5ndGg+MCYmbi5vcmlnaW5hbExlbmd0aDwyMCYmbi5tb2RpZmllZExlbmd0aD4wJiZuLm1vZGlmaWVkTGVuZ3RoPDIwJiZzKCkpe2NvbnN0IGY9aS5jcmVhdGVDaGFyU2VxdWVuY2UodCxuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtMSksXz1yLmNyZWF0ZUNoYXJTZXF1ZW5jZSh0LG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC0xKTtpZihmLmdldEVsZW1lbnRzKCkubGVuZ3RoPjAmJl8uZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCl7bGV0IGc9YnMoZixfLHMsITApLmNoYW5nZXM7bCYmKGc9WWwoZykpLG09W107Zm9yKGxldCBBPTAsdj1nLmxlbmd0aDtBPHY7QSsrKW0ucHVzaChjdC5jcmVhdGVGcm9tRGlmZkNoYW5nZShnW0FdLGYsXykpfX1yZXR1cm4gbmV3IEx0KGEsdSxjLGQsbSl9fWNsYXNzIFFse2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcz1pLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM9aS5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U9aS5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmPWkuc2hvdWxkTWFrZVByZXR0eURpZmYsdGhpcy5vcmlnaW5hbExpbmVzPXQsdGhpcy5tb2RpZmllZExpbmVzPW4sdGhpcy5vcmlnaW5hbD1uZXcgX3ModCksdGhpcy5tb2RpZmllZD1uZXcgX3MobiksdGhpcy5jb250aW51ZUxpbmVEaWZmPXdzKGkubWF4Q29tcHV0YXRpb25UaW1lKSx0aGlzLmNvbnRpbnVlQ2hhckRpZmY9d3MoaS5tYXhDb21wdXRhdGlvblRpbWU9PT0wPzA6TWF0aC5taW4oaS5tYXhDb21wdXRhdGlvblRpbWUsNWUzKSl9Y29tcHV0ZURpZmYoKXtpZih0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aD09PTEmJnRoaXMub3JpZ2luYWwubGluZXNbMF0ubGVuZ3RoPT09MClyZXR1cm4gdGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD09PTA/e3F1aXRFYXJseTohMSxjaGFuZ2VzOltdfTp7cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjoxLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOnRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoLGNoYXJDaGFuZ2VzOnZvaWQgMH1dfTtpZih0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aD09PTEmJnRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoPT09MClyZXR1cm57cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjp0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjoxLGNoYXJDaGFuZ2VzOnZvaWQgMH1dfTtjb25zdCB0PWJzKHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlTGluZURpZmYsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZiksbj10LmNoYW5nZXMsaT10LnF1aXRFYXJseTtpZih0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wLHU9bi5sZW5ndGg7YTx1O2ErKylsLnB1c2goTHQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSxuW2FdLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSk7cmV0dXJue3F1aXRFYXJseTppLGNoYW5nZXM6bH19Y29uc3Qgcj1bXTtsZXQgcz0wLG89MDtmb3IobGV0IGw9LTEsYT1uLmxlbmd0aDtsPGE7bCsrKXtjb25zdCB1PWwrMTxhP25bbCsxXTpudWxsLGM9dT91Lm9yaWdpbmFsU3RhcnQ6dGhpcy5vcmlnaW5hbExpbmVzLmxlbmd0aCxkPXU/dS5tb2RpZmllZFN0YXJ0OnRoaXMubW9kaWZpZWRMaW5lcy5sZW5ndGg7Zm9yKDtzPGMmJm88ZDspe2NvbnN0IG09dGhpcy5vcmlnaW5hbExpbmVzW3NdLGY9dGhpcy5tb2RpZmllZExpbmVzW29dO2lmKG0hPT1mKXt7bGV0IF89S24obSwxKSxnPUtuKGYsMSk7Zm9yKDtfPjEmJmc+MTspe2NvbnN0IEE9bS5jaGFyQ29kZUF0KF8tMiksdj1mLmNoYXJDb2RlQXQoZy0yKTtpZihBIT09dilicmVhaztfLS0sZy0tfShfPjF8fGc+MSkmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixzKzEsMSxfLG8rMSwxLGcpfXtsZXQgXz1laShtLDEpLGc9ZWkoZiwxKTtjb25zdCBBPW0ubGVuZ3RoKzEsdj1mLmxlbmd0aCsxO2Zvcig7XzxBJiZnPHY7KXtjb25zdCB5PW0uY2hhckNvZGVBdChfLTEpLEU9bS5jaGFyQ29kZUF0KGctMSk7aWYoeSE9PUUpYnJlYWs7XysrLGcrK30oXzxBfHxnPHYpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHIscysxLF8sQSxvKzEsZyx2KX19cysrLG8rK311JiYoci5wdXNoKEx0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLHMrPXUub3JpZ2luYWxMZW5ndGgsbys9dS5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTppLGNoYW5nZXM6cn19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLGkscixzLG8sbCl7aWYodGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLGkscixzLG8sbCkpcmV0dXJuO2xldCBhO3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiYoYT1bbmV3IGN0KG4saSxuLHIscyxvLHMsbCldKSx0LnB1c2gobmV3IEx0KG4sbixzLHMsYSkpfV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LG4saSxyLHMsbyxsKXtjb25zdCBhPXQubGVuZ3RoO2lmKGE9PT0wKXJldHVybiExO2NvbnN0IHU9dFthLTFdO3JldHVybiB1Lm9yaWdpbmFsRW5kTGluZU51bWJlcj09PTB8fHUubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09MD8hMTp1Lm9yaWdpbmFsRW5kTGluZU51bWJlcj09PW4mJnUubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09cz8odGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJnUuY2hhckNoYW5nZXMmJnUuY2hhckNoYW5nZXMucHVzaChuZXcgY3QobixpLG4scixzLG8scyxsKSksITApOnUub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzE9PT1uJiZ1Lm1vZGlmaWVkRW5kTGluZU51bWJlcisxPT09cz8odS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9bix1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj1zLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzLnB1c2gobmV3IGN0KG4saSxuLHIscyxvLHMsbCkpLCEwKTohMX19ZnVuY3Rpb24gS24oZSx0KXtjb25zdCBuPUFvKGUpO3JldHVybiBuPT09LTE/dDpuKzF9ZnVuY3Rpb24gZWkoZSx0KXtjb25zdCBuPVNvKGUpO3JldHVybiBuPT09LTE/dDpuKzJ9ZnVuY3Rpb24gd3MoZSl7aWYoZT09PTApcmV0dXJuKCk9PiEwO2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4oKT0+RGF0ZS5ub3coKS10PGV9Y2xhc3MgRGV7c3RhdGljIHRyaXZpYWwodCxuKXtyZXR1cm4gbmV3IERlKFtuZXcgSyhqLm9mTGVuZ3RoKHQubGVuZ3RoKSxqLm9mTGVuZ3RoKG4ubGVuZ3RoKSldLCExKX1zdGF0aWMgdHJpdmlhbFRpbWVkT3V0KHQsbil7cmV0dXJuIG5ldyBEZShbbmV3IEsoai5vZkxlbmd0aCh0Lmxlbmd0aCksai5vZkxlbmd0aChuLmxlbmd0aCkpXSwhMCl9Y29uc3RydWN0b3IodCxuKXt0aGlzLmRpZmZzPXQsdGhpcy5oaXRUaW1lb3V0PW59fWNsYXNzIEt7c3RhdGljIGludmVydCh0LG4pe2NvbnN0IGk9W107cmV0dXJuIG9sKHQsKHIscyk9PntpLnB1c2goSy5mcm9tT2Zmc2V0UGFpcnMocj9yLmdldEVuZEV4Y2x1c2l2ZXMoKTpJZS56ZXJvLHM/cy5nZXRTdGFydHMoKTpuZXcgSWUobiwocj9yLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtci5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlOjApK24pKSl9KSxpfXN0YXRpYyBmcm9tT2Zmc2V0UGFpcnModCxuKXtyZXR1cm4gbmV3IEsobmV3IGoodC5vZmZzZXQxLG4ub2Zmc2V0MSksbmV3IGoodC5vZmZzZXQyLG4ub2Zmc2V0MikpfXN0YXRpYyBhc3NlcnRTb3J0ZWQodCl7bGV0IG47Zm9yKGNvbnN0IGkgb2YgdCl7aWYobiYmIShuLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU8PWkuc2VxMVJhbmdlLnN0YXJ0JiZuLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU8PWkuc2VxMlJhbmdlLnN0YXJ0KSl0aHJvdyBuZXcgbWUoIlNlcXVlbmNlIGRpZmZzIG11c3QgYmUgc29ydGVkIik7bj1pfX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc2VxMVJhbmdlPXQsdGhpcy5zZXEyUmFuZ2U9bn1zd2FwKCl7cmV0dXJuIG5ldyBLKHRoaXMuc2VxMlJhbmdlLHRoaXMuc2VxMVJhbmdlKX10b1N0cmluZygpe3JldHVybmAke3RoaXMuc2VxMVJhbmdlfSA8LT4gJHt0aGlzLnNlcTJSYW5nZX1gfWpvaW4odCl7cmV0dXJuIG5ldyBLKHRoaXMuc2VxMVJhbmdlLmpvaW4odC5zZXExUmFuZ2UpLHRoaXMuc2VxMlJhbmdlLmpvaW4odC5zZXEyUmFuZ2UpKX1kZWx0YSh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgSyh0aGlzLnNlcTFSYW5nZS5kZWx0YSh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YSh0KSl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgSyh0aGlzLnNlcTFSYW5nZS5kZWx0YVN0YXJ0KHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhU3RhcnQodCkpfWRlbHRhRW5kKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBLKHRoaXMuc2VxMVJhbmdlLmRlbHRhRW5kKHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhRW5kKHQpKX1pbnRlcnNlY3QodCl7Y29uc3Qgbj10aGlzLnNlcTFSYW5nZS5pbnRlcnNlY3QodC5zZXExUmFuZ2UpLGk9dGhpcy5zZXEyUmFuZ2UuaW50ZXJzZWN0KHQuc2VxMlJhbmdlKTtpZighKCFufHwhaSkpcmV0dXJuIG5ldyBLKG4saSl9Z2V0U3RhcnRzKCl7cmV0dXJuIG5ldyBJZSh0aGlzLnNlcTFSYW5nZS5zdGFydCx0aGlzLnNlcTJSYW5nZS5zdGFydCl9Z2V0RW5kRXhjbHVzaXZlcygpe3JldHVybiBuZXcgSWUodGhpcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHRoaXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSl9fWNvbnN0IFFlPWNsYXNzIFFle2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vZmZzZXQxPXQsdGhpcy5vZmZzZXQyPW59dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm9mZnNldDF9IDwtPiAke3RoaXMub2Zmc2V0Mn1gfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBRZSh0aGlzLm9mZnNldDErdCx0aGlzLm9mZnNldDIrdCl9ZXF1YWxzKHQpe3JldHVybiB0aGlzLm9mZnNldDE9PT10Lm9mZnNldDEmJnRoaXMub2Zmc2V0Mj09PXQub2Zmc2V0Mn19O1FlLnplcm89bmV3IFFlKDAsMCksUWUubWF4PW5ldyBRZShOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7bGV0IEllPVFlO2NvbnN0IHduPWNsYXNzIHdue2lzVmFsaWQoKXtyZXR1cm4hMH19O3duLmluc3RhbmNlPW5ldyB3bjtsZXQgQ3Q9d247Y2xhc3MgWmx7Y29uc3RydWN0b3IodCl7aWYodGhpcy50aW1lb3V0PXQsdGhpcy5zdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLnZhbGlkPSEwLHQ8PTApdGhyb3cgbmV3IG1lKCJ0aW1lb3V0IG11c3QgYmUgcG9zaXRpdmUiKX1pc1ZhbGlkKCl7aWYoIShEYXRlLm5vdygpLXRoaXMuc3RhcnRUaW1lPHRoaXMudGltZW91dCkmJnRoaXMudmFsaWQpe3RoaXMudmFsaWQ9ITE7ZGVidWdnZXJ9cmV0dXJuIHRoaXMudmFsaWR9fWNsYXNzIHRpe2NvbnN0cnVjdG9yKHQsbil7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PW4sdGhpcy5hcnJheT1bXSx0aGlzLmFycmF5PW5ldyBBcnJheSh0Km4pfWdldCh0LG4pe3JldHVybiB0aGlzLmFycmF5W3Qrbip0aGlzLndpZHRoXX1zZXQodCxuLGkpe3RoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdPWl9fWZ1bmN0aW9uIG5pKGUpe3JldHVybiBlPT09MzJ8fGU9PT05fWNvbnN0IHp0PWNsYXNzIHp0e3N0YXRpYyBnZXRLZXkodCl7bGV0IG49dGhpcy5jaHJLZXlzLmdldCh0KTtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy5jaHJLZXlzLnNpemUsdGhpcy5jaHJLZXlzLnNldCh0LG4pKSxufWNvbnN0cnVjdG9yKHQsbixpKXt0aGlzLnJhbmdlPXQsdGhpcy5saW5lcz1uLHRoaXMuc291cmNlPWksdGhpcy5oaXN0b2dyYW09W107bGV0IHI9MDtmb3IobGV0IHM9dC5zdGFydExpbmVOdW1iZXItMTtzPHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xO3MrKyl7Y29uc3Qgbz1uW3NdO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXtyKys7Y29uc3QgdT1vW2FdLGM9enQuZ2V0S2V5KHUpO3RoaXMuaGlzdG9ncmFtW2NdPSh0aGlzLmhpc3RvZ3JhbVtjXXx8MCkrMX1yKys7Y29uc3QgbD16dC5nZXRLZXkoYApgKTt0aGlzLmhpc3RvZ3JhbVtsXT0odGhpcy5oaXN0b2dyYW1bbF18fDApKzF9dGhpcy50b3RhbENvdW50PXJ9Y29tcHV0ZVNpbWlsYXJpdHkodCl7bGV0IG49MDtjb25zdCBpPU1hdGgubWF4KHRoaXMuaGlzdG9ncmFtLmxlbmd0aCx0Lmhpc3RvZ3JhbS5sZW5ndGgpO2ZvcihsZXQgcj0wO3I8aTtyKyspbis9TWF0aC5hYnMoKHRoaXMuaGlzdG9ncmFtW3JdPz8wKS0odC5oaXN0b2dyYW1bcl0/PzApKTtyZXR1cm4gMS1uLyh0aGlzLnRvdGFsQ291bnQrdC50b3RhbENvdW50KX19O3p0LmNocktleXM9bmV3IE1hcDtsZXQgS3Q9enQ7Y2xhc3MgS2x7Y29tcHV0ZSh0LG4saT1DdC5pbnN0YW5jZSxyKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gRGUudHJpdmlhbCh0LG4pO2NvbnN0IHM9bmV3IHRpKHQubGVuZ3RoLG4ubGVuZ3RoKSxvPW5ldyB0aSh0Lmxlbmd0aCxuLmxlbmd0aCksbD1uZXcgdGkodC5sZW5ndGgsbi5sZW5ndGgpO2ZvcihsZXQgXz0wO188dC5sZW5ndGg7XysrKWZvcihsZXQgZz0wO2c8bi5sZW5ndGg7ZysrKXtpZighaS5pc1ZhbGlkKCkpcmV0dXJuIERlLnRyaXZpYWxUaW1lZE91dCh0LG4pO2NvbnN0IEE9Xz09PTA/MDpzLmdldChfLTEsZyksdj1nPT09MD8wOnMuZ2V0KF8sZy0xKTtsZXQgeTt0LmdldEVsZW1lbnQoXyk9PT1uLmdldEVsZW1lbnQoZyk/KF89PT0wfHxnPT09MD95PTA6eT1zLmdldChfLTEsZy0xKSxfPjAmJmc+MCYmby5nZXQoXy0xLGctMSk9PT0zJiYoeSs9bC5nZXQoXy0xLGctMSkpLHkrPXI/cihfLGcpOjEpOnk9LTE7Y29uc3QgRT1NYXRoLm1heChBLHYseSk7aWYoRT09PXkpe2NvbnN0IFI9Xz4wJiZnPjA/bC5nZXQoXy0xLGctMSk6MDtsLnNldChfLGcsUisxKSxvLnNldChfLGcsMyl9ZWxzZSBFPT09QT8obC5zZXQoXyxnLDApLG8uc2V0KF8sZywxKSk6RT09PXYmJihsLnNldChfLGcsMCksby5zZXQoXyxnLDIpKTtzLnNldChfLGcsRSl9Y29uc3QgYT1bXTtsZXQgdT10Lmxlbmd0aCxjPW4ubGVuZ3RoO2Z1bmN0aW9uIGQoXyxnKXsoXysxIT09dXx8ZysxIT09YykmJmEucHVzaChuZXcgSyhuZXcgaihfKzEsdSksbmV3IGooZysxLGMpKSksdT1fLGM9Z31sZXQgbT10Lmxlbmd0aC0xLGY9bi5sZW5ndGgtMTtmb3IoO20+PTAmJmY+PTA7KW8uZ2V0KG0sZik9PT0zPyhkKG0sZiksbS0tLGYtLSk6by5nZXQobSxmKT09PTE/bS0tOmYtLTtyZXR1cm4gZCgtMSwtMSksYS5yZXZlcnNlKCksbmV3IERlKGEsITEpfX1jbGFzcyB2c3tjb21wdXRlKHQsbixpPUN0Lmluc3RhbmNlKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gRGUudHJpdmlhbCh0LG4pO2NvbnN0IHI9dCxzPW47ZnVuY3Rpb24gbyhnLEEpe2Zvcig7ZzxyLmxlbmd0aCYmQTxzLmxlbmd0aCYmci5nZXRFbGVtZW50KGcpPT09cy5nZXRFbGVtZW50KEEpOylnKyssQSsrO3JldHVybiBnfWxldCBsPTA7Y29uc3QgYT1uZXcgZXU7YS5zZXQoMCxvKDAsMCkpO2NvbnN0IHU9bmV3IHR1O3Uuc2V0KDAsYS5nZXQoMCk9PT0wP251bGw6bmV3IHlzKG51bGwsMCwwLGEuZ2V0KDApKSk7bGV0IGM9MDtlOmZvcig7Oyl7aWYobCsrLCFpLmlzVmFsaWQoKSlyZXR1cm4gRGUudHJpdmlhbFRpbWVkT3V0KHIscyk7Y29uc3QgZz0tTWF0aC5taW4obCxzLmxlbmd0aCtsJTIpLEE9TWF0aC5taW4obCxyLmxlbmd0aCtsJTIpO2ZvcihjPWc7Yzw9QTtjKz0yKXtjb25zdCB2PWM9PT1BPy0xOmEuZ2V0KGMrMSkseT1jPT09Zz8tMTphLmdldChjLTEpKzEsRT1NYXRoLm1pbihNYXRoLm1heCh2LHkpLHIubGVuZ3RoKSxSPUUtYztpZihFPnIubGVuZ3RofHxSPnMubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IE49byhFLFIpO2Euc2V0KGMsTik7Y29uc3QgTT1FPT09dj91LmdldChjKzEpOnUuZ2V0KGMtMSk7aWYodS5zZXQoYyxOIT09RT9uZXcgeXMoTSxFLFIsTi1FKTpNKSxhLmdldChjKT09PXIubGVuZ3RoJiZhLmdldChjKS1jPT09cy5sZW5ndGgpYnJlYWsgZX19bGV0IGQ9dS5nZXQoYyk7Y29uc3QgbT1bXTtsZXQgZj1yLmxlbmd0aCxfPXMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgZz1kP2QueCtkLmxlbmd0aDowLEE9ZD9kLnkrZC5sZW5ndGg6MDtpZigoZyE9PWZ8fEEhPT1fKSYmbS5wdXNoKG5ldyBLKG5ldyBqKGcsZiksbmV3IGooQSxfKSkpLCFkKWJyZWFrO2Y9ZC54LF89ZC55LGQ9ZC5wcmV2fXJldHVybiBtLnJldmVyc2UoKSxuZXcgRGUobSwhMSl9fWNsYXNzIHlze2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMucHJldj10LHRoaXMueD1uLHRoaXMueT1pLHRoaXMubGVuZ3RoPXJ9fWNsYXNzIGV1e2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGl2ZUFycj1uZXcgSW50MzJBcnJheSgxMCksdGhpcy5uZWdhdGl2ZUFycj1uZXcgSW50MzJBcnJheSgxMCl9Z2V0KHQpe3JldHVybiB0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdKTp0aGlzLnBvc2l0aXZlQXJyW3RdfXNldCh0LG4pe2lmKHQ8MCl7aWYodD0tdC0xLHQ+PXRoaXMubmVnYXRpdmVBcnIubGVuZ3RoKXtjb25zdCBpPXRoaXMubmVnYXRpdmVBcnI7dGhpcy5uZWdhdGl2ZUFycj1uZXcgSW50MzJBcnJheShpLmxlbmd0aCoyKSx0aGlzLm5lZ2F0aXZlQXJyLnNldChpKX10aGlzLm5lZ2F0aXZlQXJyW3RdPW59ZWxzZXtpZih0Pj10aGlzLnBvc2l0aXZlQXJyLmxlbmd0aCl7Y29uc3QgaT10aGlzLnBvc2l0aXZlQXJyO3RoaXMucG9zaXRpdmVBcnI9bmV3IEludDMyQXJyYXkoaS5sZW5ndGgqMiksdGhpcy5wb3NpdGl2ZUFyci5zZXQoaSl9dGhpcy5wb3NpdGl2ZUFyclt0XT1ufX19Y2xhc3MgdHV7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aXZlQXJyPVtdLHRoaXMubmVnYXRpdmVBcnI9W119Z2V0KHQpe3JldHVybiB0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdKTp0aGlzLnBvc2l0aXZlQXJyW3RdfXNldCh0LG4pe3Q8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF09bik6dGhpcy5wb3NpdGl2ZUFyclt0XT1ufX1jbGFzcyBlbntjb25zdHJ1Y3Rvcih0LG4saSl7dGhpcy5saW5lcz10LHRoaXMucmFuZ2U9bix0aGlzLmNvbnNpZGVyV2hpdGVzcGFjZUNoYW5nZXM9aSx0aGlzLmVsZW1lbnRzPVtdLHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4PVtdLHRoaXMubGluZVN0YXJ0T2Zmc2V0cz1bXSx0aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHg9W10sdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgucHVzaCgwKTtmb3IobGV0IHI9dGhpcy5yYW5nZS5zdGFydExpbmVOdW1iZXI7cjw9dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyO3IrKyl7bGV0IHM9dFtyLTFdLG89MDtyPT09dGhpcy5yYW5nZS5zdGFydExpbmVOdW1iZXImJnRoaXMucmFuZ2Uuc3RhcnRDb2x1bW4+MSYmKG89dGhpcy5yYW5nZS5zdGFydENvbHVtbi0xLHM9cy5zdWJzdHJpbmcobykpLHRoaXMubGluZVN0YXJ0T2Zmc2V0cy5wdXNoKG8pO2xldCBsPTA7aWYoIWkpe2NvbnN0IHU9cy50cmltU3RhcnQoKTtsPXMubGVuZ3RoLXUubGVuZ3RoLHM9dS50cmltRW5kKCl9dGhpcy50cmltbWVkV3NMZW5ndGhzQnlMaW5lSWR4LnB1c2gobCk7Y29uc3QgYT1yPT09dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyP01hdGgubWluKHRoaXMucmFuZ2UuZW5kQ29sdW1uLTEtby1sLHMubGVuZ3RoKTpzLmxlbmd0aDtmb3IobGV0IHU9MDt1PGE7dSsrKXRoaXMuZWxlbWVudHMucHVzaChzLmNoYXJDb2RlQXQodSkpO3I8dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyJiYodGhpcy5lbGVtZW50cy5wdXNoKDEwKSx0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeC5wdXNoKHRoaXMuZWxlbWVudHMubGVuZ3RoKSl9fXRvU3RyaW5nKCl7cmV0dXJuYFNsaWNlOiAiJHt0aGlzLnRleHR9ImB9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5nZXRUZXh0KG5ldyBqKDAsdGhpcy5sZW5ndGgpKX1nZXRUZXh0KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzLnNsaWNlKHQuc3RhcnQsdC5lbmRFeGNsdXNpdmUpLm1hcChuPT5TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKS5qb2luKCIiKX1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPVRzKHQ+MD90aGlzLmVsZW1lbnRzW3QtMV06LTEpLGk9VHModDx0aGlzLmVsZW1lbnRzLmxlbmd0aD90aGlzLmVsZW1lbnRzW3RdOi0xKTtpZihuPT09NyYmaT09PTgpcmV0dXJuIDA7aWYobj09PTgpcmV0dXJuIDE1MDtsZXQgcj0wO3JldHVybiBuIT09aSYmKHIrPTEwLG49PT0wJiZpPT09MSYmKHIrPTEpKSxyKz14cyhuKSxyKz14cyhpKSxyfXRyYW5zbGF0ZU9mZnNldCh0LG49InJpZ2h0Iil7Y29uc3QgaT1TdCh0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeCxzPT5zPD10KSxyPXQtdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHhbaV07cmV0dXJuIG5ldyB0ZSh0aGlzLnJhbmdlLnN0YXJ0TGluZU51bWJlcitpLDErdGhpcy5saW5lU3RhcnRPZmZzZXRzW2ldK3IrKHI9PT0wJiZuPT09ImxlZnQiPzA6dGhpcy50cmltbWVkV3NMZW5ndGhzQnlMaW5lSWR4W2ldKSl9dHJhbnNsYXRlUmFuZ2UodCl7Y29uc3Qgbj10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LnN0YXJ0LCJyaWdodCIpLGk9dGhpcy50cmFuc2xhdGVPZmZzZXQodC5lbmRFeGNsdXNpdmUsImxlZnQiKTtyZXR1cm4gaS5pc0JlZm9yZShuKT8kLmZyb21Qb3NpdGlvbnMoaSxpKTokLmZyb21Qb3NpdGlvbnMobixpKX1maW5kV29yZENvbnRhaW5pbmcodCl7aWYodDwwfHx0Pj10aGlzLmVsZW1lbnRzLmxlbmd0aHx8IWlpKHRoaXMuZWxlbWVudHNbdF0pKXJldHVybjtsZXQgbj10O2Zvcig7bj4wJiZpaSh0aGlzLmVsZW1lbnRzW24tMV0pOyluLS07bGV0IGk9dDtmb3IoO2k8dGhpcy5lbGVtZW50cy5sZW5ndGgmJmlpKHRoaXMuZWxlbWVudHNbaV0pOylpKys7cmV0dXJuIG5ldyBqKG4saSl9Y291bnRMaW5lc0luKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9mZnNldCh0LmVuZEV4Y2x1c2l2ZSkubGluZU51bWJlci10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LnN0YXJ0KS5saW5lTnVtYmVyfWlzU3Ryb25nbHlFcXVhbCh0LG4pe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdPT09dGhpcy5lbGVtZW50c1tuXX1leHRlbmRUb0Z1bGxMaW5lcyh0KXtjb25zdCBuPWx0KHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4LHI9PnI8PXQuc3RhcnQpPz8wLGk9amwodGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgscj0+dC5lbmRFeGNsdXNpdmU8PXIpPz90aGlzLmVsZW1lbnRzLmxlbmd0aDtyZXR1cm4gbmV3IGoobixpKX19ZnVuY3Rpb24gaWkoZSl7cmV0dXJuIGU+PTk3JiZlPD0xMjJ8fGU+PTY1JiZlPD05MHx8ZT49NDgmJmU8PTU3fWNvbnN0IG51PXswOjAsMTowLDI6MCwzOjEwLDQ6Miw1OjMwLDY6Myw3OjEwLDg6MTB9O2Z1bmN0aW9uIHhzKGUpe3JldHVybiBudVtlXX1mdW5jdGlvbiBUcyhlKXtyZXR1cm4gZT09PTEwPzg6ZT09PTEzPzc6bmkoZSk/NjplPj05NyYmZTw9MTIyPzA6ZT49NjUmJmU8PTkwPzE6ZT49NDgmJmU8PTU3PzI6ZT09PS0xPzM6ZT09PTQ0fHxlPT09NTk/NTo0fWZ1bmN0aW9uIGl1KGUsdCxuLGkscixzKXtsZXR7bW92ZXM6byxleGNsdWRlZENoYW5nZXM6bH09c3UoZSx0LG4scyk7aWYoIXMuaXNWYWxpZCgpKXJldHVybltdO2NvbnN0IGE9ZS5maWx0ZXIoYz0+IWwuaGFzKGMpKSx1PWF1KGEsaSxyLHQsbixzKTtyZXR1cm4gdWwobyx1KSxvPW91KG8pLG89by5maWx0ZXIoYz0+e2NvbnN0IGQ9Yy5vcmlnaW5hbC50b09mZnNldFJhbmdlKCkuc2xpY2UodCkubWFwKGY9PmYudHJpbSgpKTtyZXR1cm4gZC5qb2luKGAKYCkubGVuZ3RoPj0xNSYmcnUoZCxmPT5mLmxlbmd0aD49Mik+PTJ9KSxvPWx1KGUsbyksb31mdW5jdGlvbiBydShlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IGkgb2YgZSl0KGkpJiZuKys7cmV0dXJuIG59ZnVuY3Rpb24gc3UoZSx0LG4saSl7Y29uc3Qgcj1bXSxzPWUuZmlsdGVyKGE9PmEubW9kaWZpZWQuaXNFbXB0eSYmYS5vcmlnaW5hbC5sZW5ndGg+PTMpLm1hcChhPT5uZXcgS3QoYS5vcmlnaW5hbCx0LGEpKSxvPW5ldyBTZXQoZS5maWx0ZXIoYT0+YS5vcmlnaW5hbC5pc0VtcHR5JiZhLm1vZGlmaWVkLmxlbmd0aD49MykubWFwKGE9Pm5ldyBLdChhLm1vZGlmaWVkLG4sYSkpKSxsPW5ldyBTZXQ7Zm9yKGNvbnN0IGEgb2Ygcyl7bGV0IHU9LTEsYztmb3IoY29uc3QgZCBvZiBvKXtjb25zdCBtPWEuY29tcHV0ZVNpbWlsYXJpdHkoZCk7bT51JiYodT1tLGM9ZCl9aWYodT4uOSYmYyYmKG8uZGVsZXRlKGMpLHIucHVzaChuZXcgX2UoYS5yYW5nZSxjLnJhbmdlKSksbC5hZGQoYS5zb3VyY2UpLGwuYWRkKGMuc291cmNlKSksIWkuaXNWYWxpZCgpKXJldHVybnttb3ZlczpyLGV4Y2x1ZGVkQ2hhbmdlczpsfX1yZXR1cm57bW92ZXM6cixleGNsdWRlZENoYW5nZXM6bH19ZnVuY3Rpb24gYXUoZSx0LG4saSxyLHMpe2NvbnN0IG89W10sbD1uZXcgSGw7Zm9yKGNvbnN0IG0gb2YgZSlmb3IobGV0IGY9bS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI7ZjxtLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMjtmKyspe2NvbnN0IF89YCR7dFtmLTFdfToke3RbZisxLTFdfToke3RbZisyLTFdfWA7bC5hZGQoXyx7cmFuZ2U6bmV3IHEoZixmKzMpfSl9Y29uc3QgYT1bXTtlLnNvcnQoVnQobT0+bS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsanQpKTtmb3IoY29uc3QgbSBvZiBlKXtsZXQgZj1bXTtmb3IobGV0IF89bS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI7XzxtLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMjtfKyspe2NvbnN0IGc9YCR7bltfLTFdfToke25bXysxLTFdfToke25bXysyLTFdfWAsQT1uZXcgcShfLF8rMyksdj1bXTtsLmZvckVhY2goZywoe3JhbmdlOnl9KT0+e2Zvcihjb25zdCBSIG9mIGYpaWYoUi5vcmlnaW5hbExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT15LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJlIubW9kaWZpZWRMaW5lUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSsxPT09QS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKXtSLm9yaWdpbmFsTGluZVJhbmdlPW5ldyBxKFIub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHkuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSksUi5tb2RpZmllZExpbmVSYW5nZT1uZXcgcShSLm1vZGlmaWVkTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlcixBLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLHYucHVzaChSKTtyZXR1cm59Y29uc3QgRT17bW9kaWZpZWRMaW5lUmFuZ2U6QSxvcmlnaW5hbExpbmVSYW5nZTp5fTthLnB1c2goRSksdi5wdXNoKEUpfSksZj12fWlmKCFzLmlzVmFsaWQoKSlyZXR1cm5bXX1hLnNvcnQoY2woVnQobT0+bS5tb2RpZmllZExpbmVSYW5nZS5sZW5ndGgsanQpKSk7Y29uc3QgdT1uZXcgU2UsYz1uZXcgU2U7Zm9yKGNvbnN0IG0gb2YgYSl7Y29uc3QgZj1tLm1vZGlmaWVkTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlci1tLm9yaWdpbmFsTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlcixfPXUuc3VidHJhY3RGcm9tKG0ubW9kaWZpZWRMaW5lUmFuZ2UpLGc9Yy5zdWJ0cmFjdEZyb20obS5vcmlnaW5hbExpbmVSYW5nZSkuZ2V0V2l0aERlbHRhKGYpLEE9Xy5nZXRJbnRlcnNlY3Rpb24oZyk7Zm9yKGNvbnN0IHYgb2YgQS5yYW5nZXMpe2lmKHYubGVuZ3RoPDMpY29udGludWU7Y29uc3QgeT12LEU9di5kZWx0YSgtZik7by5wdXNoKG5ldyBfZShFLHkpKSx1LmFkZFJhbmdlKHkpLGMuYWRkUmFuZ2UoRSl9fW8uc29ydChWdChtPT5tLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixqdCkpO2NvbnN0IGQ9bmV3IFp0KGUpO2ZvcihsZXQgbT0wO208by5sZW5ndGg7bSsrKXtjb25zdCBmPW9bbV0sXz1kLmZpbmRMYXN0TW9ub3Rvbm91cyhNPT5NLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjw9Zi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpLGc9bHQoZSxNPT5NLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjw9Zi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpLEE9TWF0aC5tYXgoZi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItXy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsZi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpLHY9ZC5maW5kTGFzdE1vbm90b25vdXMoTT0+TS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI8Zi5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSx5PWx0KGUsTT0+TS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8Zi5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSxFPU1hdGgubWF4KHYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS1mLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUseS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLWYubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7bGV0IFI7Zm9yKFI9MDtSPEE7UisrKXtjb25zdCBNPWYub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLVItMSxiPWYubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLVItMTtpZihNPmkubGVuZ3RofHxiPnIubGVuZ3RofHx1LmNvbnRhaW5zKGIpfHxjLmNvbnRhaW5zKE0pfHwha3MoaVtNLTFdLHJbYi0xXSxzKSlicmVha31SPjAmJihjLmFkZFJhbmdlKG5ldyBxKGYub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLVIsZi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpKSx1LmFkZFJhbmdlKG5ldyBxKGYubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLVIsZi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKSk7bGV0IE47Zm9yKE49MDtOPEU7TisrKXtjb25zdCBNPWYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStOLGI9Zi5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK047aWYoTT5pLmxlbmd0aHx8Yj5yLmxlbmd0aHx8dS5jb250YWlucyhiKXx8Yy5jb250YWlucyhNKXx8IWtzKGlbTS0xXSxyW2ItMV0scykpYnJlYWt9Tj4wJiYoYy5hZGRSYW5nZShuZXcgcShmLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZi5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK04pKSx1LmFkZFJhbmdlKG5ldyBxKGYubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxmLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrTikpKSwoUj4wfHxOPjApJiYob1ttXT1uZXcgX2UobmV3IHEoZi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItUixmLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrTiksbmV3IHEoZi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItUixmLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrTikpKX1yZXR1cm4gb31mdW5jdGlvbiBrcyhlLHQsbil7aWYoZS50cmltKCk9PT10LnRyaW0oKSlyZXR1cm4hMDtpZihlLmxlbmd0aD4zMDAmJnQubGVuZ3RoPjMwMClyZXR1cm4hMTtjb25zdCByPW5ldyB2cygpLmNvbXB1dGUobmV3IGVuKFtlXSxuZXcgJCgxLDEsMSxlLmxlbmd0aCksITEpLG5ldyBlbihbdF0sbmV3ICQoMSwxLDEsdC5sZW5ndGgpLCExKSxuKTtsZXQgcz0wO2NvbnN0IG89Sy5pbnZlcnQoci5kaWZmcyxlLmxlbmd0aCk7Zm9yKGNvbnN0IGMgb2YgbyljLnNlcTFSYW5nZS5mb3JFYWNoKGQ9PntuaShlLmNoYXJDb2RlQXQoZCkpfHxzKyt9KTtmdW5jdGlvbiBsKGMpe2xldCBkPTA7Zm9yKGxldCBtPTA7bTxlLmxlbmd0aDttKyspbmkoYy5jaGFyQ29kZUF0KG0pKXx8ZCsrO3JldHVybiBkfWNvbnN0IGE9bChlLmxlbmd0aD50Lmxlbmd0aD9lOnQpO3JldHVybiBzL2E+LjYmJmE+MTB9ZnVuY3Rpb24gb3UoZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiBlO2Uuc29ydChWdChuPT5uLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixqdCkpO2NvbnN0IHQ9W2VbMF1dO2ZvcihsZXQgbj0xO248ZS5sZW5ndGg7bisrKXtjb25zdCBpPXRbdC5sZW5ndGgtMV0scj1lW25dLHM9ci5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItaS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLG89ci5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItaS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO2lmKHM+PTAmJm8+PTAmJnMrbzw9Mil7dFt0Lmxlbmd0aC0xXT1pLmpvaW4ocik7Y29udGludWV9dC5wdXNoKHIpfXJldHVybiB0fWZ1bmN0aW9uIGx1KGUsdCl7Y29uc3Qgbj1uZXcgWnQoZSk7cmV0dXJuIHQ9dC5maWx0ZXIoaT0+e2NvbnN0IHI9bi5maW5kTGFzdE1vbm90b25vdXMobD0+bC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI8aS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKXx8bmV3IF9lKG5ldyBxKDEsMSksbmV3IHEoMSwxKSkscz1sdChlLGw9PmwubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPGkubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuIHIhPT1zfSksdH1mdW5jdGlvbiBBcyhlLHQsbil7bGV0IGk9bjtyZXR1cm4gaT1TcyhlLHQsaSksaT1TcyhlLHQsaSksaT11dShlLHQsaSksaX1mdW5jdGlvbiBTcyhlLHQsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybiBuO2NvbnN0IGk9W107aS5wdXNoKG5bMF0pO2ZvcihsZXQgcz0xO3M8bi5sZW5ndGg7cysrKXtjb25zdCBvPWlbaS5sZW5ndGgtMV07bGV0IGw9bltzXTtpZihsLnNlcTFSYW5nZS5pc0VtcHR5fHxsLnNlcTJSYW5nZS5pc0VtcHR5KXtjb25zdCBhPWwuc2VxMVJhbmdlLnN0YXJ0LW8uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTtsZXQgdTtmb3IodT0xO3U8PWEmJiEoZS5nZXRFbGVtZW50KGwuc2VxMVJhbmdlLnN0YXJ0LXUpIT09ZS5nZXRFbGVtZW50KGwuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZS11KXx8dC5nZXRFbGVtZW50KGwuc2VxMlJhbmdlLnN0YXJ0LXUpIT09dC5nZXRFbGVtZW50KGwuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS11KSk7dSsrKTtpZih1LS0sdT09PWEpe2lbaS5sZW5ndGgtMV09bmV3IEsobmV3IGooby5zZXExUmFuZ2Uuc3RhcnQsbC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLWEpLG5ldyBqKG8uc2VxMlJhbmdlLnN0YXJ0LGwuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1hKSk7Y29udGludWV9bD1sLmRlbHRhKC11KX1pLnB1c2gobCl9Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGkubGVuZ3RoLTE7cysrKXtjb25zdCBvPWlbcysxXTtsZXQgbD1pW3NdO2lmKGwuc2VxMVJhbmdlLmlzRW1wdHl8fGwuc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IGE9by5zZXExUmFuZ2Uuc3RhcnQtbC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTA7dTxhJiYhKCFlLmlzU3Ryb25nbHlFcXVhbChsLnNlcTFSYW5nZS5zdGFydCt1LGwuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSt1KXx8IXQuaXNTdHJvbmdseUVxdWFsKGwuc2VxMlJhbmdlLnN0YXJ0K3UsbC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK3UpKTt1KyspO2lmKHU9PT1hKXtpW3MrMV09bmV3IEsobmV3IGoobC5zZXExUmFuZ2Uuc3RhcnQrYSxvLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpLG5ldyBqKGwuc2VxMlJhbmdlLnN0YXJ0K2Esby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKSk7Y29udGludWV9dT4wJiYobD1sLmRlbHRhKHUpKX1yLnB1c2gobCl9cmV0dXJuIGkubGVuZ3RoPjAmJnIucHVzaChpW2kubGVuZ3RoLTFdKSxyfWZ1bmN0aW9uIHV1KGUsdCxuKXtpZighZS5nZXRCb3VuZGFyeVNjb3JlfHwhdC5nZXRCb3VuZGFyeVNjb3JlKXJldHVybiBuO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtjb25zdCByPWk+MD9uW2ktMV06dm9pZCAwLHM9bltpXSxvPWkrMTxuLmxlbmd0aD9uW2krMV06dm9pZCAwLGw9bmV3IGoocj9yLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUrMTowLG8/by5zZXExUmFuZ2Uuc3RhcnQtMTplLmxlbmd0aCksYT1uZXcgaihyP3Iuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSsxOjAsbz9vLnNlcTJSYW5nZS5zdGFydC0xOnQubGVuZ3RoKTtzLnNlcTFSYW5nZS5pc0VtcHR5P25baV09THMocyxlLHQsbCxhKTpzLnNlcTJSYW5nZS5pc0VtcHR5JiYobltpXT1McyhzLnN3YXAoKSx0LGUsYSxsKS5zd2FwKCkpfXJldHVybiBufWZ1bmN0aW9uIExzKGUsdCxuLGkscil7bGV0IG89MTtmb3IoO2Uuc2VxMVJhbmdlLnN0YXJ0LW8+PWkuc3RhcnQmJmUuc2VxMlJhbmdlLnN0YXJ0LW8+PXIuc3RhcnQmJm4uaXNTdHJvbmdseUVxdWFsKGUuc2VxMlJhbmdlLnN0YXJ0LW8sZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLW8pJiZvPDEwMDspbysrO28tLTtsZXQgbD0wO2Zvcig7ZS5zZXExUmFuZ2Uuc3RhcnQrbDxpLmVuZEV4Y2x1c2l2ZSYmZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK2w8ci5lbmRFeGNsdXNpdmUmJm4uaXNTdHJvbmdseUVxdWFsKGUuc2VxMlJhbmdlLnN0YXJ0K2wsZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK2wpJiZsPDEwMDspbCsrO2lmKG89PT0wJiZsPT09MClyZXR1cm4gZTtsZXQgYT0wLHU9LTE7Zm9yKGxldCBjPS1vO2M8PWw7YysrKXtjb25zdCBkPWUuc2VxMlJhbmdlLnN0YXJ0K2MsbT1lLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrYyxmPWUuc2VxMVJhbmdlLnN0YXJ0K2MsXz10LmdldEJvdW5kYXJ5U2NvcmUoZikrbi5nZXRCb3VuZGFyeVNjb3JlKGQpK24uZ2V0Qm91bmRhcnlTY29yZShtKTtfPnUmJih1PV8sYT1jKX1yZXR1cm4gZS5kZWx0YShhKX1mdW5jdGlvbiBjdShlLHQsbil7Y29uc3QgaT1bXTtmb3IoY29uc3QgciBvZiBuKXtjb25zdCBzPWlbaS5sZW5ndGgtMV07aWYoIXMpe2kucHVzaChyKTtjb250aW51ZX1yLnNlcTFSYW5nZS5zdGFydC1zLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU8PTJ8fHIuc2VxMlJhbmdlLnN0YXJ0LXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mj9pW2kubGVuZ3RoLTFdPW5ldyBLKHMuc2VxMVJhbmdlLmpvaW4oci5zZXExUmFuZ2UpLHMuc2VxMlJhbmdlLmpvaW4oci5zZXEyUmFuZ2UpKTppLnB1c2gocil9cmV0dXJuIGl9ZnVuY3Rpb24gaHUoZSx0LG4pe2NvbnN0IGk9Sy5pbnZlcnQobixlLmxlbmd0aCkscj1bXTtsZXQgcz1uZXcgSWUoMCwwKTtmdW5jdGlvbiBvKGEsdSl7aWYoYS5vZmZzZXQxPHMub2Zmc2V0MXx8YS5vZmZzZXQyPHMub2Zmc2V0MilyZXR1cm47Y29uc3QgYz1lLmZpbmRXb3JkQ29udGFpbmluZyhhLm9mZnNldDEpLGQ9dC5maW5kV29yZENvbnRhaW5pbmcoYS5vZmZzZXQyKTtpZighY3x8IWQpcmV0dXJuO2xldCBtPW5ldyBLKGMsZCk7Y29uc3QgZj1tLmludGVyc2VjdCh1KTtsZXQgXz1mLnNlcTFSYW5nZS5sZW5ndGgsZz1mLnNlcTJSYW5nZS5sZW5ndGg7Zm9yKDtpLmxlbmd0aD4wOyl7Y29uc3QgQT1pWzBdO2lmKCEoQS5zZXExUmFuZ2UuaW50ZXJzZWN0cyhtLnNlcTFSYW5nZSl8fEEuc2VxMlJhbmdlLmludGVyc2VjdHMobS5zZXEyUmFuZ2UpKSlicmVhaztjb25zdCB5PWUuZmluZFdvcmRDb250YWluaW5nKEEuc2VxMVJhbmdlLnN0YXJ0KSxFPXQuZmluZFdvcmRDb250YWluaW5nKEEuc2VxMlJhbmdlLnN0YXJ0KSxSPW5ldyBLKHksRSksTj1SLmludGVyc2VjdChBKTtpZihfKz1OLnNlcTFSYW5nZS5sZW5ndGgsZys9Ti5zZXEyUmFuZ2UubGVuZ3RoLG09bS5qb2luKFIpLG0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49QS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlKWkuc2hpZnQoKTtlbHNlIGJyZWFrfV8rZzwobS5zZXExUmFuZ2UubGVuZ3RoK20uc2VxMlJhbmdlLmxlbmd0aCkqMi8zJiZyLnB1c2gobSkscz1tLmdldEVuZEV4Y2x1c2l2ZXMoKX1mb3IoO2kubGVuZ3RoPjA7KXtjb25zdCBhPWkuc2hpZnQoKTthLnNlcTFSYW5nZS5pc0VtcHR5fHwobyhhLmdldFN0YXJ0cygpLGEpLG8oYS5nZXRFbmRFeGNsdXNpdmVzKCkuZGVsdGEoLTEpLGEpKX1yZXR1cm4gZHUobixyKX1mdW5jdGlvbiBkdShlLHQpe2NvbnN0IG49W107Zm9yKDtlLmxlbmd0aD4wfHx0Lmxlbmd0aD4wOyl7Y29uc3QgaT1lWzBdLHI9dFswXTtsZXQgcztpJiYoIXJ8fGkuc2VxMVJhbmdlLnN0YXJ0PHIuc2VxMVJhbmdlLnN0YXJ0KT9zPWUuc2hpZnQoKTpzPXQuc2hpZnQoKSxuLmxlbmd0aD4wJiZuW24ubGVuZ3RoLTFdLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU+PXMuc2VxMVJhbmdlLnN0YXJ0P25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5qb2luKHMpOm4ucHVzaChzKX1yZXR1cm4gbn1mdW5jdGlvbiBtdShlLHQsbil7bGV0IGk9bjtpZihpLmxlbmd0aD09PTApcmV0dXJuIGk7bGV0IHI9MCxzO2Rve3M9ITE7Y29uc3Qgbz1baVswXV07Zm9yKGxldCBsPTE7bDxpLmxlbmd0aDtsKyspe2xldCBjPWZ1bmN0aW9uKG0sZil7Y29uc3QgXz1uZXcgaih1LnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUsYS5zZXExUmFuZ2Uuc3RhcnQpO3JldHVybiBlLmdldFRleHQoXykucmVwbGFjZSgvXHMvZywiIikubGVuZ3RoPD00JiYobS5zZXExUmFuZ2UubGVuZ3RoK20uc2VxMlJhbmdlLmxlbmd0aD41fHxmLnNlcTFSYW5nZS5sZW5ndGgrZi5zZXEyUmFuZ2UubGVuZ3RoPjUpfTtjb25zdCBhPWlbbF0sdT1vW28ubGVuZ3RoLTFdO2ModSxhKT8ocz0hMCxvW28ubGVuZ3RoLTFdPW9bby5sZW5ndGgtMV0uam9pbihhKSk6by5wdXNoKGEpfWk9b313aGlsZShyKys8MTAmJnMpO3JldHVybiBpfWZ1bmN0aW9uIGZ1KGUsdCxuKXtsZXQgaT1uO2lmKGkubGVuZ3RoPT09MClyZXR1cm4gaTtsZXQgcj0wLHM7ZG97cz0hMTtjb25zdCBsPVtpWzBdXTtmb3IobGV0IGE9MTthPGkubGVuZ3RoO2ErKyl7bGV0IGQ9ZnVuY3Rpb24oZixfKXtjb25zdCBnPW5ldyBqKGMuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSx1LnNlcTFSYW5nZS5zdGFydCk7aWYoZS5jb3VudExpbmVzSW4oZyk+NXx8Zy5sZW5ndGg+NTAwKXJldHVybiExO2NvbnN0IHY9ZS5nZXRUZXh0KGcpLnRyaW0oKTtpZih2Lmxlbmd0aD4yMHx8di5zcGxpdCgvXHJcbnxccnxcbi8pLmxlbmd0aD4xKXJldHVybiExO2NvbnN0IHk9ZS5jb3VudExpbmVzSW4oZi5zZXExUmFuZ2UpLEU9Zi5zZXExUmFuZ2UubGVuZ3RoLFI9dC5jb3VudExpbmVzSW4oZi5zZXEyUmFuZ2UpLE49Zi5zZXEyUmFuZ2UubGVuZ3RoLE09ZS5jb3VudExpbmVzSW4oXy5zZXExUmFuZ2UpLGI9Xy5zZXExUmFuZ2UubGVuZ3RoLHA9dC5jb3VudExpbmVzSW4oXy5zZXEyUmFuZ2UpLFQ9Xy5zZXEyUmFuZ2UubGVuZ3RoLEg9Mio0MCs1MDtmdW5jdGlvbiBMKHcpe3JldHVybiBNYXRoLm1pbih3LEgpfXJldHVybiBNYXRoLnBvdyhNYXRoLnBvdyhMKHkqNDArRSksMS41KStNYXRoLnBvdyhMKFIqNDArTiksMS41KSwxLjUpK01hdGgucG93KE1hdGgucG93KEwoTSo0MCtiKSwxLjUpK01hdGgucG93KEwocCo0MCtUKSwxLjUpLDEuNSk+KEgqKjEuNSkqKjEuNSoxLjN9O2NvbnN0IHU9aVthXSxjPWxbbC5sZW5ndGgtMV07ZChjLHUpPyhzPSEwLGxbbC5sZW5ndGgtMV09bFtsLmxlbmd0aC0xXS5qb2luKHUpKTpsLnB1c2godSl9aT1sfXdoaWxlKHIrKzwxMCYmcyk7Y29uc3Qgbz1bXTtyZXR1cm4gbGwoaSwobCxhLHUpPT57bGV0IGM9YTtmdW5jdGlvbiBkKHYpe3JldHVybiB2Lmxlbmd0aD4wJiZ2LnRyaW0oKS5sZW5ndGg8PTMmJmEuc2VxMVJhbmdlLmxlbmd0aCthLnNlcTJSYW5nZS5sZW5ndGg+MTAwfWNvbnN0IG09ZS5leHRlbmRUb0Z1bGxMaW5lcyhhLnNlcTFSYW5nZSksZj1lLmdldFRleHQobmV3IGoobS5zdGFydCxhLnNlcTFSYW5nZS5zdGFydCkpO2QoZikmJihjPWMuZGVsdGFTdGFydCgtZi5sZW5ndGgpKTtjb25zdCBfPWUuZ2V0VGV4dChuZXcgaihhLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUsbS5lbmRFeGNsdXNpdmUpKTtkKF8pJiYoYz1jLmRlbHRhRW5kKF8ubGVuZ3RoKSk7Y29uc3QgZz1LLmZyb21PZmZzZXRQYWlycyhsP2wuZ2V0RW5kRXhjbHVzaXZlcygpOkllLnplcm8sdT91LmdldFN0YXJ0cygpOkllLm1heCksQT1jLmludGVyc2VjdChnKTtvLmxlbmd0aD4wJiZBLmdldFN0YXJ0cygpLmVxdWFscyhvW28ubGVuZ3RoLTFdLmdldEVuZEV4Y2x1c2l2ZXMoKSk/b1tvLmxlbmd0aC0xXT1vW28ubGVuZ3RoLTFdLmpvaW4oQSk6by5wdXNoKEEpfSksb31jbGFzcyBDc3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHJpbW1lZEhhc2g9dCx0aGlzLmxpbmVzPW59Z2V0RWxlbWVudCh0KXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaFt0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMudHJpbW1lZEhhc2gubGVuZ3RofWdldEJvdW5kYXJ5U2NvcmUodCl7Y29uc3Qgbj10PT09MD8wOkVzKHRoaXMubGluZXNbdC0xXSksaT10PT09dGhpcy5saW5lcy5sZW5ndGg/MDpFcyh0aGlzLmxpbmVzW3RdKTtyZXR1cm4gMWUzLShuK2kpfWdldFRleHQodCl7cmV0dXJuIHRoaXMubGluZXMuc2xpY2UodC5zdGFydCx0LmVuZEV4Y2x1c2l2ZSkuam9pbihgCmApfWlzU3Ryb25nbHlFcXVhbCh0LG4pe3JldHVybiB0aGlzLmxpbmVzW3RdPT09dGhpcy5saW5lc1tuXX19ZnVuY3Rpb24gRXMoZSl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGgmJihlLmNoYXJDb2RlQXQodCk9PT0zMnx8ZS5jaGFyQ29kZUF0KHQpPT09OSk7KXQrKztyZXR1cm4gdH1jbGFzcyBwdXtjb25zdHJ1Y3Rvcigpe3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZz1uZXcgS2wsdGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG09bmV3IHZzfWNvbXB1dGVEaWZmKHQsbixpKXtpZih0Lmxlbmd0aDw9MSYmc2wodCxuLChOLE0pPT5OPT09TSkpcmV0dXJuIG5ldyBRdChbXSxbXSwhMSk7aWYodC5sZW5ndGg9PT0xJiZ0WzBdLmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MSYmblswXS5sZW5ndGg9PT0wKXJldHVybiBuZXcgUXQoW25ldyBOZShuZXcgcSgxLHQubGVuZ3RoKzEpLG5ldyBxKDEsbi5sZW5ndGgrMSksW25ldyB4ZShuZXcgJCgxLDEsdC5sZW5ndGgsdFt0Lmxlbmd0aC0xXS5sZW5ndGgrMSksbmV3ICQoMSwxLG4ubGVuZ3RoLG5bbi5sZW5ndGgtMV0ubGVuZ3RoKzEpKV0pXSxbXSwhMSk7Y29uc3Qgcj1pLm1heENvbXB1dGF0aW9uVGltZU1zPT09MD9DdC5pbnN0YW5jZTpuZXcgWmwoaS5tYXhDb21wdXRhdGlvblRpbWVNcykscz0haS5pZ25vcmVUcmltV2hpdGVzcGFjZSxvPW5ldyBNYXA7ZnVuY3Rpb24gbChOKXtsZXQgTT1vLmdldChOKTtyZXR1cm4gTT09PXZvaWQgMCYmKE09by5zaXplLG8uc2V0KE4sTSkpLE19Y29uc3QgYT10Lm1hcChOPT5sKE4udHJpbSgpKSksdT1uLm1hcChOPT5sKE4udHJpbSgpKSksYz1uZXcgQ3MoYSx0KSxkPW5ldyBDcyh1LG4pLG09Yy5sZW5ndGgrZC5sZW5ndGg8MTcwMD90aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmcuY29tcHV0ZShjLGQsciwoTixNKT0+dFtOXT09PW5bTV0/bltNXS5sZW5ndGg9PT0wPy4xOjErTWF0aC5sb2coMStuW01dLmxlbmd0aCk6Ljk5KTp0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobS5jb21wdXRlKGMsZCxyKTtsZXQgZj1tLmRpZmZzLF89bS5oaXRUaW1lb3V0O2Y9QXMoYyxkLGYpLGY9bXUoYyxkLGYpO2NvbnN0IGc9W10sQT1OPT57aWYocylmb3IobGV0IE09MDtNPE47TSsrKXtjb25zdCBiPXYrTSxwPXkrTTtpZih0W2JdIT09bltwXSl7Y29uc3QgVD10aGlzLnJlZmluZURpZmYodCxuLG5ldyBLKG5ldyBqKGIsYisxKSxuZXcgaihwLHArMSkpLHIscyk7Zm9yKGNvbnN0IEggb2YgVC5tYXBwaW5ncylnLnB1c2goSCk7VC5oaXRUaW1lb3V0JiYoXz0hMCl9fX07bGV0IHY9MCx5PTA7Zm9yKGNvbnN0IE4gb2YgZil7WXQoKCk9Pk4uc2VxMVJhbmdlLnN0YXJ0LXY9PT1OLnNlcTJSYW5nZS5zdGFydC15KTtjb25zdCBNPU4uc2VxMVJhbmdlLnN0YXJ0LXY7QShNKSx2PU4uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSx5PU4uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTtjb25zdCBiPXRoaXMucmVmaW5lRGlmZih0LG4sTixyLHMpO2IuaGl0VGltZW91dCYmKF89ITApO2Zvcihjb25zdCBwIG9mIGIubWFwcGluZ3MpZy5wdXNoKHApfUEodC5sZW5ndGgtdik7Y29uc3QgRT1ScyhnLHQsbik7bGV0IFI9W107cmV0dXJuIGkuY29tcHV0ZU1vdmVzJiYoUj10aGlzLmNvbXB1dGVNb3ZlcyhFLHQsbixhLHUscixzKSksWXQoKCk9PntmdW5jdGlvbiBOKGIscCl7aWYoYi5saW5lTnVtYmVyPDF8fGIubGluZU51bWJlcj5wLmxlbmd0aClyZXR1cm4hMTtjb25zdCBUPXBbYi5saW5lTnVtYmVyLTFdO3JldHVybiEoYi5jb2x1bW48MXx8Yi5jb2x1bW4+VC5sZW5ndGgrMSl9ZnVuY3Rpb24gTShiLHApe3JldHVybiEoYi5zdGFydExpbmVOdW1iZXI8MXx8Yi5zdGFydExpbmVOdW1iZXI+cC5sZW5ndGgrMXx8Yi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPDF8fGIuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT5wLmxlbmd0aCsxKX1mb3IoY29uc3QgYiBvZiBFKXtpZighYi5pbm5lckNoYW5nZXMpcmV0dXJuITE7Zm9yKGNvbnN0IHAgb2YgYi5pbm5lckNoYW5nZXMpaWYoIShOKHAubW9kaWZpZWRSYW5nZS5nZXRTdGFydFBvc2l0aW9uKCksbikmJk4ocC5tb2RpZmllZFJhbmdlLmdldEVuZFBvc2l0aW9uKCksbikmJk4ocC5vcmlnaW5hbFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSx0KSYmTihwLm9yaWdpbmFsUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKSx0KSkpcmV0dXJuITE7aWYoIU0oYi5tb2RpZmllZCxuKXx8IU0oYi5vcmlnaW5hbCx0KSlyZXR1cm4hMX1yZXR1cm4hMH0pLG5ldyBRdChFLFIsXyl9Y29tcHV0ZU1vdmVzKHQsbixpLHIscyxvLGwpe3JldHVybiBpdSh0LG4saSxyLHMsbykubWFwKGM9Pntjb25zdCBkPXRoaXMucmVmaW5lRGlmZihuLGksbmV3IEsoYy5vcmlnaW5hbC50b09mZnNldFJhbmdlKCksYy5tb2RpZmllZC50b09mZnNldFJhbmdlKCkpLG8sbCksbT1ScyhkLm1hcHBpbmdzLG4saSwhMCk7cmV0dXJuIG5ldyBWbChjLG0pfSl9cmVmaW5lRGlmZih0LG4saSxyLHMpe2NvbnN0IGw9YnUoaSkudG9SYW5nZU1hcHBpbmcyKHQsbiksYT1uZXcgZW4odCxsLm9yaWdpbmFsUmFuZ2UscyksdT1uZXcgZW4obixsLm1vZGlmaWVkUmFuZ2UscyksYz1hLmxlbmd0aCt1Lmxlbmd0aDw1MDA/dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nLmNvbXB1dGUoYSx1LHIpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUoYSx1LHIpO2xldCBkPWMuZGlmZnM7cmV0dXJuIGQ9QXMoYSx1LGQpLGQ9aHUoYSx1LGQpLGQ9Y3UoYSx1LGQpLGQ9ZnUoYSx1LGQpLHttYXBwaW5nczpkLm1hcChmPT5uZXcgeGUoYS50cmFuc2xhdGVSYW5nZShmLnNlcTFSYW5nZSksdS50cmFuc2xhdGVSYW5nZShmLnNlcTJSYW5nZSkpKSxoaXRUaW1lb3V0OmMuaGl0VGltZW91dH19fWZ1bmN0aW9uIFJzKGUsdCxuLGk9ITEpe2NvbnN0IHI9W107Zm9yKGNvbnN0IHMgb2YgYWwoZS5tYXAobz0+Z3Uobyx0LG4pKSwobyxsKT0+by5vcmlnaW5hbC5vdmVybGFwT3JUb3VjaChsLm9yaWdpbmFsKXx8by5tb2RpZmllZC5vdmVybGFwT3JUb3VjaChsLm1vZGlmaWVkKSkpe2NvbnN0IG89c1swXSxsPXNbcy5sZW5ndGgtMV07ci5wdXNoKG5ldyBOZShvLm9yaWdpbmFsLmpvaW4obC5vcmlnaW5hbCksby5tb2RpZmllZC5qb2luKGwubW9kaWZpZWQpLHMubWFwKGE9PmEuaW5uZXJDaGFuZ2VzWzBdKSkpfXJldHVybiBZdCgoKT0+IWkmJnIubGVuZ3RoPjAmJihyWzBdLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciE9PXJbMF0ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyfHxuLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUhPT10Lmxlbmd0aC1yW3IubGVuZ3RoLTFdLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpPyExOmRzKHIsKHMsbyk9Pm8ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PW8ubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPG8ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyJiZzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8by5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKSxyfWZ1bmN0aW9uIGd1KGUsdCxuKXtsZXQgaT0wLHI9MDtlLm1vZGlmaWVkUmFuZ2UuZW5kQ29sdW1uPT09MSYmZS5vcmlnaW5hbFJhbmdlLmVuZENvbHVtbj09PTEmJmUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIraTw9ZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXImJmUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIraTw9ZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXImJihyPS0xKSxlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRDb2x1bW4tMT49bltlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLTFdLmxlbmd0aCYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0Q29sdW1uLTE+PXRbZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlci0xXS5sZW5ndGgmJmUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXI8PWUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyK3ImJmUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXI8PWUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyK3ImJihpPTEpO2NvbnN0IHM9bmV3IHEoZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcitpLGUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyKzErciksbz1uZXcgcShlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK2ksZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIrMStyKTtyZXR1cm4gbmV3IE5lKHMsbyxbZV0pfWZ1bmN0aW9uIGJ1KGUpe3JldHVybiBuZXcgX2UobmV3IHEoZS5zZXExUmFuZ2Uuc3RhcnQrMSxlLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUrMSksbmV3IHEoZS5zZXEyUmFuZ2Uuc3RhcnQrMSxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrMSkpfWNvbnN0IE1zPXtnZXRMZWdhY3k6KCk9Pm5ldyBYbCxnZXREZWZhdWx0OigpPT5uZXcgcHV9O2Z1bmN0aW9uIE9lKGUsdCl7Y29uc3Qgbj1NYXRoLnBvdygxMCx0KTtyZXR1cm4gTWF0aC5yb3VuZChlKm4pL259Y2xhc3MgaWV7Y29uc3RydWN0b3IodCxuLGkscj0xKXt0aGlzLl9yZ2JhQnJhbmQ9dm9pZCAwLHRoaXMucj1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCx0KSl8MCx0aGlzLmc9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsbikpfDAsdGhpcy5iPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLGkpKXwwLHRoaXMuYT1PZShNYXRoLm1heChNYXRoLm1pbigxLHIpLDApLDMpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4gdC5yPT09bi5yJiZ0Lmc9PT1uLmcmJnQuYj09PW4uYiYmdC5hPT09bi5hfX1jbGFzcyB3ZXtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLl9oc2xhQnJhbmQ9dm9pZCAwLHRoaXMuaD1NYXRoLm1heChNYXRoLm1pbigzNjAsdCksMCl8MCx0aGlzLnM9T2UoTWF0aC5tYXgoTWF0aC5taW4oMSxuKSwwKSwzKSx0aGlzLmw9T2UoTWF0aC5tYXgoTWF0aC5taW4oMSxpKSwwKSwzKSx0aGlzLmE9T2UoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQuaD09PW4uaCYmdC5zPT09bi5zJiZ0Lmw9PT1uLmwmJnQuYT09PW4uYX1zdGF0aWMgZnJvbVJHQkEodCl7Y29uc3Qgbj10LnIvMjU1LGk9dC5nLzI1NSxyPXQuYi8yNTUscz10LmEsbz1NYXRoLm1heChuLGksciksbD1NYXRoLm1pbihuLGkscik7bGV0IGE9MCx1PTA7Y29uc3QgYz0obCtvKS8yLGQ9by1sO2lmKGQ+MCl7c3dpdGNoKHU9TWF0aC5taW4oYzw9LjU/ZC8oMipjKTpkLygyLTIqYyksMSksbyl7Y2FzZSBuOmE9KGktcikvZCsoaTxyPzY6MCk7YnJlYWs7Y2FzZSBpOmE9KHItbikvZCsyO2JyZWFrO2Nhc2UgcjphPShuLWkpL2QrNDticmVha31hKj02MCxhPU1hdGgucm91bmQoYSl9cmV0dXJuIG5ldyB3ZShhLHUsYyxzKX1zdGF0aWMgX2h1ZTJyZ2IodCxuLGkpe3JldHVybiBpPDAmJihpKz0xKSxpPjEmJihpLT0xKSxpPDEvNj90KyhuLXQpKjYqaTppPDEvMj9uOmk8Mi8zP3QrKG4tdCkqKDIvMy1pKSo2OnR9c3RhdGljIHRvUkdCQSh0KXtjb25zdCBuPXQuaC8zNjAse3M6aSxsOnIsYTpzfT10O2xldCBvLGwsYTtpZihpPT09MClvPWw9YT1yO2Vsc2V7Y29uc3QgdT1yPC41P3IqKDEraSk6citpLXIqaSxjPTIqci11O289d2UuX2h1ZTJyZ2IoYyx1LG4rMS8zKSxsPXdlLl9odWUycmdiKGMsdSxuKSxhPXdlLl9odWUycmdiKGMsdSxuLTEvMyl9cmV0dXJuIG5ldyBpZShNYXRoLnJvdW5kKG8qMjU1KSxNYXRoLnJvdW5kKGwqMjU1KSxNYXRoLnJvdW5kKGEqMjU1KSxzKX19Y2xhc3MgaHR7Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy5faHN2YUJyYW5kPXZvaWQgMCx0aGlzLmg9TWF0aC5tYXgoTWF0aC5taW4oMzYwLHQpLDApfDAsdGhpcy5zPU9lKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy52PU9lKE1hdGgubWF4KE1hdGgubWluKDEsaSksMCksMyksdGhpcy5hPU9lKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0Lmg9PT1uLmgmJnQucz09PW4ucyYmdC52PT09bi52JiZ0LmE9PT1uLmF9c3RhdGljIGZyb21SR0JBKHQpe2NvbnN0IG49dC5yLzI1NSxpPXQuZy8yNTUscj10LmIvMjU1LHM9TWF0aC5tYXgobixpLHIpLG89TWF0aC5taW4obixpLHIpLGw9cy1vLGE9cz09PTA/MDpsL3M7bGV0IHU7cmV0dXJuIGw9PT0wP3U9MDpzPT09bj91PSgoaS1yKS9sJTYrNiklNjpzPT09aT91PShyLW4pL2wrMjp1PShuLWkpL2wrNCxuZXcgaHQoTWF0aC5yb3VuZCh1KjYwKSxhLHMsdC5hKX1zdGF0aWMgdG9SR0JBKHQpe2NvbnN0e2g6bixzOmksdjpyLGE6c309dCxvPXIqaSxsPW8qKDEtTWF0aC5hYnMobi82MCUyLTEpKSxhPXItbztsZXRbdSxjLGRdPVswLDAsMF07cmV0dXJuIG48NjA/KHU9byxjPWwpOm48MTIwPyh1PWwsYz1vKTpuPDE4MD8oYz1vLGQ9bCk6bjwyNDA/KGM9bCxkPW8pOm48MzAwPyh1PWwsZD1vKTpuPD0zNjAmJih1PW8sZD1sKSx1PU1hdGgucm91bmQoKHUrYSkqMjU1KSxjPU1hdGgucm91bmQoKGMrYSkqMjU1KSxkPU1hdGgucm91bmQoKGQrYSkqMjU1KSxuZXcgaWUodSxjLGQscyl9fWxldCB0bj0oWD1jbGFzc3tzdGF0aWMgZnJvbUhleCh0KXtyZXR1cm4gWC5Gb3JtYXQuQ1NTLnBhcnNlSGV4KHQpfHxYLnJlZH1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIXQmJiFuPyEwOiF0fHwhbj8hMTp0LmVxdWFscyhuKX1nZXQgaHNsYSgpe3JldHVybiB0aGlzLl9oc2xhP3RoaXMuX2hzbGE6d2UuZnJvbVJHQkEodGhpcy5yZ2JhKX1nZXQgaHN2YSgpe3JldHVybiB0aGlzLl9oc3ZhP3RoaXMuX2hzdmE6aHQuZnJvbVJHQkEodGhpcy5yZ2JhKX1jb25zdHJ1Y3Rvcih0KXtpZih0KWlmKHQgaW5zdGFuY2VvZiBpZSl0aGlzLnJnYmE9dDtlbHNlIGlmKHQgaW5zdGFuY2VvZiB3ZSl0aGlzLl9oc2xhPXQsdGhpcy5yZ2JhPXdlLnRvUkdCQSh0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBodCl0aGlzLl9oc3ZhPXQsdGhpcy5yZ2JhPWh0LnRvUkdCQSh0KTtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciBjdG9yIGFyZ3VtZW50Iik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIG5lZWRzIGEgdmFsdWUiKX1lcXVhbHModCl7cmV0dXJuISF0JiZpZS5lcXVhbHModGhpcy5yZ2JhLHQucmdiYSkmJndlLmVxdWFscyh0aGlzLmhzbGEsdC5oc2xhKSYmaHQuZXF1YWxzKHRoaXMuaHN2YSx0LmhzdmEpfWdldFJlbGF0aXZlTHVtaW5hbmNlKCl7Y29uc3QgdD1YLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuciksbj1YLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuZyksaT1YLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuYikscj0uMjEyNip0Ky43MTUyKm4rLjA3MjIqaTtyZXR1cm4gT2Uociw0KX1zdGF0aWMgX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHQpe2NvbnN0IG49dC8yNTU7cmV0dXJuIG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9aXNMaWdodGVyKCl7cmV0dXJuKHRoaXMucmdiYS5yKjI5OSt0aGlzLnJnYmEuZyo1ODcrdGhpcy5yZ2JhLmIqMTE0KS8xZTM+PTEyOH1pc0xpZ2h0ZXJUaGFuKHQpe2NvbnN0IG49dGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLGk9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPml9aXNEYXJrZXJUaGFuKHQpe2NvbnN0IG49dGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLGk9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPGl9bGlnaHRlbih0KXtyZXR1cm4gbmV3IFgobmV3IHdlKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sK3RoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX1kYXJrZW4odCl7cmV0dXJuIG5ldyBYKG5ldyB3ZSh0aGlzLmhzbGEuaCx0aGlzLmhzbGEucyx0aGlzLmhzbGEubC10aGlzLmhzbGEubCp0LHRoaXMuaHNsYS5hKSl9dHJhbnNwYXJlbnQodCl7Y29uc3R7cjpuLGc6aSxiOnIsYTpzfT10aGlzLnJnYmE7cmV0dXJuIG5ldyBYKG5ldyBpZShuLGkscixzKnQpKX1pc1RyYW5zcGFyZW50KCl7cmV0dXJuIHRoaXMucmdiYS5hPT09MH1pc09wYXF1ZSgpe3JldHVybiB0aGlzLnJnYmEuYT09PTF9b3Bwb3NpdGUoKXtyZXR1cm4gbmV3IFgobmV3IGllKDI1NS10aGlzLnJnYmEuciwyNTUtdGhpcy5yZ2JhLmcsMjU1LXRoaXMucmdiYS5iLHRoaXMucmdiYS5hKSl9bWFrZU9wYXF1ZSh0KXtpZih0aGlzLmlzT3BhcXVlKCl8fHQucmdiYS5hIT09MSlyZXR1cm4gdGhpcztjb25zdHtyOm4sZzppLGI6cixhOnN9PXRoaXMucmdiYTtyZXR1cm4gbmV3IFgobmV3IGllKHQucmdiYS5yLXMqKHQucmdiYS5yLW4pLHQucmdiYS5nLXMqKHQucmdiYS5nLWkpLHQucmdiYS5iLXMqKHQucmdiYS5iLXIpLDEpKX10b1N0cmluZygpe3JldHVybiB0aGlzLl90b1N0cmluZ3x8KHRoaXMuX3RvU3RyaW5nPVguRm9ybWF0LkNTUy5mb3JtYXQodGhpcykpLHRoaXMuX3RvU3RyaW5nfXN0YXRpYyBnZXRMaWdodGVyQ29sb3IodCxuLGkpe2lmKHQuaXNMaWdodGVyVGhhbihuKSlyZXR1cm4gdDtpPWl8fC41O2NvbnN0IHI9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHM9bi5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBpPWkqKHMtcikvcyx0LmxpZ2h0ZW4oaSl9c3RhdGljIGdldERhcmtlckNvbG9yKHQsbixpKXtpZih0LmlzRGFya2VyVGhhbihuKSlyZXR1cm4gdDtpPWl8fC41O2NvbnN0IHI9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHM9bi5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBpPWkqKHItcykvcix0LmRhcmtlbihpKX19LFgud2hpdGU9bmV3IFgobmV3IGllKDI1NSwyNTUsMjU1LDEpKSxYLmJsYWNrPW5ldyBYKG5ldyBpZSgwLDAsMCwxKSksWC5yZWQ9bmV3IFgobmV3IGllKDI1NSwwLDAsMSkpLFguYmx1ZT1uZXcgWChuZXcgaWUoMCwwLDI1NSwxKSksWC5ncmVlbj1uZXcgWChuZXcgaWUoMCwyNTUsMCwxKSksWC5jeWFuPW5ldyBYKG5ldyBpZSgwLDI1NSwyNTUsMSkpLFgubGlnaHRncmV5PW5ldyBYKG5ldyBpZSgyMTEsMjExLDIxMSwxKSksWC50cmFuc3BhcmVudD1uZXcgWChuZXcgaWUoMCwwLDAsMCkpLFgpOyhmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGkoZil7cmV0dXJuIGYucmdiYS5hPT09MT9gcmdiKCR7Zi5yZ2JhLnJ9LCAke2YucmdiYS5nfSwgJHtmLnJnYmEuYn0pYDplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQShmKX1uLmZvcm1hdFJHQj1pO2Z1bmN0aW9uIHIoZil7cmV0dXJuYHJnYmEoJHtmLnJnYmEucn0sICR7Zi5yZ2JhLmd9LCAke2YucmdiYS5ifSwgJHsrZi5yZ2JhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdFJHQkE9cjtmdW5jdGlvbiBzKGYpe3JldHVybiBmLmhzbGEuYT09PTE/YGhzbCgke2YuaHNsYS5ofSwgJHsoZi5oc2xhLnMqMTAwKS50b0ZpeGVkKDIpfSUsICR7KGYuaHNsYS5sKjEwMCkudG9GaXhlZCgyKX0lKWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhTTEEoZil9bi5mb3JtYXRIU0w9cztmdW5jdGlvbiBvKGYpe3JldHVybmBoc2xhKCR7Zi5oc2xhLmh9LCAkeyhmLmhzbGEucyoxMDApLnRvRml4ZWQoMil9JSwgJHsoZi5oc2xhLmwqMTAwKS50b0ZpeGVkKDIpfSUsICR7Zi5oc2xhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdEhTTEE9bztmdW5jdGlvbiBsKGYpe2NvbnN0IF89Zi50b1N0cmluZygxNik7cmV0dXJuIF8ubGVuZ3RoIT09Mj8iMCIrXzpffWZ1bmN0aW9uIGEoZil7cmV0dXJuYCMke2woZi5yZ2JhLnIpfSR7bChmLnJnYmEuZyl9JHtsKGYucmdiYS5iKX1gfW4uZm9ybWF0SGV4PWE7ZnVuY3Rpb24gdShmLF89ITEpe3JldHVybiBfJiZmLnJnYmEuYT09PTE/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleChmKTpgIyR7bChmLnJnYmEucil9JHtsKGYucmdiYS5nKX0ke2woZi5yZ2JhLmIpfSR7bChNYXRoLnJvdW5kKGYucmdiYS5hKjI1NSkpfWB9bi5mb3JtYXRIZXhBPXU7ZnVuY3Rpb24gYyhmKXtyZXR1cm4gZi5pc09wYXF1ZSgpP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgoZik6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEoZil9bi5mb3JtYXQ9YztmdW5jdGlvbiBkKGYpe2NvbnN0IF89Zi5sZW5ndGg7aWYoXz09PTB8fGYuY2hhckNvZGVBdCgwKSE9PTM1KXJldHVybiBudWxsO2lmKF89PT03KXtjb25zdCBnPTE2Km0oZi5jaGFyQ29kZUF0KDEpKSttKGYuY2hhckNvZGVBdCgyKSksQT0xNiptKGYuY2hhckNvZGVBdCgzKSkrbShmLmNoYXJDb2RlQXQoNCkpLHY9MTYqbShmLmNoYXJDb2RlQXQoNSkpK20oZi5jaGFyQ29kZUF0KDYpKTtyZXR1cm4gbmV3IGUobmV3IGllKGcsQSx2LDEpKX1pZihfPT09OSl7Y29uc3QgZz0xNiptKGYuY2hhckNvZGVBdCgxKSkrbShmLmNoYXJDb2RlQXQoMikpLEE9MTYqbShmLmNoYXJDb2RlQXQoMykpK20oZi5jaGFyQ29kZUF0KDQpKSx2PTE2Km0oZi5jaGFyQ29kZUF0KDUpKSttKGYuY2hhckNvZGVBdCg2KSkseT0xNiptKGYuY2hhckNvZGVBdCg3KSkrbShmLmNoYXJDb2RlQXQoOCkpO3JldHVybiBuZXcgZShuZXcgaWUoZyxBLHYseS8yNTUpKX1pZihfPT09NCl7Y29uc3QgZz1tKGYuY2hhckNvZGVBdCgxKSksQT1tKGYuY2hhckNvZGVBdCgyKSksdj1tKGYuY2hhckNvZGVBdCgzKSk7cmV0dXJuIG5ldyBlKG5ldyBpZSgxNipnK2csMTYqQStBLDE2KnYrdikpfWlmKF89PT01KXtjb25zdCBnPW0oZi5jaGFyQ29kZUF0KDEpKSxBPW0oZi5jaGFyQ29kZUF0KDIpKSx2PW0oZi5jaGFyQ29kZUF0KDMpKSx5PW0oZi5jaGFyQ29kZUF0KDQpKTtyZXR1cm4gbmV3IGUobmV3IGllKDE2KmcrZywxNipBK0EsMTYqdit2LCgxNip5K3kpLzI1NSkpfXJldHVybiBudWxsfW4ucGFyc2VIZXg9ZDtmdW5jdGlvbiBtKGYpe3N3aXRjaChmKXtjYXNlIDQ4OnJldHVybiAwO2Nhc2UgNDk6cmV0dXJuIDE7Y2FzZSA1MDpyZXR1cm4gMjtjYXNlIDUxOnJldHVybiAzO2Nhc2UgNTI6cmV0dXJuIDQ7Y2FzZSA1MzpyZXR1cm4gNTtjYXNlIDU0OnJldHVybiA2O2Nhc2UgNTU6cmV0dXJuIDc7Y2FzZSA1NjpyZXR1cm4gODtjYXNlIDU3OnJldHVybiA5O2Nhc2UgOTc6cmV0dXJuIDEwO2Nhc2UgNjU6cmV0dXJuIDEwO2Nhc2UgOTg6cmV0dXJuIDExO2Nhc2UgNjY6cmV0dXJuIDExO2Nhc2UgOTk6cmV0dXJuIDEyO2Nhc2UgNjc6cmV0dXJuIDEyO2Nhc2UgMTAwOnJldHVybiAxMztjYXNlIDY4OnJldHVybiAxMztjYXNlIDEwMTpyZXR1cm4gMTQ7Y2FzZSA2OTpyZXR1cm4gMTQ7Y2FzZSAxMDI6cmV0dXJuIDE1O2Nhc2UgNzA6cmV0dXJuIDE1fXJldHVybiAwfX0pKHQuQ1NTfHwodC5DU1M9e30pKX0pKGUuRm9ybWF0fHwoZS5Gb3JtYXQ9e30pKX0pKHRufHwodG49e30pKTtmdW5jdGlvbiBOcyhlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IGk9TnVtYmVyKG4pOyhpfHxpPT09MCYmbi5yZXBsYWNlKC9ccy9nLCIiKSE9PSIiKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIHJpKGUsdCxuLGkpe3JldHVybntyZWQ6ZS8yNTUsYmx1ZTpuLzI1NSxncmVlbjp0LzI1NSxhbHBoYTppfX1mdW5jdGlvbiBFdChlLHQpe2NvbnN0IG49dC5pbmRleCxpPXRbMF0ubGVuZ3RoO2lmKCFuKXJldHVybjtjb25zdCByPWUucG9zaXRpb25BdChuKTtyZXR1cm57c3RhcnRMaW5lTnVtYmVyOnIubGluZU51bWJlcixzdGFydENvbHVtbjpyLmNvbHVtbixlbmRMaW5lTnVtYmVyOnIubGluZU51bWJlcixlbmRDb2x1bW46ci5jb2x1bW4raX19ZnVuY3Rpb24gX3UoZSx0KXtpZighZSlyZXR1cm47Y29uc3Qgbj10bi5Gb3JtYXQuQ1NTLnBhcnNlSGV4KHQpO2lmKG4pcmV0dXJue3JhbmdlOmUsY29sb3I6cmkobi5yZ2JhLnIsbi5yZ2JhLmcsbi5yZ2JhLmIsbi5yZ2JhLmEpfX1mdW5jdGlvbiBEcyhlLHQsbil7aWYoIWV8fHQubGVuZ3RoIT09MSlyZXR1cm47Y29uc3Qgcj10WzBdLnZhbHVlcygpLHM9TnMocik7cmV0dXJue3JhbmdlOmUsY29sb3I6cmkoc1swXSxzWzFdLHNbMl0sbj9zWzNdOjEpfX1mdW5jdGlvbiBJcyhlLHQsbil7aWYoIWV8fHQubGVuZ3RoIT09MSlyZXR1cm47Y29uc3Qgcj10WzBdLnZhbHVlcygpLHM9TnMociksbz1uZXcgdG4obmV3IHdlKHNbMF0sc1sxXS8xMDAsc1syXS8xMDAsbj9zWzNdOjEpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpyaShvLnJnYmEucixvLnJnYmEuZyxvLnJnYmEuYixvLnJnYmEuYSl9fWZ1bmN0aW9uIFJ0KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9bLi4uZS5tYXRjaEFsbCh0KV06ZS5maW5kTWF0Y2hlcyh0KX1mdW5jdGlvbiB3dShlKXtjb25zdCB0PVtdLGk9UnQoZSwvXGIocmdifHJnYmF8aHNsfGhzbGEpKFwoWzAtOVxzLC5cJV0qXCkpfCgjKShbQS1GYS1mMC05XXszfSlcYnwoIykoW0EtRmEtZjAtOV17NH0pXGJ8KCMpKFtBLUZhLWYwLTldezZ9KVxifCgjKShbQS1GYS1mMC05XXs4fSlcYi9nbSk7aWYoaS5sZW5ndGg+MClmb3IoY29uc3QgciBvZiBpKXtjb25zdCBzPXIuZmlsdGVyKHU9PnUhPT12b2lkIDApLG89c1sxXSxsPXNbMl07aWYoIWwpY29udGludWU7bGV0IGE7aWYobz09PSJyZ2IiKXtjb25zdCB1PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKlwpJC9nbTthPURzKEV0KGUsciksUnQobCx1KSwhMSl9ZWxzZSBpZihvPT09InJnYmEiKXtjb25zdCB1PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMFsuXVswLTldK3xbLl1bMC05XSt8WzAxXVsuXXxbMDFdKVxzKlwpJC9nbTthPURzKEV0KGUsciksUnQobCx1KSwhMCl9ZWxzZSBpZihvPT09ImhzbCIpe2NvbnN0IHU9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqXCkkL2dtO2E9SXMoRXQoZSxyKSxSdChsLHUpLCExKX1lbHNlIGlmKG89PT0iaHNsYSIpe2NvbnN0IHU9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO2E9SXMoRXQoZSxyKSxSdChsLHUpLCEwKX1lbHNlIG89PT0iIyImJihhPV91KEV0KGUsciksbytsKSk7YSYmdC5wdXNoKGEpfXJldHVybiB0fWZ1bmN0aW9uIHZ1KGUpe3JldHVybiFlfHx0eXBlb2YgZS5nZXRWYWx1ZSE9ImZ1bmN0aW9uInx8dHlwZW9mIGUucG9zaXRpb25BdCE9ImZ1bmN0aW9uIj9bXTp3dShlKX1jb25zdCB6cz1uZXcgUmVnRXhwKCJcXGJNQVJLOlxccyooLiopJCIsImQiKSx5dT0vXi0rfC0rJC9nO2Z1bmN0aW9uIHh1KGUsdCl7bGV0IG49W107aWYodC5maW5kUmVnaW9uU2VjdGlvbkhlYWRlcnMmJnQuZm9sZGluZ1J1bGVzPy5tYXJrZXJzKXtjb25zdCBpPVR1KGUsdCk7bj1uLmNvbmNhdChpKX1pZih0LmZpbmRNYXJrU2VjdGlvbkhlYWRlcnMpe2NvbnN0IGk9a3UoZSk7bj1uLmNvbmNhdChpKX1yZXR1cm4gbn1mdW5jdGlvbiBUdShlLHQpe2NvbnN0IG49W10saT1lLmdldExpbmVDb3VudCgpO2ZvcihsZXQgcj0xO3I8PWk7cisrKXtjb25zdCBzPWUuZ2V0TGluZUNvbnRlbnQociksbz1zLm1hdGNoKHQuZm9sZGluZ1J1bGVzLm1hcmtlcnMuc3RhcnQpO2lmKG8pe2NvbnN0IGw9e3N0YXJ0TGluZU51bWJlcjpyLHN0YXJ0Q29sdW1uOm9bMF0ubGVuZ3RoKzEsZW5kTGluZU51bWJlcjpyLGVuZENvbHVtbjpzLmxlbmd0aCsxfTtpZihsLmVuZENvbHVtbj5sLnN0YXJ0Q29sdW1uKXtjb25zdCBhPXtyYW5nZTpsLC4uLkhzKHMuc3Vic3RyaW5nKG9bMF0ubGVuZ3RoKSksc2hvdWxkQmVJbkNvbW1lbnRzOiExfTsoYS50ZXh0fHxhLmhhc1NlcGFyYXRvckxpbmUpJiZuLnB1c2goYSl9fX1yZXR1cm4gbn1mdW5jdGlvbiBrdShlKXtjb25zdCB0PVtdLG49ZS5nZXRMaW5lQ291bnQoKTtmb3IobGV0IGk9MTtpPD1uO2krKyl7Y29uc3Qgcj1lLmdldExpbmVDb250ZW50KGkpO0F1KHIsaSx0KX1yZXR1cm4gdH1mdW5jdGlvbiBBdShlLHQsbil7enMubGFzdEluZGV4PTA7Y29uc3QgaT16cy5leGVjKGUpO2lmKGkpe2NvbnN0IHI9aS5pbmRpY2VzWzFdWzBdKzEscz1pLmluZGljZXNbMV1bMV0rMSxvPXtzdGFydExpbmVOdW1iZXI6dCxzdGFydENvbHVtbjpyLGVuZExpbmVOdW1iZXI6dCxlbmRDb2x1bW46c307aWYoby5lbmRDb2x1bW4+by5zdGFydENvbHVtbil7Y29uc3QgbD17cmFuZ2U6bywuLi5IcyhpWzFdKSxzaG91bGRCZUluQ29tbWVudHM6ITB9OyhsLnRleHR8fGwuaGFzU2VwYXJhdG9yTGluZSkmJm4ucHVzaChsKX19fWZ1bmN0aW9uIEhzKGUpe2U9ZS50cmltKCk7Y29uc3QgdD1lLnN0YXJ0c1dpdGgoIi0iKTtyZXR1cm4gZT1lLnJlcGxhY2UoeXUsIiIpLHt0ZXh0OmUsaGFzU2VwYXJhdG9yTGluZTp0fX1jbGFzcyBTdSBleHRlbmRzIG1se2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWZpbmRNYXRjaGVzKHQpe2NvbnN0IG49W107Zm9yKGxldCBpPTA7aTx0aGlzLl9saW5lcy5sZW5ndGg7aSsrKXtjb25zdCByPXRoaXMuX2xpbmVzW2ldLHM9dGhpcy5vZmZzZXRBdChuZXcgdGUoaSsxLDEpKSxvPXIubWF0Y2hBbGwodCk7Zm9yKGNvbnN0IGwgb2YgbykobC5pbmRleHx8bC5pbmRleD09PTApJiYobC5pbmRleD1sLmluZGV4K3MpLG4ucHVzaChsKX1yZXR1cm4gbn1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudCh0KXtyZXR1cm4gdGhpcy5fbGluZXNbdC0xXX1nZXRXb3JkQXRQb3NpdGlvbih0LG4pe2NvbnN0IGk9UG4odC5jb2x1bW4saXIobiksdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLDApO3JldHVybiBpP25ldyAkKHQubGluZU51bWJlcixpLnN0YXJ0Q29sdW1uLHQubGluZU51bWJlcixpLmVuZENvbHVtbik6bnVsbH13b3Jkcyh0KXtjb25zdCBuPXRoaXMuX2xpbmVzLGk9dGhpcy5fd29yZGVuaXplLmJpbmQodGhpcyk7bGV0IHI9MCxzPSIiLG89MCxsPVtdO3JldHVybnsqW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoOzspaWYobzxsLmxlbmd0aCl7Y29uc3QgYT1zLnN1YnN0cmluZyhsW29dLnN0YXJ0LGxbb10uZW5kKTtvKz0xLHlpZWxkIGF9ZWxzZSBpZihyPG4ubGVuZ3RoKXM9bltyXSxsPWkocyx0KSxvPTAscis9MTtlbHNlIGJyZWFrfX19Z2V0TGluZVdvcmRzKHQsbil7Y29uc3QgaT10aGlzLl9saW5lc1t0LTFdLHI9dGhpcy5fd29yZGVuaXplKGksbikscz1bXTtmb3IoY29uc3QgbyBvZiByKXMucHVzaCh7d29yZDppLnN1YnN0cmluZyhvLnN0YXJ0LG8uZW5kKSxzdGFydENvbHVtbjpvLnN0YXJ0KzEsZW5kQ29sdW1uOm8uZW5kKzF9KTtyZXR1cm4gc31fd29yZGVuaXplKHQsbil7Y29uc3QgaT1bXTtsZXQgcjtmb3Iobi5sYXN0SW5kZXg9MDsocj1uLmV4ZWModCkpJiZyWzBdLmxlbmd0aCE9PTA7KWkucHVzaCh7c3RhcnQ6ci5pbmRleCxlbmQ6ci5pbmRleCtyWzBdLmxlbmd0aH0pO3JldHVybiBpfWdldFZhbHVlSW5SYW5nZSh0KXtpZih0PXRoaXMuX3ZhbGlkYXRlUmFuZ2UodCksdC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXIpcmV0dXJuIHRoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LnN0YXJ0Q29sdW1uLTEsdC5lbmRDb2x1bW4tMSk7Y29uc3Qgbj10aGlzLl9lb2wsaT10LnN0YXJ0TGluZU51bWJlci0xLHI9dC5lbmRMaW5lTnVtYmVyLTEscz1bXTtzLnB1c2godGhpcy5fbGluZXNbaV0uc3Vic3RyaW5nKHQuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgbz1pKzE7bzxyO28rKylzLnB1c2godGhpcy5fbGluZXNbb10pO3JldHVybiBzLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKDAsdC5lbmRDb2x1bW4tMSkpLHMuam9pbihuKX1vZmZzZXRBdCh0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHQpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bSh0LmxpbmVOdW1iZXItMikrKHQuY29sdW1uLTEpfXBvc2l0aW9uQXQodCl7dD1NYXRoLmZsb29yKHQpLHQ9TWF0aC5tYXgoMCx0KSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7Y29uc3Qgbj10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YodCksaT10aGlzLl9saW5lc1tuLmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MStuLmluZGV4LGNvbHVtbjoxK01hdGgubWluKG4ucmVtYWluZGVyLGkpfX1fdmFsaWRhdGVSYW5nZSh0KXtjb25zdCBuPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsY29sdW1uOnQuc3RhcnRDb2x1bW59KSxpPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6dC5lbmRMaW5lTnVtYmVyLGNvbHVtbjp0LmVuZENvbHVtbn0pO3JldHVybiBuLmxpbmVOdW1iZXIhPT10LnN0YXJ0TGluZU51bWJlcnx8bi5jb2x1bW4hPT10LnN0YXJ0Q29sdW1ufHxpLmxpbmVOdW1iZXIhPT10LmVuZExpbmVOdW1iZXJ8fGkuY29sdW1uIT09dC5lbmRDb2x1bW4/e3N0YXJ0TGluZU51bWJlcjpuLmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46bi5jb2x1bW4sZW5kTGluZU51bWJlcjppLmxpbmVOdW1iZXIsZW5kQ29sdW1uOmkuY29sdW1ufTp0fV92YWxpZGF0ZVBvc2l0aW9uKHQpe2lmKCF0ZS5pc0lQb3NpdGlvbih0KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOm4sY29sdW1uOml9PXQscj0hMTtpZihuPDEpbj0xLGk9MSxyPSEwO2Vsc2UgaWYobj50aGlzLl9saW5lcy5sZW5ndGgpbj10aGlzLl9saW5lcy5sZW5ndGgsaT10aGlzLl9saW5lc1tuLTFdLmxlbmd0aCsxLHI9ITA7ZWxzZXtjb25zdCBzPXRoaXMuX2xpbmVzW24tMV0ubGVuZ3RoKzE7aTwxPyhpPTEscj0hMCk6aT5zJiYoaT1zLHI9ITApfXJldHVybiByP3tsaW5lTnVtYmVyOm4sY29sdW1uOml9OnR9fWNvbnN0IFplPWNsYXNzIFple2NvbnN0cnVjdG9yKHQsbil7dGhpcy5faG9zdD10LHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PW4sdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwodCl7cmV0dXJuIHRoaXMuX21vZGVsc1t0XX1fZ2V0TW9kZWxzKCl7Y29uc3QgdD1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKG49PnQucHVzaCh0aGlzLl9tb2RlbHNbbl0pKSx0fWFjY2VwdE5ld01vZGVsKHQpe3RoaXMuX21vZGVsc1t0LnVybF09bmV3IFN1KEhuLnBhcnNlKHQudXJsKSx0LmxpbmVzLHQuRU9MLHQudmVyc2lvbklkKX1hY2NlcHRNb2RlbENoYW5nZWQodCxuKXtpZighdGhpcy5fbW9kZWxzW3RdKXJldHVybjt0aGlzLl9tb2RlbHNbdF0ub25FdmVudHMobil9YWNjZXB0UmVtb3ZlZE1vZGVsKHQpe3RoaXMuX21vZGVsc1t0XSYmZGVsZXRlIHRoaXMuX21vZGVsc1t0XX1hc3luYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCxuLGkpe2NvbnN0IHI9dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIHI/cWwuY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHIsbixpKTp7cmFuZ2VzOltdLGhhc01vcmU6ITEsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6MCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDowLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDowfX1hc3luYyBmaW5kU2VjdGlvbkhlYWRlcnModCxuKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBpP3h1KGksbik6W119YXN5bmMgY29tcHV0ZURpZmYodCxuLGkscil7Y29uc3Qgcz10aGlzLl9nZXRNb2RlbCh0KSxvPXRoaXMuX2dldE1vZGVsKG4pO3JldHVybiFzfHwhbz9udWxsOlplLmNvbXB1dGVEaWZmKHMsbyxpLHIpfXN0YXRpYyBjb21wdXRlRGlmZih0LG4saSxyKXtjb25zdCBzPXI9PT0iYWR2YW5jZWQiP01zLmdldERlZmF1bHQoKTpNcy5nZXRMZWdhY3koKSxvPXQuZ2V0TGluZXNDb250ZW50KCksbD1uLmdldExpbmVzQ29udGVudCgpLGE9cy5jb21wdXRlRGlmZihvLGwsaSksdT1hLmNoYW5nZXMubGVuZ3RoPjA/ITE6dGhpcy5fbW9kZWxzQXJlSWRlbnRpY2FsKHQsbik7ZnVuY3Rpb24gYyhkKXtyZXR1cm4gZC5tYXAobT0+W20ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixtLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsbS5pbm5lckNoYW5nZXM/Lm1hcChmPT5bZi5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcixmLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4sZi5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIsZi5vcmlnaW5hbFJhbmdlLmVuZENvbHVtbixmLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGYubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbixmLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcixmLm1vZGlmaWVkUmFuZ2UuZW5kQ29sdW1uXSldKX1yZXR1cm57aWRlbnRpY2FsOnUscXVpdEVhcmx5OmEuaGl0VGltZW91dCxjaGFuZ2VzOmMoYS5jaGFuZ2VzKSxtb3ZlczphLm1vdmVzLm1hcChkPT5bZC5saW5lUmFuZ2VNYXBwaW5nLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixkLmxpbmVSYW5nZU1hcHBpbmcub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxkLmxpbmVSYW5nZU1hcHBpbmcubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLGQubGluZVJhbmdlTWFwcGluZy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGMoZC5jaGFuZ2VzKV0pfX1zdGF0aWMgX21vZGVsc0FyZUlkZW50aWNhbCh0LG4pe2NvbnN0IGk9dC5nZXRMaW5lQ291bnQoKSxyPW4uZ2V0TGluZUNvdW50KCk7aWYoaSE9PXIpcmV0dXJuITE7Zm9yKGxldCBzPTE7czw9aTtzKyspe2NvbnN0IG89dC5nZXRMaW5lQ29udGVudChzKSxsPW4uZ2V0TGluZUNvbnRlbnQocyk7aWYobyE9PWwpcmV0dXJuITF9cmV0dXJuITB9YXN5bmMgY29tcHV0ZU1vcmVNaW5pbWFsRWRpdHModCxuLGkpe2NvbnN0IHI9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIXIpcmV0dXJuIG47Y29uc3Qgcz1bXTtsZXQgbztuPW4uc2xpY2UoMCkuc29ydCgoYSx1KT0+e2lmKGEucmFuZ2UmJnUucmFuZ2UpcmV0dXJuICQuY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKGEucmFuZ2UsdS5yYW5nZSk7Y29uc3QgYz1hLnJhbmdlPzA6MSxkPXUucmFuZ2U/MDoxO3JldHVybiBjLWR9KTtsZXQgbD0wO2ZvcihsZXQgYT0xO2E8bi5sZW5ndGg7YSsrKSQuZ2V0RW5kUG9zaXRpb24obltsXS5yYW5nZSkuZXF1YWxzKCQuZ2V0U3RhcnRQb3NpdGlvbihuW2FdLnJhbmdlKSk/KG5bbF0ucmFuZ2U9JC5mcm9tUG9zaXRpb25zKCQuZ2V0U3RhcnRQb3NpdGlvbihuW2xdLnJhbmdlKSwkLmdldEVuZFBvc2l0aW9uKG5bYV0ucmFuZ2UpKSxuW2xdLnRleHQrPW5bYV0udGV4dCk6KGwrKyxuW2xdPW5bYV0pO24ubGVuZ3RoPWwrMTtmb3IobGV0e3JhbmdlOmEsdGV4dDp1LGVvbDpjfW9mIG4pe2lmKHR5cGVvZiBjPT0ibnVtYmVyIiYmKG89YyksJC5pc0VtcHR5KGEpJiYhdSljb250aW51ZTtjb25zdCBkPXIuZ2V0VmFsdWVJblJhbmdlKGEpO2lmKHU9dS5yZXBsYWNlKC9cclxufFxufFxyL2csci5lb2wpLGQ9PT11KWNvbnRpbnVlO2lmKE1hdGgubWF4KHUubGVuZ3RoLGQubGVuZ3RoKT5aZS5fZGlmZkxpbWl0KXtzLnB1c2goe3JhbmdlOmEsdGV4dDp1fSk7Y29udGludWV9Y29uc3QgbT1QbyhkLHUsaSksZj1yLm9mZnNldEF0KCQubGlmdChhKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBfIG9mIG0pe2NvbnN0IGc9ci5wb3NpdGlvbkF0KGYrXy5vcmlnaW5hbFN0YXJ0KSxBPXIucG9zaXRpb25BdChmK18ub3JpZ2luYWxTdGFydCtfLm9yaWdpbmFsTGVuZ3RoKSx2PXt0ZXh0OnUuc3Vic3RyKF8ubW9kaWZpZWRTdGFydCxfLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOmcubGluZU51bWJlcixzdGFydENvbHVtbjpnLmNvbHVtbixlbmRMaW5lTnVtYmVyOkEubGluZU51bWJlcixlbmRDb2x1bW46QS5jb2x1bW59fTtyLmdldFZhbHVlSW5SYW5nZSh2LnJhbmdlKSE9PXYudGV4dCYmcy5wdXNoKHYpfX1yZXR1cm4gdHlwZW9mIG89PSJudW1iZXIiJiZzLnB1c2goe2VvbDpvLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHN9YXN5bmMgY29tcHV0ZUxpbmtzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/eWwobik6bnVsbH1hc3luYyBjb21wdXRlRGVmYXVsdERvY3VtZW50Q29sb3JzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/dnUobik6bnVsbH1hc3luYyB0ZXh0dWFsU3VnZ2VzdCh0LG4saSxyKXtjb25zdCBzPW5ldyBXdCxvPW5ldyBSZWdFeHAoaSxyKSxsPW5ldyBTZXQ7ZTpmb3IoY29uc3QgYSBvZiB0KXtjb25zdCB1PXRoaXMuX2dldE1vZGVsKGEpO2lmKHUpe2Zvcihjb25zdCBjIG9mIHUud29yZHMobykpaWYoIShjPT09bnx8IWlzTmFOKE51bWJlcihjKSkpJiYobC5hZGQoYyksbC5zaXplPlplLl9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShsKSxkdXJhdGlvbjpzLmVsYXBzZWQoKX19YXN5bmMgY29tcHV0ZVdvcmRSYW5nZXModCxuLGkscil7Y29uc3Qgcz10aGlzLl9nZXRNb2RlbCh0KTtpZighcylyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBvPW5ldyBSZWdFeHAoaSxyKSxsPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBhPW4uc3RhcnRMaW5lTnVtYmVyO2E8bi5lbmRMaW5lTnVtYmVyO2ErKyl7Y29uc3QgdT1zLmdldExpbmVXb3JkcyhhLG8pO2Zvcihjb25zdCBjIG9mIHUpe2lmKCFpc05hTihOdW1iZXIoYy53b3JkKSkpY29udGludWU7bGV0IGQ9bFtjLndvcmRdO2R8fChkPVtdLGxbYy53b3JkXT1kKSxkLnB1c2goe3N0YXJ0TGluZU51bWJlcjphLHN0YXJ0Q29sdW1uOmMuc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjphLGVuZENvbHVtbjpjLmVuZENvbHVtbn0pfX1yZXR1cm4gbH1hc3luYyBuYXZpZ2F0ZVZhbHVlU2V0KHQsbixpLHIscyl7Y29uc3Qgbz10aGlzLl9nZXRNb2RlbCh0KTtpZighbylyZXR1cm4gbnVsbDtjb25zdCBsPW5ldyBSZWdFeHAocixzKTtuLnN0YXJ0Q29sdW1uPT09bi5lbmRDb2x1bW4mJihuPXtzdGFydExpbmVOdW1iZXI6bi5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46bi5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOm4uZW5kTGluZU51bWJlcixlbmRDb2x1bW46bi5lbmRDb2x1bW4rMX0pO2NvbnN0IGE9by5nZXRWYWx1ZUluUmFuZ2UobiksdT1vLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOm4uc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjpuLnN0YXJ0Q29sdW1ufSxsKTtpZighdSlyZXR1cm4gbnVsbDtjb25zdCBjPW8uZ2V0VmFsdWVJblJhbmdlKHUpO3JldHVybiBPbi5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KG4sYSx1LGMsaSl9bG9hZEZvcmVpZ25Nb2R1bGUodCxuLGkpe2NvbnN0IG89e2hvc3Q6aG8oaSwobCxhKT0+dGhpcy5faG9zdC5maHIobCxhKSksZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KG8sbiksUHJvbWlzZS5yZXNvbHZlKExuKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcih0LG4pe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHx0eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVt0XSE9ImZ1bmN0aW9uIilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIit0KSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVt0XS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLG4pKX1jYXRjaChpKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoaSl9fX07WmUuX2RpZmZMaW1pdD0xZTUsWmUuX3N1Z2dlc3Rpb25zTGltaXQ9MWU0O2xldCBzaT1aZTt0eXBlb2YgaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIiYmKGdsb2JhbFRoaXMubW9uYWNvPU5sKCkpO2xldCBhaT0hMTtmdW5jdGlvbiBVcyhlKXtpZihhaSlyZXR1cm47YWk9ITA7Y29uc3QgdD1uZXcgVW8obj0+e2dsb2JhbFRoaXMucG9zdE1lc3NhZ2Uobil9LG49Pm5ldyBzaShuLGUpKTtnbG9iYWxUaGlzLm9ubWVzc2FnZT1uPT57dC5vbm1lc3NhZ2Uobi5kYXRhKX19Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9ZT0+e2FpfHxVcyhudWxsKX07LyohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFZlcnNpb246IDAuNTEuMCg2N2Q2NjRhMzI5NjhlMTllMmViMDhiNjk2YTkyNDYzODA0MTgyYWU0KQogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9tb25hY28tZWRpdG9yL2Jsb2IvbWFpbi9MSUNFTlNFLnR4dAogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9mdW5jdGlvbiBUZSguLi5lKXtjb25zdCB0PWVbMF07bGV0IG4saSxyO2lmKHR5cGVvZiB0PT0ic3RyaW5nIiluPXQsaT10LGUuc3BsaWNlKDAsMSkscj0hZXx8dHlwZW9mIGVbMF0hPSJvYmplY3QiP2U6ZVswXTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBBcnJheSl7Y29uc3Qgcz1lLnNsaWNlKDEpO2lmKHQubGVuZ3RoIT09cy5sZW5ndGgrMSl0aHJvdyBuZXcgRXJyb3IoImV4cGVjdGVkIGEgc3RyaW5nIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBsMTBuLnQiKTtsZXQgbz10WzBdO2ZvcihsZXQgbD0xO2w8dC5sZW5ndGg7bCsrKW8rPWB7JHtsLTF9fWArdFtsXTtyZXR1cm4gVGUobywuLi5zKX1lbHNlIGk9dC5tZXNzYWdlLG49aSx0LmNvbW1lbnQmJnQuY29tbWVudC5sZW5ndGg+MCYmKG4rPWAvJHtBcnJheS5pc0FycmF5KHQuY29tbWVudCk/dC5jb21tZW50LmpvaW4oIiIpOnQuY29tbWVudH1gKSxyPXQuYXJncz8/e307cmV0dXJuIEN1KGkscil9dmFyIEx1PS97KFtefV0rKX0vZztmdW5jdGlvbiBDdShlLHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5sZW5ndGg9PT0wP2U6ZS5yZXBsYWNlKEx1LChuLGkpPT50W2ldPz9uKX12YXIgV3M7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJuIHR5cGVvZiBuPT0ic3RyaW5nIn1lLmlzPXR9KShXc3x8KFdzPXt9KSk7dmFyIG9pOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiB0eXBlb2Ygbj09InN0cmluZyJ9ZS5pcz10fSkob2l8fChvaT17fSkpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsZS5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiB0KG4pe3JldHVybiB0eXBlb2Ygbj09Im51bWJlciImJmUuTUlOX1ZBTFVFPD1uJiZuPD1lLk1BWF9WQUxVRX1lLmlzPXR9KShGc3x8KEZzPXt9KSk7dmFyIG5uOyhmdW5jdGlvbihlKXtlLk1JTl9WQUxVRT0wLGUuTUFYX1ZBTFVFPTIxNDc0ODM2NDc7ZnVuY3Rpb24gdChuKXtyZXR1cm4gdHlwZW9mIG49PSJudW1iZXIiJiZlLk1JTl9WQUxVRTw9biYmbjw9ZS5NQVhfVkFMVUV9ZS5pcz10fSkobm58fChubj17fSkpO3ZhciByZTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybiBpPT09TnVtYmVyLk1BWF9WQUxVRSYmKGk9bm4uTUFYX1ZBTFVFKSxyPT09TnVtYmVyLk1BWF9WQUxVRSYmKHI9bm4uTUFYX1ZBTFVFKSx7bGluZTppLGNoYXJhY3RlcjpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiZDLnVpbnRlZ2VyKHIubGluZSkmJkMudWludGVnZXIoci5jaGFyYWN0ZXIpfWUuaXM9bn0pKHJlfHwocmU9e30pKTt2YXIgRzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyxvKXtpZihDLnVpbnRlZ2VyKGkpJiZDLnVpbnRlZ2VyKHIpJiZDLnVpbnRlZ2VyKHMpJiZDLnVpbnRlZ2VyKG8pKXJldHVybntzdGFydDpyZS5jcmVhdGUoaSxyKSxlbmQ6cmUuY3JlYXRlKHMsbyl9O2lmKHJlLmlzKGkpJiZyZS5pcyhyKSlyZXR1cm57c3RhcnQ6aSxlbmQ6cn07dGhyb3cgbmV3IEVycm9yKGBSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbJHtpfSwgJHtyfSwgJHtzfSwgJHtvfV1gKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiZyZS5pcyhyLnN0YXJ0KSYmcmUuaXMoci5lbmQpfWUuaXM9bn0pKEd8fChHPXt9KSk7dmFyIHJuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3VyaTppLHJhbmdlOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJkcuaXMoci5yYW5nZSkmJihDLnN0cmluZyhyLnVyaSl8fEMudW5kZWZpbmVkKHIudXJpKSl9ZS5pcz1ufSkocm58fChybj17fSkpO3ZhciBQczsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyxvKXtyZXR1cm57dGFyZ2V0VXJpOmksdGFyZ2V0UmFuZ2U6cix0YXJnZXRTZWxlY3Rpb25SYW5nZTpzLG9yaWdpblNlbGVjdGlvblJhbmdlOm99fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJkcuaXMoci50YXJnZXRSYW5nZSkmJkMuc3RyaW5nKHIudGFyZ2V0VXJpKSYmRy5pcyhyLnRhcmdldFNlbGVjdGlvblJhbmdlKSYmKEcuaXMoci5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fEMudW5kZWZpbmVkKHIub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX1lLmlzPW59KShQc3x8KFBzPXt9KSk7dmFyIGxpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzLG8pe3JldHVybntyZWQ6aSxncmVlbjpyLGJsdWU6cyxhbHBoYTpvfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJkMubnVtYmVyUmFuZ2Uoci5yZWQsMCwxKSYmQy5udW1iZXJSYW5nZShyLmdyZWVuLDAsMSkmJkMubnVtYmVyUmFuZ2Uoci5ibHVlLDAsMSkmJkMubnVtYmVyUmFuZ2Uoci5hbHBoYSwwLDEpfWUuaXM9bn0pKGxpfHwobGk9e30pKTt2YXIgQnM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57cmFuZ2U6aSxjb2xvcjpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJkcuaXMoci5yYW5nZSkmJmxpLmlzKHIuY29sb3IpfWUuaXM9bn0pKEJzfHwoQnM9e30pKTt2YXIgcXM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMpe3JldHVybntsYWJlbDppLHRleHRFZGl0OnIsYWRkaXRpb25hbFRleHRFZGl0czpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJkMuc3RyaW5nKHIubGFiZWwpJiYoQy51bmRlZmluZWQoci50ZXh0RWRpdCl8fG9lLmlzKHIpKSYmKEMudW5kZWZpbmVkKHIuYWRkaXRpb25hbFRleHRFZGl0cyl8fEMudHlwZWRBcnJheShyLmFkZGl0aW9uYWxUZXh0RWRpdHMsb2UuaXMpKX1lLmlzPW59KShxc3x8KHFzPXt9KSk7dmFyIHNuOyhmdW5jdGlvbihlKXtlLkNvbW1lbnQ9ImNvbW1lbnQiLGUuSW1wb3J0cz0iaW1wb3J0cyIsZS5SZWdpb249InJlZ2lvbiJ9KShzbnx8KHNuPXt9KSk7dmFyIE9zOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzLG8sbCxhKXtjb25zdCB1PXtzdGFydExpbmU6aSxlbmRMaW5lOnJ9O3JldHVybiBDLmRlZmluZWQocykmJih1LnN0YXJ0Q2hhcmFjdGVyPXMpLEMuZGVmaW5lZChvKSYmKHUuZW5kQ2hhcmFjdGVyPW8pLEMuZGVmaW5lZChsKSYmKHUua2luZD1sKSxDLmRlZmluZWQoYSkmJih1LmNvbGxhcHNlZFRleHQ9YSksdX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJkMudWludGVnZXIoci5zdGFydExpbmUpJiZDLnVpbnRlZ2VyKHIuc3RhcnRMaW5lKSYmKEMudW5kZWZpbmVkKHIuc3RhcnRDaGFyYWN0ZXIpfHxDLnVpbnRlZ2VyKHIuc3RhcnRDaGFyYWN0ZXIpKSYmKEMudW5kZWZpbmVkKHIuZW5kQ2hhcmFjdGVyKXx8Qy51aW50ZWdlcihyLmVuZENoYXJhY3RlcikpJiYoQy51bmRlZmluZWQoci5raW5kKXx8Qy5zdHJpbmcoci5raW5kKSl9ZS5pcz1ufSkoT3N8fChPcz17fSkpO3ZhciB1aTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybntsb2NhdGlvbjppLG1lc3NhZ2U6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmcm4uaXMoci5sb2NhdGlvbikmJkMuc3RyaW5nKHIubWVzc2FnZSl9ZS5pcz1ufSkodWl8fCh1aT17fSkpO3ZhciBWczsoZnVuY3Rpb24oZSl7ZS5FcnJvcj0xLGUuV2FybmluZz0yLGUuSW5mb3JtYXRpb249MyxlLkhpbnQ9NH0pKFZzfHwoVnM9e30pKTt2YXIganM7KGZ1bmN0aW9uKGUpe2UuVW5uZWNlc3Nhcnk9MSxlLkRlcHJlY2F0ZWQ9Mn0pKGpzfHwoanM9e30pKTt2YXIgR3M7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Y29uc3QgaT1uO3JldHVybiBDLm9iamVjdExpdGVyYWwoaSkmJkMuc3RyaW5nKGkuaHJlZil9ZS5pcz10fSkoR3N8fChHcz17fSkpO3ZhciBhbjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyxvLGwsYSl7bGV0IHU9e3JhbmdlOmksbWVzc2FnZTpyfTtyZXR1cm4gQy5kZWZpbmVkKHMpJiYodS5zZXZlcml0eT1zKSxDLmRlZmluZWQobykmJih1LmNvZGU9byksQy5kZWZpbmVkKGwpJiYodS5zb3VyY2U9bCksQy5kZWZpbmVkKGEpJiYodS5yZWxhdGVkSW5mb3JtYXRpb249YSksdX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI7bGV0IHM9aTtyZXR1cm4gQy5kZWZpbmVkKHMpJiZHLmlzKHMucmFuZ2UpJiZDLnN0cmluZyhzLm1lc3NhZ2UpJiYoQy5udW1iZXIocy5zZXZlcml0eSl8fEMudW5kZWZpbmVkKHMuc2V2ZXJpdHkpKSYmKEMuaW50ZWdlcihzLmNvZGUpfHxDLnN0cmluZyhzLmNvZGUpfHxDLnVuZGVmaW5lZChzLmNvZGUpKSYmKEMudW5kZWZpbmVkKHMuY29kZURlc2NyaXB0aW9uKXx8Qy5zdHJpbmcoKHI9cy5jb2RlRGVzY3JpcHRpb24pPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5ocmVmKSkmJihDLnN0cmluZyhzLnNvdXJjZSl8fEMudW5kZWZpbmVkKHMuc291cmNlKSkmJihDLnVuZGVmaW5lZChzLnJlbGF0ZWRJbmZvcm1hdGlvbil8fEMudHlwZWRBcnJheShzLnJlbGF0ZWRJbmZvcm1hdGlvbix1aS5pcykpfWUuaXM9bn0pKGFufHwoYW49e30pKTt2YXIgZHQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLC4uLnMpe2xldCBvPXt0aXRsZTppLGNvbW1hbmQ6cn07cmV0dXJuIEMuZGVmaW5lZChzKSYmcy5sZW5ndGg+MCYmKG8uYXJndW1lbnRzPXMpLG99ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy5zdHJpbmcoci50aXRsZSkmJkMuc3RyaW5nKHIuY29tbWFuZCl9ZS5pcz1ufSkoZHR8fChkdD17fSkpO3ZhciBvZTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChzLG8pe3JldHVybntyYW5nZTpzLG5ld1RleHQ6b319ZS5yZXBsYWNlPXQ7ZnVuY3Rpb24gbihzLG8pe3JldHVybntyYW5nZTp7c3RhcnQ6cyxlbmQ6c30sbmV3VGV4dDpvfX1lLmluc2VydD1uO2Z1bmN0aW9uIGkocyl7cmV0dXJue3JhbmdlOnMsbmV3VGV4dDoiIn19ZS5kZWw9aTtmdW5jdGlvbiByKHMpe2NvbnN0IG89cztyZXR1cm4gQy5vYmplY3RMaXRlcmFsKG8pJiZDLnN0cmluZyhvLm5ld1RleHQpJiZHLmlzKG8ucmFuZ2UpfWUuaXM9cn0pKG9lfHwob2U9e30pKTt2YXIgY2k7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMpe2NvbnN0IG89e2xhYmVsOml9O3JldHVybiByIT09dm9pZCAwJiYoby5uZWVkc0NvbmZpcm1hdGlvbj1yKSxzIT09dm9pZCAwJiYoby5kZXNjcmlwdGlvbj1zKSxvfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtjb25zdCByPWk7cmV0dXJuIEMub2JqZWN0TGl0ZXJhbChyKSYmQy5zdHJpbmcoci5sYWJlbCkmJihDLmJvb2xlYW4oci5uZWVkc0NvbmZpcm1hdGlvbil8fHIubmVlZHNDb25maXJtYXRpb249PT12b2lkIDApJiYoQy5zdHJpbmcoci5kZXNjcmlwdGlvbil8fHIuZGVzY3JpcHRpb249PT12b2lkIDApfWUuaXM9bn0pKGNpfHwoY2k9e30pKTt2YXIgbXQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Y29uc3QgaT1uO3JldHVybiBDLnN0cmluZyhpKX1lLmlzPXR9KShtdHx8KG10PXt9KSk7dmFyICRzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHMsbyxsKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0Om8sYW5ub3RhdGlvbklkOmx9fWUucmVwbGFjZT10O2Z1bmN0aW9uIG4ocyxvLGwpe3JldHVybntyYW5nZTp7c3RhcnQ6cyxlbmQ6c30sbmV3VGV4dDpvLGFubm90YXRpb25JZDpsfX1lLmluc2VydD1uO2Z1bmN0aW9uIGkocyxvKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OiIiLGFubm90YXRpb25JZDpvfX1lLmRlbD1pO2Z1bmN0aW9uIHIocyl7Y29uc3Qgbz1zO3JldHVybiBvZS5pcyhvKSYmKGNpLmlzKG8uYW5ub3RhdGlvbklkKXx8bXQuaXMoby5hbm5vdGF0aW9uSWQpKX1lLmlzPXJ9KSgkc3x8KCRzPXt9KSk7dmFyIGhpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3RleHREb2N1bWVudDppLGVkaXRzOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLmRlZmluZWQocikmJmdpLmlzKHIudGV4dERvY3VtZW50KSYmQXJyYXkuaXNBcnJheShyLmVkaXRzKX1lLmlzPW59KShoaXx8KGhpPXt9KSk7dmFyIGRpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzKXtsZXQgbz17a2luZDoiY3JlYXRlIix1cmk6aX07cmV0dXJuIHIhPT12b2lkIDAmJihyLm92ZXJ3cml0ZSE9PXZvaWQgMHx8ci5pZ25vcmVJZkV4aXN0cyE9PXZvaWQgMCkmJihvLm9wdGlvbnM9cikscyE9PXZvaWQgMCYmKG8uYW5ub3RhdGlvbklkPXMpLG99ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIHImJnIua2luZD09PSJjcmVhdGUiJiZDLnN0cmluZyhyLnVyaSkmJihyLm9wdGlvbnM9PT12b2lkIDB8fChyLm9wdGlvbnMub3ZlcndyaXRlPT09dm9pZCAwfHxDLmJvb2xlYW4oci5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoci5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHxDLmJvb2xlYW4oci5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoci5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fG10LmlzKHIuYW5ub3RhdGlvbklkKSl9ZS5pcz1ufSkoZGl8fChkaT17fSkpO3ZhciBtaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyxvKXtsZXQgbD17a2luZDoicmVuYW1lIixvbGRVcmk6aSxuZXdVcmk6cn07cmV0dXJuIHMhPT12b2lkIDAmJihzLm92ZXJ3cml0ZSE9PXZvaWQgMHx8cy5pZ25vcmVJZkV4aXN0cyE9PXZvaWQgMCkmJihsLm9wdGlvbnM9cyksbyE9PXZvaWQgMCYmKGwuYW5ub3RhdGlvbklkPW8pLGx9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIHImJnIua2luZD09PSJyZW5hbWUiJiZDLnN0cmluZyhyLm9sZFVyaSkmJkMuc3RyaW5nKHIubmV3VXJpKSYmKHIub3B0aW9ucz09PXZvaWQgMHx8KHIub3B0aW9ucy5vdmVyd3JpdGU9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMub3ZlcndyaXRlKSkmJihyLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJihyLmFubm90YXRpb25JZD09PXZvaWQgMHx8bXQuaXMoci5hbm5vdGF0aW9uSWQpKX1lLmlzPW59KShtaXx8KG1pPXt9KSk7dmFyIGZpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzKXtsZXQgbz17a2luZDoiZGVsZXRlIix1cmk6aX07cmV0dXJuIHIhPT12b2lkIDAmJihyLnJlY3Vyc2l2ZSE9PXZvaWQgMHx8ci5pZ25vcmVJZk5vdEV4aXN0cyE9PXZvaWQgMCkmJihvLm9wdGlvbnM9cikscyE9PXZvaWQgMCYmKG8uYW5ub3RhdGlvbklkPXMpLG99ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIHImJnIua2luZD09PSJkZWxldGUiJiZDLnN0cmluZyhyLnVyaSkmJihyLm9wdGlvbnM9PT12b2lkIDB8fChyLm9wdGlvbnMucmVjdXJzaXZlPT09dm9pZCAwfHxDLmJvb2xlYW4oci5vcHRpb25zLnJlY3Vyc2l2ZSkpJiYoci5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzPT09dm9pZCAwfHxDLmJvb2xlYW4oci5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYoci5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fG10LmlzKHIuYW5ub3RhdGlvbklkKSl9ZS5pcz1ufSkoZml8fChmaT17fSkpO3ZhciBwaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtsZXQgaT1uO3JldHVybiBpJiYoaS5jaGFuZ2VzIT09dm9pZCAwfHxpLmRvY3VtZW50Q2hhbmdlcyE9PXZvaWQgMCkmJihpLmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMHx8aS5kb2N1bWVudENoYW5nZXMuZXZlcnkocj0+Qy5zdHJpbmcoci5raW5kKT9kaS5pcyhyKXx8bWkuaXMocil8fGZpLmlzKHIpOmhpLmlzKHIpKSl9ZS5pcz10fSkocGl8fChwaT17fSkpO3ZhciBYczsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpKXtyZXR1cm57dXJpOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkMuc3RyaW5nKHIudXJpKX1lLmlzPW59KShYc3x8KFhzPXt9KSk7dmFyIEpzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3VyaTppLHZlcnNpb246cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy5zdHJpbmcoci51cmkpJiZDLmludGVnZXIoci52ZXJzaW9uKX1lLmlzPW59KShKc3x8KEpzPXt9KSk7dmFyIGdpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3VyaTppLHZlcnNpb246cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy5zdHJpbmcoci51cmkpJiYoci52ZXJzaW9uPT09bnVsbHx8Qy5pbnRlZ2VyKHIudmVyc2lvbikpfWUuaXM9bn0pKGdpfHwoZ2k9e30pKTt2YXIgWXM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMsbyl7cmV0dXJue3VyaTppLGxhbmd1YWdlSWQ6cix2ZXJzaW9uOnMsdGV4dDpvfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnN0cmluZyhyLnVyaSkmJkMuc3RyaW5nKHIubGFuZ3VhZ2VJZCkmJkMuaW50ZWdlcihyLnZlcnNpb24pJiZDLnN0cmluZyhyLnRleHQpfWUuaXM9bn0pKFlzfHwoWXM9e30pKTt2YXIgemU7KGZ1bmN0aW9uKGUpe2UuUGxhaW5UZXh0PSJwbGFpbnRleHQiLGUuTWFya2Rvd249Im1hcmtkb3duIjtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bjtyZXR1cm4gaT09PWUuUGxhaW5UZXh0fHxpPT09ZS5NYXJrZG93bn1lLmlzPXR9KSh6ZXx8KHplPXt9KSk7dmFyIE10OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bjtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKG4pJiZ6ZS5pcyhpLmtpbmQpJiZDLnN0cmluZyhpLnZhbHVlKX1lLmlzPXR9KShNdHx8KE10PXt9KSk7dmFyIGRlOyhmdW5jdGlvbihlKXtlLlRleHQ9MSxlLk1ldGhvZD0yLGUuRnVuY3Rpb249MyxlLkNvbnN0cnVjdG9yPTQsZS5GaWVsZD01LGUuVmFyaWFibGU9NixlLkNsYXNzPTcsZS5JbnRlcmZhY2U9OCxlLk1vZHVsZT05LGUuUHJvcGVydHk9MTAsZS5Vbml0PTExLGUuVmFsdWU9MTIsZS5FbnVtPTEzLGUuS2V5d29yZD0xNCxlLlNuaXBwZXQ9MTUsZS5Db2xvcj0xNixlLkZpbGU9MTcsZS5SZWZlcmVuY2U9MTgsZS5Gb2xkZXI9MTksZS5FbnVtTWVtYmVyPTIwLGUuQ29uc3RhbnQ9MjEsZS5TdHJ1Y3Q9MjIsZS5FdmVudD0yMyxlLk9wZXJhdG9yPTI0LGUuVHlwZVBhcmFtZXRlcj0yNX0pKGRlfHwoZGU9e30pKTt2YXIga2U7KGZ1bmN0aW9uKGUpe2UuUGxhaW5UZXh0PTEsZS5TbmlwcGV0PTJ9KShrZXx8KGtlPXt9KSk7dmFyIFFzOyhmdW5jdGlvbihlKXtlLkRlcHJlY2F0ZWQ9MX0pKFFzfHwoUXM9e30pKTt2YXIgWnM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMpe3JldHVybntuZXdUZXh0OmksaW5zZXJ0OnIscmVwbGFjZTpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiByJiZDLnN0cmluZyhyLm5ld1RleHQpJiZHLmlzKHIuaW5zZXJ0KSYmRy5pcyhyLnJlcGxhY2UpfWUuaXM9bn0pKFpzfHwoWnM9e30pKTt2YXIgS3M7KGZ1bmN0aW9uKGUpe2UuYXNJcz0xLGUuYWRqdXN0SW5kZW50YXRpb249Mn0pKEtzfHwoS3M9e30pKTt2YXIgZWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Y29uc3QgaT1uO3JldHVybiBpJiYoQy5zdHJpbmcoaS5kZXRhaWwpfHxpLmRldGFpbD09PXZvaWQgMCkmJihDLnN0cmluZyhpLmRlc2NyaXB0aW9uKXx8aS5kZXNjcmlwdGlvbj09PXZvaWQgMCl9ZS5pcz10fSkoZWF8fChlYT17fSkpO3ZhciB0YTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm57bGFiZWw6bn19ZS5jcmVhdGU9dH0pKHRhfHwodGE9e30pKTt2YXIgbmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixpKXtyZXR1cm57aXRlbXM6bnx8W10saXNJbmNvbXBsZXRlOiEhaX19ZS5jcmVhdGU9dH0pKG5hfHwobmE9e30pKTt2YXIgb247KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSl7cmV0dXJuIGkucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfWUuZnJvbVBsYWluVGV4dD10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiBDLnN0cmluZyhyKXx8Qy5vYmplY3RMaXRlcmFsKHIpJiZDLnN0cmluZyhyLmxhbmd1YWdlKSYmQy5zdHJpbmcoci52YWx1ZSl9ZS5pcz1ufSkob258fChvbj17fSkpO3ZhciBpYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtsZXQgaT1uO3JldHVybiEhaSYmQy5vYmplY3RMaXRlcmFsKGkpJiYoTXQuaXMoaS5jb250ZW50cyl8fG9uLmlzKGkuY29udGVudHMpfHxDLnR5cGVkQXJyYXkoaS5jb250ZW50cyxvbi5pcykpJiYobi5yYW5nZT09PXZvaWQgMHx8Ry5pcyhuLnJhbmdlKSl9ZS5pcz10fSkoaWF8fChpYT17fSkpO3ZhciByYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkpe3JldHVybiBpP3tsYWJlbDpuLGRvY3VtZW50YXRpb246aX06e2xhYmVsOm59fWUuY3JlYXRlPXR9KShyYXx8KHJhPXt9KSk7dmFyIHNhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSwuLi5yKXtsZXQgcz17bGFiZWw6bn07cmV0dXJuIEMuZGVmaW5lZChpKSYmKHMuZG9jdW1lbnRhdGlvbj1pKSxDLmRlZmluZWQocik/cy5wYXJhbWV0ZXJzPXI6cy5wYXJhbWV0ZXJzPVtdLHN9ZS5jcmVhdGU9dH0pKHNhfHwoc2E9e30pKTt2YXIgbG47KGZ1bmN0aW9uKGUpe2UuVGV4dD0xLGUuUmVhZD0yLGUuV3JpdGU9M30pKGxufHwobG49e30pKTt2YXIgYWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixpKXtsZXQgcj17cmFuZ2U6bn07cmV0dXJuIEMubnVtYmVyKGkpJiYoci5raW5kPWkpLHJ9ZS5jcmVhdGU9dH0pKGFhfHwoYWE9e30pKTt2YXIgYmk7KGZ1bmN0aW9uKGUpe2UuRmlsZT0xLGUuTW9kdWxlPTIsZS5OYW1lc3BhY2U9MyxlLlBhY2thZ2U9NCxlLkNsYXNzPTUsZS5NZXRob2Q9NixlLlByb3BlcnR5PTcsZS5GaWVsZD04LGUuQ29uc3RydWN0b3I9OSxlLkVudW09MTAsZS5JbnRlcmZhY2U9MTEsZS5GdW5jdGlvbj0xMixlLlZhcmlhYmxlPTEzLGUuQ29uc3RhbnQ9MTQsZS5TdHJpbmc9MTUsZS5OdW1iZXI9MTYsZS5Cb29sZWFuPTE3LGUuQXJyYXk9MTgsZS5PYmplY3Q9MTksZS5LZXk9MjAsZS5OdWxsPTIxLGUuRW51bU1lbWJlcj0yMixlLlN0cnVjdD0yMyxlLkV2ZW50PTI0LGUuT3BlcmF0b3I9MjUsZS5UeXBlUGFyYW1ldGVyPTI2fSkoYml8fChiaT17fSkpO3ZhciBvYTsoZnVuY3Rpb24oZSl7ZS5EZXByZWNhdGVkPTF9KShvYXx8KG9hPXt9KSk7dmFyIF9pOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSxyLHMsbyl7bGV0IGw9e25hbWU6bixraW5kOmksbG9jYXRpb246e3VyaTpzLHJhbmdlOnJ9fTtyZXR1cm4gbyYmKGwuY29udGFpbmVyTmFtZT1vKSxsfWUuY3JlYXRlPXR9KShfaXx8KF9pPXt9KSk7dmFyIGxhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSxyLHMpe3JldHVybiBzIT09dm9pZCAwP3tuYW1lOm4sa2luZDppLGxvY2F0aW9uOnt1cmk6cixyYW5nZTpzfX06e25hbWU6bixraW5kOmksbG9jYXRpb246e3VyaTpyfX19ZS5jcmVhdGU9dH0pKGxhfHwobGE9e30pKTt2YXIgd2k7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMsbyxsLGEpe2xldCB1PXtuYW1lOmksZGV0YWlsOnIsa2luZDpzLHJhbmdlOm8sc2VsZWN0aW9uUmFuZ2U6bH07cmV0dXJuIGEhPT12b2lkIDAmJih1LmNoaWxkcmVuPWEpLHV9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe2xldCByPWk7cmV0dXJuIHImJkMuc3RyaW5nKHIubmFtZSkmJkMubnVtYmVyKHIua2luZCkmJkcuaXMoci5yYW5nZSkmJkcuaXMoci5zZWxlY3Rpb25SYW5nZSkmJihyLmRldGFpbD09PXZvaWQgMHx8Qy5zdHJpbmcoci5kZXRhaWwpKSYmKHIuZGVwcmVjYXRlZD09PXZvaWQgMHx8Qy5ib29sZWFuKHIuZGVwcmVjYXRlZCkpJiYoci5jaGlsZHJlbj09PXZvaWQgMHx8QXJyYXkuaXNBcnJheShyLmNoaWxkcmVuKSkmJihyLnRhZ3M9PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoci50YWdzKSl9ZS5pcz1ufSkod2l8fCh3aT17fSkpO3ZhciB1YTsoZnVuY3Rpb24oZSl7ZS5FbXB0eT0iIixlLlF1aWNrRml4PSJxdWlja2ZpeCIsZS5SZWZhY3Rvcj0icmVmYWN0b3IiLGUuUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0IixlLlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLGUuUmVmYWN0b3JSZXdyaXRlPSJyZWZhY3Rvci5yZXdyaXRlIixlLlNvdXJjZT0ic291cmNlIixlLlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsZS5Tb3VyY2VGaXhBbGw9InNvdXJjZS5maXhBbGwifSkodWF8fCh1YT17fSkpO3ZhciB1bjsoZnVuY3Rpb24oZSl7ZS5JbnZva2VkPTEsZS5BdXRvbWF0aWM9Mn0pKHVufHwodW49e30pKTt2YXIgY2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMpe2xldCBvPXtkaWFnbm9zdGljczppfTtyZXR1cm4gciE9bnVsbCYmKG8ub25seT1yKSxzIT1udWxsJiYoby50cmlnZ2VyS2luZD1zKSxvfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkMudHlwZWRBcnJheShyLmRpYWdub3N0aWNzLGFuLmlzKSYmKHIub25seT09PXZvaWQgMHx8Qy50eXBlZEFycmF5KHIub25seSxDLnN0cmluZykpJiYoci50cmlnZ2VyS2luZD09PXZvaWQgMHx8ci50cmlnZ2VyS2luZD09PXVuLkludm9rZWR8fHIudHJpZ2dlcktpbmQ9PT11bi5BdXRvbWF0aWMpfWUuaXM9bn0pKGNhfHwoY2E9e30pKTt2YXIgaGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMpe2xldCBvPXt0aXRsZTppfSxsPSEwO3JldHVybiB0eXBlb2Ygcj09InN0cmluZyI/KGw9ITEsby5raW5kPXIpOmR0LmlzKHIpP28uY29tbWFuZD1yOm8uZWRpdD1yLGwmJnMhPT12b2lkIDAmJihvLmtpbmQ9cyksb31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gciYmQy5zdHJpbmcoci50aXRsZSkmJihyLmRpYWdub3N0aWNzPT09dm9pZCAwfHxDLnR5cGVkQXJyYXkoci5kaWFnbm9zdGljcyxhbi5pcykpJiYoci5raW5kPT09dm9pZCAwfHxDLnN0cmluZyhyLmtpbmQpKSYmKHIuZWRpdCE9PXZvaWQgMHx8ci5jb21tYW5kIT09dm9pZCAwKSYmKHIuY29tbWFuZD09PXZvaWQgMHx8ZHQuaXMoci5jb21tYW5kKSkmJihyLmlzUHJlZmVycmVkPT09dm9pZCAwfHxDLmJvb2xlYW4oci5pc1ByZWZlcnJlZCkpJiYoci5lZGl0PT09dm9pZCAwfHxwaS5pcyhyLmVkaXQpKX1lLmlzPW59KShoYXx8KGhhPXt9KSk7dmFyIGRhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7bGV0IHM9e3JhbmdlOml9O3JldHVybiBDLmRlZmluZWQocikmJihzLmRhdGE9ciksc31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZHLmlzKHIucmFuZ2UpJiYoQy51bmRlZmluZWQoci5jb21tYW5kKXx8ZHQuaXMoci5jb21tYW5kKSl9ZS5pcz1ufSkoZGF8fChkYT17fSkpO3ZhciBtYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybnt0YWJTaXplOmksaW5zZXJ0U3BhY2VzOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkMudWludGVnZXIoci50YWJTaXplKSYmQy5ib29sZWFuKHIuaW5zZXJ0U3BhY2VzKX1lLmlzPW59KShtYXx8KG1hPXt9KSk7dmFyIGZhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixzKXtyZXR1cm57cmFuZ2U6aSx0YXJnZXQ6cixkYXRhOnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtsZXQgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkcuaXMoci5yYW5nZSkmJihDLnVuZGVmaW5lZChyLnRhcmdldCl8fEMuc3RyaW5nKHIudGFyZ2V0KSl9ZS5pcz1ufSkoZmF8fChmYT17fSkpO3ZhciBjbjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybntyYW5nZTppLHBhcmVudDpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7bGV0IHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiZHLmlzKHIucmFuZ2UpJiYoci5wYXJlbnQ9PT12b2lkIDB8fGUuaXMoci5wYXJlbnQpKX1lLmlzPW59KShjbnx8KGNuPXt9KSk7dmFyIHBhOyhmdW5jdGlvbihlKXtlLm5hbWVzcGFjZT0ibmFtZXNwYWNlIixlLnR5cGU9InR5cGUiLGUuY2xhc3M9ImNsYXNzIixlLmVudW09ImVudW0iLGUuaW50ZXJmYWNlPSJpbnRlcmZhY2UiLGUuc3RydWN0PSJzdHJ1Y3QiLGUudHlwZVBhcmFtZXRlcj0idHlwZVBhcmFtZXRlciIsZS5wYXJhbWV0ZXI9InBhcmFtZXRlciIsZS52YXJpYWJsZT0idmFyaWFibGUiLGUucHJvcGVydHk9InByb3BlcnR5IixlLmVudW1NZW1iZXI9ImVudW1NZW1iZXIiLGUuZXZlbnQ9ImV2ZW50IixlLmZ1bmN0aW9uPSJmdW5jdGlvbiIsZS5tZXRob2Q9Im1ldGhvZCIsZS5tYWNybz0ibWFjcm8iLGUua2V5d29yZD0ia2V5d29yZCIsZS5tb2RpZmllcj0ibW9kaWZpZXIiLGUuY29tbWVudD0iY29tbWVudCIsZS5zdHJpbmc9InN0cmluZyIsZS5udW1iZXI9Im51bWJlciIsZS5yZWdleHA9InJlZ2V4cCIsZS5vcGVyYXRvcj0ib3BlcmF0b3IiLGUuZGVjb3JhdG9yPSJkZWNvcmF0b3IifSkocGF8fChwYT17fSkpO3ZhciBnYTsoZnVuY3Rpb24oZSl7ZS5kZWNsYXJhdGlvbj0iZGVjbGFyYXRpb24iLGUuZGVmaW5pdGlvbj0iZGVmaW5pdGlvbiIsZS5yZWFkb25seT0icmVhZG9ubHkiLGUuc3RhdGljPSJzdGF0aWMiLGUuZGVwcmVjYXRlZD0iZGVwcmVjYXRlZCIsZS5hYnN0cmFjdD0iYWJzdHJhY3QiLGUuYXN5bmM9ImFzeW5jIixlLm1vZGlmaWNhdGlvbj0ibW9kaWZpY2F0aW9uIixlLmRvY3VtZW50YXRpb249ImRvY3VtZW50YXRpb24iLGUuZGVmYXVsdExpYnJhcnk9ImRlZmF1bHRMaWJyYXJ5In0pKGdhfHwoZ2E9e30pKTt2YXIgYmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7Y29uc3QgaT1uO3JldHVybiBDLm9iamVjdExpdGVyYWwoaSkmJihpLnJlc3VsdElkPT09dm9pZCAwfHx0eXBlb2YgaS5yZXN1bHRJZD09InN0cmluZyIpJiZBcnJheS5pc0FycmF5KGkuZGF0YSkmJihpLmRhdGEubGVuZ3RoPT09MHx8dHlwZW9mIGkuZGF0YVswXT09Im51bWJlciIpfWUuaXM9dH0pKGJhfHwoYmE9e30pKTt2YXIgX2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57cmFuZ2U6aSx0ZXh0OnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtjb25zdCByPWk7cmV0dXJuIHIhPW51bGwmJkcuaXMoci5yYW5nZSkmJkMuc3RyaW5nKHIudGV4dCl9ZS5pcz1ufSkoX2F8fChfYT17fSkpO3ZhciB3YTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIscyl7cmV0dXJue3JhbmdlOmksdmFyaWFibGVOYW1lOnIsY2FzZVNlbnNpdGl2ZUxvb2t1cDpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiByIT1udWxsJiZHLmlzKHIucmFuZ2UpJiZDLmJvb2xlYW4oci5jYXNlU2Vuc2l0aXZlTG9va3VwKSYmKEMuc3RyaW5nKHIudmFyaWFibGVOYW1lKXx8ci52YXJpYWJsZU5hbWU9PT12b2lkIDApfWUuaXM9bn0pKHdhfHwod2E9e30pKTt2YXIgdmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57cmFuZ2U6aSxleHByZXNzaW9uOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtjb25zdCByPWk7cmV0dXJuIHIhPW51bGwmJkcuaXMoci5yYW5nZSkmJihDLnN0cmluZyhyLmV4cHJlc3Npb24pfHxyLmV4cHJlc3Npb249PT12b2lkIDApfWUuaXM9bn0pKHZhfHwodmE9e30pKTt2YXIgeWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57ZnJhbWVJZDppLHN0b3BwZWRMb2NhdGlvbjpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkcuaXMoaS5zdG9wcGVkTG9jYXRpb24pfWUuaXM9bn0pKHlhfHwoeWE9e30pKTt2YXIgdmk7KGZ1bmN0aW9uKGUpe2UuVHlwZT0xLGUuUGFyYW1ldGVyPTI7ZnVuY3Rpb24gdChuKXtyZXR1cm4gbj09PTF8fG49PT0yfWUuaXM9dH0pKHZpfHwodmk9e30pKTt2YXIgeWk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSl7cmV0dXJue3ZhbHVlOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXtjb25zdCByPWk7cmV0dXJuIEMub2JqZWN0TGl0ZXJhbChyKSYmKHIudG9vbHRpcD09PXZvaWQgMHx8Qy5zdHJpbmcoci50b29sdGlwKXx8TXQuaXMoci50b29sdGlwKSkmJihyLmxvY2F0aW9uPT09dm9pZCAwfHxybi5pcyhyLmxvY2F0aW9uKSkmJihyLmNvbW1hbmQ9PT12b2lkIDB8fGR0LmlzKHIuY29tbWFuZCkpfWUuaXM9bn0pKHlpfHwoeWk9e30pKTt2YXIgeGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLHMpe2NvbnN0IG89e3Bvc2l0aW9uOmksbGFiZWw6cn07cmV0dXJuIHMhPT12b2lkIDAmJihvLmtpbmQ9cyksb31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7Y29uc3Qgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJnJlLmlzKHIucG9zaXRpb24pJiYoQy5zdHJpbmcoci5sYWJlbCl8fEMudHlwZWRBcnJheShyLmxhYmVsLHlpLmlzKSkmJihyLmtpbmQ9PT12b2lkIDB8fHZpLmlzKHIua2luZCkpJiZyLnRleHRFZGl0cz09PXZvaWQgMHx8Qy50eXBlZEFycmF5KHIudGV4dEVkaXRzLG9lLmlzKSYmKHIudG9vbHRpcD09PXZvaWQgMHx8Qy5zdHJpbmcoci50b29sdGlwKXx8TXQuaXMoci50b29sdGlwKSkmJihyLnBhZGRpbmdMZWZ0PT09dm9pZCAwfHxDLmJvb2xlYW4oci5wYWRkaW5nTGVmdCkpJiYoci5wYWRkaW5nUmlnaHQ9PT12b2lkIDB8fEMuYm9vbGVhbihyLnBhZGRpbmdSaWdodCkpfWUuaXM9bn0pKHhhfHwoeGE9e30pKTt2YXIgVGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJue2tpbmQ6InNuaXBwZXQiLHZhbHVlOm59fWUuY3JlYXRlU25pcHBldD10fSkoVGF8fChUYT17fSkpO3ZhciBrYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkscixzKXtyZXR1cm57aW5zZXJ0VGV4dDpuLGZpbHRlclRleHQ6aSxyYW5nZTpyLGNvbW1hbmQ6c319ZS5jcmVhdGU9dH0pKGthfHwoa2E9e30pKTt2YXIgQWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJue2l0ZW1zOm59fWUuY3JlYXRlPXR9KShBYXx8KEFhPXt9KSk7dmFyIFNhOyhmdW5jdGlvbihlKXtlLkludm9rZWQ9MCxlLkF1dG9tYXRpYz0xfSkoU2F8fChTYT17fSkpO3ZhciBMYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkpe3JldHVybntyYW5nZTpuLHRleHQ6aX19ZS5jcmVhdGU9dH0pKExhfHwoTGE9e30pKTt2YXIgQ2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixpKXtyZXR1cm57dHJpZ2dlcktpbmQ6bixzZWxlY3RlZENvbXBsZXRpb25JbmZvOml9fWUuY3JlYXRlPXR9KShDYXx8KENhPXt9KSk7dmFyIEVhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bjtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKGkpJiZvaS5pcyhpLnVyaSkmJkMuc3RyaW5nKGkubmFtZSl9ZS5pcz10fSkoRWF8fChFYT17fSkpO3ZhciBSYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChzLG8sbCxhKXtyZXR1cm4gbmV3IEV1KHMsbyxsLGEpfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihzKXtsZXQgbz1zO3JldHVybiEhKEMuZGVmaW5lZChvKSYmQy5zdHJpbmcoby51cmkpJiYoQy51bmRlZmluZWQoby5sYW5ndWFnZUlkKXx8Qy5zdHJpbmcoby5sYW5ndWFnZUlkKSkmJkMudWludGVnZXIoby5saW5lQ291bnQpJiZDLmZ1bmMoby5nZXRUZXh0KSYmQy5mdW5jKG8ucG9zaXRpb25BdCkmJkMuZnVuYyhvLm9mZnNldEF0KSl9ZS5pcz1uO2Z1bmN0aW9uIGkocyxvKXtsZXQgbD1zLmdldFRleHQoKSxhPXIobywoYyxkKT0+e2xldCBtPWMucmFuZ2Uuc3RhcnQubGluZS1kLnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIG09PT0wP2MucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLWQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOm19KSx1PWwubGVuZ3RoO2ZvcihsZXQgYz1hLmxlbmd0aC0xO2M+PTA7Yy0tKXtsZXQgZD1hW2NdLG09cy5vZmZzZXRBdChkLnJhbmdlLnN0YXJ0KSxmPXMub2Zmc2V0QXQoZC5yYW5nZS5lbmQpO2lmKGY8PXUpbD1sLnN1YnN0cmluZygwLG0pK2QubmV3VGV4dCtsLnN1YnN0cmluZyhmLGwubGVuZ3RoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3U9bX1yZXR1cm4gbH1lLmFwcGx5RWRpdHM9aTtmdW5jdGlvbiByKHMsbyl7aWYocy5sZW5ndGg8PTEpcmV0dXJuIHM7Y29uc3QgbD1zLmxlbmd0aC8yfDAsYT1zLnNsaWNlKDAsbCksdT1zLnNsaWNlKGwpO3IoYSxvKSxyKHUsbyk7bGV0IGM9MCxkPTAsbT0wO2Zvcig7YzxhLmxlbmd0aCYmZDx1Lmxlbmd0aDspbyhhW2NdLHVbZF0pPD0wP3NbbSsrXT1hW2MrK106c1ttKytdPXVbZCsrXTtmb3IoO2M8YS5sZW5ndGg7KXNbbSsrXT1hW2MrK107Zm9yKDtkPHUubGVuZ3RoOylzW20rK109dVtkKytdO3JldHVybiBzfX0pKFJhfHwoUmE9e30pKTt2YXIgRXU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2xldCB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSx0KXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldExpbmVPZmZzZXRzKCl7aWYodGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDApe2xldCBlPVtdLHQ9dGhpcy5fY29udGVudCxuPSEwO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtuJiYoZS5wdXNoKGkpLG49ITEpO2xldCByPXQuY2hhckF0KGkpO249cj09PSJcciJ8fHI9PT1gCmAscj09PSJcciImJmkrMTx0Lmxlbmd0aCYmdC5jaGFyQXQoaSsxKT09PWAKYCYmaSsrfW4mJnQubGVuZ3RoPjAmJmUucHVzaCh0Lmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9ZX1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAsaT10Lmxlbmd0aDtpZihpPT09MClyZXR1cm4gcmUuY3JlYXRlKDAsZSk7Zm9yKDtuPGk7KXtsZXQgcz1NYXRoLmZsb29yKChuK2kpLzIpO3Rbc10+ZT9pPXM6bj1zKzF9bGV0IHI9bi0xO3JldHVybiByZS5jcmVhdGUocixlLXRbcl0pfW9mZnNldEF0KGUpe2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXQubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj10W2UubGluZV0saT1lLmxpbmUrMTx0Lmxlbmd0aD90W2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixpKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9fSxDOyhmdW5jdGlvbihlKXtjb25zdCB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbihmKXtyZXR1cm4gdHlwZW9mIGY8InUifWUuZGVmaW5lZD1uO2Z1bmN0aW9uIGkoZil7cmV0dXJuIHR5cGVvZiBmPiJ1In1lLnVuZGVmaW5lZD1pO2Z1bmN0aW9uIHIoZil7cmV0dXJuIGY9PT0hMHx8Zj09PSExfWUuYm9vbGVhbj1yO2Z1bmN0aW9uIHMoZil7cmV0dXJuIHQuY2FsbChmKT09PSJbb2JqZWN0IFN0cmluZ10ifWUuc3RyaW5nPXM7ZnVuY3Rpb24gbyhmKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgTnVtYmVyXSJ9ZS5udW1iZXI9bztmdW5jdGlvbiBsKGYsXyxnKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgTnVtYmVyXSImJl88PWYmJmY8PWd9ZS5udW1iZXJSYW5nZT1sO2Z1bmN0aW9uIGEoZil7cmV0dXJuIHQuY2FsbChmKT09PSJbb2JqZWN0IE51bWJlcl0iJiYtMjE0NzQ4MzY0ODw9ZiYmZjw9MjE0NzQ4MzY0N31lLmludGVnZXI9YTtmdW5jdGlvbiB1KGYpe3JldHVybiB0LmNhbGwoZik9PT0iW29iamVjdCBOdW1iZXJdIiYmMDw9ZiYmZjw9MjE0NzQ4MzY0N31lLnVpbnRlZ2VyPXU7ZnVuY3Rpb24gYyhmKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgRnVuY3Rpb25dIn1lLmZ1bmM9YztmdW5jdGlvbiBkKGYpe3JldHVybiBmIT09bnVsbCYmdHlwZW9mIGY9PSJvYmplY3QifWUub2JqZWN0TGl0ZXJhbD1kO2Z1bmN0aW9uIG0oZixfKXtyZXR1cm4gQXJyYXkuaXNBcnJheShmKSYmZi5ldmVyeShfKX1lLnR5cGVkQXJyYXk9bX0pKEN8fChDPXt9KSk7dmFyIE1hPWNsYXNzIEVpe2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMuX3VyaT10LHRoaXMuX2xhbmd1YWdlSWQ9bix0aGlzLl92ZXJzaW9uPWksdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dCh0KXtpZih0KXtjb25zdCBuPXRoaXMub2Zmc2V0QXQodC5zdGFydCksaT10aGlzLm9mZnNldEF0KHQuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcobixpKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUodCxuKXtmb3IobGV0IGkgb2YgdClpZihFaS5pc0luY3JlbWVudGFsKGkpKXtjb25zdCByPURhKGkucmFuZ2UpLHM9dGhpcy5vZmZzZXRBdChyLnN0YXJ0KSxvPXRoaXMub2Zmc2V0QXQoci5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxzKStpLnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcobyx0aGlzLl9jb250ZW50Lmxlbmd0aCk7Y29uc3QgbD1NYXRoLm1heChyLnN0YXJ0LmxpbmUsMCksYT1NYXRoLm1heChyLmVuZC5saW5lLDApO2xldCB1PXRoaXMuX2xpbmVPZmZzZXRzO2NvbnN0IGM9TmEoaS50ZXh0LCExLHMpO2lmKGEtbD09PWMubGVuZ3RoKWZvcihsZXQgbT0wLGY9Yy5sZW5ndGg7bTxmO20rKyl1W20rbCsxXT1jW21dO2Vsc2UgYy5sZW5ndGg8MWU0P3Uuc3BsaWNlKGwrMSxhLWwsLi4uYyk6dGhpcy5fbGluZU9mZnNldHM9dT11LnNsaWNlKDAsbCsxKS5jb25jYXQoYyx1LnNsaWNlKGErMSkpO2NvbnN0IGQ9aS50ZXh0Lmxlbmd0aC0oby1zKTtpZihkIT09MClmb3IobGV0IG09bCsxK2MubGVuZ3RoLGY9dS5sZW5ndGg7bTxmO20rKyl1W21dPXVbbV0rZH1lbHNlIGlmKEVpLmlzRnVsbChpKSl0aGlzLl9jb250ZW50PWkudGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDA7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fdmVyc2lvbj1ufWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwJiYodGhpcy5fbGluZU9mZnNldHM9TmEodGhpcy5fY29udGVudCwhMCkpLHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQodCl7dD1NYXRoLm1heChNYXRoLm1pbih0LHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTtsZXQgbj10aGlzLmdldExpbmVPZmZzZXRzKCksaT0wLHI9bi5sZW5ndGg7aWYocj09PTApcmV0dXJue2xpbmU6MCxjaGFyYWN0ZXI6dH07Zm9yKDtpPHI7KXtsZXQgbz1NYXRoLmZsb29yKChpK3IpLzIpO25bb10+dD9yPW86aT1vKzF9bGV0IHM9aS0xO3JldHVybntsaW5lOnMsY2hhcmFjdGVyOnQtbltzXX19b2Zmc2V0QXQodCl7bGV0IG49dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKHQubGluZT49bi5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKHQubGluZTwwKXJldHVybiAwO2xldCBpPW5bdC5saW5lXSxyPXQubGluZSsxPG4ubGVuZ3RoP25bdC5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihpK3QuY2hhcmFjdGVyLHIpLGkpfWdldCBsaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH1zdGF0aWMgaXNJbmNyZW1lbnRhbCh0KXtsZXQgbj10O3JldHVybiBuIT1udWxsJiZ0eXBlb2Ygbi50ZXh0PT0ic3RyaW5nIiYmbi5yYW5nZSE9PXZvaWQgMCYmKG4ucmFuZ2VMZW5ndGg9PT12b2lkIDB8fHR5cGVvZiBuLnJhbmdlTGVuZ3RoPT0ibnVtYmVyIil9c3RhdGljIGlzRnVsbCh0KXtsZXQgbj10O3JldHVybiBuIT1udWxsJiZ0eXBlb2Ygbi50ZXh0PT0ic3RyaW5nIiYmbi5yYW5nZT09PXZvaWQgMCYmbi5yYW5nZUxlbmd0aD09PXZvaWQgMH19LHhpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIscyxvLGwpe3JldHVybiBuZXcgTWEocixzLG8sbCl9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIscyxvKXtpZihyIGluc3RhbmNlb2YgTWEpcmV0dXJuIHIudXBkYXRlKHMsbykscjt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9ZS51cGRhdGU9bjtmdW5jdGlvbiBpKHIscyl7bGV0IG89ci5nZXRUZXh0KCksbD1UaShzLm1hcChSdSksKGMsZCk9PntsZXQgbT1jLnJhbmdlLnN0YXJ0LmxpbmUtZC5yYW5nZS5zdGFydC5saW5lO3JldHVybiBtPT09MD9jLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci1kLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjptfSksYT0wO2NvbnN0IHU9W107Zm9yKGNvbnN0IGMgb2YgbCl7bGV0IGQ9ci5vZmZzZXRBdChjLnJhbmdlLnN0YXJ0KTtpZihkPGEpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7ZD5hJiZ1LnB1c2goby5zdWJzdHJpbmcoYSxkKSksYy5uZXdUZXh0Lmxlbmd0aCYmdS5wdXNoKGMubmV3VGV4dCksYT1yLm9mZnNldEF0KGMucmFuZ2UuZW5kKX1yZXR1cm4gdS5wdXNoKG8uc3Vic3RyKGEpKSx1LmpvaW4oIiIpfWUuYXBwbHlFZGl0cz1pfSkoeGl8fCh4aT17fSkpO2Z1bmN0aW9uIFRpKGUsdCl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3Qgbj1lLmxlbmd0aC8yfDAsaT1lLnNsaWNlKDAsbikscj1lLnNsaWNlKG4pO1RpKGksdCksVGkocix0KTtsZXQgcz0wLG89MCxsPTA7Zm9yKDtzPGkubGVuZ3RoJiZvPHIubGVuZ3RoOyl0KGlbc10scltvXSk8PTA/ZVtsKytdPWlbcysrXTplW2wrK109cltvKytdO2Zvcig7czxpLmxlbmd0aDspZVtsKytdPWlbcysrXTtmb3IoO288ci5sZW5ndGg7KWVbbCsrXT1yW28rK107cmV0dXJuIGV9ZnVuY3Rpb24gTmEoZSx0LG49MCl7Y29uc3QgaT10P1tuXTpbXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IHM9ZS5jaGFyQ29kZUF0KHIpOyhzPT09MTN8fHM9PT0xMCkmJihzPT09MTMmJnIrMTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KHIrMSk9PT0xMCYmcisrLGkucHVzaChuK3IrMSkpfXJldHVybiBpfWZ1bmN0aW9uIERhKGUpe2NvbnN0IHQ9ZS5zdGFydCxuPWUuZW5kO3JldHVybiB0LmxpbmU+bi5saW5lfHx0LmxpbmU9PT1uLmxpbmUmJnQuY2hhcmFjdGVyPm4uY2hhcmFjdGVyP3tzdGFydDpuLGVuZDp0fTplfWZ1bmN0aW9uIFJ1KGUpe2NvbnN0IHQ9RGEoZS5yYW5nZSk7cmV0dXJuIHQhPT1lLnJhbmdlP3tuZXdUZXh0OmUubmV3VGV4dCxyYW5nZTp0fTplfXZhciB6OyhmdW5jdGlvbihlKXtlW2UuU3RhcnRDb21tZW50VGFnPTBdPSJTdGFydENvbW1lbnRUYWciLGVbZS5Db21tZW50PTFdPSJDb21tZW50IixlW2UuRW5kQ29tbWVudFRhZz0yXT0iRW5kQ29tbWVudFRhZyIsZVtlLlN0YXJ0VGFnT3Blbj0zXT0iU3RhcnRUYWdPcGVuIixlW2UuU3RhcnRUYWdDbG9zZT00XT0iU3RhcnRUYWdDbG9zZSIsZVtlLlN0YXJ0VGFnU2VsZkNsb3NlPTVdPSJTdGFydFRhZ1NlbGZDbG9zZSIsZVtlLlN0YXJ0VGFnPTZdPSJTdGFydFRhZyIsZVtlLkVuZFRhZ09wZW49N109IkVuZFRhZ09wZW4iLGVbZS5FbmRUYWdDbG9zZT04XT0iRW5kVGFnQ2xvc2UiLGVbZS5FbmRUYWc9OV09IkVuZFRhZyIsZVtlLkRlbGltaXRlckFzc2lnbj0xMF09IkRlbGltaXRlckFzc2lnbiIsZVtlLkF0dHJpYnV0ZU5hbWU9MTFdPSJBdHRyaWJ1dGVOYW1lIixlW2UuQXR0cmlidXRlVmFsdWU9MTJdPSJBdHRyaWJ1dGVWYWx1ZSIsZVtlLlN0YXJ0RG9jdHlwZVRhZz0xM109IlN0YXJ0RG9jdHlwZVRhZyIsZVtlLkRvY3R5cGU9MTRdPSJEb2N0eXBlIixlW2UuRW5kRG9jdHlwZVRhZz0xNV09IkVuZERvY3R5cGVUYWciLGVbZS5Db250ZW50PTE2XT0iQ29udGVudCIsZVtlLldoaXRlc3BhY2U9MTddPSJXaGl0ZXNwYWNlIixlW2UuVW5rbm93bj0xOF09IlVua25vd24iLGVbZS5TY3JpcHQ9MTldPSJTY3JpcHQiLGVbZS5TdHlsZXM9MjBdPSJTdHlsZXMiLGVbZS5FT1M9MjFdPSJFT1MifSkoenx8KHo9e30pKTt2YXIgQjsoZnVuY3Rpb24oZSl7ZVtlLldpdGhpbkNvbnRlbnQ9MF09IldpdGhpbkNvbnRlbnQiLGVbZS5BZnRlck9wZW5pbmdTdGFydFRhZz0xXT0iQWZ0ZXJPcGVuaW5nU3RhcnRUYWciLGVbZS5BZnRlck9wZW5pbmdFbmRUYWc9Ml09IkFmdGVyT3BlbmluZ0VuZFRhZyIsZVtlLldpdGhpbkRvY3R5cGU9M109IldpdGhpbkRvY3R5cGUiLGVbZS5XaXRoaW5UYWc9NF09IldpdGhpblRhZyIsZVtlLldpdGhpbkVuZFRhZz01XT0iV2l0aGluRW5kVGFnIixlW2UuV2l0aGluQ29tbWVudD02XT0iV2l0aGluQ29tbWVudCIsZVtlLldpdGhpblNjcmlwdENvbnRlbnQ9N109IldpdGhpblNjcmlwdENvbnRlbnQiLGVbZS5XaXRoaW5TdHlsZUNvbnRlbnQ9OF09IldpdGhpblN0eWxlQ29udGVudCIsZVtlLkFmdGVyQXR0cmlidXRlTmFtZT05XT0iQWZ0ZXJBdHRyaWJ1dGVOYW1lIixlW2UuQmVmb3JlQXR0cmlidXRlVmFsdWU9MTBdPSJCZWZvcmVBdHRyaWJ1dGVWYWx1ZSJ9KShCfHwoQj17fSkpO3ZhciBJYTsoZnVuY3Rpb24oZSl7ZS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W3plLk1hcmtkb3duLHplLlBsYWluVGV4dF19fSxob3Zlcjp7Y29udGVudEZvcm1hdDpbemUuTWFya2Rvd24semUuUGxhaW5UZXh0XX19fX0pKElhfHwoSWE9e30pKTt2YXIga2k7KGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRmlsZT0xXT0iRmlsZSIsZVtlLkRpcmVjdG9yeT0yXT0iRGlyZWN0b3J5IixlW2UuU3ltYm9saWNMaW5rPTY0XT0iU3ltYm9saWNMaW5rIn0pKGtpfHwoa2k9e30pKTt2YXIgTXU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnNvdXJjZT1lLHRoaXMubGVuPWUubGVuZ3RoLHRoaXMucG9zaXRpb249dH1lb3MoKXtyZXR1cm4gdGhpcy5sZW48PXRoaXMucG9zaXRpb259Z2V0U291cmNlKCl7cmV0dXJuIHRoaXMuc291cmNlfXBvcygpe3JldHVybiB0aGlzLnBvc2l0aW9ufWdvQmFja1RvKGUpe3RoaXMucG9zaXRpb249ZX1nb0JhY2soZSl7dGhpcy5wb3NpdGlvbi09ZX1hZHZhbmNlKGUpe3RoaXMucG9zaXRpb24rPWV9Z29Ub0VuZCgpe3RoaXMucG9zaXRpb249dGhpcy5zb3VyY2UubGVuZ3RofW5leHRDaGFyKCl7cmV0dXJuIHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbisrKXx8MH1wZWVrQ2hhcihlPTApe3JldHVybiB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24rZSl8fDB9YWR2YW5jZUlmQ2hhcihlKXtyZXR1cm4gZT09PXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbik/KHRoaXMucG9zaXRpb24rKywhMCk6ITF9YWR2YW5jZUlmQ2hhcnMoZSl7bGV0IHQ7aWYodGhpcy5wb3NpdGlvbitlLmxlbmd0aD50aGlzLnNvdXJjZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKylpZih0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24rdCkhPT1lW3RdKXJldHVybiExO3JldHVybiB0aGlzLmFkdmFuY2UodCksITB9YWR2YW5jZUlmUmVnRXhwKGUpe2NvbnN0IG49dGhpcy5zb3VyY2Uuc3Vic3RyKHRoaXMucG9zaXRpb24pLm1hdGNoKGUpO3JldHVybiBuPyh0aGlzLnBvc2l0aW9uPXRoaXMucG9zaXRpb24rbi5pbmRleCtuWzBdLmxlbmd0aCxuWzBdKToiIn1hZHZhbmNlVW50aWxSZWdFeHAoZSl7Y29uc3Qgbj10aGlzLnNvdXJjZS5zdWJzdHIodGhpcy5wb3NpdGlvbikubWF0Y2goZSk7cmV0dXJuIG4/KHRoaXMucG9zaXRpb249dGhpcy5wb3NpdGlvbituLmluZGV4LG5bMF0pOih0aGlzLmdvVG9FbmQoKSwiIil9YWR2YW5jZVVudGlsQ2hhcihlKXtmb3IoO3RoaXMucG9zaXRpb248dGhpcy5zb3VyY2UubGVuZ3RoOyl7aWYodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uKT09PWUpcmV0dXJuITA7dGhpcy5hZHZhbmNlKDEpfXJldHVybiExfWFkdmFuY2VVbnRpbENoYXJzKGUpe2Zvcig7dGhpcy5wb3NpdGlvbitlLmxlbmd0aDw9dGhpcy5zb3VyY2UubGVuZ3RoOyl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGgmJnRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbit0KT09PWVbdF07dCsrKTtpZih0PT09ZS5sZW5ndGgpcmV0dXJuITA7dGhpcy5hZHZhbmNlKDEpfXJldHVybiB0aGlzLmdvVG9FbmQoKSwhMX1za2lwV2hpdGVzcGFjZSgpe3JldHVybiB0aGlzLmFkdmFuY2VXaGlsZUNoYXIodD0+dD09PVd1fHx0PT09RnV8fHQ9PT16dXx8dD09PVV1fHx0PT09SHUpPjB9YWR2YW5jZVdoaWxlQ2hhcihlKXtjb25zdCB0PXRoaXMucG9zaXRpb247Zm9yKDt0aGlzLnBvc2l0aW9uPHRoaXMubGVuJiZlKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbikpOyl0aGlzLnBvc2l0aW9uKys7cmV0dXJuIHRoaXMucG9zaXRpb24tdH19LHphPTMzLGZ0PTQ1LGhuPTYwLExlPTYyLEFpPTQ3LE51PTYxLER1PTM0LEl1PTM5LHp1PTEwLEh1PTEzLFV1PTEyLFd1PTMyLEZ1PTksUHU9eyJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSI6ITAsInRleHQvaHRtbCI6ITB9O2Z1bmN0aW9uIGdlKGUsdD0wLG49Qi5XaXRoaW5Db250ZW50LGk9ITEpe2NvbnN0IHI9bmV3IE11KGUsdCk7bGV0IHM9bixvPTAsbD16LlVua25vd24sYSx1LGMsZCxtO2Z1bmN0aW9uIGYoKXtyZXR1cm4gci5hZHZhbmNlSWZSZWdFeHAoL15bXzpcd11bXzpcdy0uXGRdKi8pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gXygpe3JldHVybiByLmFkdmFuY2VJZlJlZ0V4cCgvXlteXHMiJz48Lz1ceDAwLVx4MEZceDdGXHg4MC1ceDlGXSovKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGcoeSxFLFIpe3JldHVybiBsPUUsbz15LGE9UixFfWZ1bmN0aW9uIEEoKXtjb25zdCB5PXIucG9zKCksRT1zLFI9digpO3JldHVybiBSIT09ei5FT1MmJnk9PT1yLnBvcygpJiYhKGkmJihSPT09ei5TdGFydFRhZ0Nsb3NlfHxSPT09ei5FbmRUYWdDbG9zZSkpPyhjb25zb2xlLndhcm4oIlNjYW5uZXIuc2NhbiBoYXMgbm90IGFkdmFuY2VkIGF0IG9mZnNldCAiK3krIiwgc3RhdGUgYmVmb3JlOiAiK0UrIiBhZnRlcjogIitzKSxyLmFkdmFuY2UoMSksZyh5LHouVW5rbm93bikpOlJ9ZnVuY3Rpb24gdigpe2NvbnN0IHk9ci5wb3MoKTtpZihyLmVvcygpKXJldHVybiBnKHksei5FT1MpO2xldCBFO3N3aXRjaChzKXtjYXNlIEIuV2l0aGluQ29tbWVudDpyZXR1cm4gci5hZHZhbmNlSWZDaGFycyhbZnQsZnQsTGVdKT8ocz1CLldpdGhpbkNvbnRlbnQsZyh5LHouRW5kQ29tbWVudFRhZykpOihyLmFkdmFuY2VVbnRpbENoYXJzKFtmdCxmdCxMZV0pLGcoeSx6LkNvbW1lbnQpKTtjYXNlIEIuV2l0aGluRG9jdHlwZTpyZXR1cm4gci5hZHZhbmNlSWZDaGFyKExlKT8ocz1CLldpdGhpbkNvbnRlbnQsZyh5LHouRW5kRG9jdHlwZVRhZykpOihyLmFkdmFuY2VVbnRpbENoYXIoTGUpLGcoeSx6LkRvY3R5cGUpKTtjYXNlIEIuV2l0aGluQ29udGVudDppZihyLmFkdmFuY2VJZkNoYXIoaG4pKXtpZighci5lb3MoKSYmci5wZWVrQ2hhcigpPT09emEpe2lmKHIuYWR2YW5jZUlmQ2hhcnMoW3phLGZ0LGZ0XSkpcmV0dXJuIHM9Qi5XaXRoaW5Db21tZW50LGcoeSx6LlN0YXJ0Q29tbWVudFRhZyk7aWYoci5hZHZhbmNlSWZSZWdFeHAoL14hZG9jdHlwZS9pKSlyZXR1cm4gcz1CLldpdGhpbkRvY3R5cGUsZyh5LHouU3RhcnREb2N0eXBlVGFnKX1yZXR1cm4gci5hZHZhbmNlSWZDaGFyKEFpKT8ocz1CLkFmdGVyT3BlbmluZ0VuZFRhZyxnKHksei5FbmRUYWdPcGVuKSk6KHM9Qi5BZnRlck9wZW5pbmdTdGFydFRhZyxnKHksei5TdGFydFRhZ09wZW4pKX1yZXR1cm4gci5hZHZhbmNlVW50aWxDaGFyKGhuKSxnKHksei5Db250ZW50KTtjYXNlIEIuQWZ0ZXJPcGVuaW5nRW5kVGFnOnJldHVybiBmKCkubGVuZ3RoPjA/KHM9Qi5XaXRoaW5FbmRUYWcsZyh5LHouRW5kVGFnKSk6ci5za2lwV2hpdGVzcGFjZSgpP2coeSx6LldoaXRlc3BhY2UsVGUoIlRhZyBuYW1lIG11c3QgZGlyZWN0bHkgZm9sbG93IHRoZSBvcGVuIGJyYWNrZXQuIikpOihzPUIuV2l0aGluRW5kVGFnLHIuYWR2YW5jZVVudGlsQ2hhcihMZSkseTxyLnBvcygpP2coeSx6LlVua25vd24sVGUoIkVuZCB0YWcgbmFtZSBleHBlY3RlZC4iKSk6digpKTtjYXNlIEIuV2l0aGluRW5kVGFnOmlmKHIuc2tpcFdoaXRlc3BhY2UoKSlyZXR1cm4gZyh5LHouV2hpdGVzcGFjZSk7aWYoci5hZHZhbmNlSWZDaGFyKExlKSlyZXR1cm4gcz1CLldpdGhpbkNvbnRlbnQsZyh5LHouRW5kVGFnQ2xvc2UpO2lmKGkmJnIucGVla0NoYXIoKT09PWhuKXJldHVybiBzPUIuV2l0aGluQ29udGVudCxnKHksei5FbmRUYWdDbG9zZSxUZSgiQ2xvc2luZyBicmFja2V0IG1pc3NpbmcuIikpO0U9VGUoIkNsb3NpbmcgYnJhY2tldCBleHBlY3RlZC4iKTticmVhaztjYXNlIEIuQWZ0ZXJPcGVuaW5nU3RhcnRUYWc6cmV0dXJuIGM9ZigpLG09dm9pZCAwLGQ9dm9pZCAwLGMubGVuZ3RoPjA/KHU9ITEscz1CLldpdGhpblRhZyxnKHksei5TdGFydFRhZykpOnIuc2tpcFdoaXRlc3BhY2UoKT9nKHksei5XaGl0ZXNwYWNlLFRlKCJUYWcgbmFtZSBtdXN0IGRpcmVjdGx5IGZvbGxvdyB0aGUgb3BlbiBicmFja2V0LiIpKToocz1CLldpdGhpblRhZyxyLmFkdmFuY2VVbnRpbENoYXIoTGUpLHk8ci5wb3MoKT9nKHksei5Vbmtub3duLFRlKCJTdGFydCB0YWcgbmFtZSBleHBlY3RlZC4iKSk6digpKTtjYXNlIEIuV2l0aGluVGFnOnJldHVybiByLnNraXBXaGl0ZXNwYWNlKCk/KHU9ITAsZyh5LHouV2hpdGVzcGFjZSkpOnUmJihkPV8oKSxkLmxlbmd0aD4wKT8ocz1CLkFmdGVyQXR0cmlidXRlTmFtZSx1PSExLGcoeSx6LkF0dHJpYnV0ZU5hbWUpKTpyLmFkdmFuY2VJZkNoYXJzKFtBaSxMZV0pPyhzPUIuV2l0aGluQ29udGVudCxnKHksei5TdGFydFRhZ1NlbGZDbG9zZSkpOnIuYWR2YW5jZUlmQ2hhcihMZSk/KGM9PT0ic2NyaXB0Ij9tJiZQdVttXT9zPUIuV2l0aGluQ29udGVudDpzPUIuV2l0aGluU2NyaXB0Q29udGVudDpjPT09InN0eWxlIj9zPUIuV2l0aGluU3R5bGVDb250ZW50OnM9Qi5XaXRoaW5Db250ZW50LGcoeSx6LlN0YXJ0VGFnQ2xvc2UpKTppJiZyLnBlZWtDaGFyKCk9PT1obj8ocz1CLldpdGhpbkNvbnRlbnQsZyh5LHouU3RhcnRUYWdDbG9zZSxUZSgiQ2xvc2luZyBicmFja2V0IG1pc3NpbmcuIikpKTooci5hZHZhbmNlKDEpLGcoeSx6LlVua25vd24sVGUoIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIHRhZy4iKSkpO2Nhc2UgQi5BZnRlckF0dHJpYnV0ZU5hbWU6cmV0dXJuIHIuc2tpcFdoaXRlc3BhY2UoKT8odT0hMCxnKHksei5XaGl0ZXNwYWNlKSk6ci5hZHZhbmNlSWZDaGFyKE51KT8ocz1CLkJlZm9yZUF0dHJpYnV0ZVZhbHVlLGcoeSx6LkRlbGltaXRlckFzc2lnbikpOihzPUIuV2l0aGluVGFnLHYoKSk7Y2FzZSBCLkJlZm9yZUF0dHJpYnV0ZVZhbHVlOmlmKHIuc2tpcFdoaXRlc3BhY2UoKSlyZXR1cm4gZyh5LHouV2hpdGVzcGFjZSk7bGV0IE49ci5hZHZhbmNlSWZSZWdFeHAoL15bXlxzIidgPTw+XSsvKTtpZihOLmxlbmd0aD4wJiYoci5wZWVrQ2hhcigpPT09TGUmJnIucGVla0NoYXIoLTEpPT09QWkmJihyLmdvQmFjaygxKSxOPU4uc3Vic3RyaW5nKDAsTi5sZW5ndGgtMSkpLGQ9PT0idHlwZSImJihtPU4pLE4ubGVuZ3RoPjApKXJldHVybiBzPUIuV2l0aGluVGFnLHU9ITEsZyh5LHouQXR0cmlidXRlVmFsdWUpO2NvbnN0IE09ci5wZWVrQ2hhcigpO3JldHVybiBNPT09SXV8fE09PT1EdT8oci5hZHZhbmNlKDEpLHIuYWR2YW5jZVVudGlsQ2hhcihNKSYmci5hZHZhbmNlKDEpLGQ9PT0idHlwZSImJihtPXIuZ2V0U291cmNlKCkuc3Vic3RyaW5nKHkrMSxyLnBvcygpLTEpKSxzPUIuV2l0aGluVGFnLHU9ITEsZyh5LHouQXR0cmlidXRlVmFsdWUpKToocz1CLldpdGhpblRhZyx1PSExLHYoKSk7Y2FzZSBCLldpdGhpblNjcmlwdENvbnRlbnQ6bGV0IGI9MTtmb3IoOyFyLmVvcygpOyl7Y29uc3QgcD1yLmFkdmFuY2VJZlJlZ0V4cCgvPCEtLXwtLT58PFwvP3NjcmlwdFxzKlwvPz4/L2kpO2lmKHAubGVuZ3RoPT09MClyZXR1cm4gci5nb1RvRW5kKCksZyh5LHouU2NyaXB0KTtpZihwPT09IjwhLS0iKWI9PT0xJiYoYj0yKTtlbHNlIGlmKHA9PT0iLS0+IiliPTE7ZWxzZSBpZihwWzFdIT09Ii8iKWI9PT0yJiYoYj0zKTtlbHNlIGlmKGI9PT0zKWI9MjtlbHNle3IuZ29CYWNrKHAubGVuZ3RoKTticmVha319cmV0dXJuIHM9Qi5XaXRoaW5Db250ZW50LHk8ci5wb3MoKT9nKHksei5TY3JpcHQpOnYoKTtjYXNlIEIuV2l0aGluU3R5bGVDb250ZW50OnJldHVybiByLmFkdmFuY2VVbnRpbFJlZ0V4cCgvPFwvc3R5bGUvaSkscz1CLldpdGhpbkNvbnRlbnQseTxyLnBvcygpP2coeSx6LlN0eWxlcyk6digpfXJldHVybiByLmFkdmFuY2UoMSkscz1CLldpdGhpbkNvbnRlbnQsZyh5LHouVW5rbm93bixFKX1yZXR1cm57c2NhbjpBLGdldFRva2VuVHlwZTooKT0+bCxnZXRUb2tlbk9mZnNldDooKT0+byxnZXRUb2tlbkxlbmd0aDooKT0+ci5wb3MoKS1vLGdldFRva2VuRW5kOigpPT5yLnBvcygpLGdldFRva2VuVGV4dDooKT0+ci5nZXRTb3VyY2UoKS5zdWJzdHJpbmcobyxyLnBvcygpKSxnZXRTY2FubmVyU3RhdGU6KCk9PnMsZ2V0VG9rZW5FcnJvcjooKT0+YX19ZnVuY3Rpb24gSGEoZSx0KXtsZXQgbj0wLGk9ZS5sZW5ndGg7aWYoaT09PTApcmV0dXJuIDA7Zm9yKDtuPGk7KXtsZXQgcj1NYXRoLmZsb29yKChuK2kpLzIpO3QoZVtyXSk/aT1yOm49cisxfXJldHVybiBufWZ1bmN0aW9uIEJ1KGUsdCxuKXtsZXQgaT0wLHI9ZS5sZW5ndGgtMTtmb3IoO2k8PXI7KXtjb25zdCBzPShpK3IpLzJ8MCxvPW4oZVtzXSx0KTtpZihvPDApaT1zKzE7ZWxzZSBpZihvPjApcj1zLTE7ZWxzZSByZXR1cm4gc31yZXR1cm4tKGkrMSl9dmFyIFVhPWNsYXNze2dldCBhdHRyaWJ1dGVOYW1lcygpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXM/T2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTpbXX1jb25zdHJ1Y3RvcihlLHQsbixpKXt0aGlzLnN0YXJ0PWUsdGhpcy5lbmQ9dCx0aGlzLmNoaWxkcmVuPW4sdGhpcy5wYXJlbnQ9aSx0aGlzLmNsb3NlZD0hMX1pc1NhbWVUYWcoZSl7cmV0dXJuIHRoaXMudGFnPT09dm9pZCAwP2U9PT12b2lkIDA6ZSE9PXZvaWQgMCYmdGhpcy50YWcubGVuZ3RoPT09ZS5sZW5ndGgmJnRoaXMudGFnLnRvTG93ZXJDYXNlKCk9PT1lfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bMF19Z2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOnZvaWQgMH1maW5kTm9kZUJlZm9yZShlKXtjb25zdCB0PUhhKHRoaXMuY2hpbGRyZW4sbj0+ZTw9bi5zdGFydCktMTtpZih0Pj0wKXtjb25zdCBuPXRoaXMuY2hpbGRyZW5bdF07aWYoZT5uLnN0YXJ0KXtpZihlPG4uZW5kKXJldHVybiBuLmZpbmROb2RlQmVmb3JlKGUpO2NvbnN0IGk9bi5sYXN0Q2hpbGQ7cmV0dXJuIGkmJmkuZW5kPT09bi5lbmQ/bi5maW5kTm9kZUJlZm9yZShlKTpufX1yZXR1cm4gdGhpc31maW5kTm9kZUF0KGUpe2NvbnN0IHQ9SGEodGhpcy5jaGlsZHJlbixuPT5lPD1uLnN0YXJ0KS0xO2lmKHQ+PTApe2NvbnN0IG49dGhpcy5jaGlsZHJlblt0XTtpZihlPm4uc3RhcnQmJmU8PW4uZW5kKXJldHVybiBuLmZpbmROb2RlQXQoZSl9cmV0dXJuIHRoaXN9fSxxdT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRhdGFNYW5hZ2VyPWV9cGFyc2VEb2N1bWVudChlKXtyZXR1cm4gdGhpcy5wYXJzZShlLmdldFRleHQoKSx0aGlzLmRhdGFNYW5hZ2VyLmdldFZvaWRFbGVtZW50cyhlLmxhbmd1YWdlSWQpKX1wYXJzZShlLHQpe2NvbnN0IG49Z2UoZSx2b2lkIDAsdm9pZCAwLCEwKSxpPW5ldyBVYSgwLGUubGVuZ3RoLFtdLHZvaWQgMCk7bGV0IHI9aSxzPS0xLG8sbD1udWxsLGE9bi5zY2FuKCk7Zm9yKDthIT09ei5FT1M7KXtzd2l0Y2goYSl7Y2FzZSB6LlN0YXJ0VGFnT3Blbjpjb25zdCB1PW5ldyBVYShuLmdldFRva2VuT2Zmc2V0KCksZS5sZW5ndGgsW10scik7ci5jaGlsZHJlbi5wdXNoKHUpLHI9dTticmVhaztjYXNlIHouU3RhcnRUYWc6ci50YWc9bi5nZXRUb2tlblRleHQoKTticmVhaztjYXNlIHouU3RhcnRUYWdDbG9zZTpyLnBhcmVudCYmKHIuZW5kPW4uZ2V0VG9rZW5FbmQoKSxuLmdldFRva2VuTGVuZ3RoKCk/KHIuc3RhcnRUYWdFbmQ9bi5nZXRUb2tlbkVuZCgpLHIudGFnJiZ0aGlzLmRhdGFNYW5hZ2VyLmlzVm9pZEVsZW1lbnQoci50YWcsdCkmJihyLmNsb3NlZD0hMCxyPXIucGFyZW50KSk6cj1yLnBhcmVudCk7YnJlYWs7Y2FzZSB6LlN0YXJ0VGFnU2VsZkNsb3NlOnIucGFyZW50JiYoci5jbG9zZWQ9ITAsci5lbmQ9bi5nZXRUb2tlbkVuZCgpLHIuc3RhcnRUYWdFbmQ9bi5nZXRUb2tlbkVuZCgpLHI9ci5wYXJlbnQpO2JyZWFrO2Nhc2Ugei5FbmRUYWdPcGVuOnM9bi5nZXRUb2tlbk9mZnNldCgpLG89dm9pZCAwO2JyZWFrO2Nhc2Ugei5FbmRUYWc6bz1uLmdldFRva2VuVGV4dCgpLnRvTG93ZXJDYXNlKCk7YnJlYWs7Y2FzZSB6LkVuZFRhZ0Nsb3NlOmxldCBjPXI7Zm9yKDshYy5pc1NhbWVUYWcobykmJmMucGFyZW50OyljPWMucGFyZW50O2lmKGMucGFyZW50KXtmb3IoO3IhPT1jOylyLmVuZD1zLHIuY2xvc2VkPSExLHI9ci5wYXJlbnQ7ci5jbG9zZWQ9ITAsci5lbmRUYWdTdGFydD1zLHIuZW5kPW4uZ2V0VG9rZW5FbmQoKSxyPXIucGFyZW50fWJyZWFrO2Nhc2Ugei5BdHRyaWJ1dGVOYW1lOntsPW4uZ2V0VG9rZW5UZXh0KCk7bGV0IGQ9ci5hdHRyaWJ1dGVzO2R8fChyLmF0dHJpYnV0ZXM9ZD17fSksZFtsXT1udWxsO2JyZWFrfWNhc2Ugei5BdHRyaWJ1dGVWYWx1ZTp7Y29uc3QgZD1uLmdldFRva2VuVGV4dCgpLG09ci5hdHRyaWJ1dGVzO20mJmwmJihtW2xdPWQsbD1udWxsKTticmVha319YT1uLnNjYW4oKX1mb3IoO3IucGFyZW50OylyLmVuZD1lLmxlbmd0aCxyLmNsb3NlZD0hMSxyPXIucGFyZW50O3JldHVybntyb290czppLmNoaWxkcmVuLGZpbmROb2RlQmVmb3JlOmkuZmluZE5vZGVCZWZvcmUuYmluZChpKSxmaW5kTm9kZUF0OmkuZmluZE5vZGVBdC5iaW5kKGkpfX19LE50PXsiQWFjdXRlOyI6IsOBIixBYWN1dGU6IsOBIiwiYWFjdXRlOyI6IsOhIixhYWN1dGU6IsOhIiwiQWJyZXZlOyI6IsSCIiwiYWJyZXZlOyI6IsSDIiwiYWM7Ijoi4oi+IiwiYWNkOyI6IuKIvyIsImFjRTsiOiLiiL7MsyIsIkFjaXJjOyI6IsOCIixBY2lyYzoiw4IiLCJhY2lyYzsiOiLDoiIsYWNpcmM6IsOiIiwiYWN1dGU7IjoiwrQiLGFjdXRlOiLCtCIsIkFjeTsiOiLQkCIsImFjeTsiOiLQsCIsIkFFbGlnOyI6IsOGIixBRWxpZzoiw4YiLCJhZWxpZzsiOiLDpiIsYWVsaWc6IsOmIiwiYWY7Ijoi4oGhIiwiQWZyOyI6IvCdlIQiLCJhZnI7Ijoi8J2UniIsIkFncmF2ZTsiOiLDgCIsQWdyYXZlOiLDgCIsImFncmF2ZTsiOiLDoCIsYWdyYXZlOiLDoCIsImFsZWZzeW07Ijoi4oS1IiwiYWxlcGg7Ijoi4oS1IiwiQWxwaGE7IjoizpEiLCJhbHBoYTsiOiLOsSIsIkFtYWNyOyI6IsSAIiwiYW1hY3I7IjoixIEiLCJhbWFsZzsiOiLiqL8iLCJBTVA7IjoiJiIsQU1QOiImIiwiYW1wOyI6IiYiLGFtcDoiJiIsIkFuZDsiOiLiqZMiLCJhbmQ7Ijoi4oinIiwiYW5kYW5kOyI6IuKplSIsImFuZGQ7Ijoi4qmcIiwiYW5kc2xvcGU7Ijoi4qmYIiwiYW5kdjsiOiLiqZoiLCJhbmc7Ijoi4oigIiwiYW5nZTsiOiLipqQiLCJhbmdsZTsiOiLiiKAiLCJhbmdtc2Q7Ijoi4oihIiwiYW5nbXNkYWE7Ijoi4qaoIiwiYW5nbXNkYWI7Ijoi4qapIiwiYW5nbXNkYWM7Ijoi4qaqIiwiYW5nbXNkYWQ7Ijoi4qarIiwiYW5nbXNkYWU7Ijoi4qasIiwiYW5nbXNkYWY7Ijoi4qatIiwiYW5nbXNkYWc7Ijoi4qauIiwiYW5nbXNkYWg7Ijoi4qavIiwiYW5ncnQ7Ijoi4oifIiwiYW5ncnR2YjsiOiLiir4iLCJhbmdydHZiZDsiOiLipp0iLCJhbmdzcGg7Ijoi4oiiIiwiYW5nc3Q7Ijoiw4UiLCJhbmd6YXJyOyI6IuKNvCIsIkFvZ29uOyI6IsSEIiwiYW9nb247IjoixIUiLCJBb3BmOyI6IvCdlLgiLCJhb3BmOyI6IvCdlZIiLCJhcDsiOiLiiYgiLCJhcGFjaXI7Ijoi4qmvIiwiYXBFOyI6IuKpsCIsImFwZTsiOiLiiYoiLCJhcGlkOyI6IuKJiyIsImFwb3M7IjoiJyIsIkFwcGx5RnVuY3Rpb247Ijoi4oGhIiwiYXBwcm94OyI6IuKJiCIsImFwcHJveGVxOyI6IuKJiiIsIkFyaW5nOyI6IsOFIixBcmluZzoiw4UiLCJhcmluZzsiOiLDpSIsYXJpbmc6IsOlIiwiQXNjcjsiOiLwnZKcIiwiYXNjcjsiOiLwnZK2IiwiQXNzaWduOyI6IuKJlCIsImFzdDsiOiIqIiwiYXN5bXA7Ijoi4omIIiwiYXN5bXBlcTsiOiLiiY0iLCJBdGlsZGU7Ijoiw4MiLEF0aWxkZToiw4MiLCJhdGlsZGU7Ijoiw6MiLGF0aWxkZToiw6MiLCJBdW1sOyI6IsOEIixBdW1sOiLDhCIsImF1bWw7Ijoiw6QiLGF1bWw6IsOkIiwiYXdjb25pbnQ7Ijoi4oizIiwiYXdpbnQ7Ijoi4qiRIiwiYmFja2Nvbmc7Ijoi4omMIiwiYmFja2Vwc2lsb247Ijoiz7YiLCJiYWNrcHJpbWU7Ijoi4oC1IiwiYmFja3NpbTsiOiLiiL0iLCJiYWNrc2ltZXE7Ijoi4ouNIiwiQmFja3NsYXNoOyI6IuKIliIsIkJhcnY7Ijoi4qunIiwiYmFydmVlOyI6IuKKvSIsIkJhcndlZDsiOiLijIYiLCJiYXJ3ZWQ7Ijoi4oyFIiwiYmFyd2VkZ2U7Ijoi4oyFIiwiYmJyazsiOiLijrUiLCJiYnJrdGJyazsiOiLijrYiLCJiY29uZzsiOiLiiYwiLCJCY3k7Ijoi0JEiLCJiY3k7Ijoi0LEiLCJiZHF1bzsiOiLigJ4iLCJiZWNhdXM7Ijoi4oi1IiwiQmVjYXVzZTsiOiLiiLUiLCJiZWNhdXNlOyI6IuKItSIsImJlbXB0eXY7Ijoi4qawIiwiYmVwc2k7Ijoiz7YiLCJiZXJub3U7Ijoi4oSsIiwiQmVybm91bGxpczsiOiLihKwiLCJCZXRhOyI6Is6SIiwiYmV0YTsiOiLOsiIsImJldGg7Ijoi4oS2IiwiYmV0d2VlbjsiOiLiiawiLCJCZnI7Ijoi8J2UhSIsImJmcjsiOiLwnZSfIiwiYmlnY2FwOyI6IuKLgiIsImJpZ2NpcmM7Ijoi4pevIiwiYmlnY3VwOyI6IuKLgyIsImJpZ29kb3Q7Ijoi4qiAIiwiYmlnb3BsdXM7Ijoi4qiBIiwiYmlnb3RpbWVzOyI6IuKogiIsImJpZ3NxY3VwOyI6IuKohiIsImJpZ3N0YXI7Ijoi4piFIiwiYmlndHJpYW5nbGVkb3duOyI6IuKWvSIsImJpZ3RyaWFuZ2xldXA7Ijoi4pazIiwiYmlndXBsdXM7Ijoi4qiEIiwiYmlndmVlOyI6IuKLgSIsImJpZ3dlZGdlOyI6IuKLgCIsImJrYXJvdzsiOiLipI0iLCJibGFja2xvemVuZ2U7Ijoi4qerIiwiYmxhY2tzcXVhcmU7Ijoi4paqIiwiYmxhY2t0cmlhbmdsZTsiOiLilrQiLCJibGFja3RyaWFuZ2xlZG93bjsiOiLilr4iLCJibGFja3RyaWFuZ2xlbGVmdDsiOiLil4IiLCJibGFja3RyaWFuZ2xlcmlnaHQ7Ijoi4pa4IiwiYmxhbms7Ijoi4pCjIiwiYmxrMTI7Ijoi4paSIiwiYmxrMTQ7Ijoi4paRIiwiYmxrMzQ7Ijoi4paTIiwiYmxvY2s7Ijoi4paIIiwiYm5lOyI6Ij3ig6UiLCJibmVxdWl2OyI6IuKJoeKDpSIsImJOb3Q7Ijoi4qutIiwiYm5vdDsiOiLijJAiLCJCb3BmOyI6IvCdlLkiLCJib3BmOyI6IvCdlZMiLCJib3Q7Ijoi4oqlIiwiYm90dG9tOyI6IuKKpSIsImJvd3RpZTsiOiLii4giLCJib3hib3g7Ijoi4qeJIiwiYm94REw7Ijoi4pWXIiwiYm94RGw7Ijoi4pWWIiwiYm94ZEw7Ijoi4pWVIiwiYm94ZGw7Ijoi4pSQIiwiYm94RFI7Ijoi4pWUIiwiYm94RHI7Ijoi4pWTIiwiYm94ZFI7Ijoi4pWSIiwiYm94ZHI7Ijoi4pSMIiwiYm94SDsiOiLilZAiLCJib3hoOyI6IuKUgCIsImJveEhEOyI6IuKVpiIsImJveEhkOyI6IuKVpCIsImJveGhEOyI6IuKVpSIsImJveGhkOyI6IuKUrCIsImJveEhVOyI6IuKVqSIsImJveEh1OyI6IuKVpyIsImJveGhVOyI6IuKVqCIsImJveGh1OyI6IuKUtCIsImJveG1pbnVzOyI6IuKKnyIsImJveHBsdXM7Ijoi4oqeIiwiYm94dGltZXM7Ijoi4oqgIiwiYm94VUw7Ijoi4pWdIiwiYm94VWw7Ijoi4pWcIiwiYm94dUw7Ijoi4pWbIiwiYm94dWw7Ijoi4pSYIiwiYm94VVI7Ijoi4pWaIiwiYm94VXI7Ijoi4pWZIiwiYm94dVI7Ijoi4pWYIiwiYm94dXI7Ijoi4pSUIiwiYm94VjsiOiLilZEiLCJib3h2OyI6IuKUgiIsImJveFZIOyI6IuKVrCIsImJveFZoOyI6IuKVqyIsImJveHZIOyI6IuKVqiIsImJveHZoOyI6IuKUvCIsImJveFZMOyI6IuKVoyIsImJveFZsOyI6IuKVoiIsImJveHZMOyI6IuKVoSIsImJveHZsOyI6IuKUpCIsImJveFZSOyI6IuKVoCIsImJveFZyOyI6IuKVnyIsImJveHZSOyI6IuKVniIsImJveHZyOyI6IuKUnCIsImJwcmltZTsiOiLigLUiLCJCcmV2ZTsiOiLLmCIsImJyZXZlOyI6IsuYIiwiYnJ2YmFyOyI6IsKmIixicnZiYXI6IsKmIiwiQnNjcjsiOiLihKwiLCJic2NyOyI6IvCdkrciLCJic2VtaTsiOiLigY8iLCJic2ltOyI6IuKIvSIsImJzaW1lOyI6IuKLjSIsImJzb2w7IjoiXFwiLCJic29sYjsiOiLip4UiLCJic29saHN1YjsiOiLin4giLCJidWxsOyI6IuKAoiIsImJ1bGxldDsiOiLigKIiLCJidW1wOyI6IuKJjiIsImJ1bXBFOyI6IuKqriIsImJ1bXBlOyI6IuKJjyIsIkJ1bXBlcTsiOiLiiY4iLCJidW1wZXE7Ijoi4omPIiwiQ2FjdXRlOyI6IsSGIiwiY2FjdXRlOyI6IsSHIiwiQ2FwOyI6IuKLkiIsImNhcDsiOiLiiKkiLCJjYXBhbmQ7Ijoi4qmEIiwiY2FwYnJjdXA7Ijoi4qmJIiwiY2FwY2FwOyI6IuKpiyIsImNhcGN1cDsiOiLiqYciLCJjYXBkb3Q7Ijoi4qmAIiwiQ2FwaXRhbERpZmZlcmVudGlhbEQ7Ijoi4oWFIiwiY2FwczsiOiLiiKnvuIAiLCJjYXJldDsiOiLigYEiLCJjYXJvbjsiOiLLhyIsIkNheWxleXM7Ijoi4oStIiwiY2NhcHM7Ijoi4qmNIiwiQ2Nhcm9uOyI6IsSMIiwiY2Nhcm9uOyI6IsSNIiwiQ2NlZGlsOyI6IsOHIixDY2VkaWw6IsOHIiwiY2NlZGlsOyI6IsOnIixjY2VkaWw6IsOnIiwiQ2NpcmM7IjoixIgiLCJjY2lyYzsiOiLEiSIsIkNjb25pbnQ7Ijoi4oiwIiwiY2N1cHM7Ijoi4qmMIiwiY2N1cHNzbTsiOiLiqZAiLCJDZG90OyI6IsSKIiwiY2RvdDsiOiLEiyIsImNlZGlsOyI6IsK4IixjZWRpbDoiwrgiLCJDZWRpbGxhOyI6IsK4IiwiY2VtcHR5djsiOiLiprIiLCJjZW50OyI6IsKiIixjZW50OiLCoiIsIkNlbnRlckRvdDsiOiLCtyIsImNlbnRlcmRvdDsiOiLCtyIsIkNmcjsiOiLihK0iLCJjZnI7Ijoi8J2UoCIsIkNIY3k7Ijoi0KciLCJjaGN5OyI6ItGHIiwiY2hlY2s7Ijoi4pyTIiwiY2hlY2ttYXJrOyI6IuKckyIsIkNoaTsiOiLOpyIsImNoaTsiOiLPhyIsImNpcjsiOiLil4siLCJjaXJjOyI6IsuGIiwiY2lyY2VxOyI6IuKJlyIsImNpcmNsZWFycm93bGVmdDsiOiLihroiLCJjaXJjbGVhcnJvd3JpZ2h0OyI6IuKGuyIsImNpcmNsZWRhc3Q7Ijoi4oqbIiwiY2lyY2xlZGNpcmM7Ijoi4oqaIiwiY2lyY2xlZGRhc2g7Ijoi4oqdIiwiQ2lyY2xlRG90OyI6IuKKmSIsImNpcmNsZWRSOyI6IsKuIiwiY2lyY2xlZFM7Ijoi4pOIIiwiQ2lyY2xlTWludXM7Ijoi4oqWIiwiQ2lyY2xlUGx1czsiOiLiipUiLCJDaXJjbGVUaW1lczsiOiLiipciLCJjaXJFOyI6IuKngyIsImNpcmU7Ijoi4omXIiwiY2lyZm5pbnQ7Ijoi4qiQIiwiY2lybWlkOyI6IuKrryIsImNpcnNjaXI7Ijoi4qeCIiwiQ2xvY2t3aXNlQ29udG91ckludGVncmFsOyI6IuKIsiIsIkNsb3NlQ3VybHlEb3VibGVRdW90ZTsiOiLigJ0iLCJDbG9zZUN1cmx5UXVvdGU7Ijoi4oCZIiwiY2x1YnM7Ijoi4pmjIiwiY2x1YnN1aXQ7Ijoi4pmjIiwiQ29sb247Ijoi4oi3IiwiY29sb247IjoiOiIsIkNvbG9uZTsiOiLiqbQiLCJjb2xvbmU7Ijoi4omUIiwiY29sb25lcTsiOiLiiZQiLCJjb21tYTsiOiIsIiwiY29tbWF0OyI6IkAiLCJjb21wOyI6IuKIgSIsImNvbXBmbjsiOiLiiJgiLCJjb21wbGVtZW50OyI6IuKIgSIsImNvbXBsZXhlczsiOiLihIIiLCJjb25nOyI6IuKJhSIsImNvbmdkb3Q7Ijoi4qmtIiwiQ29uZ3J1ZW50OyI6IuKJoSIsIkNvbmludDsiOiLiiK8iLCJjb25pbnQ7Ijoi4oiuIiwiQ29udG91ckludGVncmFsOyI6IuKIriIsIkNvcGY7Ijoi4oSCIiwiY29wZjsiOiLwnZWUIiwiY29wcm9kOyI6IuKIkCIsIkNvcHJvZHVjdDsiOiLiiJAiLCJDT1BZOyI6IsKpIixDT1BZOiLCqSIsImNvcHk7IjoiwqkiLGNvcHk6IsKpIiwiY29weXNyOyI6IuKElyIsIkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7Ijoi4oizIiwiY3JhcnI7Ijoi4oa1IiwiQ3Jvc3M7Ijoi4qivIiwiY3Jvc3M7Ijoi4pyXIiwiQ3NjcjsiOiLwnZKeIiwiY3NjcjsiOiLwnZK4IiwiY3N1YjsiOiLiq48iLCJjc3ViZTsiOiLiq5EiLCJjc3VwOyI6IuKrkCIsImNzdXBlOyI6IuKrkiIsImN0ZG90OyI6IuKLryIsImN1ZGFycmw7Ijoi4qS4IiwiY3VkYXJycjsiOiLipLUiLCJjdWVwcjsiOiLii54iLCJjdWVzYzsiOiLii58iLCJjdWxhcnI7Ijoi4oa2IiwiY3VsYXJycDsiOiLipL0iLCJDdXA7Ijoi4ouTIiwiY3VwOyI6IuKIqiIsImN1cGJyY2FwOyI6IuKpiCIsIkN1cENhcDsiOiLiiY0iLCJjdXBjYXA7Ijoi4qmGIiwiY3VwY3VwOyI6IuKpiiIsImN1cGRvdDsiOiLiio0iLCJjdXBvcjsiOiLiqYUiLCJjdXBzOyI6IuKIqu+4gCIsImN1cmFycjsiOiLihrciLCJjdXJhcnJtOyI6IuKkvCIsImN1cmx5ZXFwcmVjOyI6IuKLniIsImN1cmx5ZXFzdWNjOyI6IuKLnyIsImN1cmx5dmVlOyI6IuKLjiIsImN1cmx5d2VkZ2U7Ijoi4ouPIiwiY3VycmVuOyI6IsKkIixjdXJyZW46IsKkIiwiY3VydmVhcnJvd2xlZnQ7Ijoi4oa2IiwiY3VydmVhcnJvd3JpZ2h0OyI6IuKGtyIsImN1dmVlOyI6IuKLjiIsImN1d2VkOyI6IuKLjyIsImN3Y29uaW50OyI6IuKIsiIsImN3aW50OyI6IuKIsSIsImN5bGN0eTsiOiLijK0iLCJEYWdnZXI7Ijoi4oChIiwiZGFnZ2VyOyI6IuKAoCIsImRhbGV0aDsiOiLihLgiLCJEYXJyOyI6IuKGoSIsImRBcnI7Ijoi4oeTIiwiZGFycjsiOiLihpMiLCJkYXNoOyI6IuKAkCIsIkRhc2h2OyI6IuKrpCIsImRhc2h2OyI6IuKKoyIsImRia2Fyb3c7Ijoi4qSPIiwiZGJsYWM7Ijoiy50iLCJEY2Fyb247IjoixI4iLCJkY2Fyb247IjoixI8iLCJEY3k7Ijoi0JQiLCJkY3k7Ijoi0LQiLCJERDsiOiLihYUiLCJkZDsiOiLihYYiLCJkZGFnZ2VyOyI6IuKAoSIsImRkYXJyOyI6IuKHiiIsIkREb3RyYWhkOyI6IuKkkSIsImRkb3RzZXE7Ijoi4qm3IiwiZGVnOyI6IsKwIixkZWc6IsKwIiwiRGVsOyI6IuKIhyIsIkRlbHRhOyI6Is6UIiwiZGVsdGE7IjoizrQiLCJkZW1wdHl2OyI6IuKmsSIsImRmaXNodDsiOiLipb8iLCJEZnI7Ijoi8J2UhyIsImRmcjsiOiLwnZShIiwiZEhhcjsiOiLipaUiLCJkaGFybDsiOiLih4MiLCJkaGFycjsiOiLih4IiLCJEaWFjcml0aWNhbEFjdXRlOyI6IsK0IiwiRGlhY3JpdGljYWxEb3Q7Ijoiy5kiLCJEaWFjcml0aWNhbERvdWJsZUFjdXRlOyI6IsudIiwiRGlhY3JpdGljYWxHcmF2ZTsiOiJgIiwiRGlhY3JpdGljYWxUaWxkZTsiOiLLnCIsImRpYW07Ijoi4ouEIiwiRGlhbW9uZDsiOiLii4QiLCJkaWFtb25kOyI6IuKLhCIsImRpYW1vbmRzdWl0OyI6IuKZpiIsImRpYW1zOyI6IuKZpiIsImRpZTsiOiLCqCIsIkRpZmZlcmVudGlhbEQ7Ijoi4oWGIiwiZGlnYW1tYTsiOiLPnSIsImRpc2luOyI6IuKLsiIsImRpdjsiOiLDtyIsImRpdmlkZTsiOiLDtyIsZGl2aWRlOiLDtyIsImRpdmlkZW9udGltZXM7Ijoi4ouHIiwiZGl2b254OyI6IuKLhyIsIkRKY3k7Ijoi0IIiLCJkamN5OyI6ItGSIiwiZGxjb3JuOyI6IuKMniIsImRsY3JvcDsiOiLijI0iLCJkb2xsYXI7IjoiJCIsIkRvcGY7Ijoi8J2UuyIsImRvcGY7Ijoi8J2VlSIsIkRvdDsiOiLCqCIsImRvdDsiOiLLmSIsIkRvdERvdDsiOiLig5wiLCJkb3RlcTsiOiLiiZAiLCJkb3RlcWRvdDsiOiLiiZEiLCJEb3RFcXVhbDsiOiLiiZAiLCJkb3RtaW51czsiOiLiiLgiLCJkb3RwbHVzOyI6IuKIlCIsImRvdHNxdWFyZTsiOiLiiqEiLCJkb3VibGViYXJ3ZWRnZTsiOiLijIYiLCJEb3VibGVDb250b3VySW50ZWdyYWw7Ijoi4oivIiwiRG91YmxlRG90OyI6IsKoIiwiRG91YmxlRG93bkFycm93OyI6IuKHkyIsIkRvdWJsZUxlZnRBcnJvdzsiOiLih5AiLCJEb3VibGVMZWZ0UmlnaHRBcnJvdzsiOiLih5QiLCJEb3VibGVMZWZ0VGVlOyI6IuKrpCIsIkRvdWJsZUxvbmdMZWZ0QXJyb3c7Ijoi4p+4IiwiRG91YmxlTG9uZ0xlZnRSaWdodEFycm93OyI6IuKfuiIsIkRvdWJsZUxvbmdSaWdodEFycm93OyI6IuKfuSIsIkRvdWJsZVJpZ2h0QXJyb3c7Ijoi4oeSIiwiRG91YmxlUmlnaHRUZWU7Ijoi4oqoIiwiRG91YmxlVXBBcnJvdzsiOiLih5EiLCJEb3VibGVVcERvd25BcnJvdzsiOiLih5UiLCJEb3VibGVWZXJ0aWNhbEJhcjsiOiLiiKUiLCJEb3duQXJyb3c7Ijoi4oaTIiwiRG93bmFycm93OyI6IuKHkyIsImRvd25hcnJvdzsiOiLihpMiLCJEb3duQXJyb3dCYXI7Ijoi4qSTIiwiRG93bkFycm93VXBBcnJvdzsiOiLih7UiLCJEb3duQnJldmU7IjoizJEiLCJkb3duZG93bmFycm93czsiOiLih4oiLCJkb3duaGFycG9vbmxlZnQ7Ijoi4oeDIiwiZG93bmhhcnBvb25yaWdodDsiOiLih4IiLCJEb3duTGVmdFJpZ2h0VmVjdG9yOyI6IuKlkCIsIkRvd25MZWZ0VGVlVmVjdG9yOyI6IuKlniIsIkRvd25MZWZ0VmVjdG9yOyI6IuKGvSIsIkRvd25MZWZ0VmVjdG9yQmFyOyI6IuKlliIsIkRvd25SaWdodFRlZVZlY3RvcjsiOiLipZ8iLCJEb3duUmlnaHRWZWN0b3I7Ijoi4oeBIiwiRG93blJpZ2h0VmVjdG9yQmFyOyI6IuKllyIsIkRvd25UZWU7Ijoi4oqkIiwiRG93blRlZUFycm93OyI6IuKGpyIsImRyYmthcm93OyI6IuKkkCIsImRyY29ybjsiOiLijJ8iLCJkcmNyb3A7Ijoi4oyMIiwiRHNjcjsiOiLwnZKfIiwiZHNjcjsiOiLwnZK5IiwiRFNjeTsiOiLQhSIsImRzY3k7Ijoi0ZUiLCJkc29sOyI6IuKntiIsIkRzdHJvazsiOiLEkCIsImRzdHJvazsiOiLEkSIsImR0ZG90OyI6IuKLsSIsImR0cmk7Ijoi4pa/IiwiZHRyaWY7Ijoi4pa+IiwiZHVhcnI7Ijoi4oe1IiwiZHVoYXI7Ijoi4qWvIiwiZHdhbmdsZTsiOiLipqYiLCJEWmN5OyI6ItCPIiwiZHpjeTsiOiLRnyIsImR6aWdyYXJyOyI6IuKfvyIsIkVhY3V0ZTsiOiLDiSIsRWFjdXRlOiLDiSIsImVhY3V0ZTsiOiLDqSIsZWFjdXRlOiLDqSIsImVhc3RlcjsiOiLiqa4iLCJFY2Fyb247IjoixJoiLCJlY2Fyb247IjoixJsiLCJlY2lyOyI6IuKJliIsIkVjaXJjOyI6IsOKIixFY2lyYzoiw4oiLCJlY2lyYzsiOiLDqiIsZWNpcmM6IsOqIiwiZWNvbG9uOyI6IuKJlSIsIkVjeTsiOiLQrSIsImVjeTsiOiLRjSIsImVERG90OyI6IuKptyIsIkVkb3Q7IjoixJYiLCJlRG90OyI6IuKJkSIsImVkb3Q7IjoixJciLCJlZTsiOiLihYciLCJlZkRvdDsiOiLiiZIiLCJFZnI7Ijoi8J2UiCIsImVmcjsiOiLwnZSiIiwiZWc7Ijoi4qqaIiwiRWdyYXZlOyI6IsOIIixFZ3JhdmU6IsOIIiwiZWdyYXZlOyI6IsOoIixlZ3JhdmU6IsOoIiwiZWdzOyI6IuKqliIsImVnc2RvdDsiOiLiqpgiLCJlbDsiOiLiqpkiLCJFbGVtZW50OyI6IuKIiCIsImVsaW50ZXJzOyI6IuKPpyIsImVsbDsiOiLihJMiLCJlbHM7Ijoi4qqVIiwiZWxzZG90OyI6IuKqlyIsIkVtYWNyOyI6IsSSIiwiZW1hY3I7IjoixJMiLCJlbXB0eTsiOiLiiIUiLCJlbXB0eXNldDsiOiLiiIUiLCJFbXB0eVNtYWxsU3F1YXJlOyI6IuKXuyIsImVtcHR5djsiOiLiiIUiLCJFbXB0eVZlcnlTbWFsbFNxdWFyZTsiOiLilqsiLCJlbXNwOyI6IuKAgyIsImVtc3AxMzsiOiLigIQiLCJlbXNwMTQ7Ijoi4oCFIiwiRU5HOyI6IsWKIiwiZW5nOyI6IsWLIiwiZW5zcDsiOiLigIIiLCJFb2dvbjsiOiLEmCIsImVvZ29uOyI6IsSZIiwiRW9wZjsiOiLwnZS8IiwiZW9wZjsiOiLwnZWWIiwiZXBhcjsiOiLii5UiLCJlcGFyc2w7Ijoi4qejIiwiZXBsdXM7Ijoi4qmxIiwiZXBzaTsiOiLOtSIsIkVwc2lsb247IjoizpUiLCJlcHNpbG9uOyI6Is61IiwiZXBzaXY7Ijoiz7UiLCJlcWNpcmM7Ijoi4omWIiwiZXFjb2xvbjsiOiLiiZUiLCJlcXNpbTsiOiLiiYIiLCJlcXNsYW50Z3RyOyI6IuKqliIsImVxc2xhbnRsZXNzOyI6IuKqlSIsIkVxdWFsOyI6IuKptSIsImVxdWFsczsiOiI9IiwiRXF1YWxUaWxkZTsiOiLiiYIiLCJlcXVlc3Q7Ijoi4omfIiwiRXF1aWxpYnJpdW07Ijoi4oeMIiwiZXF1aXY7Ijoi4omhIiwiZXF1aXZERDsiOiLiqbgiLCJlcXZwYXJzbDsiOiLip6UiLCJlcmFycjsiOiLipbEiLCJlckRvdDsiOiLiiZMiLCJFc2NyOyI6IuKEsCIsImVzY3I7Ijoi4oSvIiwiZXNkb3Q7Ijoi4omQIiwiRXNpbTsiOiLiqbMiLCJlc2ltOyI6IuKJgiIsIkV0YTsiOiLOlyIsImV0YTsiOiLOtyIsIkVUSDsiOiLDkCIsRVRIOiLDkCIsImV0aDsiOiLDsCIsZXRoOiLDsCIsIkV1bWw7Ijoiw4siLEV1bWw6IsOLIiwiZXVtbDsiOiLDqyIsZXVtbDoiw6siLCJldXJvOyI6IuKCrCIsImV4Y2w7IjoiISIsImV4aXN0OyI6IuKIgyIsIkV4aXN0czsiOiLiiIMiLCJleHBlY3RhdGlvbjsiOiLihLAiLCJFeHBvbmVudGlhbEU7Ijoi4oWHIiwiZXhwb25lbnRpYWxlOyI6IuKFhyIsImZhbGxpbmdkb3RzZXE7Ijoi4omSIiwiRmN5OyI6ItCkIiwiZmN5OyI6ItGEIiwiZmVtYWxlOyI6IuKZgCIsImZmaWxpZzsiOiLvrIMiLCJmZmxpZzsiOiLvrIAiLCJmZmxsaWc7Ijoi76yEIiwiRmZyOyI6IvCdlIkiLCJmZnI7Ijoi8J2UoyIsImZpbGlnOyI6Iu+sgSIsIkZpbGxlZFNtYWxsU3F1YXJlOyI6IuKXvCIsIkZpbGxlZFZlcnlTbWFsbFNxdWFyZTsiOiLilqoiLCJmamxpZzsiOiJmaiIsImZsYXQ7Ijoi4pmtIiwiZmxsaWc7Ijoi76yCIiwiZmx0bnM7Ijoi4paxIiwiZm5vZjsiOiLGkiIsIkZvcGY7Ijoi8J2UvSIsImZvcGY7Ijoi8J2VlyIsIkZvckFsbDsiOiLiiIAiLCJmb3JhbGw7Ijoi4oiAIiwiZm9yazsiOiLii5QiLCJmb3JrdjsiOiLiq5kiLCJGb3VyaWVydHJmOyI6IuKEsSIsImZwYXJ0aW50OyI6IuKojSIsImZyYWMxMjsiOiLCvSIsZnJhYzEyOiLCvSIsImZyYWMxMzsiOiLihZMiLCJmcmFjMTQ7IjoiwrwiLGZyYWMxNDoiwrwiLCJmcmFjMTU7Ijoi4oWVIiwiZnJhYzE2OyI6IuKFmSIsImZyYWMxODsiOiLihZsiLCJmcmFjMjM7Ijoi4oWUIiwiZnJhYzI1OyI6IuKFliIsImZyYWMzNDsiOiLCviIsZnJhYzM0OiLCviIsImZyYWMzNTsiOiLihZciLCJmcmFjMzg7Ijoi4oWcIiwiZnJhYzQ1OyI6IuKFmCIsImZyYWM1NjsiOiLihZoiLCJmcmFjNTg7Ijoi4oWdIiwiZnJhYzc4OyI6IuKFniIsImZyYXNsOyI6IuKBhCIsImZyb3duOyI6IuKMoiIsIkZzY3I7Ijoi4oSxIiwiZnNjcjsiOiLwnZK7IiwiZ2FjdXRlOyI6Ise1IiwiR2FtbWE7IjoizpMiLCJnYW1tYTsiOiLOsyIsIkdhbW1hZDsiOiLPnCIsImdhbW1hZDsiOiLPnSIsImdhcDsiOiLiqoYiLCJHYnJldmU7IjoixJ4iLCJnYnJldmU7IjoixJ8iLCJHY2VkaWw7IjoixKIiLCJHY2lyYzsiOiLEnCIsImdjaXJjOyI6IsSdIiwiR2N5OyI6ItCTIiwiZ2N5OyI6ItCzIiwiR2RvdDsiOiLEoCIsImdkb3Q7IjoixKEiLCJnRTsiOiLiiaciLCJnZTsiOiLiiaUiLCJnRWw7Ijoi4qqMIiwiZ2VsOyI6IuKLmyIsImdlcTsiOiLiiaUiLCJnZXFxOyI6IuKJpyIsImdlcXNsYW50OyI6IuKpviIsImdlczsiOiLiqb4iLCJnZXNjYzsiOiLiqqkiLCJnZXNkb3Q7Ijoi4qqAIiwiZ2VzZG90bzsiOiLiqoIiLCJnZXNkb3RvbDsiOiLiqoQiLCJnZXNsOyI6IuKLm++4gCIsImdlc2xlczsiOiLiqpQiLCJHZnI7Ijoi8J2UiiIsImdmcjsiOiLwnZSkIiwiR2c7Ijoi4ouZIiwiZ2c7Ijoi4omrIiwiZ2dnOyI6IuKLmSIsImdpbWVsOyI6IuKEtyIsIkdKY3k7Ijoi0IMiLCJnamN5OyI6ItGTIiwiZ2w7Ijoi4om3IiwiZ2xhOyI6IuKqpSIsImdsRTsiOiLiqpIiLCJnbGo7Ijoi4qqkIiwiZ25hcDsiOiLiqooiLCJnbmFwcHJveDsiOiLiqooiLCJnbkU7Ijoi4ompIiwiZ25lOyI6IuKqiCIsImduZXE7Ijoi4qqIIiwiZ25lcXE7Ijoi4ompIiwiZ25zaW07Ijoi4ounIiwiR29wZjsiOiLwnZS+IiwiZ29wZjsiOiLwnZWYIiwiZ3JhdmU7IjoiYCIsIkdyZWF0ZXJFcXVhbDsiOiLiiaUiLCJHcmVhdGVyRXF1YWxMZXNzOyI6IuKLmyIsIkdyZWF0ZXJGdWxsRXF1YWw7Ijoi4omnIiwiR3JlYXRlckdyZWF0ZXI7Ijoi4qqiIiwiR3JlYXRlckxlc3M7Ijoi4om3IiwiR3JlYXRlclNsYW50RXF1YWw7Ijoi4qm+IiwiR3JlYXRlclRpbGRlOyI6IuKJsyIsIkdzY3I7Ijoi8J2SoiIsImdzY3I7Ijoi4oSKIiwiZ3NpbTsiOiLiibMiLCJnc2ltZTsiOiLiqo4iLCJnc2ltbDsiOiLiqpAiLCJHVDsiOiI+IixHVDoiPiIsIkd0OyI6IuKJqyIsImd0OyI6Ij4iLGd0OiI+IiwiZ3RjYzsiOiLiqqciLCJndGNpcjsiOiLiqboiLCJndGRvdDsiOiLii5ciLCJndGxQYXI7Ijoi4qaVIiwiZ3RxdWVzdDsiOiLiqbwiLCJndHJhcHByb3g7Ijoi4qqGIiwiZ3RyYXJyOyI6IuKluCIsImd0cmRvdDsiOiLii5ciLCJndHJlcWxlc3M7Ijoi4oubIiwiZ3RyZXFxbGVzczsiOiLiqowiLCJndHJsZXNzOyI6IuKJtyIsImd0cnNpbTsiOiLiibMiLCJndmVydG5lcXE7Ijoi4omp77iAIiwiZ3ZuRTsiOiLiianvuIAiLCJIYWNlazsiOiLLhyIsImhhaXJzcDsiOiLigIoiLCJoYWxmOyI6IsK9IiwiaGFtaWx0OyI6IuKEiyIsIkhBUkRjeTsiOiLQqiIsImhhcmRjeTsiOiLRiiIsImhBcnI7Ijoi4oeUIiwiaGFycjsiOiLihpQiLCJoYXJyY2lyOyI6IuKliCIsImhhcnJ3OyI6IuKGrSIsIkhhdDsiOiJeIiwiaGJhcjsiOiLihI8iLCJIY2lyYzsiOiLEpCIsImhjaXJjOyI6IsSlIiwiaGVhcnRzOyI6IuKZpSIsImhlYXJ0c3VpdDsiOiLimaUiLCJoZWxsaXA7Ijoi4oCmIiwiaGVyY29uOyI6IuKKuSIsIkhmcjsiOiLihIwiLCJoZnI7Ijoi8J2UpSIsIkhpbGJlcnRTcGFjZTsiOiLihIsiLCJoa3NlYXJvdzsiOiLipKUiLCJoa3N3YXJvdzsiOiLipKYiLCJob2FycjsiOiLih78iLCJob210aHQ7Ijoi4oi7IiwiaG9va2xlZnRhcnJvdzsiOiLihqkiLCJob29rcmlnaHRhcnJvdzsiOiLihqoiLCJIb3BmOyI6IuKEjSIsImhvcGY7Ijoi8J2VmSIsImhvcmJhcjsiOiLigJUiLCJIb3Jpem9udGFsTGluZTsiOiLilIAiLCJIc2NyOyI6IuKEiyIsImhzY3I7Ijoi8J2SvSIsImhzbGFzaDsiOiLihI8iLCJIc3Ryb2s7IjoixKYiLCJoc3Ryb2s7IjoixKciLCJIdW1wRG93bkh1bXA7Ijoi4omOIiwiSHVtcEVxdWFsOyI6IuKJjyIsImh5YnVsbDsiOiLigYMiLCJoeXBoZW47Ijoi4oCQIiwiSWFjdXRlOyI6IsONIixJYWN1dGU6IsONIiwiaWFjdXRlOyI6IsOtIixpYWN1dGU6IsOtIiwiaWM7Ijoi4oGjIiwiSWNpcmM7Ijoiw44iLEljaXJjOiLDjiIsImljaXJjOyI6IsOuIixpY2lyYzoiw64iLCJJY3k7Ijoi0JgiLCJpY3k7Ijoi0LgiLCJJZG90OyI6IsSwIiwiSUVjeTsiOiLQlSIsImllY3k7Ijoi0LUiLCJpZXhjbDsiOiLCoSIsaWV4Y2w6IsKhIiwiaWZmOyI6IuKHlCIsIklmcjsiOiLihJEiLCJpZnI7Ijoi8J2UpiIsIklncmF2ZTsiOiLDjCIsSWdyYXZlOiLDjCIsImlncmF2ZTsiOiLDrCIsaWdyYXZlOiLDrCIsImlpOyI6IuKFiCIsImlpaWludDsiOiLiqIwiLCJpaWludDsiOiLiiK0iLCJpaW5maW47Ijoi4qecIiwiaWlvdGE7Ijoi4oSpIiwiSUpsaWc7IjoixLIiLCJpamxpZzsiOiLEsyIsIkltOyI6IuKEkSIsIkltYWNyOyI6IsSqIiwiaW1hY3I7IjoixKsiLCJpbWFnZTsiOiLihJEiLCJJbWFnaW5hcnlJOyI6IuKFiCIsImltYWdsaW5lOyI6IuKEkCIsImltYWdwYXJ0OyI6IuKEkSIsImltYXRoOyI6IsSxIiwiaW1vZjsiOiLiirciLCJpbXBlZDsiOiLGtSIsIkltcGxpZXM7Ijoi4oeSIiwiaW47Ijoi4oiIIiwiaW5jYXJlOyI6IuKEhSIsImluZmluOyI6IuKIniIsImluZmludGllOyI6IuKnnSIsImlub2RvdDsiOiLEsSIsIkludDsiOiLiiKwiLCJpbnQ7Ijoi4oirIiwiaW50Y2FsOyI6IuKKuiIsImludGVnZXJzOyI6IuKEpCIsIkludGVncmFsOyI6IuKIqyIsImludGVyY2FsOyI6IuKKuiIsIkludGVyc2VjdGlvbjsiOiLii4IiLCJpbnRsYXJoazsiOiLiqJciLCJpbnRwcm9kOyI6IuKovCIsIkludmlzaWJsZUNvbW1hOyI6IuKBoyIsIkludmlzaWJsZVRpbWVzOyI6IuKBoiIsIklPY3k7Ijoi0IEiLCJpb2N5OyI6ItGRIiwiSW9nb247IjoixK4iLCJpb2dvbjsiOiLEryIsIklvcGY7Ijoi8J2VgCIsImlvcGY7Ijoi8J2VmiIsIklvdGE7IjoizpkiLCJpb3RhOyI6Is65IiwiaXByb2Q7Ijoi4qi8IiwiaXF1ZXN0OyI6IsK/IixpcXVlc3Q6IsK/IiwiSXNjcjsiOiLihJAiLCJpc2NyOyI6IvCdkr4iLCJpc2luOyI6IuKIiCIsImlzaW5kb3Q7Ijoi4ou1IiwiaXNpbkU7Ijoi4ou5IiwiaXNpbnM7Ijoi4ou0IiwiaXNpbnN2OyI6IuKLsyIsImlzaW52OyI6IuKIiCIsIml0OyI6IuKBoiIsIkl0aWxkZTsiOiLEqCIsIml0aWxkZTsiOiLEqSIsIkl1a2N5OyI6ItCGIiwiaXVrY3k7Ijoi0ZYiLCJJdW1sOyI6IsOPIixJdW1sOiLDjyIsIml1bWw7Ijoiw68iLGl1bWw6IsOvIiwiSmNpcmM7IjoixLQiLCJqY2lyYzsiOiLEtSIsIkpjeTsiOiLQmSIsImpjeTsiOiLQuSIsIkpmcjsiOiLwnZSNIiwiamZyOyI6IvCdlKciLCJqbWF0aDsiOiLItyIsIkpvcGY7Ijoi8J2VgSIsImpvcGY7Ijoi8J2VmyIsIkpzY3I7Ijoi8J2SpSIsImpzY3I7Ijoi8J2SvyIsIkpzZXJjeTsiOiLQiCIsImpzZXJjeTsiOiLRmCIsIkp1a2N5OyI6ItCEIiwianVrY3k7Ijoi0ZQiLCJLYXBwYTsiOiLOmiIsImthcHBhOyI6Is66Iiwia2FwcGF2OyI6Is+wIiwiS2NlZGlsOyI6IsS2Iiwia2NlZGlsOyI6IsS3IiwiS2N5OyI6ItCaIiwia2N5OyI6ItC6IiwiS2ZyOyI6IvCdlI4iLCJrZnI7Ijoi8J2UqCIsImtncmVlbjsiOiLEuCIsIktIY3k7Ijoi0KUiLCJraGN5OyI6ItGFIiwiS0pjeTsiOiLQjCIsImtqY3k7Ijoi0ZwiLCJLb3BmOyI6IvCdlYIiLCJrb3BmOyI6IvCdlZwiLCJLc2NyOyI6IvCdkqYiLCJrc2NyOyI6IvCdk4AiLCJsQWFycjsiOiLih5oiLCJMYWN1dGU7IjoixLkiLCJsYWN1dGU7IjoixLoiLCJsYWVtcHR5djsiOiLiprQiLCJsYWdyYW47Ijoi4oSSIiwiTGFtYmRhOyI6Is6bIiwibGFtYmRhOyI6Is67IiwiTGFuZzsiOiLin6oiLCJsYW5nOyI6IuKfqCIsImxhbmdkOyI6IuKmkSIsImxhbmdsZTsiOiLin6giLCJsYXA7Ijoi4qqFIiwiTGFwbGFjZXRyZjsiOiLihJIiLCJsYXF1bzsiOiLCqyIsbGFxdW86IsKrIiwiTGFycjsiOiLihp4iLCJsQXJyOyI6IuKHkCIsImxhcnI7Ijoi4oaQIiwibGFycmI7Ijoi4oekIiwibGFycmJmczsiOiLipJ8iLCJsYXJyZnM7Ijoi4qSdIiwibGFycmhrOyI6IuKGqSIsImxhcnJscDsiOiLihqsiLCJsYXJycGw7Ijoi4qS5IiwibGFycnNpbTsiOiLipbMiLCJsYXJydGw7Ijoi4oaiIiwibGF0OyI6IuKqqyIsImxBdGFpbDsiOiLipJsiLCJsYXRhaWw7Ijoi4qSZIiwibGF0ZTsiOiLiqq0iLCJsYXRlczsiOiLiqq3vuIAiLCJsQmFycjsiOiLipI4iLCJsYmFycjsiOiLipIwiLCJsYmJyazsiOiLinbIiLCJsYnJhY2U7IjoieyIsImxicmFjazsiOiJbIiwibGJya2U7Ijoi4qaLIiwibGJya3NsZDsiOiLipo8iLCJsYnJrc2x1OyI6IuKmjSIsIkxjYXJvbjsiOiLEvSIsImxjYXJvbjsiOiLEviIsIkxjZWRpbDsiOiLEuyIsImxjZWRpbDsiOiLEvCIsImxjZWlsOyI6IuKMiCIsImxjdWI7IjoieyIsIkxjeTsiOiLQmyIsImxjeTsiOiLQuyIsImxkY2E7Ijoi4qS2IiwibGRxdW87Ijoi4oCcIiwibGRxdW9yOyI6IuKAniIsImxkcmRoYXI7Ijoi4qWnIiwibGRydXNoYXI7Ijoi4qWLIiwibGRzaDsiOiLihrIiLCJsRTsiOiLiiaYiLCJsZTsiOiLiiaQiLCJMZWZ0QW5nbGVCcmFja2V0OyI6IuKfqCIsIkxlZnRBcnJvdzsiOiLihpAiLCJMZWZ0YXJyb3c7Ijoi4oeQIiwibGVmdGFycm93OyI6IuKGkCIsIkxlZnRBcnJvd0JhcjsiOiLih6QiLCJMZWZ0QXJyb3dSaWdodEFycm93OyI6IuKHhiIsImxlZnRhcnJvd3RhaWw7Ijoi4oaiIiwiTGVmdENlaWxpbmc7Ijoi4oyIIiwiTGVmdERvdWJsZUJyYWNrZXQ7Ijoi4p+mIiwiTGVmdERvd25UZWVWZWN0b3I7Ijoi4qWhIiwiTGVmdERvd25WZWN0b3I7Ijoi4oeDIiwiTGVmdERvd25WZWN0b3JCYXI7Ijoi4qWZIiwiTGVmdEZsb29yOyI6IuKMiiIsImxlZnRoYXJwb29uZG93bjsiOiLihr0iLCJsZWZ0aGFycG9vbnVwOyI6IuKGvCIsImxlZnRsZWZ0YXJyb3dzOyI6IuKHhyIsIkxlZnRSaWdodEFycm93OyI6IuKGlCIsIkxlZnRyaWdodGFycm93OyI6IuKHlCIsImxlZnRyaWdodGFycm93OyI6IuKGlCIsImxlZnRyaWdodGFycm93czsiOiLih4YiLCJsZWZ0cmlnaHRoYXJwb29uczsiOiLih4siLCJsZWZ0cmlnaHRzcXVpZ2Fycm93OyI6IuKGrSIsIkxlZnRSaWdodFZlY3RvcjsiOiLipY4iLCJMZWZ0VGVlOyI6IuKKoyIsIkxlZnRUZWVBcnJvdzsiOiLihqQiLCJMZWZ0VGVlVmVjdG9yOyI6IuKlmiIsImxlZnR0aHJlZXRpbWVzOyI6IuKLiyIsIkxlZnRUcmlhbmdsZTsiOiLiirIiLCJMZWZ0VHJpYW5nbGVCYXI7Ijoi4qePIiwiTGVmdFRyaWFuZ2xlRXF1YWw7Ijoi4oq0IiwiTGVmdFVwRG93blZlY3RvcjsiOiLipZEiLCJMZWZ0VXBUZWVWZWN0b3I7Ijoi4qWgIiwiTGVmdFVwVmVjdG9yOyI6IuKGvyIsIkxlZnRVcFZlY3RvckJhcjsiOiLipZgiLCJMZWZ0VmVjdG9yOyI6IuKGvCIsIkxlZnRWZWN0b3JCYXI7Ijoi4qWSIiwibEVnOyI6IuKqiyIsImxlZzsiOiLii5oiLCJsZXE7Ijoi4omkIiwibGVxcTsiOiLiiaYiLCJsZXFzbGFudDsiOiLiqb0iLCJsZXM7Ijoi4qm9IiwibGVzY2M7Ijoi4qqoIiwibGVzZG90OyI6IuKpvyIsImxlc2RvdG87Ijoi4qqBIiwibGVzZG90b3I7Ijoi4qqDIiwibGVzZzsiOiLii5rvuIAiLCJsZXNnZXM7Ijoi4qqTIiwibGVzc2FwcHJveDsiOiLiqoUiLCJsZXNzZG90OyI6IuKLliIsImxlc3NlcWd0cjsiOiLii5oiLCJsZXNzZXFxZ3RyOyI6IuKqiyIsIkxlc3NFcXVhbEdyZWF0ZXI7Ijoi4ouaIiwiTGVzc0Z1bGxFcXVhbDsiOiLiiaYiLCJMZXNzR3JlYXRlcjsiOiLiibYiLCJsZXNzZ3RyOyI6IuKJtiIsIkxlc3NMZXNzOyI6IuKqoSIsImxlc3NzaW07Ijoi4omyIiwiTGVzc1NsYW50RXF1YWw7Ijoi4qm9IiwiTGVzc1RpbGRlOyI6IuKJsiIsImxmaXNodDsiOiLipbwiLCJsZmxvb3I7Ijoi4oyKIiwiTGZyOyI6IvCdlI8iLCJsZnI7Ijoi8J2UqSIsImxnOyI6IuKJtiIsImxnRTsiOiLiqpEiLCJsSGFyOyI6IuKloiIsImxoYXJkOyI6IuKGvSIsImxoYXJ1OyI6IuKGvCIsImxoYXJ1bDsiOiLipaoiLCJsaGJsazsiOiLiloQiLCJMSmN5OyI6ItCJIiwibGpjeTsiOiLRmSIsIkxsOyI6IuKLmCIsImxsOyI6IuKJqiIsImxsYXJyOyI6IuKHhyIsImxsY29ybmVyOyI6IuKMniIsIkxsZWZ0YXJyb3c7Ijoi4oeaIiwibGxoYXJkOyI6IuKlqyIsImxsdHJpOyI6IuKXuiIsIkxtaWRvdDsiOiLEvyIsImxtaWRvdDsiOiLFgCIsImxtb3VzdDsiOiLijrAiLCJsbW91c3RhY2hlOyI6IuKOsCIsImxuYXA7Ijoi4qqJIiwibG5hcHByb3g7Ijoi4qqJIiwibG5FOyI6IuKJqCIsImxuZTsiOiLiqociLCJsbmVxOyI6IuKqhyIsImxuZXFxOyI6IuKJqCIsImxuc2ltOyI6IuKLpiIsImxvYW5nOyI6IuKfrCIsImxvYXJyOyI6IuKHvSIsImxvYnJrOyI6IuKfpiIsIkxvbmdMZWZ0QXJyb3c7Ijoi4p+1IiwiTG9uZ2xlZnRhcnJvdzsiOiLin7giLCJsb25nbGVmdGFycm93OyI6IuKftSIsIkxvbmdMZWZ0UmlnaHRBcnJvdzsiOiLin7ciLCJMb25nbGVmdHJpZ2h0YXJyb3c7Ijoi4p+6IiwibG9uZ2xlZnRyaWdodGFycm93OyI6IuKftyIsImxvbmdtYXBzdG87Ijoi4p+8IiwiTG9uZ1JpZ2h0QXJyb3c7Ijoi4p+2IiwiTG9uZ3JpZ2h0YXJyb3c7Ijoi4p+5IiwibG9uZ3JpZ2h0YXJyb3c7Ijoi4p+2IiwibG9vcGFycm93bGVmdDsiOiLihqsiLCJsb29wYXJyb3dyaWdodDsiOiLihqwiLCJsb3BhcjsiOiLipoUiLCJMb3BmOyI6IvCdlYMiLCJsb3BmOyI6IvCdlZ0iLCJsb3BsdXM7Ijoi4qitIiwibG90aW1lczsiOiLiqLQiLCJsb3dhc3Q7Ijoi4oiXIiwibG93YmFyOyI6Il8iLCJMb3dlckxlZnRBcnJvdzsiOiLihpkiLCJMb3dlclJpZ2h0QXJyb3c7Ijoi4oaYIiwibG96OyI6IuKXiiIsImxvemVuZ2U7Ijoi4peKIiwibG96ZjsiOiLip6siLCJscGFyOyI6IigiLCJscGFybHQ7Ijoi4qaTIiwibHJhcnI7Ijoi4oeGIiwibHJjb3JuZXI7Ijoi4oyfIiwibHJoYXI7Ijoi4oeLIiwibHJoYXJkOyI6IuKlrSIsImxybTsiOiLigI4iLCJscnRyaTsiOiLiir8iLCJsc2FxdW87Ijoi4oC5IiwiTHNjcjsiOiLihJIiLCJsc2NyOyI6IvCdk4EiLCJMc2g7Ijoi4oawIiwibHNoOyI6IuKGsCIsImxzaW07Ijoi4omyIiwibHNpbWU7Ijoi4qqNIiwibHNpbWc7Ijoi4qqPIiwibHNxYjsiOiJbIiwibHNxdW87Ijoi4oCYIiwibHNxdW9yOyI6IuKAmiIsIkxzdHJvazsiOiLFgSIsImxzdHJvazsiOiLFgiIsIkxUOyI6IjwiLExUOiI8IiwiTHQ7Ijoi4omqIiwibHQ7IjoiPCIsbHQ6IjwiLCJsdGNjOyI6IuKqpiIsImx0Y2lyOyI6IuKpuSIsImx0ZG90OyI6IuKLliIsImx0aHJlZTsiOiLii4siLCJsdGltZXM7Ijoi4ouJIiwibHRsYXJyOyI6IuKltiIsImx0cXVlc3Q7Ijoi4qm7IiwibHRyaTsiOiLil4MiLCJsdHJpZTsiOiLiirQiLCJsdHJpZjsiOiLil4IiLCJsdHJQYXI7Ijoi4qaWIiwibHVyZHNoYXI7Ijoi4qWKIiwibHVydWhhcjsiOiLipaYiLCJsdmVydG5lcXE7Ijoi4omo77iAIiwibHZuRTsiOiLiiajvuIAiLCJtYWNyOyI6IsKvIixtYWNyOiLCryIsIm1hbGU7Ijoi4pmCIiwibWFsdDsiOiLinKAiLCJtYWx0ZXNlOyI6IuKcoCIsIk1hcDsiOiLipIUiLCJtYXA7Ijoi4oamIiwibWFwc3RvOyI6IuKGpiIsIm1hcHN0b2Rvd247Ijoi4oanIiwibWFwc3RvbGVmdDsiOiLihqQiLCJtYXBzdG91cDsiOiLihqUiLCJtYXJrZXI7Ijoi4pauIiwibWNvbW1hOyI6IuKoqSIsIk1jeTsiOiLQnCIsIm1jeTsiOiLQvCIsIm1kYXNoOyI6IuKAlCIsIm1ERG90OyI6IuKIuiIsIm1lYXN1cmVkYW5nbGU7Ijoi4oihIiwiTWVkaXVtU3BhY2U7Ijoi4oGfIiwiTWVsbGludHJmOyI6IuKEsyIsIk1mcjsiOiLwnZSQIiwibWZyOyI6IvCdlKoiLCJtaG87Ijoi4oSnIiwibWljcm87IjoiwrUiLG1pY3JvOiLCtSIsIm1pZDsiOiLiiKMiLCJtaWRhc3Q7IjoiKiIsIm1pZGNpcjsiOiLiq7AiLCJtaWRkb3Q7IjoiwrciLG1pZGRvdDoiwrciLCJtaW51czsiOiLiiJIiLCJtaW51c2I7Ijoi4oqfIiwibWludXNkOyI6IuKIuCIsIm1pbnVzZHU7Ijoi4qiqIiwiTWludXNQbHVzOyI6IuKIkyIsIm1sY3A7Ijoi4qubIiwibWxkcjsiOiLigKYiLCJtbnBsdXM7Ijoi4oiTIiwibW9kZWxzOyI6IuKKpyIsIk1vcGY7Ijoi8J2VhCIsIm1vcGY7Ijoi8J2VniIsIm1wOyI6IuKIkyIsIk1zY3I7Ijoi4oSzIiwibXNjcjsiOiLwnZOCIiwibXN0cG9zOyI6IuKIviIsIk11OyI6Is6cIiwibXU7IjoizrwiLCJtdWx0aW1hcDsiOiLiirgiLCJtdW1hcDsiOiLiirgiLCJuYWJsYTsiOiLiiIciLCJOYWN1dGU7IjoixYMiLCJuYWN1dGU7IjoixYQiLCJuYW5nOyI6IuKIoOKDkiIsIm5hcDsiOiLiiYkiLCJuYXBFOyI6IuKpsMy4IiwibmFwaWQ7Ijoi4omLzLgiLCJuYXBvczsiOiLFiSIsIm5hcHByb3g7Ijoi4omJIiwibmF0dXI7Ijoi4pmuIiwibmF0dXJhbDsiOiLima4iLCJuYXR1cmFsczsiOiLihJUiLCJuYnNwOyI6IsKgIixuYnNwOiLCoCIsIm5idW1wOyI6IuKJjsy4IiwibmJ1bXBlOyI6IuKJj8y4IiwibmNhcDsiOiLiqYMiLCJOY2Fyb247IjoixYciLCJuY2Fyb247IjoixYgiLCJOY2VkaWw7IjoixYUiLCJuY2VkaWw7IjoixYYiLCJuY29uZzsiOiLiiYciLCJuY29uZ2RvdDsiOiLiqa3MuCIsIm5jdXA7Ijoi4qmCIiwiTmN5OyI6ItCdIiwibmN5OyI6ItC9IiwibmRhc2g7Ijoi4oCTIiwibmU7Ijoi4omgIiwibmVhcmhrOyI6IuKkpCIsIm5lQXJyOyI6IuKHlyIsIm5lYXJyOyI6IuKGlyIsIm5lYXJyb3c7Ijoi4oaXIiwibmVkb3Q7Ijoi4omQzLgiLCJOZWdhdGl2ZU1lZGl1bVNwYWNlOyI6IuKAiyIsIk5lZ2F0aXZlVGhpY2tTcGFjZTsiOiLigIsiLCJOZWdhdGl2ZVRoaW5TcGFjZTsiOiLigIsiLCJOZWdhdGl2ZVZlcnlUaGluU3BhY2U7Ijoi4oCLIiwibmVxdWl2OyI6IuKJoiIsIm5lc2VhcjsiOiLipKgiLCJuZXNpbTsiOiLiiYLMuCIsIk5lc3RlZEdyZWF0ZXJHcmVhdGVyOyI6IuKJqyIsIk5lc3RlZExlc3NMZXNzOyI6IuKJqiIsIk5ld0xpbmU7IjpgCmAsIm5leGlzdDsiOiLiiIQiLCJuZXhpc3RzOyI6IuKIhCIsIk5mcjsiOiLwnZSRIiwibmZyOyI6IvCdlKsiLCJuZ0U7Ijoi4omnzLgiLCJuZ2U7Ijoi4omxIiwibmdlcTsiOiLiibEiLCJuZ2VxcTsiOiLiiafMuCIsIm5nZXFzbGFudDsiOiLiqb7MuCIsIm5nZXM7Ijoi4qm+zLgiLCJuR2c7Ijoi4ouZzLgiLCJuZ3NpbTsiOiLiibUiLCJuR3Q7Ijoi4omr4oOSIiwibmd0OyI6IuKJryIsIm5ndHI7Ijoi4omvIiwibkd0djsiOiLiiavMuCIsIm5oQXJyOyI6IuKHjiIsIm5oYXJyOyI6IuKGriIsIm5ocGFyOyI6IuKrsiIsIm5pOyI6IuKIiyIsIm5pczsiOiLii7wiLCJuaXNkOyI6IuKLuiIsIm5pdjsiOiLiiIsiLCJOSmN5OyI6ItCKIiwibmpjeTsiOiLRmiIsIm5sQXJyOyI6IuKHjSIsIm5sYXJyOyI6IuKGmiIsIm5sZHI7Ijoi4oClIiwibmxFOyI6IuKJpsy4IiwibmxlOyI6IuKJsCIsIm5MZWZ0YXJyb3c7Ijoi4oeNIiwibmxlZnRhcnJvdzsiOiLihpoiLCJuTGVmdHJpZ2h0YXJyb3c7Ijoi4oeOIiwibmxlZnRyaWdodGFycm93OyI6IuKGriIsIm5sZXE7Ijoi4omwIiwibmxlcXE7Ijoi4ommzLgiLCJubGVxc2xhbnQ7Ijoi4qm9zLgiLCJubGVzOyI6IuKpvcy4Iiwibmxlc3M7Ijoi4omuIiwibkxsOyI6IuKLmMy4IiwibmxzaW07Ijoi4om0Iiwibkx0OyI6IuKJquKDkiIsIm5sdDsiOiLiia4iLCJubHRyaTsiOiLii6oiLCJubHRyaWU7Ijoi4ousIiwibkx0djsiOiLiiarMuCIsIm5taWQ7Ijoi4oikIiwiTm9CcmVhazsiOiLigaAiLCJOb25CcmVha2luZ1NwYWNlOyI6IsKgIiwiTm9wZjsiOiLihJUiLCJub3BmOyI6IvCdlZ8iLCJOb3Q7Ijoi4qusIiwibm90OyI6IsKsIixub3Q6IsKsIiwiTm90Q29uZ3J1ZW50OyI6IuKJoiIsIk5vdEN1cENhcDsiOiLiia0iLCJOb3REb3VibGVWZXJ0aWNhbEJhcjsiOiLiiKYiLCJOb3RFbGVtZW50OyI6IuKIiSIsIk5vdEVxdWFsOyI6IuKJoCIsIk5vdEVxdWFsVGlsZGU7Ijoi4omCzLgiLCJOb3RFeGlzdHM7Ijoi4oiEIiwiTm90R3JlYXRlcjsiOiLiia8iLCJOb3RHcmVhdGVyRXF1YWw7Ijoi4omxIiwiTm90R3JlYXRlckZ1bGxFcXVhbDsiOiLiiafMuCIsIk5vdEdyZWF0ZXJHcmVhdGVyOyI6IuKJq8y4IiwiTm90R3JlYXRlckxlc3M7Ijoi4om5IiwiTm90R3JlYXRlclNsYW50RXF1YWw7Ijoi4qm+zLgiLCJOb3RHcmVhdGVyVGlsZGU7Ijoi4om1IiwiTm90SHVtcERvd25IdW1wOyI6IuKJjsy4IiwiTm90SHVtcEVxdWFsOyI6IuKJj8y4Iiwibm90aW47Ijoi4oiJIiwibm90aW5kb3Q7Ijoi4ou1zLgiLCJub3RpbkU7Ijoi4ou5zLgiLCJub3RpbnZhOyI6IuKIiSIsIm5vdGludmI7Ijoi4ou3Iiwibm90aW52YzsiOiLii7YiLCJOb3RMZWZ0VHJpYW5nbGU7Ijoi4ouqIiwiTm90TGVmdFRyaWFuZ2xlQmFyOyI6IuKnj8y4IiwiTm90TGVmdFRyaWFuZ2xlRXF1YWw7Ijoi4ousIiwiTm90TGVzczsiOiLiia4iLCJOb3RMZXNzRXF1YWw7Ijoi4omwIiwiTm90TGVzc0dyZWF0ZXI7Ijoi4om4IiwiTm90TGVzc0xlc3M7Ijoi4omqzLgiLCJOb3RMZXNzU2xhbnRFcXVhbDsiOiLiqb3MuCIsIk5vdExlc3NUaWxkZTsiOiLiibQiLCJOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcjsiOiLiqqLMuCIsIk5vdE5lc3RlZExlc3NMZXNzOyI6IuKqocy4Iiwibm90bmk7Ijoi4oiMIiwibm90bml2YTsiOiLiiIwiLCJub3RuaXZiOyI6IuKLviIsIm5vdG5pdmM7Ijoi4ou9IiwiTm90UHJlY2VkZXM7Ijoi4oqAIiwiTm90UHJlY2VkZXNFcXVhbDsiOiLiqq/MuCIsIk5vdFByZWNlZGVzU2xhbnRFcXVhbDsiOiLii6AiLCJOb3RSZXZlcnNlRWxlbWVudDsiOiLiiIwiLCJOb3RSaWdodFRyaWFuZ2xlOyI6IuKLqyIsIk5vdFJpZ2h0VHJpYW5nbGVCYXI7Ijoi4qeQzLgiLCJOb3RSaWdodFRyaWFuZ2xlRXF1YWw7Ijoi4outIiwiTm90U3F1YXJlU3Vic2V0OyI6IuKKj8y4IiwiTm90U3F1YXJlU3Vic2V0RXF1YWw7Ijoi4ouiIiwiTm90U3F1YXJlU3VwZXJzZXQ7Ijoi4oqQzLgiLCJOb3RTcXVhcmVTdXBlcnNldEVxdWFsOyI6IuKLoyIsIk5vdFN1YnNldDsiOiLiioLig5IiLCJOb3RTdWJzZXRFcXVhbDsiOiLiiogiLCJOb3RTdWNjZWVkczsiOiLiioEiLCJOb3RTdWNjZWVkc0VxdWFsOyI6IuKqsMy4IiwiTm90U3VjY2VlZHNTbGFudEVxdWFsOyI6IuKLoSIsIk5vdFN1Y2NlZWRzVGlsZGU7Ijoi4om/zLgiLCJOb3RTdXBlcnNldDsiOiLiioPig5IiLCJOb3RTdXBlcnNldEVxdWFsOyI6IuKKiSIsIk5vdFRpbGRlOyI6IuKJgSIsIk5vdFRpbGRlRXF1YWw7Ijoi4omEIiwiTm90VGlsZGVGdWxsRXF1YWw7Ijoi4omHIiwiTm90VGlsZGVUaWxkZTsiOiLiiYkiLCJOb3RWZXJ0aWNhbEJhcjsiOiLiiKQiLCJucGFyOyI6IuKIpiIsIm5wYXJhbGxlbDsiOiLiiKYiLCJucGFyc2w7Ijoi4qu94oOlIiwibnBhcnQ7Ijoi4oiCzLgiLCJucG9saW50OyI6IuKolCIsIm5wcjsiOiLiioAiLCJucHJjdWU7Ijoi4ougIiwibnByZTsiOiLiqq/MuCIsIm5wcmVjOyI6IuKKgCIsIm5wcmVjZXE7Ijoi4qqvzLgiLCJuckFycjsiOiLih48iLCJucmFycjsiOiLihpsiLCJucmFycmM7Ijoi4qSzzLgiLCJucmFycnc7Ijoi4oadzLgiLCJuUmlnaHRhcnJvdzsiOiLih48iLCJucmlnaHRhcnJvdzsiOiLihpsiLCJucnRyaTsiOiLii6siLCJucnRyaWU7Ijoi4outIiwibnNjOyI6IuKKgSIsIm5zY2N1ZTsiOiLii6EiLCJuc2NlOyI6IuKqsMy4IiwiTnNjcjsiOiLwnZKpIiwibnNjcjsiOiLwnZODIiwibnNob3J0bWlkOyI6IuKIpCIsIm5zaG9ydHBhcmFsbGVsOyI6IuKIpiIsIm5zaW07Ijoi4omBIiwibnNpbWU7Ijoi4omEIiwibnNpbWVxOyI6IuKJhCIsIm5zbWlkOyI6IuKIpCIsIm5zcGFyOyI6IuKIpiIsIm5zcXN1YmU7Ijoi4ouiIiwibnNxc3VwZTsiOiLii6MiLCJuc3ViOyI6IuKKhCIsIm5zdWJFOyI6IuKrhcy4IiwibnN1YmU7Ijoi4oqIIiwibnN1YnNldDsiOiLiioLig5IiLCJuc3Vic2V0ZXE7Ijoi4oqIIiwibnN1YnNldGVxcTsiOiLiq4XMuCIsIm5zdWNjOyI6IuKKgSIsIm5zdWNjZXE7Ijoi4qqwzLgiLCJuc3VwOyI6IuKKhSIsIm5zdXBFOyI6IuKrhsy4IiwibnN1cGU7Ijoi4oqJIiwibnN1cHNldDsiOiLiioPig5IiLCJuc3Vwc2V0ZXE7Ijoi4oqJIiwibnN1cHNldGVxcTsiOiLiq4bMuCIsIm50Z2w7Ijoi4om5IiwiTnRpbGRlOyI6IsORIixOdGlsZGU6IsORIiwibnRpbGRlOyI6IsOxIixudGlsZGU6IsOxIiwibnRsZzsiOiLiibgiLCJudHJpYW5nbGVsZWZ0OyI6IuKLqiIsIm50cmlhbmdsZWxlZnRlcTsiOiLii6wiLCJudHJpYW5nbGVyaWdodDsiOiLii6siLCJudHJpYW5nbGVyaWdodGVxOyI6IuKLrSIsIk51OyI6Is6dIiwibnU7Ijoizr0iLCJudW07IjoiIyIsIm51bWVybzsiOiLihJYiLCJudW1zcDsiOiLigIciLCJudmFwOyI6IuKJjeKDkiIsIm5WRGFzaDsiOiLiiq8iLCJuVmRhc2g7Ijoi4oquIiwibnZEYXNoOyI6IuKKrSIsIm52ZGFzaDsiOiLiiqwiLCJudmdlOyI6IuKJpeKDkiIsIm52Z3Q7IjoiPuKDkiIsIm52SGFycjsiOiLipIQiLCJudmluZmluOyI6IuKnniIsIm52bEFycjsiOiLipIIiLCJudmxlOyI6IuKJpOKDkiIsIm52bHQ7IjoiPOKDkiIsIm52bHRyaWU7Ijoi4oq04oOSIiwibnZyQXJyOyI6IuKkgyIsIm52cnRyaWU7Ijoi4oq14oOSIiwibnZzaW07Ijoi4oi84oOSIiwibndhcmhrOyI6IuKkoyIsIm53QXJyOyI6IuKHliIsIm53YXJyOyI6IuKGliIsIm53YXJyb3c7Ijoi4oaWIiwibnduZWFyOyI6IuKkpyIsIk9hY3V0ZTsiOiLDkyIsT2FjdXRlOiLDkyIsIm9hY3V0ZTsiOiLDsyIsb2FjdXRlOiLDsyIsIm9hc3Q7Ijoi4oqbIiwib2NpcjsiOiLiipoiLCJPY2lyYzsiOiLDlCIsT2NpcmM6IsOUIiwib2NpcmM7Ijoiw7QiLG9jaXJjOiLDtCIsIk9jeTsiOiLQniIsIm9jeTsiOiLQviIsIm9kYXNoOyI6IuKKnSIsIk9kYmxhYzsiOiLFkCIsIm9kYmxhYzsiOiLFkSIsIm9kaXY7Ijoi4qi4Iiwib2RvdDsiOiLiipkiLCJvZHNvbGQ7Ijoi4qa8IiwiT0VsaWc7IjoixZIiLCJvZWxpZzsiOiLFkyIsIm9mY2lyOyI6IuKmvyIsIk9mcjsiOiLwnZSSIiwib2ZyOyI6IvCdlKwiLCJvZ29uOyI6IsubIiwiT2dyYXZlOyI6IsOSIixPZ3JhdmU6IsOSIiwib2dyYXZlOyI6IsOyIixvZ3JhdmU6IsOyIiwib2d0OyI6IuKngSIsIm9oYmFyOyI6IuKmtSIsIm9obTsiOiLOqSIsIm9pbnQ7Ijoi4oiuIiwib2xhcnI7Ijoi4oa6Iiwib2xjaXI7Ijoi4qa+Iiwib2xjcm9zczsiOiLiprsiLCJvbGluZTsiOiLigL4iLCJvbHQ7Ijoi4qeAIiwiT21hY3I7IjoixYwiLCJvbWFjcjsiOiLFjSIsIk9tZWdhOyI6Is6pIiwib21lZ2E7Ijoiz4kiLCJPbWljcm9uOyI6Is6fIiwib21pY3JvbjsiOiLOvyIsIm9taWQ7Ijoi4qa2Iiwib21pbnVzOyI6IuKKliIsIk9vcGY7Ijoi8J2VhiIsIm9vcGY7Ijoi8J2VoCIsIm9wYXI7Ijoi4qa3IiwiT3BlbkN1cmx5RG91YmxlUXVvdGU7Ijoi4oCcIiwiT3BlbkN1cmx5UXVvdGU7Ijoi4oCYIiwib3BlcnA7Ijoi4qa5Iiwib3BsdXM7Ijoi4oqVIiwiT3I7Ijoi4qmUIiwib3I7Ijoi4oioIiwib3JhcnI7Ijoi4oa7Iiwib3JkOyI6IuKpnSIsIm9yZGVyOyI6IuKEtCIsIm9yZGVyb2Y7Ijoi4oS0Iiwib3JkZjsiOiLCqiIsb3JkZjoiwqoiLCJvcmRtOyI6IsK6IixvcmRtOiLCuiIsIm9yaWdvZjsiOiLiirYiLCJvcm9yOyI6IuKpliIsIm9yc2xvcGU7Ijoi4qmXIiwib3J2OyI6IuKpmyIsIm9TOyI6IuKTiCIsIk9zY3I7Ijoi8J2SqiIsIm9zY3I7Ijoi4oS0IiwiT3NsYXNoOyI6IsOYIixPc2xhc2g6IsOYIiwib3NsYXNoOyI6IsO4Iixvc2xhc2g6IsO4Iiwib3NvbDsiOiLiipgiLCJPdGlsZGU7Ijoiw5UiLE90aWxkZToiw5UiLCJvdGlsZGU7Ijoiw7UiLG90aWxkZToiw7UiLCJPdGltZXM7Ijoi4qi3Iiwib3RpbWVzOyI6IuKKlyIsIm90aW1lc2FzOyI6IuKotiIsIk91bWw7Ijoiw5YiLE91bWw6IsOWIiwib3VtbDsiOiLDtiIsb3VtbDoiw7YiLCJvdmJhcjsiOiLijL0iLCJPdmVyQmFyOyI6IuKAviIsIk92ZXJCcmFjZTsiOiLij54iLCJPdmVyQnJhY2tldDsiOiLijrQiLCJPdmVyUGFyZW50aGVzaXM7Ijoi4o+cIiwicGFyOyI6IuKIpSIsInBhcmE7IjoiwrYiLHBhcmE6IsK2IiwicGFyYWxsZWw7Ijoi4oilIiwicGFyc2ltOyI6IuKrsyIsInBhcnNsOyI6IuKrvSIsInBhcnQ7Ijoi4oiCIiwiUGFydGlhbEQ7Ijoi4oiCIiwiUGN5OyI6ItCfIiwicGN5OyI6ItC/IiwicGVyY250OyI6IiUiLCJwZXJpb2Q7IjoiLiIsInBlcm1pbDsiOiLigLAiLCJwZXJwOyI6IuKKpSIsInBlcnRlbms7Ijoi4oCxIiwiUGZyOyI6IvCdlJMiLCJwZnI7Ijoi8J2UrSIsIlBoaTsiOiLOpiIsInBoaTsiOiLPhiIsInBoaXY7Ijoiz5UiLCJwaG1tYXQ7Ijoi4oSzIiwicGhvbmU7Ijoi4piOIiwiUGk7IjoizqAiLCJwaTsiOiLPgCIsInBpdGNoZm9yazsiOiLii5QiLCJwaXY7Ijoiz5YiLCJwbGFuY2s7Ijoi4oSPIiwicGxhbmNraDsiOiLihI4iLCJwbGFua3Y7Ijoi4oSPIiwicGx1czsiOiIrIiwicGx1c2FjaXI7Ijoi4qijIiwicGx1c2I7Ijoi4oqeIiwicGx1c2NpcjsiOiLiqKIiLCJwbHVzZG87Ijoi4oiUIiwicGx1c2R1OyI6IuKopSIsInBsdXNlOyI6IuKpsiIsIlBsdXNNaW51czsiOiLCsSIsInBsdXNtbjsiOiLCsSIscGx1c21uOiLCsSIsInBsdXNzaW07Ijoi4qimIiwicGx1c3R3bzsiOiLiqKciLCJwbTsiOiLCsSIsIlBvaW5jYXJlcGxhbmU7Ijoi4oSMIiwicG9pbnRpbnQ7Ijoi4qiVIiwiUG9wZjsiOiLihJkiLCJwb3BmOyI6IvCdlaEiLCJwb3VuZDsiOiLCoyIscG91bmQ6IsKjIiwiUHI7Ijoi4qq7IiwicHI7Ijoi4om6IiwicHJhcDsiOiLiqrciLCJwcmN1ZTsiOiLiibwiLCJwckU7Ijoi4qqzIiwicHJlOyI6IuKqryIsInByZWM7Ijoi4om6IiwicHJlY2FwcHJveDsiOiLiqrciLCJwcmVjY3VybHllcTsiOiLiibwiLCJQcmVjZWRlczsiOiLiiboiLCJQcmVjZWRlc0VxdWFsOyI6IuKqryIsIlByZWNlZGVzU2xhbnRFcXVhbDsiOiLiibwiLCJQcmVjZWRlc1RpbGRlOyI6IuKJviIsInByZWNlcTsiOiLiqq8iLCJwcmVjbmFwcHJveDsiOiLiqrkiLCJwcmVjbmVxcTsiOiLiqrUiLCJwcmVjbnNpbTsiOiLii6giLCJwcmVjc2ltOyI6IuKJviIsIlByaW1lOyI6IuKAsyIsInByaW1lOyI6IuKAsiIsInByaW1lczsiOiLihJkiLCJwcm5hcDsiOiLiqrkiLCJwcm5FOyI6IuKqtSIsInBybnNpbTsiOiLii6giLCJwcm9kOyI6IuKIjyIsIlByb2R1Y3Q7Ijoi4oiPIiwicHJvZmFsYXI7Ijoi4oyuIiwicHJvZmxpbmU7Ijoi4oySIiwicHJvZnN1cmY7Ijoi4oyTIiwicHJvcDsiOiLiiJ0iLCJQcm9wb3J0aW9uOyI6IuKItyIsIlByb3BvcnRpb25hbDsiOiLiiJ0iLCJwcm9wdG87Ijoi4oidIiwicHJzaW07Ijoi4om+IiwicHJ1cmVsOyI6IuKKsCIsIlBzY3I7Ijoi8J2SqyIsInBzY3I7Ijoi8J2ThSIsIlBzaTsiOiLOqCIsInBzaTsiOiLPiCIsInB1bmNzcDsiOiLigIgiLCJRZnI7Ijoi8J2UlCIsInFmcjsiOiLwnZSuIiwicWludDsiOiLiqIwiLCJRb3BmOyI6IuKEmiIsInFvcGY7Ijoi8J2VoiIsInFwcmltZTsiOiLigZciLCJRc2NyOyI6IvCdkqwiLCJxc2NyOyI6IvCdk4YiLCJxdWF0ZXJuaW9uczsiOiLihI0iLCJxdWF0aW50OyI6IuKoliIsInF1ZXN0OyI6Ij8iLCJxdWVzdGVxOyI6IuKJnyIsIlFVT1Q7IjonIicsUVVPVDonIicsInF1b3Q7IjonIicscXVvdDonIicsInJBYXJyOyI6IuKHmyIsInJhY2U7Ijoi4oi9zLEiLCJSYWN1dGU7IjoixZQiLCJyYWN1dGU7IjoixZUiLCJyYWRpYzsiOiLiiJoiLCJyYWVtcHR5djsiOiLiprMiLCJSYW5nOyI6IuKfqyIsInJhbmc7Ijoi4p+pIiwicmFuZ2Q7Ijoi4qaSIiwicmFuZ2U7Ijoi4qalIiwicmFuZ2xlOyI6IuKfqSIsInJhcXVvOyI6IsK7IixyYXF1bzoiwrsiLCJSYXJyOyI6IuKGoCIsInJBcnI7Ijoi4oeSIiwicmFycjsiOiLihpIiLCJyYXJyYXA7Ijoi4qW1IiwicmFycmI7Ijoi4oelIiwicmFycmJmczsiOiLipKAiLCJyYXJyYzsiOiLipLMiLCJyYXJyZnM7Ijoi4qSeIiwicmFycmhrOyI6IuKGqiIsInJhcnJscDsiOiLihqwiLCJyYXJycGw7Ijoi4qWFIiwicmFycnNpbTsiOiLipbQiLCJSYXJydGw7Ijoi4qSWIiwicmFycnRsOyI6IuKGoyIsInJhcnJ3OyI6IuKGnSIsInJBdGFpbDsiOiLipJwiLCJyYXRhaWw7Ijoi4qSaIiwicmF0aW87Ijoi4oi2IiwicmF0aW9uYWxzOyI6IuKEmiIsIlJCYXJyOyI6IuKkkCIsInJCYXJyOyI6IuKkjyIsInJiYXJyOyI6IuKkjSIsInJiYnJrOyI6IuKdsyIsInJicmFjZTsiOiJ9IiwicmJyYWNrOyI6Il0iLCJyYnJrZTsiOiLipowiLCJyYnJrc2xkOyI6IuKmjiIsInJicmtzbHU7Ijoi4qaQIiwiUmNhcm9uOyI6IsWYIiwicmNhcm9uOyI6IsWZIiwiUmNlZGlsOyI6IsWWIiwicmNlZGlsOyI6IsWXIiwicmNlaWw7Ijoi4oyJIiwicmN1YjsiOiJ9IiwiUmN5OyI6ItCgIiwicmN5OyI6ItGAIiwicmRjYTsiOiLipLciLCJyZGxkaGFyOyI6IuKlqSIsInJkcXVvOyI6IuKAnSIsInJkcXVvcjsiOiLigJ0iLCJyZHNoOyI6IuKGsyIsIlJlOyI6IuKEnCIsInJlYWw7Ijoi4oScIiwicmVhbGluZTsiOiLihJsiLCJyZWFscGFydDsiOiLihJwiLCJyZWFsczsiOiLihJ0iLCJyZWN0OyI6IuKWrSIsIlJFRzsiOiLCriIsUkVHOiLCriIsInJlZzsiOiLCriIscmVnOiLCriIsIlJldmVyc2VFbGVtZW50OyI6IuKIiyIsIlJldmVyc2VFcXVpbGlicml1bTsiOiLih4siLCJSZXZlcnNlVXBFcXVpbGlicml1bTsiOiLipa8iLCJyZmlzaHQ7Ijoi4qW9IiwicmZsb29yOyI6IuKMiyIsIlJmcjsiOiLihJwiLCJyZnI7Ijoi8J2UryIsInJIYXI7Ijoi4qWkIiwicmhhcmQ7Ijoi4oeBIiwicmhhcnU7Ijoi4oeAIiwicmhhcnVsOyI6IuKlrCIsIlJobzsiOiLOoSIsInJobzsiOiLPgSIsInJob3Y7Ijoiz7EiLCJSaWdodEFuZ2xlQnJhY2tldDsiOiLin6kiLCJSaWdodEFycm93OyI6IuKGkiIsIlJpZ2h0YXJyb3c7Ijoi4oeSIiwicmlnaHRhcnJvdzsiOiLihpIiLCJSaWdodEFycm93QmFyOyI6IuKHpSIsIlJpZ2h0QXJyb3dMZWZ0QXJyb3c7Ijoi4oeEIiwicmlnaHRhcnJvd3RhaWw7Ijoi4oajIiwiUmlnaHRDZWlsaW5nOyI6IuKMiSIsIlJpZ2h0RG91YmxlQnJhY2tldDsiOiLin6ciLCJSaWdodERvd25UZWVWZWN0b3I7Ijoi4qWdIiwiUmlnaHREb3duVmVjdG9yOyI6IuKHgiIsIlJpZ2h0RG93blZlY3RvckJhcjsiOiLipZUiLCJSaWdodEZsb29yOyI6IuKMiyIsInJpZ2h0aGFycG9vbmRvd247Ijoi4oeBIiwicmlnaHRoYXJwb29udXA7Ijoi4oeAIiwicmlnaHRsZWZ0YXJyb3dzOyI6IuKHhCIsInJpZ2h0bGVmdGhhcnBvb25zOyI6IuKHjCIsInJpZ2h0cmlnaHRhcnJvd3M7Ijoi4oeJIiwicmlnaHRzcXVpZ2Fycm93OyI6IuKGnSIsIlJpZ2h0VGVlOyI6IuKKoiIsIlJpZ2h0VGVlQXJyb3c7Ijoi4oamIiwiUmlnaHRUZWVWZWN0b3I7Ijoi4qWbIiwicmlnaHR0aHJlZXRpbWVzOyI6IuKLjCIsIlJpZ2h0VHJpYW5nbGU7Ijoi4oqzIiwiUmlnaHRUcmlhbmdsZUJhcjsiOiLip5AiLCJSaWdodFRyaWFuZ2xlRXF1YWw7Ijoi4oq1IiwiUmlnaHRVcERvd25WZWN0b3I7Ijoi4qWPIiwiUmlnaHRVcFRlZVZlY3RvcjsiOiLipZwiLCJSaWdodFVwVmVjdG9yOyI6IuKGviIsIlJpZ2h0VXBWZWN0b3JCYXI7Ijoi4qWUIiwiUmlnaHRWZWN0b3I7Ijoi4oeAIiwiUmlnaHRWZWN0b3JCYXI7Ijoi4qWTIiwicmluZzsiOiLLmiIsInJpc2luZ2RvdHNlcTsiOiLiiZMiLCJybGFycjsiOiLih4QiLCJybGhhcjsiOiLih4wiLCJybG07Ijoi4oCPIiwicm1vdXN0OyI6IuKOsSIsInJtb3VzdGFjaGU7Ijoi4o6xIiwicm5taWQ7Ijoi4quuIiwicm9hbmc7Ijoi4p+tIiwicm9hcnI7Ijoi4oe+Iiwicm9icms7Ijoi4p+nIiwicm9wYXI7Ijoi4qaGIiwiUm9wZjsiOiLihJ0iLCJyb3BmOyI6IvCdlaMiLCJyb3BsdXM7Ijoi4qiuIiwicm90aW1lczsiOiLiqLUiLCJSb3VuZEltcGxpZXM7Ijoi4qWwIiwicnBhcjsiOiIpIiwicnBhcmd0OyI6IuKmlCIsInJwcG9saW50OyI6IuKokiIsInJyYXJyOyI6IuKHiSIsIlJyaWdodGFycm93OyI6IuKHmyIsInJzYXF1bzsiOiLigLoiLCJSc2NyOyI6IuKEmyIsInJzY3I7Ijoi8J2ThyIsIlJzaDsiOiLihrEiLCJyc2g7Ijoi4oaxIiwicnNxYjsiOiJdIiwicnNxdW87Ijoi4oCZIiwicnNxdW9yOyI6IuKAmSIsInJ0aHJlZTsiOiLii4wiLCJydGltZXM7Ijoi4ouKIiwicnRyaTsiOiLilrkiLCJydHJpZTsiOiLiirUiLCJydHJpZjsiOiLilrgiLCJydHJpbHRyaTsiOiLip44iLCJSdWxlRGVsYXllZDsiOiLip7QiLCJydWx1aGFyOyI6IuKlqCIsInJ4OyI6IuKEniIsIlNhY3V0ZTsiOiLFmiIsInNhY3V0ZTsiOiLFmyIsInNicXVvOyI6IuKAmiIsIlNjOyI6IuKqvCIsInNjOyI6IuKJuyIsInNjYXA7Ijoi4qq4IiwiU2Nhcm9uOyI6IsWgIiwic2Nhcm9uOyI6IsWhIiwic2NjdWU7Ijoi4om9Iiwic2NFOyI6IuKqtCIsInNjZTsiOiLiqrAiLCJTY2VkaWw7IjoixZ4iLCJzY2VkaWw7IjoixZ8iLCJTY2lyYzsiOiLFnCIsInNjaXJjOyI6IsWdIiwic2NuYXA7Ijoi4qq6Iiwic2NuRTsiOiLiqrYiLCJzY25zaW07Ijoi4oupIiwic2Nwb2xpbnQ7Ijoi4qiTIiwic2NzaW07Ijoi4om/IiwiU2N5OyI6ItChIiwic2N5OyI6ItGBIiwic2RvdDsiOiLii4UiLCJzZG90YjsiOiLiiqEiLCJzZG90ZTsiOiLiqaYiLCJzZWFyaGs7Ijoi4qSlIiwic2VBcnI7Ijoi4oeYIiwic2VhcnI7Ijoi4oaYIiwic2VhcnJvdzsiOiLihpgiLCJzZWN0OyI6IsKnIixzZWN0OiLCpyIsInNlbWk7IjoiOyIsInNlc3dhcjsiOiLipKkiLCJzZXRtaW51czsiOiLiiJYiLCJzZXRtbjsiOiLiiJYiLCJzZXh0OyI6IuKctiIsIlNmcjsiOiLwnZSWIiwic2ZyOyI6IvCdlLAiLCJzZnJvd247Ijoi4oyiIiwic2hhcnA7Ijoi4pmvIiwiU0hDSGN5OyI6ItCpIiwic2hjaGN5OyI6ItGJIiwiU0hjeTsiOiLQqCIsInNoY3k7Ijoi0YgiLCJTaG9ydERvd25BcnJvdzsiOiLihpMiLCJTaG9ydExlZnRBcnJvdzsiOiLihpAiLCJzaG9ydG1pZDsiOiLiiKMiLCJzaG9ydHBhcmFsbGVsOyI6IuKIpSIsIlNob3J0UmlnaHRBcnJvdzsiOiLihpIiLCJTaG9ydFVwQXJyb3c7Ijoi4oaRIiwic2h5OyI6IsKtIixzaHk6IsKtIiwiU2lnbWE7IjoizqMiLCJzaWdtYTsiOiLPgyIsInNpZ21hZjsiOiLPgiIsInNpZ21hdjsiOiLPgiIsInNpbTsiOiLiiLwiLCJzaW1kb3Q7Ijoi4qmqIiwic2ltZTsiOiLiiYMiLCJzaW1lcTsiOiLiiYMiLCJzaW1nOyI6IuKqniIsInNpbWdFOyI6IuKqoCIsInNpbWw7Ijoi4qqdIiwic2ltbEU7Ijoi4qqfIiwic2ltbmU7Ijoi4omGIiwic2ltcGx1czsiOiLiqKQiLCJzaW1yYXJyOyI6IuKlsiIsInNsYXJyOyI6IuKGkCIsIlNtYWxsQ2lyY2xlOyI6IuKImCIsInNtYWxsc2V0bWludXM7Ijoi4oiWIiwic21hc2hwOyI6IuKosyIsInNtZXBhcnNsOyI6IuKnpCIsInNtaWQ7Ijoi4oijIiwic21pbGU7Ijoi4oyjIiwic210OyI6IuKqqiIsInNtdGU7Ijoi4qqsIiwic210ZXM7Ijoi4qqs77iAIiwiU09GVGN5OyI6ItCsIiwic29mdGN5OyI6ItGMIiwic29sOyI6Ii8iLCJzb2xiOyI6IuKnhCIsInNvbGJhcjsiOiLijL8iLCJTb3BmOyI6IvCdlYoiLCJzb3BmOyI6IvCdlaQiLCJzcGFkZXM7Ijoi4pmgIiwic3BhZGVzdWl0OyI6IuKZoCIsInNwYXI7Ijoi4oilIiwic3FjYXA7Ijoi4oqTIiwic3FjYXBzOyI6IuKKk++4gCIsInNxY3VwOyI6IuKKlCIsInNxY3VwczsiOiLiipTvuIAiLCJTcXJ0OyI6IuKImiIsInNxc3ViOyI6IuKKjyIsInNxc3ViZTsiOiLiipEiLCJzcXN1YnNldDsiOiLiio8iLCJzcXN1YnNldGVxOyI6IuKKkSIsInNxc3VwOyI6IuKKkCIsInNxc3VwZTsiOiLiipIiLCJzcXN1cHNldDsiOiLiipAiLCJzcXN1cHNldGVxOyI6IuKKkiIsInNxdTsiOiLilqEiLCJTcXVhcmU7Ijoi4pahIiwic3F1YXJlOyI6IuKWoSIsIlNxdWFyZUludGVyc2VjdGlvbjsiOiLiipMiLCJTcXVhcmVTdWJzZXQ7Ijoi4oqPIiwiU3F1YXJlU3Vic2V0RXF1YWw7Ijoi4oqRIiwiU3F1YXJlU3VwZXJzZXQ7Ijoi4oqQIiwiU3F1YXJlU3VwZXJzZXRFcXVhbDsiOiLiipIiLCJTcXVhcmVVbmlvbjsiOiLiipQiLCJzcXVhcmY7Ijoi4paqIiwic3F1ZjsiOiLilqoiLCJzcmFycjsiOiLihpIiLCJTc2NyOyI6IvCdkq4iLCJzc2NyOyI6IvCdk4giLCJzc2V0bW47Ijoi4oiWIiwic3NtaWxlOyI6IuKMoyIsInNzdGFyZjsiOiLii4YiLCJTdGFyOyI6IuKLhiIsInN0YXI7Ijoi4piGIiwic3RhcmY7Ijoi4piFIiwic3RyYWlnaHRlcHNpbG9uOyI6Is+1Iiwic3RyYWlnaHRwaGk7Ijoiz5UiLCJzdHJuczsiOiLCryIsIlN1YjsiOiLii5AiLCJzdWI7Ijoi4oqCIiwic3ViZG90OyI6IuKqvSIsInN1YkU7Ijoi4quFIiwic3ViZTsiOiLiioYiLCJzdWJlZG90OyI6IuKrgyIsInN1Ym11bHQ7Ijoi4quBIiwic3VibkU7Ijoi4quLIiwic3VibmU7Ijoi4oqKIiwic3VicGx1czsiOiLiqr8iLCJzdWJyYXJyOyI6IuKluSIsIlN1YnNldDsiOiLii5AiLCJzdWJzZXQ7Ijoi4oqCIiwic3Vic2V0ZXE7Ijoi4oqGIiwic3Vic2V0ZXFxOyI6IuKrhSIsIlN1YnNldEVxdWFsOyI6IuKKhiIsInN1YnNldG5lcTsiOiLiiooiLCJzdWJzZXRuZXFxOyI6IuKriyIsInN1YnNpbTsiOiLiq4ciLCJzdWJzdWI7Ijoi4quVIiwic3Vic3VwOyI6IuKrkyIsInN1Y2M7Ijoi4om7Iiwic3VjY2FwcHJveDsiOiLiqrgiLCJzdWNjY3VybHllcTsiOiLiib0iLCJTdWNjZWVkczsiOiLiibsiLCJTdWNjZWVkc0VxdWFsOyI6IuKqsCIsIlN1Y2NlZWRzU2xhbnRFcXVhbDsiOiLiib0iLCJTdWNjZWVkc1RpbGRlOyI6IuKJvyIsInN1Y2NlcTsiOiLiqrAiLCJzdWNjbmFwcHJveDsiOiLiqroiLCJzdWNjbmVxcTsiOiLiqrYiLCJzdWNjbnNpbTsiOiLii6kiLCJzdWNjc2ltOyI6IuKJvyIsIlN1Y2hUaGF0OyI6IuKIiyIsIlN1bTsiOiLiiJEiLCJzdW07Ijoi4oiRIiwic3VuZzsiOiLimaoiLCJTdXA7Ijoi4ouRIiwic3VwOyI6IuKKgyIsInN1cDE7IjoiwrkiLHN1cDE6IsK5Iiwic3VwMjsiOiLCsiIsc3VwMjoiwrIiLCJzdXAzOyI6IsKzIixzdXAzOiLCsyIsInN1cGRvdDsiOiLiqr4iLCJzdXBkc3ViOyI6IuKrmCIsInN1cEU7Ijoi4quGIiwic3VwZTsiOiLiiociLCJzdXBlZG90OyI6IuKrhCIsIlN1cGVyc2V0OyI6IuKKgyIsIlN1cGVyc2V0RXF1YWw7Ijoi4oqHIiwic3VwaHNvbDsiOiLin4kiLCJzdXBoc3ViOyI6IuKrlyIsInN1cGxhcnI7Ijoi4qW7Iiwic3VwbXVsdDsiOiLiq4IiLCJzdXBuRTsiOiLiq4wiLCJzdXBuZTsiOiLiiosiLCJzdXBwbHVzOyI6IuKrgCIsIlN1cHNldDsiOiLii5EiLCJzdXBzZXQ7Ijoi4oqDIiwic3Vwc2V0ZXE7Ijoi4oqHIiwic3Vwc2V0ZXFxOyI6IuKrhiIsInN1cHNldG5lcTsiOiLiiosiLCJzdXBzZXRuZXFxOyI6IuKrjCIsInN1cHNpbTsiOiLiq4giLCJzdXBzdWI7Ijoi4quUIiwic3Vwc3VwOyI6IuKrliIsInN3YXJoazsiOiLipKYiLCJzd0FycjsiOiLih5kiLCJzd2FycjsiOiLihpkiLCJzd2Fycm93OyI6IuKGmSIsInN3bndhcjsiOiLipKoiLCJzemxpZzsiOiLDnyIsc3psaWc6IsOfIiwiVGFiOyI6IgkiLCJ0YXJnZXQ7Ijoi4oyWIiwiVGF1OyI6Is6kIiwidGF1OyI6Is+EIiwidGJyazsiOiLijrQiLCJUY2Fyb247IjoixaQiLCJ0Y2Fyb247IjoixaUiLCJUY2VkaWw7IjoixaIiLCJ0Y2VkaWw7IjoixaMiLCJUY3k7Ijoi0KIiLCJ0Y3k7Ijoi0YIiLCJ0ZG90OyI6IuKDmyIsInRlbHJlYzsiOiLijJUiLCJUZnI7Ijoi8J2UlyIsInRmcjsiOiLwnZSxIiwidGhlcmU0OyI6IuKItCIsIlRoZXJlZm9yZTsiOiLiiLQiLCJ0aGVyZWZvcmU7Ijoi4oi0IiwiVGhldGE7IjoizpgiLCJ0aGV0YTsiOiLOuCIsInRoZXRhc3ltOyI6Is+RIiwidGhldGF2OyI6Is+RIiwidGhpY2thcHByb3g7Ijoi4omIIiwidGhpY2tzaW07Ijoi4oi8IiwiVGhpY2tTcGFjZTsiOiLigZ/igIoiLCJ0aGluc3A7Ijoi4oCJIiwiVGhpblNwYWNlOyI6IuKAiSIsInRoa2FwOyI6IuKJiCIsInRoa3NpbTsiOiLiiLwiLCJUSE9STjsiOiLDniIsVEhPUk46IsOeIiwidGhvcm47Ijoiw74iLHRob3JuOiLDviIsIlRpbGRlOyI6IuKIvCIsInRpbGRlOyI6IsucIiwiVGlsZGVFcXVhbDsiOiLiiYMiLCJUaWxkZUZ1bGxFcXVhbDsiOiLiiYUiLCJUaWxkZVRpbGRlOyI6IuKJiCIsInRpbWVzOyI6IsOXIix0aW1lczoiw5ciLCJ0aW1lc2I7Ijoi4oqgIiwidGltZXNiYXI7Ijoi4qixIiwidGltZXNkOyI6IuKosCIsInRpbnQ7Ijoi4oitIiwidG9lYTsiOiLipKgiLCJ0b3A7Ijoi4oqkIiwidG9wYm90OyI6IuKMtiIsInRvcGNpcjsiOiLiq7EiLCJUb3BmOyI6IvCdlYsiLCJ0b3BmOyI6IvCdlaUiLCJ0b3Bmb3JrOyI6IuKrmiIsInRvc2E7Ijoi4qSpIiwidHByaW1lOyI6IuKAtCIsIlRSQURFOyI6IuKEoiIsInRyYWRlOyI6IuKEoiIsInRyaWFuZ2xlOyI6IuKWtSIsInRyaWFuZ2xlZG93bjsiOiLilr8iLCJ0cmlhbmdsZWxlZnQ7Ijoi4peDIiwidHJpYW5nbGVsZWZ0ZXE7Ijoi4oq0IiwidHJpYW5nbGVxOyI6IuKJnCIsInRyaWFuZ2xlcmlnaHQ7Ijoi4pa5IiwidHJpYW5nbGVyaWdodGVxOyI6IuKKtSIsInRyaWRvdDsiOiLil6wiLCJ0cmllOyI6IuKJnCIsInRyaW1pbnVzOyI6IuKouiIsIlRyaXBsZURvdDsiOiLig5siLCJ0cmlwbHVzOyI6IuKouSIsInRyaXNiOyI6IuKnjSIsInRyaXRpbWU7Ijoi4qi7IiwidHJwZXppdW07Ijoi4o+iIiwiVHNjcjsiOiLwnZKvIiwidHNjcjsiOiLwnZOJIiwiVFNjeTsiOiLQpiIsInRzY3k7Ijoi0YYiLCJUU0hjeTsiOiLQiyIsInRzaGN5OyI6ItGbIiwiVHN0cm9rOyI6IsWmIiwidHN0cm9rOyI6IsWnIiwidHdpeHQ7Ijoi4omsIiwidHdvaGVhZGxlZnRhcnJvdzsiOiLihp4iLCJ0d29oZWFkcmlnaHRhcnJvdzsiOiLihqAiLCJVYWN1dGU7Ijoiw5oiLFVhY3V0ZToiw5oiLCJ1YWN1dGU7Ijoiw7oiLHVhY3V0ZToiw7oiLCJVYXJyOyI6IuKGnyIsInVBcnI7Ijoi4oeRIiwidWFycjsiOiLihpEiLCJVYXJyb2NpcjsiOiLipYkiLCJVYnJjeTsiOiLQjiIsInVicmN5OyI6ItGeIiwiVWJyZXZlOyI6IsWsIiwidWJyZXZlOyI6IsWtIiwiVWNpcmM7Ijoiw5siLFVjaXJjOiLDmyIsInVjaXJjOyI6IsO7Iix1Y2lyYzoiw7siLCJVY3k7Ijoi0KMiLCJ1Y3k7Ijoi0YMiLCJ1ZGFycjsiOiLih4UiLCJVZGJsYWM7IjoixbAiLCJ1ZGJsYWM7IjoixbEiLCJ1ZGhhcjsiOiLipa4iLCJ1ZmlzaHQ7Ijoi4qW+IiwiVWZyOyI6IvCdlJgiLCJ1ZnI7Ijoi8J2UsiIsIlVncmF2ZTsiOiLDmSIsVWdyYXZlOiLDmSIsInVncmF2ZTsiOiLDuSIsdWdyYXZlOiLDuSIsInVIYXI7Ijoi4qWjIiwidWhhcmw7Ijoi4oa/IiwidWhhcnI7Ijoi4oa+IiwidWhibGs7Ijoi4paAIiwidWxjb3JuOyI6IuKMnCIsInVsY29ybmVyOyI6IuKMnCIsInVsY3JvcDsiOiLijI8iLCJ1bHRyaTsiOiLil7giLCJVbWFjcjsiOiLFqiIsInVtYWNyOyI6IsWrIiwidW1sOyI6IsKoIix1bWw6IsKoIiwiVW5kZXJCYXI7IjoiXyIsIlVuZGVyQnJhY2U7Ijoi4o+fIiwiVW5kZXJCcmFja2V0OyI6IuKOtSIsIlVuZGVyUGFyZW50aGVzaXM7Ijoi4o+dIiwiVW5pb247Ijoi4ouDIiwiVW5pb25QbHVzOyI6IuKKjiIsIlVvZ29uOyI6IsWyIiwidW9nb247IjoixbMiLCJVb3BmOyI6IvCdlYwiLCJ1b3BmOyI6IvCdlaYiLCJVcEFycm93OyI6IuKGkSIsIlVwYXJyb3c7Ijoi4oeRIiwidXBhcnJvdzsiOiLihpEiLCJVcEFycm93QmFyOyI6IuKkkiIsIlVwQXJyb3dEb3duQXJyb3c7Ijoi4oeFIiwiVXBEb3duQXJyb3c7Ijoi4oaVIiwiVXBkb3duYXJyb3c7Ijoi4oeVIiwidXBkb3duYXJyb3c7Ijoi4oaVIiwiVXBFcXVpbGlicml1bTsiOiLipa4iLCJ1cGhhcnBvb25sZWZ0OyI6IuKGvyIsInVwaGFycG9vbnJpZ2h0OyI6IuKGviIsInVwbHVzOyI6IuKKjiIsIlVwcGVyTGVmdEFycm93OyI6IuKGliIsIlVwcGVyUmlnaHRBcnJvdzsiOiLihpciLCJVcHNpOyI6Is+SIiwidXBzaTsiOiLPhSIsInVwc2loOyI6Is+SIiwiVXBzaWxvbjsiOiLOpSIsInVwc2lsb247Ijoiz4UiLCJVcFRlZTsiOiLiiqUiLCJVcFRlZUFycm93OyI6IuKGpSIsInVwdXBhcnJvd3M7Ijoi4oeIIiwidXJjb3JuOyI6IuKMnSIsInVyY29ybmVyOyI6IuKMnSIsInVyY3JvcDsiOiLijI4iLCJVcmluZzsiOiLFriIsInVyaW5nOyI6IsWvIiwidXJ0cmk7Ijoi4pe5IiwiVXNjcjsiOiLwnZKwIiwidXNjcjsiOiLwnZOKIiwidXRkb3Q7Ijoi4ouwIiwiVXRpbGRlOyI6IsWoIiwidXRpbGRlOyI6IsWpIiwidXRyaTsiOiLilrUiLCJ1dHJpZjsiOiLilrQiLCJ1dWFycjsiOiLih4giLCJVdW1sOyI6IsOcIixVdW1sOiLDnCIsInV1bWw7Ijoiw7wiLHV1bWw6IsO8IiwidXdhbmdsZTsiOiLipqciLCJ2YW5ncnQ7Ijoi4qacIiwidmFyZXBzaWxvbjsiOiLPtSIsInZhcmthcHBhOyI6Is+wIiwidmFybm90aGluZzsiOiLiiIUiLCJ2YXJwaGk7Ijoiz5UiLCJ2YXJwaTsiOiLPliIsInZhcnByb3B0bzsiOiLiiJ0iLCJ2QXJyOyI6IuKHlSIsInZhcnI7Ijoi4oaVIiwidmFycmhvOyI6Is+xIiwidmFyc2lnbWE7Ijoiz4IiLCJ2YXJzdWJzZXRuZXE7Ijoi4oqK77iAIiwidmFyc3Vic2V0bmVxcTsiOiLiq4vvuIAiLCJ2YXJzdXBzZXRuZXE7Ijoi4oqL77iAIiwidmFyc3Vwc2V0bmVxcTsiOiLiq4zvuIAiLCJ2YXJ0aGV0YTsiOiLPkSIsInZhcnRyaWFuZ2xlbGVmdDsiOiLiirIiLCJ2YXJ0cmlhbmdsZXJpZ2h0OyI6IuKKsyIsIlZiYXI7Ijoi4qurIiwidkJhcjsiOiLiq6giLCJ2QmFydjsiOiLiq6kiLCJWY3k7Ijoi0JIiLCJ2Y3k7Ijoi0LIiLCJWRGFzaDsiOiLiiqsiLCJWZGFzaDsiOiLiiqkiLCJ2RGFzaDsiOiLiiqgiLCJ2ZGFzaDsiOiLiiqIiLCJWZGFzaGw7Ijoi4qumIiwiVmVlOyI6IuKLgSIsInZlZTsiOiLiiKgiLCJ2ZWViYXI7Ijoi4oq7IiwidmVlZXE7Ijoi4omaIiwidmVsbGlwOyI6IuKLriIsIlZlcmJhcjsiOiLigJYiLCJ2ZXJiYXI7IjoifCIsIlZlcnQ7Ijoi4oCWIiwidmVydDsiOiJ8IiwiVmVydGljYWxCYXI7Ijoi4oijIiwiVmVydGljYWxMaW5lOyI6InwiLCJWZXJ0aWNhbFNlcGFyYXRvcjsiOiLinZgiLCJWZXJ0aWNhbFRpbGRlOyI6IuKJgCIsIlZlcnlUaGluU3BhY2U7Ijoi4oCKIiwiVmZyOyI6IvCdlJkiLCJ2ZnI7Ijoi8J2UsyIsInZsdHJpOyI6IuKKsiIsInZuc3ViOyI6IuKKguKDkiIsInZuc3VwOyI6IuKKg+KDkiIsIlZvcGY7Ijoi8J2VjSIsInZvcGY7Ijoi8J2VpyIsInZwcm9wOyI6IuKInSIsInZydHJpOyI6IuKKsyIsIlZzY3I7Ijoi8J2SsSIsInZzY3I7Ijoi8J2TiyIsInZzdWJuRTsiOiLiq4vvuIAiLCJ2c3VibmU7Ijoi4oqK77iAIiwidnN1cG5FOyI6IuKrjO+4gCIsInZzdXBuZTsiOiLiiovvuIAiLCJWdmRhc2g7Ijoi4oqqIiwidnppZ3phZzsiOiLippoiLCJXY2lyYzsiOiLFtCIsIndjaXJjOyI6IsW1Iiwid2VkYmFyOyI6IuKpnyIsIldlZGdlOyI6IuKLgCIsIndlZGdlOyI6IuKIpyIsIndlZGdlcTsiOiLiiZkiLCJ3ZWllcnA7Ijoi4oSYIiwiV2ZyOyI6IvCdlJoiLCJ3ZnI7Ijoi8J2UtCIsIldvcGY7Ijoi8J2VjiIsIndvcGY7Ijoi8J2VqCIsIndwOyI6IuKEmCIsIndyOyI6IuKJgCIsIndyZWF0aDsiOiLiiYAiLCJXc2NyOyI6IvCdkrIiLCJ3c2NyOyI6IvCdk4wiLCJ4Y2FwOyI6IuKLgiIsInhjaXJjOyI6IuKXryIsInhjdXA7Ijoi4ouDIiwieGR0cmk7Ijoi4pa9IiwiWGZyOyI6IvCdlJsiLCJ4ZnI7Ijoi8J2UtSIsInhoQXJyOyI6IuKfuiIsInhoYXJyOyI6IuKftyIsIlhpOyI6Is6eIiwieGk7Ijoizr4iLCJ4bEFycjsiOiLin7giLCJ4bGFycjsiOiLin7UiLCJ4bWFwOyI6IuKfvCIsInhuaXM7Ijoi4ou7IiwieG9kb3Q7Ijoi4qiAIiwiWG9wZjsiOiLwnZWPIiwieG9wZjsiOiLwnZWpIiwieG9wbHVzOyI6IuKogSIsInhvdGltZTsiOiLiqIIiLCJ4ckFycjsiOiLin7kiLCJ4cmFycjsiOiLin7YiLCJYc2NyOyI6IvCdkrMiLCJ4c2NyOyI6IvCdk40iLCJ4c3FjdXA7Ijoi4qiGIiwieHVwbHVzOyI6IuKohCIsInh1dHJpOyI6IuKWsyIsInh2ZWU7Ijoi4ouBIiwieHdlZGdlOyI6IuKLgCIsIllhY3V0ZTsiOiLDnSIsWWFjdXRlOiLDnSIsInlhY3V0ZTsiOiLDvSIseWFjdXRlOiLDvSIsIllBY3k7Ijoi0K8iLCJ5YWN5OyI6ItGPIiwiWWNpcmM7IjoixbYiLCJ5Y2lyYzsiOiLFtyIsIlljeTsiOiLQqyIsInljeTsiOiLRiyIsInllbjsiOiLCpSIseWVuOiLCpSIsIllmcjsiOiLwnZScIiwieWZyOyI6IvCdlLYiLCJZSWN5OyI6ItCHIiwieWljeTsiOiLRlyIsIllvcGY7Ijoi8J2VkCIsInlvcGY7Ijoi8J2VqiIsIllzY3I7Ijoi8J2StCIsInlzY3I7Ijoi8J2TjiIsIllVY3k7Ijoi0K4iLCJ5dWN5OyI6ItGOIiwiWXVtbDsiOiLFuCIsInl1bWw7Ijoiw78iLHl1bWw6IsO/IiwiWmFjdXRlOyI6IsW5IiwiemFjdXRlOyI6IsW6IiwiWmNhcm9uOyI6IsW9IiwiemNhcm9uOyI6IsW+IiwiWmN5OyI6ItCXIiwiemN5OyI6ItC3IiwiWmRvdDsiOiLFuyIsInpkb3Q7IjoixbwiLCJ6ZWV0cmY7Ijoi4oSoIiwiWmVyb1dpZHRoU3BhY2U7Ijoi4oCLIiwiWmV0YTsiOiLOliIsInpldGE7IjoizrYiLCJaZnI7Ijoi4oSoIiwiemZyOyI6IvCdlLciLCJaSGN5OyI6ItCWIiwiemhjeTsiOiLQtiIsInppZ3JhcnI7Ijoi4oedIiwiWm9wZjsiOiLihKQiLCJ6b3BmOyI6IvCdlasiLCJac2NyOyI6IvCdkrUiLCJ6c2NyOyI6IvCdk48iLCJ6d2o7Ijoi4oCNIiwienduajsiOiLigIwifTtmdW5jdGlvbiBWZShlLHQpe2lmKGUubGVuZ3RoPHQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIE91KGUsdCl7Y29uc3Qgbj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gbj4wP2UubGFzdEluZGV4T2YodCk9PT1uOm49PT0wP2U9PT10OiExfWZ1bmN0aW9uIFdhKGUsdCl7bGV0IG49IiI7Zm9yKDt0PjA7KSh0JjEpPT09MSYmKG4rPWUpLGUrPWUsdD10Pj4+MTtyZXR1cm4gbn12YXIgVnU9OTcsanU9MTIyLEd1PTY1LCR1PTkwLFh1PTQ4LEp1PTU3O2Z1bmN0aW9uIER0KGUsdCl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQodCk7cmV0dXJuIFZ1PD1uJiZuPD1qdXx8R3U8PW4mJm48PSR1fHxYdTw9biYmbjw9SnV9ZnVuY3Rpb24gZG4oZSl7cmV0dXJuIHR5cGVvZiBlPCJ1In1mdW5jdGlvbiBZdShlKXtpZihlKXJldHVybiB0eXBlb2YgZT09InN0cmluZyI/e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTplfTp7a2luZDoibWFya2Rvd24iLHZhbHVlOmUudmFsdWV9fXZhciBGYT1jbGFzc3tpc0FwcGxpY2FibGUoKXtyZXR1cm4hMH1jb25zdHJ1Y3RvcihlLHQpe3RoaXMuaWQ9ZSx0aGlzLl90YWdzPVtdLHRoaXMuX3RhZ01hcD17fSx0aGlzLl92YWx1ZVNldE1hcD17fSx0aGlzLl90YWdzPXQudGFnc3x8W10sdGhpcy5fZ2xvYmFsQXR0cmlidXRlcz10Lmdsb2JhbEF0dHJpYnV0ZXN8fFtdLHRoaXMuX3RhZ3MuZm9yRWFjaChuPT57dGhpcy5fdGFnTWFwW24ubmFtZS50b0xvd2VyQ2FzZSgpXT1ufSksdC52YWx1ZVNldHMmJnQudmFsdWVTZXRzLmZvckVhY2gobj0+e3RoaXMuX3ZhbHVlU2V0TWFwW24ubmFtZV09bi52YWx1ZXN9KX1nZXRJZCgpe3JldHVybiB0aGlzLmlkfXByb3ZpZGVUYWdzKCl7cmV0dXJuIHRoaXMuX3RhZ3N9cHJvdmlkZUF0dHJpYnV0ZXMoZSl7Y29uc3QgdD1bXSxuPXI9Pnt0LnB1c2gocil9LGk9dGhpcy5fdGFnTWFwW2UudG9Mb3dlckNhc2UoKV07cmV0dXJuIGkmJmkuYXR0cmlidXRlcy5mb3JFYWNoKG4pLHRoaXMuX2dsb2JhbEF0dHJpYnV0ZXMuZm9yRWFjaChuKSx0fXByb3ZpZGVWYWx1ZXMoZSx0KXtjb25zdCBuPVtdO3Q9dC50b0xvd2VyQ2FzZSgpO2NvbnN0IGk9cz0+e3MuZm9yRWFjaChvPT57by5uYW1lLnRvTG93ZXJDYXNlKCk9PT10JiYoby52YWx1ZXMmJm8udmFsdWVzLmZvckVhY2gobD0+e24ucHVzaChsKX0pLG8udmFsdWVTZXQmJnRoaXMuX3ZhbHVlU2V0TWFwW28udmFsdWVTZXRdJiZ0aGlzLl92YWx1ZVNldE1hcFtvLnZhbHVlU2V0XS5mb3JFYWNoKGw9PntuLnB1c2gobCl9KSl9KX0scj10aGlzLl90YWdNYXBbZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gciYmaShyLmF0dHJpYnV0ZXMpLGkodGhpcy5fZ2xvYmFsQXR0cmlidXRlcyksbn19O2Z1bmN0aW9uIFllKGUsdD17fSxuKXtjb25zdCBpPXtraW5kOm4/Im1hcmtkb3duIjoicGxhaW50ZXh0Iix2YWx1ZToiIn07aWYoZS5kZXNjcmlwdGlvbiYmdC5kb2N1bWVudGF0aW9uIT09ITEpe2NvbnN0IHI9WXUoZS5kZXNjcmlwdGlvbik7ciYmKGkudmFsdWUrPXIudmFsdWUpfWlmKGUucmVmZXJlbmNlcyYmZS5yZWZlcmVuY2VzLmxlbmd0aD4wJiZ0LnJlZmVyZW5jZXMhPT0hMSYmKGkudmFsdWUubGVuZ3RoJiYoaS52YWx1ZSs9YAoKYCksbj9pLnZhbHVlKz1lLnJlZmVyZW5jZXMubWFwKHI9PmBbJHtyLm5hbWV9XSgke3IudXJsfSlgKS5qb2luKCIgfCAiKTppLnZhbHVlKz1lLnJlZmVyZW5jZXMubWFwKHI9PmAke3IubmFtZX06ICR7ci51cmx9YCkuam9pbihgCmApKSxpLnZhbHVlIT09IiIpcmV0dXJuIGl9dmFyIFF1PWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5kYXRhTWFuYWdlcj1lLHRoaXMucmVhZERpcmVjdG9yeT10LHRoaXMuYXRyaWJ1dGVDb21wbGV0aW9ucz1bXX1vbkh0bWxBdHRyaWJ1dGVWYWx1ZShlKXt0aGlzLmRhdGFNYW5hZ2VyLmlzUGF0aEF0dHJpYnV0ZShlLnRhZyxlLmF0dHJpYnV0ZSkmJnRoaXMuYXRyaWJ1dGVDb21wbGV0aW9ucy5wdXNoKGUpfWFzeW5jIGNvbXB1dGVDb21wbGV0aW9ucyhlLHQpe2NvbnN0IG49e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX07Zm9yKGNvbnN0IGkgb2YgdGhpcy5hdHJpYnV0ZUNvbXBsZXRpb25zKXtjb25zdCByPUt1KGUuZ2V0VGV4dChpLnJhbmdlKSk7aWYoZWMocikpaWYocj09PSIuInx8cj09PSIuLiIpbi5pc0luY29tcGxldGU9ITA7ZWxzZXtjb25zdCBzPXRjKGkudmFsdWUscixpLnJhbmdlKSxvPWF3YWl0IHRoaXMucHJvdmlkZVBhdGhTdWdnZXN0aW9ucyhpLnZhbHVlLHMsZSx0KTtmb3IoY29uc3QgbCBvZiBvKW4uaXRlbXMucHVzaChsKX19cmV0dXJuIG59YXN5bmMgcHJvdmlkZVBhdGhTdWdnZXN0aW9ucyhlLHQsbixpKXtjb25zdCByPWUuc3Vic3RyaW5nKDAsZS5sYXN0SW5kZXhPZigiLyIpKzEpO2xldCBzPWkucmVzb2x2ZVJlZmVyZW5jZShyfHwiLiIsbi51cmkpO2lmKHMpdHJ5e2NvbnN0IG89W10sbD1hd2FpdCB0aGlzLnJlYWREaXJlY3Rvcnkocyk7Zm9yKGNvbnN0W2EsdV1vZiBsKWEuY2hhckNvZGVBdCgwKSE9PVp1JiZvLnB1c2gobmMoYSx1PT09a2kuRGlyZWN0b3J5LHQpKTtyZXR1cm4gb31jYXRjaHt9cmV0dXJuW119fSxadT00NjtmdW5jdGlvbiBLdShlKXtyZXR1cm4gVmUoZSwiJyIpfHxWZShlLCciJyk/ZS5zbGljZSgxLC0xKTplfWZ1bmN0aW9uIGVjKGUpe3JldHVybiEoVmUoZSwiaHR0cCIpfHxWZShlLCJodHRwcyIpfHxWZShlLCIvLyIpKX1mdW5jdGlvbiB0YyhlLHQsbil7bGV0IGk7Y29uc3Qgcj1lLmxhc3RJbmRleE9mKCIvIik7aWYocj09PS0xKWk9aWMobiwxLC0xKTtlbHNle2NvbnN0IHM9dC5zbGljZShyKzEpLG89SXQobi5lbmQsLTEtcy5sZW5ndGgpLGw9cy5pbmRleE9mKCIgIik7bGV0IGE7bCE9PS0xP2E9SXQobyxsKTphPUl0KG4uZW5kLC0xKSxpPUcuY3JlYXRlKG8sYSl9cmV0dXJuIGl9ZnVuY3Rpb24gbmMoZSx0LG4pe3JldHVybiB0PyhlPWUrIi8iLHtsYWJlbDplLGtpbmQ6ZGUuRm9sZGVyLHRleHRFZGl0Om9lLnJlcGxhY2UobixlKSxjb21tYW5kOnt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9fSk6e2xhYmVsOmUsa2luZDpkZS5GaWxlLHRleHRFZGl0Om9lLnJlcGxhY2UobixlKX19ZnVuY3Rpb24gSXQoZSx0KXtyZXR1cm4gcmUuY3JlYXRlKGUubGluZSxlLmNoYXJhY3Rlcit0KX1mdW5jdGlvbiBpYyhlLHQsbil7Y29uc3QgaT1JdChlLnN0YXJ0LHQpLHI9SXQoZS5lbmQsbik7cmV0dXJuIEcuY3JlYXRlKGkscil9dmFyIHJjPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5sc09wdGlvbnM9ZSx0aGlzLmRhdGFNYW5hZ2VyPXQsdGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzPVtdfXNldENvbXBsZXRpb25QYXJ0aWNpcGFudHMoZSl7dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzPWV8fFtdfWFzeW5jIGRvQ29tcGxldGUyKGUsdCxuLGkscil7aWYoIXRoaXMubHNPcHRpb25zLmZpbGVTeXN0ZW1Qcm92aWRlcnx8IXRoaXMubHNPcHRpb25zLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRGlyZWN0b3J5KXJldHVybiB0aGlzLmRvQ29tcGxldGUoZSx0LG4scik7Y29uc3Qgcz1uZXcgUXUodGhpcy5kYXRhTWFuYWdlcix0aGlzLmxzT3B0aW9ucy5maWxlU3lzdGVtUHJvdmlkZXIucmVhZERpcmVjdG9yeSksbz10aGlzLmNvbXBsZXRpb25QYXJ0aWNpcGFudHM7dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzPVtzXS5jb25jYXQobyk7Y29uc3QgbD10aGlzLmRvQ29tcGxldGUoZSx0LG4scik7dHJ5e2NvbnN0IGE9YXdhaXQgcy5jb21wdXRlQ29tcGxldGlvbnMoZSxpKTtyZXR1cm57aXNJbmNvbXBsZXRlOmwuaXNJbmNvbXBsZXRlfHxhLmlzSW5jb21wbGV0ZSxpdGVtczphLml0ZW1zLmNvbmNhdChsLml0ZW1zKX19ZmluYWxseXt0aGlzLmNvbXBsZXRpb25QYXJ0aWNpcGFudHM9b319ZG9Db21wbGV0ZShlLHQsbixpKXtjb25zdCByPXRoaXMuX2RvQ29tcGxldGUoZSx0LG4saSk7cmV0dXJuIHRoaXMuY29udmVydENvbXBsZXRpb25MaXN0KHIpfV9kb0NvbXBsZXRlKGUsdCxuLGkpe2NvbnN0IHI9e2lzSW5jb21wbGV0ZTohMSxpdGVtczpbXX0scz10aGlzLmNvbXBsZXRpb25QYXJ0aWNpcGFudHMsbz10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFQcm92aWRlcnMoKS5maWx0ZXIoeD0+eC5pc0FwcGxpY2FibGUoZS5sYW5ndWFnZUlkKSYmKCFpfHxpW3guZ2V0SWQoKV0hPT0hMSkpLGw9dGhpcy5kYXRhTWFuYWdlci5nZXRWb2lkRWxlbWVudHMobyksYT10aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKSx1PWUuZ2V0VGV4dCgpLGM9ZS5vZmZzZXRBdCh0KSxkPW4uZmluZE5vZGVCZWZvcmUoYyk7aWYoIWQpcmV0dXJuIHI7Y29uc3QgbT1nZSh1LGQuc3RhcnQpO2xldCBmPSIiLF87ZnVuY3Rpb24gZyh4LFM9Yyl7cmV0dXJuIHg+YyYmKHg9Yykse3N0YXJ0OmUucG9zaXRpb25BdCh4KSxlbmQ6ZS5wb3NpdGlvbkF0KFMpfX1mdW5jdGlvbiBBKHgsUyl7Y29uc3QgRD1nKHgsUyk7cmV0dXJuIG8uZm9yRWFjaChJPT57SS5wcm92aWRlVGFncygpLmZvckVhY2goRj0+e3IuaXRlbXMucHVzaCh7bGFiZWw6Ri5uYW1lLGtpbmQ6ZGUuUHJvcGVydHksZG9jdW1lbnRhdGlvbjpZZShGLHZvaWQgMCxhKSx0ZXh0RWRpdDpvZS5yZXBsYWNlKEQsRi5uYW1lKSxpbnNlcnRUZXh0Rm9ybWF0OmtlLlBsYWluVGV4dH0pfSl9KSxyfWZ1bmN0aW9uIHYoeCl7bGV0IFM9eDtmb3IoO1M+MDspe2NvbnN0IEQ9dS5jaGFyQXQoUy0xKTtpZihgClxyYC5pbmRleE9mKEQpPj0wKXJldHVybiB1LnN1YnN0cmluZyhTLHgpO2lmKCFtbihEKSlyZXR1cm4gbnVsbDtTLS19cmV0dXJuIHUuc3Vic3RyaW5nKDAseCl9ZnVuY3Rpb24geSh4LFMsRD1jKXtjb25zdCBJPWcoeCxEKSxGPVBhKHUsRCxCLldpdGhpbkVuZFRhZyx6LkVuZFRhZ0Nsb3NlKT8iIjoiPiI7bGV0IFc9ZDtmb3IoUyYmKFc9Vy5wYXJlbnQpO1c7KXtjb25zdCBVPVcudGFnO2lmKFUmJighVy5jbG9zZWR8fFcuZW5kVGFnU3RhcnQmJlcuZW5kVGFnU3RhcnQ+Yykpe2NvbnN0IFY9e2xhYmVsOiIvIitVLGtpbmQ6ZGUuUHJvcGVydHksZmlsdGVyVGV4dDoiLyIrVSx0ZXh0RWRpdDpvZS5yZXBsYWNlKEksIi8iK1UrRiksaW5zZXJ0VGV4dEZvcm1hdDprZS5QbGFpblRleHR9LFk9dihXLnN0YXJ0KSxzZT12KHgtMSk7aWYoWSE9PW51bGwmJnNlIT09bnVsbCYmWSE9PXNlKXtjb25zdCBHZT1ZKyI8LyIrVStGO1YudGV4dEVkaXQ9b2UucmVwbGFjZShnKHgtMS1zZS5sZW5ndGgpLEdlKSxWLmZpbHRlclRleHQ9c2UrIjwvIitVfXJldHVybiByLml0ZW1zLnB1c2goVikscn1XPVcucGFyZW50fXJldHVybiBTfHxvLmZvckVhY2goVT0+e1UucHJvdmlkZVRhZ3MoKS5mb3JFYWNoKFY9PntyLml0ZW1zLnB1c2goe2xhYmVsOiIvIitWLm5hbWUsa2luZDpkZS5Qcm9wZXJ0eSxkb2N1bWVudGF0aW9uOlllKFYsdm9pZCAwLGEpLGZpbHRlclRleHQ6Ii8iK1YubmFtZStGLHRleHRFZGl0Om9lLnJlcGxhY2UoSSwiLyIrVi5uYW1lK0YpLGluc2VydFRleHRGb3JtYXQ6a2UuUGxhaW5UZXh0fSl9KX0pLHJ9Y29uc3QgRT0oeCxTKT0+e2lmKGkmJmkuaGlkZUF1dG9Db21wbGV0ZVByb3Bvc2FscylyZXR1cm4gcjtpZighdGhpcy5kYXRhTWFuYWdlci5pc1ZvaWRFbGVtZW50KFMsbCkpe2NvbnN0IEQ9ZS5wb3NpdGlvbkF0KHgpO3IuaXRlbXMucHVzaCh7bGFiZWw6IjwvIitTKyI+IixraW5kOmRlLlByb3BlcnR5LGZpbHRlclRleHQ6IjwvIitTKyI+Iix0ZXh0RWRpdDpvZS5pbnNlcnQoRCwiJDA8LyIrUysiPiIpLGluc2VydFRleHRGb3JtYXQ6a2UuU25pcHBldH0pfXJldHVybiByfTtmdW5jdGlvbiBSKHgsUyl7cmV0dXJuIEEoeCxTKSx5KHgsITAsUykscn1mdW5jdGlvbiBOKCl7Y29uc3QgeD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBkLmF0dHJpYnV0ZU5hbWVzLmZvckVhY2goUz0+e3hbU109ITB9KSx4fWZ1bmN0aW9uIE0oeCxTPWMpe2xldCBEPWM7Zm9yKDtEPFMmJnVbRF0hPT0iPCI7KUQrKztjb25zdCBJPXUuc3Vic3RyaW5nKHgsUyksRj1nKHgsRCk7bGV0IFc9IiI7aWYoIVBhKHUsUyxCLkFmdGVyQXR0cmlidXRlTmFtZSx6LkRlbGltaXRlckFzc2lnbikpe2NvbnN0IFY9aT8uYXR0cmlidXRlRGVmYXVsdFZhbHVlPz8iZG91YmxlcXVvdGVzIjtWPT09ImVtcHR5Ij9XPSI9JDEiOlY9PT0ic2luZ2xlcXVvdGVzIj9XPSI9JyQxJyI6Vz0nPSIkMSInfWNvbnN0IFU9TigpO3JldHVybiBVW0ldPSExLG8uZm9yRWFjaChWPT57Vi5wcm92aWRlQXR0cmlidXRlcyhmKS5mb3JFYWNoKFk9PntpZihVW1kubmFtZV0pcmV0dXJuO1VbWS5uYW1lXT0hMDtsZXQgc2U9WS5uYW1lLEdlO1kudmFsdWVTZXQhPT0idiImJlcubGVuZ3RoJiYoc2U9c2UrVywoWS52YWx1ZVNldHx8WS5uYW1lPT09InN0eWxlIikmJihHZT17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSkpLHIuaXRlbXMucHVzaCh7bGFiZWw6WS5uYW1lLGtpbmQ6WS52YWx1ZVNldD09PSJoYW5kbGVyIj9kZS5GdW5jdGlvbjpkZS5WYWx1ZSxkb2N1bWVudGF0aW9uOlllKFksdm9pZCAwLGEpLHRleHRFZGl0Om9lLnJlcGxhY2UoRixzZSksaW5zZXJ0VGV4dEZvcm1hdDprZS5TbmlwcGV0LGNvbW1hbmQ6R2V9KX0pfSksYihGLFUpLHJ9ZnVuY3Rpb24gYih4LFMpe2NvbnN0IEQ9ImRhdGEtIixJPXt9O0lbRF09YCR7RH0kMT0iJDIiYDtmdW5jdGlvbiBGKFcpe1cuYXR0cmlidXRlTmFtZXMuZm9yRWFjaChVPT57VmUoVSxEKSYmIUlbVV0mJiFTW1VdJiYoSVtVXT1VKyc9IiQxIicpfSksVy5jaGlsZHJlbi5mb3JFYWNoKFU9PkYoVSkpfW4mJm4ucm9vdHMuZm9yRWFjaChXPT5GKFcpKSxPYmplY3Qua2V5cyhJKS5mb3JFYWNoKFc9PnIuaXRlbXMucHVzaCh7bGFiZWw6VyxraW5kOmRlLlZhbHVlLHRleHRFZGl0Om9lLnJlcGxhY2UoeCxJW1ddKSxpbnNlcnRUZXh0Rm9ybWF0OmtlLlNuaXBwZXR9KSl9ZnVuY3Rpb24gcCh4LFM9Yyl7bGV0IEQsSSxGO2lmKGM+eCYmYzw9UyYmc2ModVt4XSkpe2NvbnN0IFc9eCsxO2xldCBVPVM7Uz54JiZ1W1MtMV09PT11W3hdJiZVLS07Y29uc3QgVj1hYyh1LGMsVyksWT1vYyh1LGMsVSk7RD1nKFYsWSksRj1jPj1XJiZjPD1VP3Uuc3Vic3RyaW5nKFcsYyk6IiIsST0hMX1lbHNlIEQ9Zyh4LFMpLEY9dS5zdWJzdHJpbmcoeCxjKSxJPSEwO2lmKHMubGVuZ3RoPjApe2NvbnN0IFc9Zi50b0xvd2VyQ2FzZSgpLFU9Xy50b0xvd2VyQ2FzZSgpLFY9Zyh4LFMpO2Zvcihjb25zdCBZIG9mIHMpWS5vbkh0bWxBdHRyaWJ1dGVWYWx1ZSYmWS5vbkh0bWxBdHRyaWJ1dGVWYWx1ZSh7ZG9jdW1lbnQ6ZSxwb3NpdGlvbjp0LHRhZzpXLGF0dHJpYnV0ZTpVLHZhbHVlOkYscmFuZ2U6Vn0pfXJldHVybiBvLmZvckVhY2goVz0+e1cucHJvdmlkZVZhbHVlcyhmLF8pLmZvckVhY2goVT0+e2NvbnN0IFY9ST8nIicrVS5uYW1lKyciJzpVLm5hbWU7ci5pdGVtcy5wdXNoKHtsYWJlbDpVLm5hbWUsZmlsdGVyVGV4dDpWLGtpbmQ6ZGUuVW5pdCxkb2N1bWVudGF0aW9uOlllKFUsdm9pZCAwLGEpLHRleHRFZGl0Om9lLnJlcGxhY2UoRCxWKSxpbnNlcnRUZXh0Rm9ybWF0OmtlLlBsYWluVGV4dH0pfSl9KSxMKCkscn1mdW5jdGlvbiBUKHgpe3JldHVybiBjPT09bS5nZXRUb2tlbkVuZCgpJiYoaz1tLnNjYW4oKSxrPT09eCYmbS5nZXRUb2tlbk9mZnNldCgpPT09Yyk/bS5nZXRUb2tlbkVuZCgpOmN9ZnVuY3Rpb24gSCgpe2Zvcihjb25zdCB4IG9mIHMpeC5vbkh0bWxDb250ZW50JiZ4Lm9uSHRtbENvbnRlbnQoe2RvY3VtZW50OmUscG9zaXRpb246dH0pO3JldHVybiBMKCl9ZnVuY3Rpb24gTCgpe2xldCB4PWMtMSxTPXQuY2hhcmFjdGVyO2Zvcig7eD49MCYmRHQodSx4KTspeC0tLFMtLTtpZih4Pj0wJiZ1W3hdPT09IiYiKXtjb25zdCBEPUcuY3JlYXRlKHJlLmNyZWF0ZSh0LmxpbmUsUy0xKSx0KTtmb3IoY29uc3QgSSBpbiBOdClpZihPdShJLCI7Iikpe2NvbnN0IEY9IiYiK0k7ci5pdGVtcy5wdXNoKHtsYWJlbDpGLGtpbmQ6ZGUuS2V5d29yZCxkb2N1bWVudGF0aW9uOlRlKCJDaGFyYWN0ZXIgZW50aXR5IHJlcHJlc2VudGluZyAnezB9JyIsTnRbSV0pLHRleHRFZGl0Om9lLnJlcGxhY2UoRCxGKSxpbnNlcnRUZXh0Rm9ybWF0OmtlLlBsYWluVGV4dH0pfX1yZXR1cm4gcn1mdW5jdGlvbiB3KHgsUyl7Y29uc3QgRD1nKHgsUyk7ci5pdGVtcy5wdXNoKHtsYWJlbDoiIURPQ1RZUEUiLGtpbmQ6ZGUuUHJvcGVydHksZG9jdW1lbnRhdGlvbjoiQSBwcmVhbWJsZSBmb3IgYW4gSFRNTCBkb2N1bWVudC4iLHRleHRFZGl0Om9lLnJlcGxhY2UoRCwiIURPQ1RZUEUgaHRtbD4iKSxpbnNlcnRUZXh0Rm9ybWF0OmtlLlBsYWluVGV4dH0pfWxldCBrPW0uc2NhbigpO2Zvcig7ayE9PXouRU9TJiZtLmdldFRva2VuT2Zmc2V0KCk8PWM7KXtzd2l0Y2goayl7Y2FzZSB6LlN0YXJ0VGFnT3BlbjppZihtLmdldFRva2VuRW5kKCk9PT1jKXtjb25zdCB4PVQoei5TdGFydFRhZyk7cmV0dXJuIHQubGluZT09PTAmJncoYyx4KSxSKGMseCl9YnJlYWs7Y2FzZSB6LlN0YXJ0VGFnOmlmKG0uZ2V0VG9rZW5PZmZzZXQoKTw9YyYmYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiBBKG0uZ2V0VG9rZW5PZmZzZXQoKSxtLmdldFRva2VuRW5kKCkpO2Y9bS5nZXRUb2tlblRleHQoKTticmVhaztjYXNlIHouQXR0cmlidXRlTmFtZTppZihtLmdldFRva2VuT2Zmc2V0KCk8PWMmJmM8PW0uZ2V0VG9rZW5FbmQoKSlyZXR1cm4gTShtLmdldFRva2VuT2Zmc2V0KCksbS5nZXRUb2tlbkVuZCgpKTtfPW0uZ2V0VG9rZW5UZXh0KCk7YnJlYWs7Y2FzZSB6LkRlbGltaXRlckFzc2lnbjppZihtLmdldFRva2VuRW5kKCk9PT1jKXtjb25zdCB4PVQoei5BdHRyaWJ1dGVWYWx1ZSk7cmV0dXJuIHAoYyx4KX1icmVhaztjYXNlIHouQXR0cmlidXRlVmFsdWU6aWYobS5nZXRUb2tlbk9mZnNldCgpPD1jJiZjPD1tLmdldFRva2VuRW5kKCkpcmV0dXJuIHAobS5nZXRUb2tlbk9mZnNldCgpLG0uZ2V0VG9rZW5FbmQoKSk7YnJlYWs7Y2FzZSB6LldoaXRlc3BhY2U6aWYoYzw9bS5nZXRUb2tlbkVuZCgpKXN3aXRjaChtLmdldFNjYW5uZXJTdGF0ZSgpKXtjYXNlIEIuQWZ0ZXJPcGVuaW5nU3RhcnRUYWc6Y29uc3QgeD1tLmdldFRva2VuT2Zmc2V0KCksUz1UKHouU3RhcnRUYWcpO3JldHVybiBSKHgsUyk7Y2FzZSBCLldpdGhpblRhZzpjYXNlIEIuQWZ0ZXJBdHRyaWJ1dGVOYW1lOnJldHVybiBNKG0uZ2V0VG9rZW5FbmQoKSk7Y2FzZSBCLkJlZm9yZUF0dHJpYnV0ZVZhbHVlOnJldHVybiBwKG0uZ2V0VG9rZW5FbmQoKSk7Y2FzZSBCLkFmdGVyT3BlbmluZ0VuZFRhZzpyZXR1cm4geShtLmdldFRva2VuT2Zmc2V0KCktMSwhMSk7Y2FzZSBCLldpdGhpbkNvbnRlbnQ6cmV0dXJuIEgoKX1icmVhaztjYXNlIHouRW5kVGFnT3BlbjppZihjPD1tLmdldFRva2VuRW5kKCkpe2NvbnN0IHg9bS5nZXRUb2tlbk9mZnNldCgpKzEsUz1UKHouRW5kVGFnKTtyZXR1cm4geSh4LCExLFMpfWJyZWFrO2Nhc2Ugei5FbmRUYWc6aWYoYzw9bS5nZXRUb2tlbkVuZCgpKXtsZXQgeD1tLmdldFRva2VuT2Zmc2V0KCktMTtmb3IoO3g+PTA7KXtjb25zdCBTPXUuY2hhckF0KHgpO2lmKFM9PT0iLyIpcmV0dXJuIHkoeCwhMSxtLmdldFRva2VuRW5kKCkpO2lmKCFtbihTKSlicmVhazt4LS19fWJyZWFrO2Nhc2Ugei5TdGFydFRhZ0Nsb3NlOmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSYmZilyZXR1cm4gRShtLmdldFRva2VuRW5kKCksZik7YnJlYWs7Y2FzZSB6LkNvbnRlbnQ6aWYoYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiBIKCk7YnJlYWs7ZGVmYXVsdDppZihjPD1tLmdldFRva2VuRW5kKCkpcmV0dXJuIHI7YnJlYWt9az1tLnNjYW4oKX1yZXR1cm4gcn1kb1F1b3RlQ29tcGxldGUoZSx0LG4saSl7Y29uc3Qgcj1lLm9mZnNldEF0KHQpO2lmKHI8PTApcmV0dXJuIG51bGw7Y29uc3Qgcz1pPy5hdHRyaWJ1dGVEZWZhdWx0VmFsdWU/PyJkb3VibGVxdW90ZXMiO2lmKHM9PT0iZW1wdHkifHxlLmdldFRleHQoKS5jaGFyQXQoci0xKSE9PSI9IilyZXR1cm4gbnVsbDtjb25zdCBsPXM9PT0iZG91YmxlcXVvdGVzIj8nIiQxIic6IickMSciLGE9bi5maW5kTm9kZUJlZm9yZShyKTtpZihhJiZhLmF0dHJpYnV0ZXMmJmEuc3RhcnQ8ciYmKCFhLmVuZFRhZ1N0YXJ0fHxhLmVuZFRhZ1N0YXJ0PnIpKXtjb25zdCB1PWdlKGUuZ2V0VGV4dCgpLGEuc3RhcnQpO2xldCBjPXUuc2NhbigpO2Zvcig7YyE9PXouRU9TJiZ1LmdldFRva2VuRW5kKCk8PXI7KXtpZihjPT09ei5BdHRyaWJ1dGVOYW1lJiZ1LmdldFRva2VuRW5kKCk9PT1yLTEpcmV0dXJuIGM9dS5zY2FuKCksYyE9PXouRGVsaW1pdGVyQXNzaWdufHwoYz11LnNjYW4oKSxjPT09ei5Vbmtub3dufHxjPT09ei5BdHRyaWJ1dGVWYWx1ZSk/bnVsbDpsO2M9dS5zY2FuKCl9fXJldHVybiBudWxsfWRvVGFnQ29tcGxldGUoZSx0LG4pe2NvbnN0IGk9ZS5vZmZzZXRBdCh0KTtpZihpPD0wKXJldHVybiBudWxsO2NvbnN0IHI9ZS5nZXRUZXh0KCkuY2hhckF0KGktMSk7aWYocj09PSI+Iil7Y29uc3Qgcz10aGlzLmRhdGFNYW5hZ2VyLmdldFZvaWRFbGVtZW50cyhlLmxhbmd1YWdlSWQpLG89bi5maW5kTm9kZUJlZm9yZShpKTtpZihvJiZvLnRhZyYmIXRoaXMuZGF0YU1hbmFnZXIuaXNWb2lkRWxlbWVudChvLnRhZyxzKSYmby5zdGFydDxpJiYoIW8uZW5kVGFnU3RhcnR8fG8uZW5kVGFnU3RhcnQ+aSkpe2NvbnN0IGw9Z2UoZS5nZXRUZXh0KCksby5zdGFydCk7bGV0IGE9bC5zY2FuKCk7Zm9yKDthIT09ei5FT1MmJmwuZ2V0VG9rZW5FbmQoKTw9aTspe2lmKGE9PT16LlN0YXJ0VGFnQ2xvc2UmJmwuZ2V0VG9rZW5FbmQoKT09PWkpcmV0dXJuYCQwPC8ke28udGFnfT5gO2E9bC5zY2FuKCl9fX1lbHNlIGlmKHI9PT0iLyIpe2xldCBzPW4uZmluZE5vZGVCZWZvcmUoaSk7Zm9yKDtzJiZzLmNsb3NlZCYmIShzLmVuZFRhZ1N0YXJ0JiZzLmVuZFRhZ1N0YXJ0PmkpOylzPXMucGFyZW50O2lmKHMmJnMudGFnKXtjb25zdCBvPWdlKGUuZ2V0VGV4dCgpLHMuc3RhcnQpO2xldCBsPW8uc2NhbigpO2Zvcig7bCE9PXouRU9TJiZvLmdldFRva2VuRW5kKCk8PWk7KXtpZihsPT09ei5FbmRUYWdPcGVuJiZvLmdldFRva2VuRW5kKCk9PT1pKXJldHVybiBlLmdldFRleHQoKS5jaGFyQXQoaSkhPT0iPiI/YCR7cy50YWd9PmA6cy50YWc7bD1vLnNjYW4oKX19fXJldHVybiBudWxsfWNvbnZlcnRDb21wbGV0aW9uTGlzdChlKXtyZXR1cm4gdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCl8fGUuaXRlbXMuZm9yRWFjaCh0PT57dC5kb2N1bWVudGF0aW9uJiZ0eXBlb2YgdC5kb2N1bWVudGF0aW9uIT0ic3RyaW5nIiYmKHQuZG9jdW1lbnRhdGlvbj17a2luZDoicGxhaW50ZXh0Iix2YWx1ZTp0LmRvY3VtZW50YXRpb24udmFsdWV9KX0pLGV9ZG9lc1N1cHBvcnRNYXJrZG93bigpe2lmKCFkbih0aGlzLnN1cHBvcnRzTWFya2Rvd24pKXtpZighZG4odGhpcy5sc09wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzKSlyZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3duPSEwLHRoaXMuc3VwcG9ydHNNYXJrZG93bjtjb25zdCBlPXRoaXMubHNPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQ/LmNvbXBsZXRpb24/LmNvbXBsZXRpb25JdGVtPy5kb2N1bWVudGF0aW9uRm9ybWF0O3RoaXMuc3VwcG9ydHNNYXJrZG93bj1BcnJheS5pc0FycmF5KGUpJiZlLmluZGV4T2YoemUuTWFya2Rvd24pIT09LTF9cmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bn19O2Z1bmN0aW9uIHNjKGUpe3JldHVybi9eWyInXSokLy50ZXN0KGUpfWZ1bmN0aW9uIG1uKGUpe3JldHVybi9eXHMqJC8udGVzdChlKX1mdW5jdGlvbiBQYShlLHQsbixpKXtjb25zdCByPWdlKGUsdCxuKTtsZXQgcz1yLnNjYW4oKTtmb3IoO3M9PT16LldoaXRlc3BhY2U7KXM9ci5zY2FuKCk7cmV0dXJuIHM9PT1pfWZ1bmN0aW9uIGFjKGUsdCxuKXtmb3IoO3Q+biYmIW1uKGVbdC0xXSk7KXQtLTtyZXR1cm4gdH1mdW5jdGlvbiBvYyhlLHQsbil7Zm9yKDt0PG4mJiFtbihlW3RdKTspdCsrO3JldHVybiB0fXZhciBsYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubHNPcHRpb25zPWUsdGhpcy5kYXRhTWFuYWdlcj10fWRvSG92ZXIoZSx0LG4saSl7Y29uc3Qgcj10aGlzLmNvbnZlcnRDb250ZW50cy5iaW5kKHRoaXMpLHM9dGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCksbz1lLm9mZnNldEF0KHQpLGw9bi5maW5kTm9kZUF0KG8pLGE9ZS5nZXRUZXh0KCk7aWYoIWx8fCFsLnRhZylyZXR1cm4gbnVsbDtjb25zdCB1PXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YVByb3ZpZGVycygpLmZpbHRlcihNPT5NLmlzQXBwbGljYWJsZShlLmxhbmd1YWdlSWQpKTtmdW5jdGlvbiBjKE0sYixwKXtmb3IoY29uc3QgVCBvZiB1KXtsZXQgSD1udWxsO2lmKFQucHJvdmlkZVRhZ3MoKS5mb3JFYWNoKEw9PntpZihMLm5hbWUudG9Mb3dlckNhc2UoKT09PU0udG9Mb3dlckNhc2UoKSl7bGV0IHc9WWUoTCxpLHMpO3d8fCh3PXtraW5kOnM/Im1hcmtkb3duIjoicGxhaW50ZXh0Iix2YWx1ZToiIn0pLEg9e2NvbnRlbnRzOncscmFuZ2U6Yn19fSksSClyZXR1cm4gSC5jb250ZW50cz1yKEguY29udGVudHMpLEh9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZChNLGIscCl7Zm9yKGNvbnN0IFQgb2YgdSl7bGV0IEg9bnVsbDtpZihULnByb3ZpZGVBdHRyaWJ1dGVzKE0pLmZvckVhY2goTD0+e2lmKGI9PT1MLm5hbWUmJkwuZGVzY3JpcHRpb24pe2NvbnN0IHc9WWUoTCxpLHMpO3c/SD17Y29udGVudHM6dyxyYW5nZTpwfTpIPW51bGx9fSksSClyZXR1cm4gSC5jb250ZW50cz1yKEguY29udGVudHMpLEh9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbShNLGIscCxUKXtmb3IoY29uc3QgSCBvZiB1KXtsZXQgTD1udWxsO2lmKEgucHJvdmlkZVZhbHVlcyhNLGIpLmZvckVhY2godz0+e2lmKHA9PT13Lm5hbWUmJncuZGVzY3JpcHRpb24pe2NvbnN0IGs9WWUodyxpLHMpO2s/TD17Y29udGVudHM6ayxyYW5nZTpUfTpMPW51bGx9fSksTClyZXR1cm4gTC5jb250ZW50cz1yKEwuY29udGVudHMpLEx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZihNLGIpe2xldCBwPUEoTSk7Zm9yKGNvbnN0IFQgaW4gTnQpe2xldCBIPW51bGw7Y29uc3QgTD0iJiIrVDtpZihwPT09TCl7bGV0IHc9TnRbVF0uY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxrPSJVKyI7aWYody5sZW5ndGg8NCl7Y29uc3QgUz00LXcubGVuZ3RoO2xldCBEPTA7Zm9yKDtEPFM7KWsrPSIwIixEKz0xfWsrPXc7Y29uc3QgeD1UZSgiQ2hhcmFjdGVyIGVudGl0eSByZXByZXNlbnRpbmcgJ3swfScsIHVuaWNvZGUgZXF1aXZhbGVudCAnezF9JyIsTnRbVF0sayk7eD9IPXtjb250ZW50czp4LHJhbmdlOmJ9Okg9bnVsbH1pZihIKXJldHVybiBILmNvbnRlbnRzPXIoSC5jb250ZW50cyksSH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBfKE0sYil7Y29uc3QgcD1nZShlLmdldFRleHQoKSxiKTtsZXQgVD1wLnNjYW4oKTtmb3IoO1QhPT16LkVPUyYmKHAuZ2V0VG9rZW5FbmQoKTxvfHxwLmdldFRva2VuRW5kKCk9PT1vJiZUIT09TSk7KVQ9cC5zY2FuKCk7cmV0dXJuIFQ9PT1NJiZvPD1wLmdldFRva2VuRW5kKCk/e3N0YXJ0OmUucG9zaXRpb25BdChwLmdldFRva2VuT2Zmc2V0KCkpLGVuZDplLnBvc2l0aW9uQXQocC5nZXRUb2tlbkVuZCgpKX06bnVsbH1mdW5jdGlvbiBnKCl7bGV0IE09by0xLGI9dC5jaGFyYWN0ZXI7Zm9yKDtNPj0wJiZEdChhLE0pOylNLS0sYi0tO2xldCBwPU0rMSxUPWI7Zm9yKDtEdChhLHApOylwKyssVCsrO2lmKE0+PTAmJmFbTV09PT0iJiIpe2xldCBIPW51bGw7cmV0dXJuIGFbcF09PT0iOyI/SD1HLmNyZWF0ZShyZS5jcmVhdGUodC5saW5lLGIpLHJlLmNyZWF0ZSh0LmxpbmUsVCsxKSk6SD1HLmNyZWF0ZShyZS5jcmVhdGUodC5saW5lLGIpLHJlLmNyZWF0ZSh0LmxpbmUsVCkpLEh9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQShNKXtsZXQgYj1vLTEscD0iJiI7Zm9yKDtiPj0wJiZEdChNLGIpOyliLS07Zm9yKGI9YisxO0R0KE0sYik7KXArPU1bYl0sYis9MTtyZXR1cm4gcCs9IjsiLHB9aWYobC5lbmRUYWdTdGFydCYmbz49bC5lbmRUYWdTdGFydCl7Y29uc3QgTT1fKHouRW5kVGFnLGwuZW5kVGFnU3RhcnQpO3JldHVybiBNP2MobC50YWcsTSk6bnVsbH1jb25zdCB2PV8oei5TdGFydFRhZyxsLnN0YXJ0KTtpZih2KXJldHVybiBjKGwudGFnLHYpO2NvbnN0IHk9Xyh6LkF0dHJpYnV0ZU5hbWUsbC5zdGFydCk7aWYoeSl7Y29uc3QgTT1sLnRhZyxiPWUuZ2V0VGV4dCh5KTtyZXR1cm4gZChNLGIseSl9Y29uc3QgRT1nKCk7aWYoRSlyZXR1cm4gZihhLEUpO2Z1bmN0aW9uIFIoTSxiKXtjb25zdCBwPWdlKGUuZ2V0VGV4dCgpLE0pO2xldCBUPXAuc2NhbigpLEg7Zm9yKDtUIT09ei5FT1MmJnAuZ2V0VG9rZW5FbmQoKTw9YjspVD1wLnNjYW4oKSxUPT09ei5BdHRyaWJ1dGVOYW1lJiYoSD1wLmdldFRva2VuVGV4dCgpKTtyZXR1cm4gSH1jb25zdCBOPV8oei5BdHRyaWJ1dGVWYWx1ZSxsLnN0YXJ0KTtpZihOKXtjb25zdCBNPWwudGFnLGI9dWMoZS5nZXRUZXh0KE4pKSxwPVIobC5zdGFydCxlLm9mZnNldEF0KE4uc3RhcnQpKTtpZihwKXJldHVybiBtKE0scCxiLE4pfXJldHVybiBudWxsfWNvbnZlcnRDb250ZW50cyhlKXtpZighdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCkpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gZTtpZigia2luZCJpbiBlKXJldHVybntraW5kOiJwbGFpbnRleHQiLHZhbHVlOmUudmFsdWV9O2lmKEFycmF5LmlzQXJyYXkoZSkpZS5tYXAodD0+dHlwZW9mIHQ9PSJzdHJpbmciP3Q6dC52YWx1ZSk7ZWxzZSByZXR1cm4gZS52YWx1ZX1yZXR1cm4gZX1kb2VzU3VwcG9ydE1hcmtkb3duKCl7aWYoIWRuKHRoaXMuc3VwcG9ydHNNYXJrZG93bikpe2lmKCFkbih0aGlzLmxzT3B0aW9ucy5jbGllbnRDYXBhYmlsaXRpZXMpKXJldHVybiB0aGlzLnN1cHBvcnRzTWFya2Rvd249ITAsdGhpcy5zdXBwb3J0c01hcmtkb3duO2NvbnN0IGU9dGhpcy5sc09wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzPy50ZXh0RG9jdW1lbnQ/LmhvdmVyPy5jb250ZW50Rm9ybWF0O3RoaXMuc3VwcG9ydHNNYXJrZG93bj1BcnJheS5pc0FycmF5KGUpJiZlLmluZGV4T2YoemUuTWFya2Rvd24pIT09LTF9cmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bn19O2Z1bmN0aW9uIHVjKGUpe3JldHVybiBlLmxlbmd0aDw9MT9lLnJlcGxhY2UoL1snIl0vLCIiKTooKGVbMF09PT0iJyJ8fGVbMF09PT0nIicpJiYoZT1lLnNsaWNlKDEpKSwoZVtlLmxlbmd0aC0xXT09PSInInx8ZVtlLmxlbmd0aC0xXT09PSciJykmJihlPWUuc2xpY2UoMCwtMSkpLGUpfWZ1bmN0aW9uIGNjKGUsdCl7cmV0dXJuIGV9dmFyIEJhOyhmdW5jdGlvbigpe3ZhciBlPVssLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIHMoYSl7dGhpcy5fX3BhcmVudD1hLHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9MCx0aGlzLl9faW5kZW50X2NvdW50PS0xLHRoaXMuX19hbGlnbm1lbnRfY291bnQ9MCx0aGlzLl9fd3JhcF9wb2ludF9pbmRleD0wLHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD0wLHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD0tMSx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQ9MCx0aGlzLl9faXRlbXM9W119cy5wcm90b3R5cGUuY2xvbmVfZW1wdHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcyh0aGlzLl9fcGFyZW50KTtyZXR1cm4gYS5zZXRfaW5kZW50KHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCksYX0scy5wcm90b3R5cGUuaXRlbT1mdW5jdGlvbihhKXtyZXR1cm4gYTwwP3RoaXMuX19pdGVtc1t0aGlzLl9faXRlbXMubGVuZ3RoK2FdOnRoaXMuX19pdGVtc1thXX0scy5wcm90b3R5cGUuaGFzX21hdGNoPWZ1bmN0aW9uKGEpe2Zvcih2YXIgdT10aGlzLl9faXRlbXMubGVuZ3RoLTE7dT49MDt1LS0paWYodGhpcy5fX2l0ZW1zW3VdLm1hdGNoKGEpKXJldHVybiEwO3JldHVybiExfSxzLnByb3RvdHlwZS5zZXRfaW5kZW50PWZ1bmN0aW9uKGEsdSl7dGhpcy5pc19lbXB0eSgpJiYodGhpcy5fX2luZGVudF9jb3VudD1hfHwwLHRoaXMuX19hbGlnbm1lbnRfY291bnQ9dXx8MCx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PXRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zaXplKHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCkpfSxzLnByb3RvdHlwZS5fc2V0X3dyYXBfcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLl9fcGFyZW50LndyYXBfbGluZV9sZW5ndGgmJih0aGlzLl9fd3JhcF9wb2ludF9pbmRleD10aGlzLl9faXRlbXMubGVuZ3RoLHRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fY2hhcmFjdGVyX2NvdW50LHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD10aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2luZGVudF9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQ9dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19hbGlnbm1lbnRfY291bnQpfSxzLnByb3RvdHlwZS5fc2hvdWxkX3dyYXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgmJnRoaXMuX19jaGFyYWN0ZXJfY291bnQ+dGhpcy5fX3BhcmVudC53cmFwX2xpbmVfbGVuZ3RoJiZ0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ+dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19jaGFyYWN0ZXJfY291bnR9LHMucHJvdG90eXBlLl9hbGxvd193cmFwPWZ1bmN0aW9uKCl7aWYodGhpcy5fc2hvdWxkX3dyYXAoKSl7dGhpcy5fX3BhcmVudC5hZGRfbmV3X2xpbmUoKTt2YXIgYT10aGlzLl9fcGFyZW50LmN1cnJlbnRfbGluZTtyZXR1cm4gYS5zZXRfaW5kZW50KHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9hbGlnbm1lbnRfY291bnQpLGEuX19pdGVtcz10aGlzLl9faXRlbXMuc2xpY2UodGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgpLHRoaXMuX19pdGVtcz10aGlzLl9faXRlbXMuc2xpY2UoMCx0aGlzLl9fd3JhcF9wb2ludF9pbmRleCksYS5fX2NoYXJhY3Rlcl9jb3VudCs9dGhpcy5fX2NoYXJhY3Rlcl9jb3VudC10aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQsYS5fX2l0ZW1zWzBdPT09IiAiJiYoYS5fX2l0ZW1zLnNwbGljZSgwLDEpLGEuX19jaGFyYWN0ZXJfY291bnQtPTEpLCEwfXJldHVybiExfSxzLnByb3RvdHlwZS5pc19lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9faXRlbXMubGVuZ3RoPT09MH0scy5wcm90b3R5cGUubGFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzX2VtcHR5KCk/bnVsbDp0aGlzLl9faXRlbXNbdGhpcy5fX2l0ZW1zLmxlbmd0aC0xXX0scy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhKXt0aGlzLl9faXRlbXMucHVzaChhKTt2YXIgdT1hLmxhc3RJbmRleE9mKGAKYCk7dSE9PS0xP3RoaXMuX19jaGFyYWN0ZXJfY291bnQ9YS5sZW5ndGgtdTp0aGlzLl9fY2hhcmFjdGVyX2NvdW50Kz1hLmxlbmd0aH0scy5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7dmFyIGE9bnVsbDtyZXR1cm4gdGhpcy5pc19lbXB0eSgpfHwoYT10aGlzLl9faXRlbXMucG9wKCksdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09YS5sZW5ndGgpLGF9LHMucHJvdG90eXBlLl9yZW1vdmVfaW5kZW50PWZ1bmN0aW9uKCl7dGhpcy5fX2luZGVudF9jb3VudD4wJiYodGhpcy5fX2luZGVudF9jb3VudC09MSx0aGlzLl9fY2hhcmFjdGVyX2NvdW50LT10aGlzLl9fcGFyZW50LmluZGVudF9zaXplKX0scy5wcm90b3R5cGUuX3JlbW92ZV93cmFwX2luZGVudD1mdW5jdGlvbigpe3RoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudD4wJiYodGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50LT0xKX0scy5wcm90b3R5cGUudHJpbT1mdW5jdGlvbigpe2Zvcig7dGhpcy5sYXN0KCk9PT0iICI7KXRoaXMuX19pdGVtcy5wb3AoKSx0aGlzLl9fY2hhcmFjdGVyX2NvdW50LT0xfSxzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPSIiO3JldHVybiB0aGlzLmlzX2VtcHR5KCk/dGhpcy5fX3BhcmVudC5pbmRlbnRfZW1wdHlfbGluZXMmJihhPXRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zdHJpbmcodGhpcy5fX2luZGVudF9jb3VudCkpOihhPXRoaXMuX19wYXJlbnQuZ2V0X2luZGVudF9zdHJpbmcodGhpcy5fX2luZGVudF9jb3VudCx0aGlzLl9fYWxpZ25tZW50X2NvdW50KSxhKz10aGlzLl9faXRlbXMuam9pbigiIikpLGF9O2Z1bmN0aW9uIG8oYSx1KXt0aGlzLl9fY2FjaGU9WyIiXSx0aGlzLl9faW5kZW50X3NpemU9YS5pbmRlbnRfc2l6ZSx0aGlzLl9faW5kZW50X3N0cmluZz1hLmluZGVudF9jaGFyLGEuaW5kZW50X3dpdGhfdGFic3x8KHRoaXMuX19pbmRlbnRfc3RyaW5nPW5ldyBBcnJheShhLmluZGVudF9zaXplKzEpLmpvaW4oYS5pbmRlbnRfY2hhcikpLHU9dXx8IiIsYS5pbmRlbnRfbGV2ZWw+MCYmKHU9bmV3IEFycmF5KGEuaW5kZW50X2xldmVsKzEpLmpvaW4odGhpcy5fX2luZGVudF9zdHJpbmcpKSx0aGlzLl9fYmFzZV9zdHJpbmc9dSx0aGlzLl9fYmFzZV9zdHJpbmdfbGVuZ3RoPXUubGVuZ3RofW8ucHJvdG90eXBlLmdldF9pbmRlbnRfc2l6ZT1mdW5jdGlvbihhLHUpe3ZhciBjPXRoaXMuX19iYXNlX3N0cmluZ19sZW5ndGg7cmV0dXJuIHU9dXx8MCxhPDAmJihjPTApLGMrPWEqdGhpcy5fX2luZGVudF9zaXplLGMrPXUsY30sby5wcm90b3R5cGUuZ2V0X2luZGVudF9zdHJpbmc9ZnVuY3Rpb24oYSx1KXt2YXIgYz10aGlzLl9fYmFzZV9zdHJpbmc7cmV0dXJuIHU9dXx8MCxhPDAmJihhPTAsYz0iIiksdSs9YSp0aGlzLl9faW5kZW50X3NpemUsdGhpcy5fX2Vuc3VyZV9jYWNoZSh1KSxjKz10aGlzLl9fY2FjaGVbdV0sY30sby5wcm90b3R5cGUuX19lbnN1cmVfY2FjaGU9ZnVuY3Rpb24oYSl7Zm9yKDthPj10aGlzLl9fY2FjaGUubGVuZ3RoOyl0aGlzLl9fYWRkX2NvbHVtbigpfSxvLnByb3RvdHlwZS5fX2FkZF9jb2x1bW49ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9fY2FjaGUubGVuZ3RoLHU9MCxjPSIiO3RoaXMuX19pbmRlbnRfc2l6ZSYmYT49dGhpcy5fX2luZGVudF9zaXplJiYodT1NYXRoLmZsb29yKGEvdGhpcy5fX2luZGVudF9zaXplKSxhLT11KnRoaXMuX19pbmRlbnRfc2l6ZSxjPW5ldyBBcnJheSh1KzEpLmpvaW4odGhpcy5fX2luZGVudF9zdHJpbmcpKSxhJiYoYys9bmV3IEFycmF5KGErMSkuam9pbigiICIpKSx0aGlzLl9fY2FjaGUucHVzaChjKX07ZnVuY3Rpb24gbChhLHUpe3RoaXMuX19pbmRlbnRfY2FjaGU9bmV3IG8oYSx1KSx0aGlzLnJhdz0hMSx0aGlzLl9lbmRfd2l0aF9uZXdsaW5lPWEuZW5kX3dpdGhfbmV3bGluZSx0aGlzLmluZGVudF9zaXplPWEuaW5kZW50X3NpemUsdGhpcy53cmFwX2xpbmVfbGVuZ3RoPWEud3JhcF9saW5lX2xlbmd0aCx0aGlzLmluZGVudF9lbXB0eV9saW5lcz1hLmluZGVudF9lbXB0eV9saW5lcyx0aGlzLl9fbGluZXM9W10sdGhpcy5wcmV2aW91c19saW5lPW51bGwsdGhpcy5jdXJyZW50X2xpbmU9bnVsbCx0aGlzLm5leHRfbGluZT1uZXcgcyh0aGlzKSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9ITEsdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCl9bC5wcm90b3R5cGUuX19hZGRfb3V0cHV0bGluZT1mdW5jdGlvbigpe3RoaXMucHJldmlvdXNfbGluZT10aGlzLmN1cnJlbnRfbGluZSx0aGlzLmN1cnJlbnRfbGluZT10aGlzLm5leHRfbGluZS5jbG9uZV9lbXB0eSgpLHRoaXMuX19saW5lcy5wdXNoKHRoaXMuY3VycmVudF9saW5lKX0sbC5wcm90b3R5cGUuZ2V0X2xpbmVfbnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19saW5lcy5sZW5ndGh9LGwucHJvdG90eXBlLmdldF9pbmRlbnRfc3RyaW5nPWZ1bmN0aW9uKGEsdSl7cmV0dXJuIHRoaXMuX19pbmRlbnRfY2FjaGUuZ2V0X2luZGVudF9zdHJpbmcoYSx1KX0sbC5wcm90b3R5cGUuZ2V0X2luZGVudF9zaXplPWZ1bmN0aW9uKGEsdSl7cmV0dXJuIHRoaXMuX19pbmRlbnRfY2FjaGUuZ2V0X2luZGVudF9zaXplKGEsdSl9LGwucHJvdG90eXBlLmlzX2VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucHJldmlvdXNfbGluZSYmdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKX0sbC5wcm90b3R5cGUuYWRkX25ld19saW5lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlzX2VtcHR5KCl8fCFhJiZ0aGlzLmp1c3RfYWRkZWRfbmV3bGluZSgpPyExOih0aGlzLnJhd3x8dGhpcy5fX2FkZF9vdXRwdXRsaW5lKCksITApfSxsLnByb3RvdHlwZS5nZXRfY29kZT1mdW5jdGlvbihhKXt0aGlzLnRyaW0oITApO3ZhciB1PXRoaXMuY3VycmVudF9saW5lLnBvcCgpO3UmJih1W3UubGVuZ3RoLTFdPT09YApgJiYodT11LnJlcGxhY2UoL1xuKyQvZywiIikpLHRoaXMuY3VycmVudF9saW5lLnB1c2godSkpLHRoaXMuX2VuZF93aXRoX25ld2xpbmUmJnRoaXMuX19hZGRfb3V0cHV0bGluZSgpO3ZhciBjPXRoaXMuX19saW5lcy5qb2luKGAKYCk7cmV0dXJuIGEhPT1gCmAmJihjPWMucmVwbGFjZSgvW1xuXS9nLGEpKSxjfSxsLnByb3RvdHlwZS5zZXRfd3JhcF9wb2ludD1mdW5jdGlvbigpe3RoaXMuY3VycmVudF9saW5lLl9zZXRfd3JhcF9wb2ludCgpfSxsLnByb3RvdHlwZS5zZXRfaW5kZW50PWZ1bmN0aW9uKGEsdSl7cmV0dXJuIGE9YXx8MCx1PXV8fDAsdGhpcy5uZXh0X2xpbmUuc2V0X2luZGVudChhLHUpLHRoaXMuX19saW5lcy5sZW5ndGg+MT8odGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudChhLHUpLCEwKToodGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudCgpLCExKX0sbC5wcm90b3R5cGUuYWRkX3Jhd190b2tlbj1mdW5jdGlvbihhKXtmb3IodmFyIHU9MDt1PGEubmV3bGluZXM7dSsrKXRoaXMuX19hZGRfb3V0cHV0bGluZSgpO3RoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQoLTEpLHRoaXMuY3VycmVudF9saW5lLnB1c2goYS53aGl0ZXNwYWNlX2JlZm9yZSksdGhpcy5jdXJyZW50X2xpbmUucHVzaChhLnRleHQpLHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuPSExLHRoaXMubm9uX2JyZWFraW5nX3NwYWNlPSExLHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZD0hMX0sbC5wcm90b3R5cGUuYWRkX3Rva2VuPWZ1bmN0aW9uKGEpe3RoaXMuX19hZGRfc3BhY2VfYmVmb3JlX3Rva2VuKCksdGhpcy5jdXJyZW50X2xpbmUucHVzaChhKSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9dGhpcy5jdXJyZW50X2xpbmUuX2FsbG93X3dyYXAoKX0sbC5wcm90b3R5cGUuX19hZGRfc3BhY2VfYmVmb3JlX3Rva2VuPWZ1bmN0aW9uKCl7dGhpcy5zcGFjZV9iZWZvcmVfdG9rZW4mJiF0aGlzLmp1c3RfYWRkZWRfbmV3bGluZSgpJiYodGhpcy5ub25fYnJlYWtpbmdfc3BhY2V8fHRoaXMuc2V0X3dyYXBfcG9pbnQoKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKCIgIikpfSxsLnByb3RvdHlwZS5yZW1vdmVfaW5kZW50PWZ1bmN0aW9uKGEpe2Zvcih2YXIgdT10aGlzLl9fbGluZXMubGVuZ3RoO2E8dTspdGhpcy5fX2xpbmVzW2FdLl9yZW1vdmVfaW5kZW50KCksYSsrO3RoaXMuY3VycmVudF9saW5lLl9yZW1vdmVfd3JhcF9pbmRlbnQoKX0sbC5wcm90b3R5cGUudHJpbT1mdW5jdGlvbihhKXtmb3IoYT1hPT09dm9pZCAwPyExOmEsdGhpcy5jdXJyZW50X2xpbmUudHJpbSgpO2EmJnRoaXMuX19saW5lcy5sZW5ndGg+MSYmdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKTspdGhpcy5fX2xpbmVzLnBvcCgpLHRoaXMuY3VycmVudF9saW5lPXRoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoLTFdLHRoaXMuY3VycmVudF9saW5lLnRyaW0oKTt0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5fX2xpbmVzLmxlbmd0aD4xP3RoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoLTJdOm51bGx9LGwucHJvdG90eXBlLmp1c3RfYWRkZWRfbmV3bGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpfSxsLnByb3RvdHlwZS5qdXN0X2FkZGVkX2JsYW5rbGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzX2VtcHR5KCl8fHRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCkmJnRoaXMucHJldmlvdXNfbGluZS5pc19lbXB0eSgpfSxsLnByb3RvdHlwZS5lbnN1cmVfZW1wdHlfbGluZV9hYm92ZT1mdW5jdGlvbihhLHUpe2Zvcih2YXIgYz10aGlzLl9fbGluZXMubGVuZ3RoLTI7Yz49MDspe3ZhciBkPXRoaXMuX19saW5lc1tjXTtpZihkLmlzX2VtcHR5KCkpYnJlYWs7aWYoZC5pdGVtKDApLmluZGV4T2YoYSkhPT0wJiZkLml0ZW0oLTEpIT09dSl7dGhpcy5fX2xpbmVzLnNwbGljZShjKzEsMCxuZXcgcyh0aGlzKSksdGhpcy5wcmV2aW91c19saW5lPXRoaXMuX19saW5lc1t0aGlzLl9fbGluZXMubGVuZ3RoLTJdO2JyZWFrfWMtLX19LHIuZXhwb3J0cy5PdXRwdXQ9bH0sLCwsZnVuY3Rpb24ocil7ZnVuY3Rpb24gcyhhLHUpe3RoaXMucmF3X29wdGlvbnM9byhhLHUpLHRoaXMuZGlzYWJsZWQ9dGhpcy5fZ2V0X2Jvb2xlYW4oImRpc2FibGVkIiksdGhpcy5lb2w9dGhpcy5fZ2V0X2NoYXJhY3RlcnMoImVvbCIsImF1dG8iKSx0aGlzLmVuZF93aXRoX25ld2xpbmU9dGhpcy5fZ2V0X2Jvb2xlYW4oImVuZF93aXRoX25ld2xpbmUiKSx0aGlzLmluZGVudF9zaXplPXRoaXMuX2dldF9udW1iZXIoImluZGVudF9zaXplIiw0KSx0aGlzLmluZGVudF9jaGFyPXRoaXMuX2dldF9jaGFyYWN0ZXJzKCJpbmRlbnRfY2hhciIsIiAiKSx0aGlzLmluZGVudF9sZXZlbD10aGlzLl9nZXRfbnVtYmVyKCJpbmRlbnRfbGV2ZWwiKSx0aGlzLnByZXNlcnZlX25ld2xpbmVzPXRoaXMuX2dldF9ib29sZWFuKCJwcmVzZXJ2ZV9uZXdsaW5lcyIsITApLHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzPXRoaXMuX2dldF9udW1iZXIoIm1heF9wcmVzZXJ2ZV9uZXdsaW5lcyIsMzI3ODYpLHRoaXMucHJlc2VydmVfbmV3bGluZXN8fCh0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcz0wKSx0aGlzLmluZGVudF93aXRoX3RhYnM9dGhpcy5fZ2V0X2Jvb2xlYW4oImluZGVudF93aXRoX3RhYnMiLHRoaXMuaW5kZW50X2NoYXI9PT0iCSIpLHRoaXMuaW5kZW50X3dpdGhfdGFicyYmKHRoaXMuaW5kZW50X2NoYXI9IgkiLHRoaXMuaW5kZW50X3NpemU9PT0xJiYodGhpcy5pbmRlbnRfc2l6ZT00KSksdGhpcy53cmFwX2xpbmVfbGVuZ3RoPXRoaXMuX2dldF9udW1iZXIoIndyYXBfbGluZV9sZW5ndGgiLHRoaXMuX2dldF9udW1iZXIoIm1heF9jaGFyIikpLHRoaXMuaW5kZW50X2VtcHR5X2xpbmVzPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfZW1wdHlfbGluZXMiKSx0aGlzLnRlbXBsYXRpbmc9dGhpcy5fZ2V0X3NlbGVjdGlvbl9saXN0KCJ0ZW1wbGF0aW5nIixbImF1dG8iLCJub25lIiwiYW5ndWxhciIsImRqYW5nbyIsImVyYiIsImhhbmRsZWJhcnMiLCJwaHAiLCJzbWFydHkiXSxbImF1dG8iXSl9cy5wcm90b3R5cGUuX2dldF9hcnJheT1mdW5jdGlvbihhLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbYV0sZD11fHxbXTtyZXR1cm4gdHlwZW9mIGM9PSJvYmplY3QiP2MhPT1udWxsJiZ0eXBlb2YgYy5jb25jYXQ9PSJmdW5jdGlvbiImJihkPWMuY29uY2F0KCkpOnR5cGVvZiBjPT0ic3RyaW5nIiYmKGQ9Yy5zcGxpdCgvW15hLXpBLVowLTlfXC9cLV0rLykpLGR9LHMucHJvdG90eXBlLl9nZXRfYm9vbGVhbj1mdW5jdGlvbihhLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbYV0sZD1jPT09dm9pZCAwPyEhdTohIWM7cmV0dXJuIGR9LHMucHJvdG90eXBlLl9nZXRfY2hhcmFjdGVycz1mdW5jdGlvbihhLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbYV0sZD11fHwiIjtyZXR1cm4gdHlwZW9mIGM9PSJzdHJpbmciJiYoZD1jLnJlcGxhY2UoL1xcci8sIlxyIikucmVwbGFjZSgvXFxuLyxgCmApLnJlcGxhY2UoL1xcdC8sIgkiKSksZH0scy5wcm90b3R5cGUuX2dldF9udW1iZXI9ZnVuY3Rpb24oYSx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW2FdO3U9cGFyc2VJbnQodSwxMCksaXNOYU4odSkmJih1PTApO3ZhciBkPXBhcnNlSW50KGMsMTApO3JldHVybiBpc05hTihkKSYmKGQ9dSksZH0scy5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb249ZnVuY3Rpb24oYSx1LGMpe3ZhciBkPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdChhLHUsYyk7aWYoZC5sZW5ndGghPT0xKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrYStgJyBjYW4gb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CmArdStgCllvdSBwYXNzZWQgaW46ICdgK3RoaXMucmF3X29wdGlvbnNbYV0rIiciKTtyZXR1cm4gZFswXX0scy5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb25fbGlzdD1mdW5jdGlvbihhLHUsYyl7aWYoIXV8fHUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdGlvbiBsaXN0IGNhbm5vdCBiZSBlbXB0eS4iKTtpZihjPWN8fFt1WzBdXSwhdGhpcy5faXNfdmFsaWRfc2VsZWN0aW9uKGMsdSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERlZmF1bHQgVmFsdWUhIik7dmFyIGQ9dGhpcy5fZ2V0X2FycmF5KGEsYyk7aWYoIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihkLHUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrYStgJyBjYW4gY29udGFpbiBvbmx5IHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpgK3UrYApZb3UgcGFzc2VkIGluOiAnYCt0aGlzLnJhd19vcHRpb25zW2FdKyInIik7cmV0dXJuIGR9LHMucHJvdG90eXBlLl9pc192YWxpZF9zZWxlY3Rpb249ZnVuY3Rpb24oYSx1KXtyZXR1cm4gYS5sZW5ndGgmJnUubGVuZ3RoJiYhYS5zb21lKGZ1bmN0aW9uKGMpe3JldHVybiB1LmluZGV4T2YoYyk9PT0tMX0pfTtmdW5jdGlvbiBvKGEsdSl7dmFyIGM9e307YT1sKGEpO3ZhciBkO2ZvcihkIGluIGEpZCE9PXUmJihjW2RdPWFbZF0pO2lmKHUmJmFbdV0pZm9yKGQgaW4gYVt1XSljW2RdPWFbdV1bZF07cmV0dXJuIGN9ZnVuY3Rpb24gbChhKXt2YXIgdT17fSxjO2ZvcihjIGluIGEpe3ZhciBkPWMucmVwbGFjZSgvLS9nLCJfIik7dVtkXT1hW2NdfXJldHVybiB1fXIuZXhwb3J0cy5PcHRpb25zPXMsci5leHBvcnRzLm5vcm1hbGl6ZU9wdHM9bCxyLmV4cG9ydHMubWVyZ2VPcHRzPW99LCxmdW5jdGlvbihyKXt2YXIgcz1SZWdFeHAucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzdGlja3kiKTtmdW5jdGlvbiBvKGwpe3RoaXMuX19pbnB1dD1sfHwiIix0aGlzLl9faW5wdXRfbGVuZ3RoPXRoaXMuX19pbnB1dC5sZW5ndGgsdGhpcy5fX3Bvc2l0aW9uPTB9by5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj0wfSxvLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fX3Bvc2l0aW9uPjAmJih0aGlzLl9fcG9zaXRpb24tPTEpfSxvLnByb3RvdHlwZS5oYXNOZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wb3NpdGlvbjx0aGlzLl9faW5wdXRfbGVuZ3RofSxvLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGw9bnVsbDtyZXR1cm4gdGhpcy5oYXNOZXh0KCkmJihsPXRoaXMuX19pbnB1dC5jaGFyQXQodGhpcy5fX3Bvc2l0aW9uKSx0aGlzLl9fcG9zaXRpb24rPTEpLGx9LG8ucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24obCl7dmFyIGE9bnVsbDtyZXR1cm4gbD1sfHwwLGwrPXRoaXMuX19wb3NpdGlvbixsPj0wJiZsPHRoaXMuX19pbnB1dF9sZW5ndGgmJihhPXRoaXMuX19pbnB1dC5jaGFyQXQobCkpLGF9LG8ucHJvdG90eXBlLl9fbWF0Y2g9ZnVuY3Rpb24obCxhKXtsLmxhc3RJbmRleD1hO3ZhciB1PWwuZXhlYyh0aGlzLl9faW5wdXQpO3JldHVybiB1JiYhKHMmJmwuc3RpY2t5KSYmdS5pbmRleCE9PWEmJih1PW51bGwpLHV9LG8ucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24obCxhKXtyZXR1cm4gYT1hfHwwLGErPXRoaXMuX19wb3NpdGlvbixhPj0wJiZhPHRoaXMuX19pbnB1dF9sZW5ndGg/ISF0aGlzLl9fbWF0Y2gobCxhKTohMX0sby5wcm90b3R5cGUudGVzdENoYXI9ZnVuY3Rpb24obCxhKXt2YXIgdT10aGlzLnBlZWsoYSk7cmV0dXJuIGwubGFzdEluZGV4PTAsdSE9PW51bGwmJmwudGVzdCh1KX0sby5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24obCl7dmFyIGE9dGhpcy5fX21hdGNoKGwsdGhpcy5fX3Bvc2l0aW9uKTtyZXR1cm4gYT90aGlzLl9fcG9zaXRpb24rPWFbMF0ubGVuZ3RoOmE9bnVsbCxhfSxvLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKGwsYSx1KXt2YXIgYz0iIixkO3JldHVybiBsJiYoZD10aGlzLm1hdGNoKGwpLGQmJihjKz1kWzBdKSksYSYmKGR8fCFsKSYmKGMrPXRoaXMucmVhZFVudGlsKGEsdSkpLGN9LG8ucHJvdG90eXBlLnJlYWRVbnRpbD1mdW5jdGlvbihsLGEpe3ZhciB1PSIiLGM9dGhpcy5fX3Bvc2l0aW9uO2wubGFzdEluZGV4PXRoaXMuX19wb3NpdGlvbjt2YXIgZD1sLmV4ZWModGhpcy5fX2lucHV0KTtyZXR1cm4gZD8oYz1kLmluZGV4LGEmJihjKz1kWzBdLmxlbmd0aCkpOmM9dGhpcy5fX2lucHV0X2xlbmd0aCx1PXRoaXMuX19pbnB1dC5zdWJzdHJpbmcodGhpcy5fX3Bvc2l0aW9uLGMpLHRoaXMuX19wb3NpdGlvbj1jLHV9LG8ucHJvdG90eXBlLnJlYWRVbnRpbEFmdGVyPWZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLnJlYWRVbnRpbChsLCEwKX0sby5wcm90b3R5cGUuZ2V0X3JlZ2V4cD1mdW5jdGlvbihsLGEpe3ZhciB1PW51bGwsYz0iZyI7cmV0dXJuIGEmJnMmJihjPSJ5IiksdHlwZW9mIGw9PSJzdHJpbmciJiZsIT09IiI/dT1uZXcgUmVnRXhwKGwsYyk6bCYmKHU9bmV3IFJlZ0V4cChsLnNvdXJjZSxjKSksdX0sby5wcm90b3R5cGUuZ2V0X2xpdGVyYWxfcmVnZXhwPWZ1bmN0aW9uKGwpe3JldHVybiBSZWdFeHAobC5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpKX0sby5wcm90b3R5cGUucGVla1VudGlsQWZ0ZXI9ZnVuY3Rpb24obCl7dmFyIGE9dGhpcy5fX3Bvc2l0aW9uLHU9dGhpcy5yZWFkVW50aWxBZnRlcihsKTtyZXR1cm4gdGhpcy5fX3Bvc2l0aW9uPWEsdX0sby5wcm90b3R5cGUubG9va0JhY2s9ZnVuY3Rpb24obCl7dmFyIGE9dGhpcy5fX3Bvc2l0aW9uLTE7cmV0dXJuIGE+PWwubGVuZ3RoJiZ0aGlzLl9faW5wdXQuc3Vic3RyaW5nKGEtbC5sZW5ndGgsYSkudG9Mb3dlckNhc2UoKT09PWx9LHIuZXhwb3J0cy5JbnB1dFNjYW5uZXI9b30sLCwsLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIHMobyxsKXtvPXR5cGVvZiBvPT0ic3RyaW5nIj9vOm8uc291cmNlLGw9dHlwZW9mIGw9PSJzdHJpbmciP2w6bC5zb3VyY2UsdGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybj1uZXcgUmVnRXhwKG8rLyBiZWF1dGlmeSggXHcrWzpdXHcrKSsgLy5zb3VyY2UrbCwiZyIpLHRoaXMuX19kaXJlY3RpdmVfcGF0dGVybj0vIChcdyspWzpdKFx3KykvZyx0aGlzLl9fZGlyZWN0aXZlc19lbmRfaWdub3JlX3BhdHRlcm49bmV3IFJlZ0V4cChvKy9cc2JlYXV0aWZ5XHNpZ25vcmU6ZW5kXHMvLnNvdXJjZStsLCJnIil9cy5wcm90b3R5cGUuZ2V0X2RpcmVjdGl2ZXM9ZnVuY3Rpb24obyl7aWYoIW8ubWF0Y2godGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybikpcmV0dXJuIG51bGw7dmFyIGw9e307dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmxhc3RJbmRleD0wO2Zvcih2YXIgYT10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhvKTthOylsW2FbMV1dPWFbMl0sYT10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhvKTtyZXR1cm4gbH0scy5wcm90b3R5cGUucmVhZElnbm9yZWQ9ZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVhZFVudGlsQWZ0ZXIodGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuKX0sci5leHBvcnRzLkRpcmVjdGl2ZXM9c30sLGZ1bmN0aW9uKHIscyxvKXt2YXIgbD1vKDE2KS5CZWF1dGlmaWVyLGE9bygxNykuT3B0aW9ucztmdW5jdGlvbiB1KGMsZCl7dmFyIG09bmV3IGwoYyxkKTtyZXR1cm4gbS5iZWF1dGlmeSgpfXIuZXhwb3J0cz11LHIuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBuZXcgYX19LGZ1bmN0aW9uKHIscyxvKXt2YXIgbD1vKDE3KS5PcHRpb25zLGE9bygyKS5PdXRwdXQsdT1vKDgpLklucHV0U2Nhbm5lcixjPW8oMTMpLkRpcmVjdGl2ZXMsZD1uZXcgYygvXC9cKi8sL1wqXC8vKSxtPS9cclxufFtcclxuXS8sZj0vXHJcbnxbXHJcbl0vZyxfPS9ccy8sZz0vKD86XHN8XG4pKy9nLEE9L1wvXCooPzpbXHNcU10qPykoKD86XCpcLyl8JCkvZyx2PS9cL1wvKD86W15cblxyXHUyMDI4XHUyMDI5XSopL2c7ZnVuY3Rpb24geShFLFIpe3RoaXMuX3NvdXJjZV90ZXh0PUV8fCIiLHRoaXMuX29wdGlvbnM9bmV3IGwoUiksdGhpcy5fY2g9bnVsbCx0aGlzLl9pbnB1dD1udWxsLHRoaXMuTkVTVEVEX0FUX1JVTEU9e3BhZ2U6ITAsImZvbnQtZmFjZSI6ITAsa2V5ZnJhbWVzOiEwLG1lZGlhOiEwLHN1cHBvcnRzOiEwLGRvY3VtZW50OiEwfSx0aGlzLkNPTkRJVElPTkFMX0dST1VQX1JVTEU9e21lZGlhOiEwLHN1cHBvcnRzOiEwLGRvY3VtZW50OiEwfSx0aGlzLk5PTl9TRU1JQ09MT05fTkVXTElORV9QUk9QRVJUWT1bImdyaWQtdGVtcGxhdGUtYXJlYXMiLCJncmlkLXRlbXBsYXRlIl19eS5wcm90b3R5cGUuZWF0U3RyaW5nPWZ1bmN0aW9uKEUpe3ZhciBSPSIiO2Zvcih0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCk7dGhpcy5fY2g7KXtpZihSKz10aGlzLl9jaCx0aGlzLl9jaD09PSJcXCIpUis9dGhpcy5faW5wdXQubmV4dCgpO2Vsc2UgaWYoRS5pbmRleE9mKHRoaXMuX2NoKSE9PS0xfHx0aGlzLl9jaD09PWAKYClicmVhazt0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCl9cmV0dXJuIFJ9LHkucHJvdG90eXBlLmVhdFdoaXRlc3BhY2U9ZnVuY3Rpb24oRSl7Zm9yKHZhciBSPV8udGVzdCh0aGlzLl9pbnB1dC5wZWVrKCkpLE49MDtfLnRlc3QodGhpcy5faW5wdXQucGVlaygpKTspdGhpcy5fY2g9dGhpcy5faW5wdXQubmV4dCgpLEUmJnRoaXMuX2NoPT09YApgJiYoTj09PTB8fE48dGhpcy5fb3B0aW9ucy5tYXhfcHJlc2VydmVfbmV3bGluZXMpJiYoTisrLHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoITApKTtyZXR1cm4gUn0seS5wcm90b3R5cGUuZm91bmROZXN0ZWRQc2V1ZG9DbGFzcz1mdW5jdGlvbigpe2Zvcih2YXIgRT0wLFI9MSxOPXRoaXMuX2lucHV0LnBlZWsoUik7Tjspe2lmKE49PT0ieyIpcmV0dXJuITA7aWYoTj09PSIoIilFKz0xO2Vsc2UgaWYoTj09PSIpIil7aWYoRT09PTApcmV0dXJuITE7RS09MX1lbHNlIGlmKE49PT0iOyJ8fE49PT0ifSIpcmV0dXJuITE7UisrLE49dGhpcy5faW5wdXQucGVlayhSKX1yZXR1cm4hMX0seS5wcm90b3R5cGUucHJpbnRfc3RyaW5nPWZ1bmN0aW9uKEUpe3RoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuX2luZGVudExldmVsKSx0aGlzLl9vdXRwdXQubm9uX2JyZWFraW5nX3NwYWNlPSEwLHRoaXMuX291dHB1dC5hZGRfdG9rZW4oRSl9LHkucHJvdG90eXBlLnByZXNlcnZlU2luZ2xlU3BhY2U9ZnVuY3Rpb24oRSl7RSYmKHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApfSx5LnByb3RvdHlwZS5pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9pbmRlbnRMZXZlbCsrfSx5LnByb3RvdHlwZS5vdXRkZW50PWZ1bmN0aW9uKCl7dGhpcy5faW5kZW50TGV2ZWw+MCYmdGhpcy5faW5kZW50TGV2ZWwtLX0seS5wcm90b3R5cGUuYmVhdXRpZnk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vcHRpb25zLmRpc2FibGVkKXJldHVybiB0aGlzLl9zb3VyY2VfdGV4dDt2YXIgRT10aGlzLl9zb3VyY2VfdGV4dCxSPXRoaXMuX29wdGlvbnMuZW9sO1I9PT0iYXV0byImJihSPWAKYCxFJiZtLnRlc3QoRXx8IiIpJiYoUj1FLm1hdGNoKG0pWzBdKSksRT1FLnJlcGxhY2UoZixgCmApO3ZhciBOPUUubWF0Y2goL15bXHQgXSovKVswXTt0aGlzLl9vdXRwdXQ9bmV3IGEodGhpcy5fb3B0aW9ucyxOKSx0aGlzLl9pbnB1dD1uZXcgdShFKSx0aGlzLl9pbmRlbnRMZXZlbD0wLHRoaXMuX25lc3RlZExldmVsPTAsdGhpcy5fY2g9bnVsbDtmb3IodmFyIE09MCxiPSExLHA9ITEsVD0hMSxIPSExLEw9ITEsdz10aGlzLl9jaCxrPSExLHgsUyxEO3g9dGhpcy5faW5wdXQucmVhZChnKSxTPXghPT0iIixEPXcsdGhpcy5fY2g9dGhpcy5faW5wdXQubmV4dCgpLHRoaXMuX2NoPT09IlxcIiYmdGhpcy5faW5wdXQuaGFzTmV4dCgpJiYodGhpcy5fY2grPXRoaXMuX2lucHV0Lm5leHQoKSksdz10aGlzLl9jaCx0aGlzLl9jaDspaWYodGhpcy5fY2g9PT0iLyImJnRoaXMuX2lucHV0LnBlZWsoKT09PSIqIil7dGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpLHRoaXMuX2lucHV0LmJhY2soKTt2YXIgST10aGlzLl9pbnB1dC5yZWFkKEEpLEY9ZC5nZXRfZGlyZWN0aXZlcyhJKTtGJiZGLmlnbm9yZT09PSJzdGFydCImJihJKz1kLnJlYWRJZ25vcmVkKHRoaXMuX2lucHV0KSksdGhpcy5wcmludF9zdHJpbmcoSSksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCl9ZWxzZSBpZih0aGlzLl9jaD09PSIvIiYmdGhpcy5faW5wdXQucGVlaygpPT09Ii8iKXRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITAsdGhpcy5faW5wdXQuYmFjaygpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2lucHV0LnJlYWQodikpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCk7ZWxzZSBpZih0aGlzLl9jaD09PSIkIil7dGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKFMpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTt2YXIgVz10aGlzLl9pbnB1dC5wZWVrVW50aWxBZnRlcigvWzogLDt7fSgpW1xdXC89JyJdL2cpO1cubWF0Y2goL1sgOl0kLykmJihXPXRoaXMuZWF0U3RyaW5nKCI6ICIpLnJlcGxhY2UoL1xzKyQvLCIiKSx0aGlzLnByaW50X3N0cmluZyhXKSx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwKSxNPT09MCYmVy5pbmRleE9mKCI6IikhPT0tMSYmKHA9ITAsdGhpcy5pbmRlbnQoKSl9ZWxzZSBpZih0aGlzLl9jaD09PSJAIilpZih0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoUyksdGhpcy5faW5wdXQucGVlaygpPT09InsiKXRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoK3RoaXMuZWF0U3RyaW5nKCJ9IikpO2Vsc2V7dGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO3ZhciBVPXRoaXMuX2lucHV0LnBlZWtVbnRpbEFmdGVyKC9bOiAsO3t9KClbXF1cLz0nIl0vZyk7VS5tYXRjaCgvWyA6XSQvKSYmKFU9dGhpcy5lYXRTdHJpbmcoIjogIikucmVwbGFjZSgvXHMrJC8sIiIpLHRoaXMucHJpbnRfc3RyaW5nKFUpLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApLE09PT0wJiZVLmluZGV4T2YoIjoiKSE9PS0xPyhwPSEwLHRoaXMuaW5kZW50KCkpOlUgaW4gdGhpcy5ORVNURURfQVRfUlVMRT8odGhpcy5fbmVzdGVkTGV2ZWwrPTEsVSBpbiB0aGlzLkNPTkRJVElPTkFMX0dST1VQX1JVTEUmJihUPSEwKSk6TT09PTAmJiFwJiYoSD0hMCl9ZWxzZSBpZih0aGlzLl9jaD09PSIjIiYmdGhpcy5faW5wdXQucGVlaygpPT09InsiKXRoaXMucHJlc2VydmVTaW5nbGVTcGFjZShTKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCt0aGlzLmVhdFN0cmluZygifSIpKTtlbHNlIGlmKHRoaXMuX2NoPT09InsiKXAmJihwPSExLHRoaXMub3V0ZGVudCgpKSxIPSExLFQ/KFQ9ITEsYj10aGlzLl9pbmRlbnRMZXZlbD49dGhpcy5fbmVzdGVkTGV2ZWwpOmI9dGhpcy5faW5kZW50TGV2ZWw+PXRoaXMuX25lc3RlZExldmVsLTEsdGhpcy5fb3B0aW9ucy5uZXdsaW5lX2JldHdlZW5fcnVsZXMmJmImJnRoaXMuX291dHB1dC5wcmV2aW91c19saW5lJiZ0aGlzLl9vdXRwdXQucHJldmlvdXNfbGluZS5pdGVtKC0xKSE9PSJ7IiYmdGhpcy5fb3V0cHV0LmVuc3VyZV9lbXB0eV9saW5lX2Fib3ZlKCIvIiwiLCIpLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITAsdGhpcy5fb3B0aW9ucy5icmFjZV9zdHlsZT09PSJleHBhbmQiPyh0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuaW5kZW50KCksdGhpcy5fb3V0cHV0LnNldF9pbmRlbnQodGhpcy5faW5kZW50TGV2ZWwpKTooRD09PSIoIj90aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSExOkQhPT0iLCImJnRoaXMuaW5kZW50KCksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpKSx0aGlzLmVhdFdoaXRlc3BhY2UoITApLHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKTtlbHNlIGlmKHRoaXMuX2NoPT09In0iKXRoaXMub3V0ZGVudCgpLHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSxEPT09InsiJiZ0aGlzLl9vdXRwdXQudHJpbSghMCkscCYmKHRoaXMub3V0ZGVudCgpLHA9ITEpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSxiPSExLHRoaXMuX25lc3RlZExldmVsJiZ0aGlzLl9uZXN0ZWRMZXZlbC0tLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpLHRoaXMuX29wdGlvbnMubmV3bGluZV9iZXR3ZWVuX3J1bGVzJiYhdGhpcy5fb3V0cHV0Lmp1c3RfYWRkZWRfYmxhbmtsaW5lKCkmJnRoaXMuX2lucHV0LnBlZWsoKSE9PSJ9IiYmdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSghMCksdGhpcy5faW5wdXQucGVlaygpPT09IikiJiYodGhpcy5fb3V0cHV0LnRyaW0oITApLHRoaXMuX29wdGlvbnMuYnJhY2Vfc3R5bGU9PT0iZXhwYW5kIiYmdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSghMCkpO2Vsc2UgaWYodGhpcy5fY2g9PT0iOiIpe2Zvcih2YXIgVj0wO1Y8dGhpcy5OT05fU0VNSUNPTE9OX05FV0xJTkVfUFJPUEVSVFkubGVuZ3RoO1YrKylpZih0aGlzLl9pbnB1dC5sb29rQmFjayh0aGlzLk5PTl9TRU1JQ09MT05fTkVXTElORV9QUk9QRVJUWVtWXSkpe2s9ITA7YnJlYWt9KGJ8fFQpJiYhKHRoaXMuX2lucHV0Lmxvb2tCYWNrKCImIil8fHRoaXMuZm91bmROZXN0ZWRQc2V1ZG9DbGFzcygpKSYmIXRoaXMuX2lucHV0Lmxvb2tCYWNrKCIoIikmJiFIJiZNPT09MD8odGhpcy5wcmludF9zdHJpbmcoIjoiKSxwfHwocD0hMCx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5pbmRlbnQoKSkpOih0aGlzLl9pbnB1dC5sb29rQmFjaygiICIpJiYodGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCksdGhpcy5faW5wdXQucGVlaygpPT09IjoiPyh0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCksdGhpcy5wcmludF9zdHJpbmcoIjo6IikpOnRoaXMucHJpbnRfc3RyaW5nKCI6IikpfWVsc2UgaWYodGhpcy5fY2g9PT0nIid8fHRoaXMuX2NoPT09IiciKXt2YXIgWT1EPT09JyInfHxEPT09IiciO3RoaXMucHJlc2VydmVTaW5nbGVTcGFjZShZfHxTKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCt0aGlzLmVhdFN0cmluZyh0aGlzLl9jaCkpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCl9ZWxzZSBpZih0aGlzLl9jaD09PSI7IilrPSExLE09PT0wPyhwJiYodGhpcy5vdXRkZW50KCkscD0hMSksSD0hMSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9pbnB1dC5wZWVrKCkhPT0iLyImJnRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSk6KHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSx0aGlzLmVhdFdoaXRlc3BhY2UoITApLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApO2Vsc2UgaWYodGhpcy5fY2g9PT0iKCIpaWYodGhpcy5faW5wdXQubG9va0JhY2soInVybCIpKXRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSx0aGlzLmVhdFdoaXRlc3BhY2UoKSxNKyssdGhpcy5pbmRlbnQoKSx0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCksdGhpcy5fY2g9PT0iKSJ8fHRoaXMuX2NoPT09JyInfHx0aGlzLl9jaD09PSInIj90aGlzLl9pbnB1dC5iYWNrKCk6dGhpcy5fY2gmJih0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCt0aGlzLmVhdFN0cmluZygiKSIpKSxNJiYoTS0tLHRoaXMub3V0ZGVudCgpKSk7ZWxzZXt2YXIgc2U9ITE7dGhpcy5faW5wdXQubG9va0JhY2soIndpdGgiKSYmKHNlPSEwKSx0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoU3x8c2UpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSxwJiZEPT09IiQiJiZ0aGlzLl9vcHRpb25zLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lPyh0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCksTD0hMCk6KHRoaXMuZWF0V2hpdGVzcGFjZSgpLE0rKyx0aGlzLmluZGVudCgpKX1lbHNlIGlmKHRoaXMuX2NoPT09IikiKU0mJihNLS0sdGhpcy5vdXRkZW50KCkpLEwmJnRoaXMuX2lucHV0LnBlZWsoKT09PSI7IiYmdGhpcy5fb3B0aW9ucy5zZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZSYmKEw9ITEsdGhpcy5vdXRkZW50KCksdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7ZWxzZSBpZih0aGlzLl9jaD09PSIsIil0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vcHRpb25zLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lJiYoIXB8fEwpJiZNPT09MCYmIUg/dGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpOnRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITA7ZWxzZSBpZigodGhpcy5fY2g9PT0iPiJ8fHRoaXMuX2NoPT09IisifHx0aGlzLl9jaD09PSJ+IikmJiFwJiZNPT09MCl0aGlzLl9vcHRpb25zLnNwYWNlX2Fyb3VuZF9jb21iaW5hdG9yPyh0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwKToodGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSgpLHRoaXMuX2NoJiZfLnRlc3QodGhpcy5fY2gpJiYodGhpcy5fY2g9IiIpKTtlbHNlIGlmKHRoaXMuX2NoPT09Il0iKXRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTtlbHNlIGlmKHRoaXMuX2NoPT09IlsiKXRoaXMucHJlc2VydmVTaW5nbGVTcGFjZShTKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCk7ZWxzZSBpZih0aGlzLl9jaD09PSI9Iil0aGlzLmVhdFdoaXRlc3BhY2UoKSx0aGlzLnByaW50X3N0cmluZygiPSIpLF8udGVzdCh0aGlzLl9jaCkmJih0aGlzLl9jaD0iIik7ZWxzZSBpZih0aGlzLl9jaD09PSIhIiYmIXRoaXMuX2lucHV0Lmxvb2tCYWNrKCJcXCIpKXRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITAsdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpO2Vsc2V7dmFyIEdlPUQ9PT0nIid8fEQ9PT0iJyI7dGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKEdlfHxTKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksIXRoaXMuX291dHB1dC5qdXN0X2FkZGVkX25ld2xpbmUoKSYmdGhpcy5faW5wdXQucGVlaygpPT09YApgJiZrJiZ0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCl9dmFyIHd0PXRoaXMuX291dHB1dC5nZXRfY29kZShSKTtyZXR1cm4gd3R9LHIuZXhwb3J0cy5CZWF1dGlmaWVyPXl9LGZ1bmN0aW9uKHIscyxvKXt2YXIgbD1vKDYpLk9wdGlvbnM7ZnVuY3Rpb24gYSh1KXtsLmNhbGwodGhpcyx1LCJjc3MiKSx0aGlzLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJzZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZSIsITApLHRoaXMubmV3bGluZV9iZXR3ZWVuX3J1bGVzPXRoaXMuX2dldF9ib29sZWFuKCJuZXdsaW5lX2JldHdlZW5fcnVsZXMiLCEwKTt2YXIgYz10aGlzLl9nZXRfYm9vbGVhbigic3BhY2VfYXJvdW5kX3NlbGVjdG9yX3NlcGFyYXRvciIpO3RoaXMuc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3I9dGhpcy5fZ2V0X2Jvb2xlYW4oInNwYWNlX2Fyb3VuZF9jb21iaW5hdG9yIil8fGM7dmFyIGQ9dGhpcy5fZ2V0X3NlbGVjdGlvbl9saXN0KCJicmFjZV9zdHlsZSIsWyJjb2xsYXBzZSIsImV4cGFuZCIsImVuZC1leHBhbmQiLCJub25lIiwicHJlc2VydmUtaW5saW5lIl0pO3RoaXMuYnJhY2Vfc3R5bGU9ImNvbGxhcHNlIjtmb3IodmFyIG09MDttPGQubGVuZ3RoO20rKylkW21dIT09ImV4cGFuZCI/dGhpcy5icmFjZV9zdHlsZT0iY29sbGFwc2UiOnRoaXMuYnJhY2Vfc3R5bGU9ZFttXX1hLnByb3RvdHlwZT1uZXcgbCxyLmV4cG9ydHMuT3B0aW9ucz1hfV0sdD17fTtmdW5jdGlvbiBuKHIpe3ZhciBzPXRbcl07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBvPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKG8sby5leHBvcnRzLG4pLG8uZXhwb3J0c312YXIgaT1uKDE1KTtCYT1pfSkoKTt2YXIgaGM9QmEscWE7KGZ1bmN0aW9uKCl7dmFyIGU9WywsZnVuY3Rpb24ocil7ZnVuY3Rpb24gcyhhKXt0aGlzLl9fcGFyZW50PWEsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD0wLHRoaXMuX19pbmRlbnRfY291bnQ9LTEsdGhpcy5fX2FsaWdubWVudF9jb3VudD0wLHRoaXMuX193cmFwX3BvaW50X2luZGV4PTAsdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50PTAsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50PS0xLHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudD0wLHRoaXMuX19pdGVtcz1bXX1zLnByb3RvdHlwZS5jbG9uZV9lbXB0eT1mdW5jdGlvbigpe3ZhciBhPW5ldyBzKHRoaXMuX19wYXJlbnQpO3JldHVybiBhLnNldF9pbmRlbnQodGhpcy5fX2luZGVudF9jb3VudCx0aGlzLl9fYWxpZ25tZW50X2NvdW50KSxhfSxzLnByb3RvdHlwZS5pdGVtPWZ1bmN0aW9uKGEpe3JldHVybiBhPDA/dGhpcy5fX2l0ZW1zW3RoaXMuX19pdGVtcy5sZW5ndGgrYV06dGhpcy5fX2l0ZW1zW2FdfSxzLnByb3RvdHlwZS5oYXNfbWF0Y2g9ZnVuY3Rpb24oYSl7Zm9yKHZhciB1PXRoaXMuX19pdGVtcy5sZW5ndGgtMTt1Pj0wO3UtLSlpZih0aGlzLl9faXRlbXNbdV0ubWF0Y2goYSkpcmV0dXJuITA7cmV0dXJuITF9LHMucHJvdG90eXBlLnNldF9pbmRlbnQ9ZnVuY3Rpb24oYSx1KXt0aGlzLmlzX2VtcHR5KCkmJih0aGlzLl9faW5kZW50X2NvdW50PWF8fDAsdGhpcy5fX2FsaWdubWVudF9jb3VudD11fHwwLHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9dGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3NpemUodGhpcy5fX2luZGVudF9jb3VudCx0aGlzLl9fYWxpZ25tZW50X2NvdW50KSl9LHMucHJvdG90eXBlLl9zZXRfd3JhcF9wb2ludD1mdW5jdGlvbigpe3RoaXMuX19wYXJlbnQud3JhcF9saW5lX2xlbmd0aCYmKHRoaXMuX193cmFwX3BvaW50X2luZGV4PXRoaXMuX19pdGVtcy5sZW5ndGgsdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50PXRoaXMuX19jaGFyYWN0ZXJfY291bnQsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50PXRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9faW5kZW50X2NvdW50LHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudD10aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2FsaWdubWVudF9jb3VudCl9LHMucHJvdG90eXBlLl9zaG91bGRfd3JhcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fd3JhcF9wb2ludF9pbmRleCYmdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD50aGlzLl9fcGFyZW50LndyYXBfbGluZV9sZW5ndGgmJnRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD50aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2NoYXJhY3Rlcl9jb3VudH0scy5wcm90b3R5cGUuX2FsbG93X3dyYXA9ZnVuY3Rpb24oKXtpZih0aGlzLl9zaG91bGRfd3JhcCgpKXt0aGlzLl9fcGFyZW50LmFkZF9uZXdfbGluZSgpO3ZhciBhPXRoaXMuX19wYXJlbnQuY3VycmVudF9saW5lO3JldHVybiBhLnNldF9pbmRlbnQodGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50LHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudCksYS5fX2l0ZW1zPXRoaXMuX19pdGVtcy5zbGljZSh0aGlzLl9fd3JhcF9wb2ludF9pbmRleCksdGhpcy5fX2l0ZW1zPXRoaXMuX19pdGVtcy5zbGljZSgwLHRoaXMuX193cmFwX3BvaW50X2luZGV4KSxhLl9fY2hhcmFjdGVyX2NvdW50Kz10aGlzLl9fY2hhcmFjdGVyX2NvdW50LXRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudCx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PXRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudCxhLl9faXRlbXNbMF09PT0iICImJihhLl9faXRlbXMuc3BsaWNlKDAsMSksYS5fX2NoYXJhY3Rlcl9jb3VudC09MSksITB9cmV0dXJuITF9LHMucHJvdG90eXBlLmlzX2VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pdGVtcy5sZW5ndGg9PT0wfSxzLnByb3RvdHlwZS5sYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKT9udWxsOnRoaXMuX19pdGVtc1t0aGlzLl9faXRlbXMubGVuZ3RoLTFdfSxzLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGEpe3RoaXMuX19pdGVtcy5wdXNoKGEpO3ZhciB1PWEubGFzdEluZGV4T2YoYApgKTt1IT09LTE/dGhpcy5fX2NoYXJhY3Rlcl9jb3VudD1hLmxlbmd0aC11OnRoaXMuX19jaGFyYWN0ZXJfY291bnQrPWEubGVuZ3RofSxzLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt2YXIgYT1udWxsO3JldHVybiB0aGlzLmlzX2VtcHR5KCl8fChhPXRoaXMuX19pdGVtcy5wb3AoKSx0aGlzLl9fY2hhcmFjdGVyX2NvdW50LT1hLmxlbmd0aCksYX0scy5wcm90b3R5cGUuX3JlbW92ZV9pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9faW5kZW50X2NvdW50PjAmJih0aGlzLl9faW5kZW50X2NvdW50LT0xLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPXRoaXMuX19wYXJlbnQuaW5kZW50X3NpemUpfSxzLnByb3RvdHlwZS5fcmVtb3ZlX3dyYXBfaW5kZW50PWZ1bmN0aW9uKCl7dGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50PjAmJih0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQtPTEpfSxzLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxhc3QoKT09PSIgIjspdGhpcy5fX2l0ZW1zLnBvcCgpLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPTF9LHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9IiI7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKT90aGlzLl9fcGFyZW50LmluZGVudF9lbXB0eV9saW5lcyYmKGE9dGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3N0cmluZyh0aGlzLl9faW5kZW50X2NvdW50KSk6KGE9dGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3N0cmluZyh0aGlzLl9faW5kZW50X2NvdW50LHRoaXMuX19hbGlnbm1lbnRfY291bnQpLGErPXRoaXMuX19pdGVtcy5qb2luKCIiKSksYX07ZnVuY3Rpb24gbyhhLHUpe3RoaXMuX19jYWNoZT1bIiJdLHRoaXMuX19pbmRlbnRfc2l6ZT1hLmluZGVudF9zaXplLHRoaXMuX19pbmRlbnRfc3RyaW5nPWEuaW5kZW50X2NoYXIsYS5pbmRlbnRfd2l0aF90YWJzfHwodGhpcy5fX2luZGVudF9zdHJpbmc9bmV3IEFycmF5KGEuaW5kZW50X3NpemUrMSkuam9pbihhLmluZGVudF9jaGFyKSksdT11fHwiIixhLmluZGVudF9sZXZlbD4wJiYodT1uZXcgQXJyYXkoYS5pbmRlbnRfbGV2ZWwrMSkuam9pbih0aGlzLl9faW5kZW50X3N0cmluZykpLHRoaXMuX19iYXNlX3N0cmluZz11LHRoaXMuX19iYXNlX3N0cmluZ19sZW5ndGg9dS5sZW5ndGh9by5wcm90b3R5cGUuZ2V0X2luZGVudF9zaXplPWZ1bmN0aW9uKGEsdSl7dmFyIGM9dGhpcy5fX2Jhc2Vfc3RyaW5nX2xlbmd0aDtyZXR1cm4gdT11fHwwLGE8MCYmKGM9MCksYys9YSp0aGlzLl9faW5kZW50X3NpemUsYys9dSxjfSxvLnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZz1mdW5jdGlvbihhLHUpe3ZhciBjPXRoaXMuX19iYXNlX3N0cmluZztyZXR1cm4gdT11fHwwLGE8MCYmKGE9MCxjPSIiKSx1Kz1hKnRoaXMuX19pbmRlbnRfc2l6ZSx0aGlzLl9fZW5zdXJlX2NhY2hlKHUpLGMrPXRoaXMuX19jYWNoZVt1XSxjfSxvLnByb3RvdHlwZS5fX2Vuc3VyZV9jYWNoZT1mdW5jdGlvbihhKXtmb3IoO2E+PXRoaXMuX19jYWNoZS5sZW5ndGg7KXRoaXMuX19hZGRfY29sdW1uKCl9LG8ucHJvdG90eXBlLl9fYWRkX2NvbHVtbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX19jYWNoZS5sZW5ndGgsdT0wLGM9IiI7dGhpcy5fX2luZGVudF9zaXplJiZhPj10aGlzLl9faW5kZW50X3NpemUmJih1PU1hdGguZmxvb3IoYS90aGlzLl9faW5kZW50X3NpemUpLGEtPXUqdGhpcy5fX2luZGVudF9zaXplLGM9bmV3IEFycmF5KHUrMSkuam9pbih0aGlzLl9faW5kZW50X3N0cmluZykpLGEmJihjKz1uZXcgQXJyYXkoYSsxKS5qb2luKCIgIikpLHRoaXMuX19jYWNoZS5wdXNoKGMpfTtmdW5jdGlvbiBsKGEsdSl7dGhpcy5fX2luZGVudF9jYWNoZT1uZXcgbyhhLHUpLHRoaXMucmF3PSExLHRoaXMuX2VuZF93aXRoX25ld2xpbmU9YS5lbmRfd2l0aF9uZXdsaW5lLHRoaXMuaW5kZW50X3NpemU9YS5pbmRlbnRfc2l6ZSx0aGlzLndyYXBfbGluZV9sZW5ndGg9YS53cmFwX2xpbmVfbGVuZ3RoLHRoaXMuaW5kZW50X2VtcHR5X2xpbmVzPWEuaW5kZW50X2VtcHR5X2xpbmVzLHRoaXMuX19saW5lcz1bXSx0aGlzLnByZXZpb3VzX2xpbmU9bnVsbCx0aGlzLmN1cnJlbnRfbGluZT1udWxsLHRoaXMubmV4dF9saW5lPW5ldyBzKHRoaXMpLHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuPSExLHRoaXMubm9uX2JyZWFraW5nX3NwYWNlPSExLHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZD0hMSx0aGlzLl9fYWRkX291dHB1dGxpbmUoKX1sLnByb3RvdHlwZS5fX2FkZF9vdXRwdXRsaW5lPWZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91c19saW5lPXRoaXMuY3VycmVudF9saW5lLHRoaXMuY3VycmVudF9saW5lPXRoaXMubmV4dF9saW5lLmNsb25lX2VtcHR5KCksdGhpcy5fX2xpbmVzLnB1c2godGhpcy5jdXJyZW50X2xpbmUpfSxsLnByb3RvdHlwZS5nZXRfbGluZV9udW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2xpbmVzLmxlbmd0aH0sbC5wcm90b3R5cGUuZ2V0X2luZGVudF9zdHJpbmc9ZnVuY3Rpb24oYSx1KXtyZXR1cm4gdGhpcy5fX2luZGVudF9jYWNoZS5nZXRfaW5kZW50X3N0cmluZyhhLHUpfSxsLnByb3RvdHlwZS5nZXRfaW5kZW50X3NpemU9ZnVuY3Rpb24oYSx1KXtyZXR1cm4gdGhpcy5fX2luZGVudF9jYWNoZS5nZXRfaW5kZW50X3NpemUoYSx1KX0sbC5wcm90b3R5cGUuaXNfZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wcmV2aW91c19saW5lJiZ0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpfSxsLnByb3RvdHlwZS5hZGRfbmV3X2xpbmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8IWEmJnRoaXMuanVzdF9hZGRlZF9uZXdsaW5lKCk/ITE6KHRoaXMucmF3fHx0aGlzLl9fYWRkX291dHB1dGxpbmUoKSwhMCl9LGwucHJvdG90eXBlLmdldF9jb2RlPWZ1bmN0aW9uKGEpe3RoaXMudHJpbSghMCk7dmFyIHU9dGhpcy5jdXJyZW50X2xpbmUucG9wKCk7dSYmKHVbdS5sZW5ndGgtMV09PT1gCmAmJih1PXUucmVwbGFjZSgvXG4rJC9nLCIiKSksdGhpcy5jdXJyZW50X2xpbmUucHVzaCh1KSksdGhpcy5fZW5kX3dpdGhfbmV3bGluZSYmdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7dmFyIGM9dGhpcy5fX2xpbmVzLmpvaW4oYApgKTtyZXR1cm4gYSE9PWAKYCYmKGM9Yy5yZXBsYWNlKC9bXG5dL2csYSkpLGN9LGwucHJvdG90eXBlLnNldF93cmFwX3BvaW50PWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50X2xpbmUuX3NldF93cmFwX3BvaW50KCl9LGwucHJvdG90eXBlLnNldF9pbmRlbnQ9ZnVuY3Rpb24oYSx1KXtyZXR1cm4gYT1hfHwwLHU9dXx8MCx0aGlzLm5leHRfbGluZS5zZXRfaW5kZW50KGEsdSksdGhpcy5fX2xpbmVzLmxlbmd0aD4xPyh0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KGEsdSksITApOih0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KCksITEpfSxsLnByb3RvdHlwZS5hZGRfcmF3X3Rva2VuPWZ1bmN0aW9uKGEpe2Zvcih2YXIgdT0wO3U8YS5uZXdsaW5lczt1KyspdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7dGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudCgtMSksdGhpcy5jdXJyZW50X2xpbmUucHVzaChhLndoaXRlc3BhY2VfYmVmb3JlKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGEudGV4dCksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPSExfSxsLnByb3RvdHlwZS5hZGRfdG9rZW49ZnVuY3Rpb24oYSl7dGhpcy5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW4oKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGEpLHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuPSExLHRoaXMubm9uX2JyZWFraW5nX3NwYWNlPSExLHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZD10aGlzLmN1cnJlbnRfbGluZS5fYWxsb3dfd3JhcCgpfSxsLnByb3RvdHlwZS5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW49ZnVuY3Rpb24oKXt0aGlzLnNwYWNlX2JlZm9yZV90b2tlbiYmIXRoaXMuanVzdF9hZGRlZF9uZXdsaW5lKCkmJih0aGlzLm5vbl9icmVha2luZ19zcGFjZXx8dGhpcy5zZXRfd3JhcF9wb2ludCgpLHRoaXMuY3VycmVudF9saW5lLnB1c2goIiAiKSl9LGwucHJvdG90eXBlLnJlbW92ZV9pbmRlbnQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciB1PXRoaXMuX19saW5lcy5sZW5ndGg7YTx1Oyl0aGlzLl9fbGluZXNbYV0uX3JlbW92ZV9pbmRlbnQoKSxhKys7dGhpcy5jdXJyZW50X2xpbmUuX3JlbW92ZV93cmFwX2luZGVudCgpfSxsLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGEpe2ZvcihhPWE9PT12b2lkIDA/ITE6YSx0aGlzLmN1cnJlbnRfbGluZS50cmltKCk7YSYmdGhpcy5fX2xpbmVzLmxlbmd0aD4xJiZ0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpOyl0aGlzLl9fbGluZXMucG9wKCksdGhpcy5jdXJyZW50X2xpbmU9dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMV0sdGhpcy5jdXJyZW50X2xpbmUudHJpbSgpO3RoaXMucHJldmlvdXNfbGluZT10aGlzLl9fbGluZXMubGVuZ3RoPjE/dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMl06bnVsbH0sbC5wcm90b3R5cGUuanVzdF9hZGRlZF9uZXdsaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCl9LGwucHJvdG90eXBlLmp1c3RfYWRkZWRfYmxhbmtsaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8dGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKSYmdGhpcy5wcmV2aW91c19saW5lLmlzX2VtcHR5KCl9LGwucHJvdG90eXBlLmVuc3VyZV9lbXB0eV9saW5lX2Fib3ZlPWZ1bmN0aW9uKGEsdSl7Zm9yKHZhciBjPXRoaXMuX19saW5lcy5sZW5ndGgtMjtjPj0wOyl7dmFyIGQ9dGhpcy5fX2xpbmVzW2NdO2lmKGQuaXNfZW1wdHkoKSlicmVhaztpZihkLml0ZW0oMCkuaW5kZXhPZihhKSE9PTAmJmQuaXRlbSgtMSkhPT11KXt0aGlzLl9fbGluZXMuc3BsaWNlKGMrMSwwLG5ldyBzKHRoaXMpKSx0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMl07YnJlYWt9Yy0tfX0sci5leHBvcnRzLk91dHB1dD1sfSxmdW5jdGlvbihyKXtmdW5jdGlvbiBzKG8sbCxhLHUpe3RoaXMudHlwZT1vLHRoaXMudGV4dD1sLHRoaXMuY29tbWVudHNfYmVmb3JlPW51bGwsdGhpcy5uZXdsaW5lcz1hfHwwLHRoaXMud2hpdGVzcGFjZV9iZWZvcmU9dXx8IiIsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGwsdGhpcy5vcGVuZWQ9bnVsbCx0aGlzLmNsb3NlZD1udWxsLHRoaXMuZGlyZWN0aXZlcz1udWxsfXIuZXhwb3J0cy5Ub2tlbj1zfSwsLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIHMoYSx1KXt0aGlzLnJhd19vcHRpb25zPW8oYSx1KSx0aGlzLmRpc2FibGVkPXRoaXMuX2dldF9ib29sZWFuKCJkaXNhYmxlZCIpLHRoaXMuZW9sPXRoaXMuX2dldF9jaGFyYWN0ZXJzKCJlb2wiLCJhdXRvIiksdGhpcy5lbmRfd2l0aF9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJlbmRfd2l0aF9uZXdsaW5lIiksdGhpcy5pbmRlbnRfc2l6ZT10aGlzLl9nZXRfbnVtYmVyKCJpbmRlbnRfc2l6ZSIsNCksdGhpcy5pbmRlbnRfY2hhcj10aGlzLl9nZXRfY2hhcmFjdGVycygiaW5kZW50X2NoYXIiLCIgIiksdGhpcy5pbmRlbnRfbGV2ZWw9dGhpcy5fZ2V0X251bWJlcigiaW5kZW50X2xldmVsIiksdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfYm9vbGVhbigicHJlc2VydmVfbmV3bGluZXMiLCEwKSx0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfbnVtYmVyKCJtYXhfcHJlc2VydmVfbmV3bGluZXMiLDMyNzg2KSx0aGlzLnByZXNlcnZlX25ld2xpbmVzfHwodGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXM9MCksdGhpcy5pbmRlbnRfd2l0aF90YWJzPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfd2l0aF90YWJzIix0aGlzLmluZGVudF9jaGFyPT09IgkiKSx0aGlzLmluZGVudF93aXRoX3RhYnMmJih0aGlzLmluZGVudF9jaGFyPSIJIix0aGlzLmluZGVudF9zaXplPT09MSYmKHRoaXMuaW5kZW50X3NpemU9NCkpLHRoaXMud3JhcF9saW5lX2xlbmd0aD10aGlzLl9nZXRfbnVtYmVyKCJ3cmFwX2xpbmVfbGVuZ3RoIix0aGlzLl9nZXRfbnVtYmVyKCJtYXhfY2hhciIpKSx0aGlzLmluZGVudF9lbXB0eV9saW5lcz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2VtcHR5X2xpbmVzIiksdGhpcy50ZW1wbGF0aW5nPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgidGVtcGxhdGluZyIsWyJhdXRvIiwibm9uZSIsImFuZ3VsYXIiLCJkamFuZ28iLCJlcmIiLCJoYW5kbGViYXJzIiwicGhwIiwic21hcnR5Il0sWyJhdXRvIl0pfXMucHJvdG90eXBlLl9nZXRfYXJyYXk9ZnVuY3Rpb24oYSx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW2FdLGQ9dXx8W107cmV0dXJuIHR5cGVvZiBjPT0ib2JqZWN0Ij9jIT09bnVsbCYmdHlwZW9mIGMuY29uY2F0PT0iZnVuY3Rpb24iJiYoZD1jLmNvbmNhdCgpKTp0eXBlb2YgYz09InN0cmluZyImJihkPWMuc3BsaXQoL1teYS16QS1aMC05X1wvXC1dKy8pKSxkfSxzLnByb3RvdHlwZS5fZ2V0X2Jvb2xlYW49ZnVuY3Rpb24oYSx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW2FdLGQ9Yz09PXZvaWQgMD8hIXU6ISFjO3JldHVybiBkfSxzLnByb3RvdHlwZS5fZ2V0X2NoYXJhY3RlcnM9ZnVuY3Rpb24oYSx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW2FdLGQ9dXx8IiI7cmV0dXJuIHR5cGVvZiBjPT0ic3RyaW5nIiYmKGQ9Yy5yZXBsYWNlKC9cXHIvLCJcciIpLnJlcGxhY2UoL1xcbi8sYApgKS5yZXBsYWNlKC9cXHQvLCIJIikpLGR9LHMucHJvdG90eXBlLl9nZXRfbnVtYmVyPWZ1bmN0aW9uKGEsdSl7dmFyIGM9dGhpcy5yYXdfb3B0aW9uc1thXTt1PXBhcnNlSW50KHUsMTApLGlzTmFOKHUpJiYodT0wKTt2YXIgZD1wYXJzZUludChjLDEwKTtyZXR1cm4gaXNOYU4oZCkmJihkPXUpLGR9LHMucHJvdG90eXBlLl9nZXRfc2VsZWN0aW9uPWZ1bmN0aW9uKGEsdSxjKXt2YXIgZD10aGlzLl9nZXRfc2VsZWN0aW9uX2xpc3QoYSx1LGMpO2lmKGQubGVuZ3RoIT09MSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgT3B0aW9uIFZhbHVlOiBUaGUgb3B0aW9uICciK2ErYCcgY2FuIG9ubHkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpgK3UrYApZb3UgcGFzc2VkIGluOiAnYCt0aGlzLnJhd19vcHRpb25zW2FdKyInIik7cmV0dXJuIGRbMF19LHMucHJvdG90eXBlLl9nZXRfc2VsZWN0aW9uX2xpc3Q9ZnVuY3Rpb24oYSx1LGMpe2lmKCF1fHx1Lmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJTZWxlY3Rpb24gbGlzdCBjYW5ub3QgYmUgZW1wdHkuIik7aWYoYz1jfHxbdVswXV0sIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihjLHUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBEZWZhdWx0IFZhbHVlISIpO3ZhciBkPXRoaXMuX2dldF9hcnJheShhLGMpO2lmKCF0aGlzLl9pc192YWxpZF9zZWxlY3Rpb24oZCx1KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgT3B0aW9uIFZhbHVlOiBUaGUgb3B0aW9uICciK2ErYCcgY2FuIGNvbnRhaW4gb25seSB0aGUgZm9sbG93aW5nIHZhbHVlczoKYCt1K2AKWW91IHBhc3NlZCBpbjogJ2ArdGhpcy5yYXdfb3B0aW9uc1thXSsiJyIpO3JldHVybiBkfSxzLnByb3RvdHlwZS5faXNfdmFsaWRfc2VsZWN0aW9uPWZ1bmN0aW9uKGEsdSl7cmV0dXJuIGEubGVuZ3RoJiZ1Lmxlbmd0aCYmIWEuc29tZShmdW5jdGlvbihjKXtyZXR1cm4gdS5pbmRleE9mKGMpPT09LTF9KX07ZnVuY3Rpb24gbyhhLHUpe3ZhciBjPXt9O2E9bChhKTt2YXIgZDtmb3IoZCBpbiBhKWQhPT11JiYoY1tkXT1hW2RdKTtpZih1JiZhW3VdKWZvcihkIGluIGFbdV0pY1tkXT1hW3VdW2RdO3JldHVybiBjfWZ1bmN0aW9uIGwoYSl7dmFyIHU9e30sYztmb3IoYyBpbiBhKXt2YXIgZD1jLnJlcGxhY2UoLy0vZywiXyIpO3VbZF09YVtjXX1yZXR1cm4gdX1yLmV4cG9ydHMuT3B0aW9ucz1zLHIuZXhwb3J0cy5ub3JtYWxpemVPcHRzPWwsci5leHBvcnRzLm1lcmdlT3B0cz1vfSwsZnVuY3Rpb24ocil7dmFyIHM9UmVnRXhwLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgic3RpY2t5Iik7ZnVuY3Rpb24gbyhsKXt0aGlzLl9faW5wdXQ9bHx8IiIsdGhpcy5fX2lucHV0X2xlbmd0aD10aGlzLl9faW5wdXQubGVuZ3RoLHRoaXMuX19wb3NpdGlvbj0wfW8ucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9fcG9zaXRpb249MH0sby5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj4wJiYodGhpcy5fX3Bvc2l0aW9uLT0xKX0sby5wcm90b3R5cGUuaGFzTmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcG9zaXRpb248dGhpcy5fX2lucHV0X2xlbmd0aH0sby5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBsPW51bGw7cmV0dXJuIHRoaXMuaGFzTmV4dCgpJiYobD10aGlzLl9faW5wdXQuY2hhckF0KHRoaXMuX19wb3NpdGlvbiksdGhpcy5fX3Bvc2l0aW9uKz0xKSxsfSxvLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKGwpe3ZhciBhPW51bGw7cmV0dXJuIGw9bHx8MCxsKz10aGlzLl9fcG9zaXRpb24sbD49MCYmbDx0aGlzLl9faW5wdXRfbGVuZ3RoJiYoYT10aGlzLl9faW5wdXQuY2hhckF0KGwpKSxhfSxvLnByb3RvdHlwZS5fX21hdGNoPWZ1bmN0aW9uKGwsYSl7bC5sYXN0SW5kZXg9YTt2YXIgdT1sLmV4ZWModGhpcy5fX2lucHV0KTtyZXR1cm4gdSYmIShzJiZsLnN0aWNreSkmJnUuaW5kZXghPT1hJiYodT1udWxsKSx1fSxvLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKGwsYSl7cmV0dXJuIGE9YXx8MCxhKz10aGlzLl9fcG9zaXRpb24sYT49MCYmYTx0aGlzLl9faW5wdXRfbGVuZ3RoPyEhdGhpcy5fX21hdGNoKGwsYSk6ITF9LG8ucHJvdG90eXBlLnRlc3RDaGFyPWZ1bmN0aW9uKGwsYSl7dmFyIHU9dGhpcy5wZWVrKGEpO3JldHVybiBsLmxhc3RJbmRleD0wLHUhPT1udWxsJiZsLnRlc3QodSl9LG8ucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKGwpe3ZhciBhPXRoaXMuX19tYXRjaChsLHRoaXMuX19wb3NpdGlvbik7cmV0dXJuIGE/dGhpcy5fX3Bvc2l0aW9uKz1hWzBdLmxlbmd0aDphPW51bGwsYX0sby5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihsLGEsdSl7dmFyIGM9IiIsZDtyZXR1cm4gbCYmKGQ9dGhpcy5tYXRjaChsKSxkJiYoYys9ZFswXSkpLGEmJihkfHwhbCkmJihjKz10aGlzLnJlYWRVbnRpbChhLHUpKSxjfSxvLnByb3RvdHlwZS5yZWFkVW50aWw9ZnVuY3Rpb24obCxhKXt2YXIgdT0iIixjPXRoaXMuX19wb3NpdGlvbjtsLmxhc3RJbmRleD10aGlzLl9fcG9zaXRpb247dmFyIGQ9bC5leGVjKHRoaXMuX19pbnB1dCk7cmV0dXJuIGQ/KGM9ZC5pbmRleCxhJiYoYys9ZFswXS5sZW5ndGgpKTpjPXRoaXMuX19pbnB1dF9sZW5ndGgsdT10aGlzLl9faW5wdXQuc3Vic3RyaW5nKHRoaXMuX19wb3NpdGlvbixjKSx0aGlzLl9fcG9zaXRpb249Yyx1fSxvLnByb3RvdHlwZS5yZWFkVW50aWxBZnRlcj1mdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5yZWFkVW50aWwobCwhMCl9LG8ucHJvdG90eXBlLmdldF9yZWdleHA9ZnVuY3Rpb24obCxhKXt2YXIgdT1udWxsLGM9ImciO3JldHVybiBhJiZzJiYoYz0ieSIpLHR5cGVvZiBsPT0ic3RyaW5nIiYmbCE9PSIiP3U9bmV3IFJlZ0V4cChsLGMpOmwmJih1PW5ldyBSZWdFeHAobC5zb3VyY2UsYykpLHV9LG8ucHJvdG90eXBlLmdldF9saXRlcmFsX3JlZ2V4cD1mdW5jdGlvbihsKXtyZXR1cm4gUmVnRXhwKGwucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKSl9LG8ucHJvdG90eXBlLnBlZWtVbnRpbEFmdGVyPWZ1bmN0aW9uKGwpe3ZhciBhPXRoaXMuX19wb3NpdGlvbix1PXRoaXMucmVhZFVudGlsQWZ0ZXIobCk7cmV0dXJuIHRoaXMuX19wb3NpdGlvbj1hLHV9LG8ucHJvdG90eXBlLmxvb2tCYWNrPWZ1bmN0aW9uKGwpe3ZhciBhPXRoaXMuX19wb3NpdGlvbi0xO3JldHVybiBhPj1sLmxlbmd0aCYmdGhpcy5fX2lucHV0LnN1YnN0cmluZyhhLWwubGVuZ3RoLGEpLnRvTG93ZXJDYXNlKCk9PT1sfSxyLmV4cG9ydHMuSW5wdXRTY2FubmVyPW99LGZ1bmN0aW9uKHIscyxvKXt2YXIgbD1vKDgpLklucHV0U2Nhbm5lcixhPW8oMykuVG9rZW4sdT1vKDEwKS5Ub2tlblN0cmVhbSxjPW8oMTEpLldoaXRlc3BhY2VQYXR0ZXJuLGQ9e1NUQVJUOiJUS19TVEFSVCIsUkFXOiJUS19SQVciLEVPRjoiVEtfRU9GIn0sbT1mdW5jdGlvbihmLF8pe3RoaXMuX2lucHV0PW5ldyBsKGYpLHRoaXMuX29wdGlvbnM9X3x8e30sdGhpcy5fX3Rva2Vucz1udWxsLHRoaXMuX3BhdHRlcm5zPXt9LHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2U9bmV3IGModGhpcy5faW5wdXQpfTttLnByb3RvdHlwZS50b2tlbml6ZT1mdW5jdGlvbigpe3RoaXMuX2lucHV0LnJlc3RhcnQoKSx0aGlzLl9fdG9rZW5zPW5ldyB1LHRoaXMuX3Jlc2V0KCk7Zm9yKHZhciBmLF89bmV3IGEoZC5TVEFSVCwiIiksZz1udWxsLEE9W10sdj1uZXcgdTtfLnR5cGUhPT1kLkVPRjspe2ZvcihmPXRoaXMuX2dldF9uZXh0X3Rva2VuKF8sZyk7dGhpcy5faXNfY29tbWVudChmKTspdi5hZGQoZiksZj10aGlzLl9nZXRfbmV4dF90b2tlbihfLGcpO3YuaXNFbXB0eSgpfHwoZi5jb21tZW50c19iZWZvcmU9dix2PW5ldyB1KSxmLnBhcmVudD1nLHRoaXMuX2lzX29wZW5pbmcoZik/KEEucHVzaChnKSxnPWYpOmcmJnRoaXMuX2lzX2Nsb3NpbmcoZixnKSYmKGYub3BlbmVkPWcsZy5jbG9zZWQ9ZixnPUEucG9wKCksZi5wYXJlbnQ9ZyksZi5wcmV2aW91cz1fLF8ubmV4dD1mLHRoaXMuX190b2tlbnMuYWRkKGYpLF89Zn1yZXR1cm4gdGhpcy5fX3Rva2Vuc30sbS5wcm90b3R5cGUuX2lzX2ZpcnN0X3Rva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2tlbnMuaXNFbXB0eSgpfSxtLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXt9LG0ucHJvdG90eXBlLl9nZXRfbmV4dF90b2tlbj1mdW5jdGlvbihmLF8pe3RoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7dmFyIGc9dGhpcy5faW5wdXQucmVhZCgvLisvZyk7cmV0dXJuIGc/dGhpcy5fY3JlYXRlX3Rva2VuKGQuUkFXLGcpOnRoaXMuX2NyZWF0ZV90b2tlbihkLkVPRiwiIil9LG0ucHJvdG90eXBlLl9pc19jb21tZW50PWZ1bmN0aW9uKGYpe3JldHVybiExfSxtLnByb3RvdHlwZS5faXNfb3BlbmluZz1mdW5jdGlvbihmKXtyZXR1cm4hMX0sbS5wcm90b3R5cGUuX2lzX2Nsb3Npbmc9ZnVuY3Rpb24oZixfKXtyZXR1cm4hMX0sbS5wcm90b3R5cGUuX2NyZWF0ZV90b2tlbj1mdW5jdGlvbihmLF8pe3ZhciBnPW5ldyBhKGYsXyx0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlLm5ld2xpbmVfY291bnQsdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZS53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbik7cmV0dXJuIGd9LG0ucHJvdG90eXBlLl9yZWFkV2hpdGVzcGFjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlLnJlYWQoKX0sci5leHBvcnRzLlRva2VuaXplcj1tLHIuZXhwb3J0cy5UT0tFTj1kfSxmdW5jdGlvbihyKXtmdW5jdGlvbiBzKG8pe3RoaXMuX190b2tlbnM9W10sdGhpcy5fX3Rva2Vuc19sZW5ndGg9dGhpcy5fX3Rva2Vucy5sZW5ndGgsdGhpcy5fX3Bvc2l0aW9uPTAsdGhpcy5fX3BhcmVudF90b2tlbj1vfXMucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9fcG9zaXRpb249MH0scy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fdG9rZW5zX2xlbmd0aD09PTB9LHMucHJvdG90eXBlLmhhc05leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Bvc2l0aW9uPHRoaXMuX190b2tlbnNfbGVuZ3RofSxzLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIG89bnVsbDtyZXR1cm4gdGhpcy5oYXNOZXh0KCkmJihvPXRoaXMuX190b2tlbnNbdGhpcy5fX3Bvc2l0aW9uXSx0aGlzLl9fcG9zaXRpb24rPTEpLG99LHMucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24obyl7dmFyIGw9bnVsbDtyZXR1cm4gbz1vfHwwLG8rPXRoaXMuX19wb3NpdGlvbixvPj0wJiZvPHRoaXMuX190b2tlbnNfbGVuZ3RoJiYobD10aGlzLl9fdG9rZW5zW29dKSxsfSxzLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24obyl7dGhpcy5fX3BhcmVudF90b2tlbiYmKG8ucGFyZW50PXRoaXMuX19wYXJlbnRfdG9rZW4pLHRoaXMuX190b2tlbnMucHVzaChvKSx0aGlzLl9fdG9rZW5zX2xlbmd0aCs9MX0sci5leHBvcnRzLlRva2VuU3RyZWFtPXN9LGZ1bmN0aW9uKHIscyxvKXt2YXIgbD1vKDEyKS5QYXR0ZXJuO2Z1bmN0aW9uIGEodSxjKXtsLmNhbGwodGhpcyx1LGMpLGM/dGhpcy5fbGluZV9yZWdleHA9dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChjLl9saW5lX3JlZ2V4cCk6dGhpcy5fX3NldF93aGl0ZXNwYWNlX3BhdHRlcm5zKCIiLCIiKSx0aGlzLm5ld2xpbmVfY291bnQ9MCx0aGlzLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuPSIifWEucHJvdG90eXBlPW5ldyBsLGEucHJvdG90eXBlLl9fc2V0X3doaXRlc3BhY2VfcGF0dGVybnM9ZnVuY3Rpb24odSxjKXt1Kz0iXFx0ICIsYys9IlxcblxcciIsdGhpcy5fbWF0Y2hfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKCJbIit1K2MrIl0rIiwhMCksdGhpcy5fbmV3bGluZV9yZWdleHA9dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cCgiXFxyXFxufFsiK2MrIl0iKX0sYS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbigpe3RoaXMubmV3bGluZV9jb3VudD0wLHRoaXMud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW49IiI7dmFyIHU9dGhpcy5faW5wdXQucmVhZCh0aGlzLl9tYXRjaF9wYXR0ZXJuKTtpZih1PT09IiAiKXRoaXMud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW49IiAiO2Vsc2UgaWYodSl7dmFyIGM9dGhpcy5fX3NwbGl0KHRoaXMuX25ld2xpbmVfcmVnZXhwLHUpO3RoaXMubmV3bGluZV9jb3VudD1jLmxlbmd0aC0xLHRoaXMud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW49Y1t0aGlzLm5ld2xpbmVfY291bnRdfXJldHVybiB1fSxhLnByb3RvdHlwZS5tYXRjaGluZz1mdW5jdGlvbih1LGMpe3ZhciBkPXRoaXMuX2NyZWF0ZSgpO3JldHVybiBkLl9fc2V0X3doaXRlc3BhY2VfcGF0dGVybnModSxjKSxkLl91cGRhdGUoKSxkfSxhLnByb3RvdHlwZS5fY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhKHRoaXMuX2lucHV0LHRoaXMpfSxhLnByb3RvdHlwZS5fX3NwbGl0PWZ1bmN0aW9uKHUsYyl7dS5sYXN0SW5kZXg9MDtmb3IodmFyIGQ9MCxtPVtdLGY9dS5leGVjKGMpO2Y7KW0ucHVzaChjLnN1YnN0cmluZyhkLGYuaW5kZXgpKSxkPWYuaW5kZXgrZlswXS5sZW5ndGgsZj11LmV4ZWMoYyk7cmV0dXJuIGQ8Yy5sZW5ndGg/bS5wdXNoKGMuc3Vic3RyaW5nKGQsYy5sZW5ndGgpKTptLnB1c2goIiIpLG19LHIuZXhwb3J0cy5XaGl0ZXNwYWNlUGF0dGVybj1hfSxmdW5jdGlvbihyKXtmdW5jdGlvbiBzKG8sbCl7dGhpcy5faW5wdXQ9byx0aGlzLl9zdGFydGluZ19wYXR0ZXJuPW51bGwsdGhpcy5fbWF0Y2hfcGF0dGVybj1udWxsLHRoaXMuX3VudGlsX3BhdHRlcm49bnVsbCx0aGlzLl91bnRpbF9hZnRlcj0hMSxsJiYodGhpcy5fc3RhcnRpbmdfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKGwuX3N0YXJ0aW5nX3BhdHRlcm4sITApLHRoaXMuX21hdGNoX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChsLl9tYXRjaF9wYXR0ZXJuLCEwKSx0aGlzLl91bnRpbF9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAobC5fdW50aWxfcGF0dGVybiksdGhpcy5fdW50aWxfYWZ0ZXI9bC5fdW50aWxfYWZ0ZXIpfXMucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oKXt2YXIgbz10aGlzLl9pbnB1dC5yZWFkKHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm4pO3JldHVybighdGhpcy5fc3RhcnRpbmdfcGF0dGVybnx8bykmJihvKz10aGlzLl9pbnB1dC5yZWFkKHRoaXMuX21hdGNoX3BhdHRlcm4sdGhpcy5fdW50aWxfcGF0dGVybix0aGlzLl91bnRpbF9hZnRlcikpLG99LHMucHJvdG90eXBlLnJlYWRfbWF0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5wdXQubWF0Y2godGhpcy5fbWF0Y2hfcGF0dGVybil9LHMucHJvdG90eXBlLnVudGlsX2FmdGVyPWZ1bmN0aW9uKG8pe3ZhciBsPXRoaXMuX2NyZWF0ZSgpO3JldHVybiBsLl91bnRpbF9hZnRlcj0hMCxsLl91bnRpbF9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAobyksbC5fdXBkYXRlKCksbH0scy5wcm90b3R5cGUudW50aWw9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIGwuX3VudGlsX2FmdGVyPSExLGwuX3VudGlsX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChvKSxsLl91cGRhdGUoKSxsfSxzLnByb3RvdHlwZS5zdGFydGluZ193aXRoPWZ1bmN0aW9uKG8pe3ZhciBsPXRoaXMuX2NyZWF0ZSgpO3JldHVybiBsLl9zdGFydGluZ19wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAobywhMCksbC5fdXBkYXRlKCksbH0scy5wcm90b3R5cGUubWF0Y2hpbmc9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIGwuX21hdGNoX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChvLCEwKSxsLl91cGRhdGUoKSxsfSxzLnByb3RvdHlwZS5fY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKHRoaXMuX2lucHV0LHRoaXMpfSxzLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7fSxyLmV4cG9ydHMuUGF0dGVybj1zfSxmdW5jdGlvbihyKXtmdW5jdGlvbiBzKG8sbCl7bz10eXBlb2Ygbz09InN0cmluZyI/bzpvLnNvdXJjZSxsPXR5cGVvZiBsPT0ic3RyaW5nIj9sOmwuc291cmNlLHRoaXMuX19kaXJlY3RpdmVzX2Jsb2NrX3BhdHRlcm49bmV3IFJlZ0V4cChvKy8gYmVhdXRpZnkoIFx3K1s6XVx3KykrIC8uc291cmNlK2wsImciKSx0aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm49LyAoXHcrKVs6XShcdyspL2csdGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuPW5ldyBSZWdFeHAobysvXHNiZWF1dGlmeVxzaWdub3JlOmVuZFxzLy5zb3VyY2UrbCwiZyIpfXMucHJvdG90eXBlLmdldF9kaXJlY3RpdmVzPWZ1bmN0aW9uKG8pe2lmKCFvLm1hdGNoKHRoaXMuX19kaXJlY3RpdmVzX2Jsb2NrX3BhdHRlcm4pKXJldHVybiBudWxsO3ZhciBsPXt9O3RoaXMuX19kaXJlY3RpdmVfcGF0dGVybi5sYXN0SW5kZXg9MDtmb3IodmFyIGE9dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmV4ZWMobyk7YTspbFthWzFdXT1hWzJdLGE9dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmV4ZWMobyk7cmV0dXJuIGx9LHMucHJvdG90eXBlLnJlYWRJZ25vcmVkPWZ1bmN0aW9uKG8pe3JldHVybiBvLnJlYWRVbnRpbEFmdGVyKHRoaXMuX19kaXJlY3RpdmVzX2VuZF9pZ25vcmVfcGF0dGVybil9LHIuZXhwb3J0cy5EaXJlY3RpdmVzPXN9LGZ1bmN0aW9uKHIscyxvKXt2YXIgbD1vKDEyKS5QYXR0ZXJuLGE9e2RqYW5nbzohMSxlcmI6ITEsaGFuZGxlYmFyczohMSxwaHA6ITEsc21hcnR5OiExLGFuZ3VsYXI6ITF9O2Z1bmN0aW9uIHUoYyxkKXtsLmNhbGwodGhpcyxjLGQpLHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuPW51bGwsdGhpcy5fZGlzYWJsZWQ9T2JqZWN0LmFzc2lnbih7fSxhKSx0aGlzLl9leGNsdWRlZD1PYmplY3QuYXNzaWduKHt9LGEpLGQmJih0aGlzLl9fdGVtcGxhdGVfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKGQuX190ZW1wbGF0ZV9wYXR0ZXJuKSx0aGlzLl9leGNsdWRlZD1PYmplY3QuYXNzaWduKHRoaXMuX2V4Y2x1ZGVkLGQuX2V4Y2x1ZGVkKSx0aGlzLl9kaXNhYmxlZD1PYmplY3QuYXNzaWduKHRoaXMuX2Rpc2FibGVkLGQuX2Rpc2FibGVkKSk7dmFyIG09bmV3IGwoYyk7dGhpcy5fX3BhdHRlcm5zPXtoYW5kbGViYXJzX2NvbW1lbnQ6bS5zdGFydGluZ193aXRoKC97eyEtLS8pLnVudGlsX2FmdGVyKC8tLX19LyksaGFuZGxlYmFyc191bmVzY2FwZWQ6bS5zdGFydGluZ193aXRoKC97e3svKS51bnRpbF9hZnRlcigvfX19LyksaGFuZGxlYmFyczptLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LykscGhwOm0uc3RhcnRpbmdfd2l0aCgvPFw/KD86Wz0gXXxwaHApLykudW50aWxfYWZ0ZXIoL1w/Pi8pLGVyYjptLnN0YXJ0aW5nX3dpdGgoLzwlW14lXS8pLnVudGlsX2FmdGVyKC9bXiVdJT4vKSxkamFuZ286bS5zdGFydGluZ193aXRoKC97JS8pLnVudGlsX2FmdGVyKC8lfS8pLGRqYW5nb192YWx1ZTptLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LyksZGphbmdvX2NvbW1lbnQ6bS5zdGFydGluZ193aXRoKC97Iy8pLnVudGlsX2FmdGVyKC8jfS8pLHNtYXJ0eTptLnN0YXJ0aW5nX3dpdGgoL3soPz1bXn17XHNcbl0pLykudW50aWxfYWZ0ZXIoL1teXHNcbl19Lyksc21hcnR5X2NvbW1lbnQ6bS5zdGFydGluZ193aXRoKC97XCovKS51bnRpbF9hZnRlcigvXCp9Lyksc21hcnR5X2xpdGVyYWw6bS5zdGFydGluZ193aXRoKC97bGl0ZXJhbH0vKS51bnRpbF9hZnRlcigve1wvbGl0ZXJhbH0vKX19dS5wcm90b3R5cGU9bmV3IGwsdS5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdSh0aGlzLl9pbnB1dCx0aGlzKX0sdS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX19zZXRfdGVtcGxhdGVkX3BhdHRlcm4oKX0sdS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbihjKXt2YXIgZD10aGlzLl9jcmVhdGUoKTtyZXR1cm4gZC5fZGlzYWJsZWRbY109ITAsZC5fdXBkYXRlKCksZH0sdS5wcm90b3R5cGUucmVhZF9vcHRpb25zPWZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMuX2NyZWF0ZSgpO2Zvcih2YXIgbSBpbiBhKWQuX2Rpc2FibGVkW21dPWMudGVtcGxhdGluZy5pbmRleE9mKG0pPT09LTE7cmV0dXJuIGQuX3VwZGF0ZSgpLGR9LHUucHJvdG90eXBlLmV4Y2x1ZGU9ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIGQuX2V4Y2x1ZGVkW2NdPSEwLGQuX3VwZGF0ZSgpLGR9LHUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oKXt2YXIgYz0iIjt0aGlzLl9tYXRjaF9wYXR0ZXJuP2M9dGhpcy5faW5wdXQucmVhZCh0aGlzLl9zdGFydGluZ19wYXR0ZXJuKTpjPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybix0aGlzLl9fdGVtcGxhdGVfcGF0dGVybik7Zm9yKHZhciBkPXRoaXMuX3JlYWRfdGVtcGxhdGUoKTtkOyl0aGlzLl9tYXRjaF9wYXR0ZXJuP2QrPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybik6ZCs9dGhpcy5faW5wdXQucmVhZFVudGlsKHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuKSxjKz1kLGQ9dGhpcy5fcmVhZF90ZW1wbGF0ZSgpO3JldHVybiB0aGlzLl91bnRpbF9hZnRlciYmKGMrPXRoaXMuX2lucHV0LnJlYWRVbnRpbEFmdGVyKHRoaXMuX3VudGlsX3BhdHRlcm4pKSxjfSx1LnByb3RvdHlwZS5fX3NldF90ZW1wbGF0ZWRfcGF0dGVybj1mdW5jdGlvbigpe3ZhciBjPVtdO3RoaXMuX2Rpc2FibGVkLnBocHx8Yy5wdXNoKHRoaXMuX19wYXR0ZXJucy5waHAuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSx0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzfHxjLnB1c2godGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnMuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSx0aGlzLl9kaXNhYmxlZC5lcmJ8fGMucHVzaCh0aGlzLl9fcGF0dGVybnMuZXJiLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSksdGhpcy5fZGlzYWJsZWQuZGphbmdvfHwoYy5wdXNoKHRoaXMuX19wYXR0ZXJucy5kamFuZ28uX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSxjLnB1c2godGhpcy5fX3BhdHRlcm5zLmRqYW5nb192YWx1ZS5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLGMucHVzaCh0aGlzLl9fcGF0dGVybnMuZGphbmdvX2NvbW1lbnQuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSksdGhpcy5fZGlzYWJsZWQuc21hcnR5fHxjLnB1c2godGhpcy5fX3BhdHRlcm5zLnNtYXJ0eS5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLHRoaXMuX3VudGlsX3BhdHRlcm4mJmMucHVzaCh0aGlzLl91bnRpbF9wYXR0ZXJuLnNvdXJjZSksdGhpcy5fX3RlbXBsYXRlX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cCgiKD86IitjLmpvaW4oInwiKSsiKSIpfSx1LnByb3RvdHlwZS5fcmVhZF90ZW1wbGF0ZT1mdW5jdGlvbigpe3ZhciBjPSIiLGQ9dGhpcy5faW5wdXQucGVlaygpO2lmKGQ9PT0iPCIpe3ZhciBtPXRoaXMuX2lucHV0LnBlZWsoMSk7IXRoaXMuX2Rpc2FibGVkLnBocCYmIXRoaXMuX2V4Y2x1ZGVkLnBocCYmbT09PSI/IiYmKGM9Y3x8dGhpcy5fX3BhdHRlcm5zLnBocC5yZWFkKCkpLCF0aGlzLl9kaXNhYmxlZC5lcmImJiF0aGlzLl9leGNsdWRlZC5lcmImJm09PT0iJSImJihjPWN8fHRoaXMuX19wYXR0ZXJucy5lcmIucmVhZCgpKX1lbHNlIGQ9PT0ieyImJighdGhpcy5fZGlzYWJsZWQuaGFuZGxlYmFycyYmIXRoaXMuX2V4Y2x1ZGVkLmhhbmRsZWJhcnMmJihjPWN8fHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX2NvbW1lbnQucmVhZCgpLGM9Y3x8dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfdW5lc2NhcGVkLnJlYWQoKSxjPWN8fHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzLnJlYWQoKSksdGhpcy5fZGlzYWJsZWQuZGphbmdvfHwoIXRoaXMuX2V4Y2x1ZGVkLmRqYW5nbyYmIXRoaXMuX2V4Y2x1ZGVkLmhhbmRsZWJhcnMmJihjPWN8fHRoaXMuX19wYXR0ZXJucy5kamFuZ29fdmFsdWUucmVhZCgpKSx0aGlzLl9leGNsdWRlZC5kamFuZ298fChjPWN8fHRoaXMuX19wYXR0ZXJucy5kamFuZ29fY29tbWVudC5yZWFkKCksYz1jfHx0aGlzLl9fcGF0dGVybnMuZGphbmdvLnJlYWQoKSkpLHRoaXMuX2Rpc2FibGVkLnNtYXJ0eXx8dGhpcy5fZGlzYWJsZWQuZGphbmdvJiZ0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzJiYoYz1jfHx0aGlzLl9fcGF0dGVybnMuc21hcnR5X2NvbW1lbnQucmVhZCgpLGM9Y3x8dGhpcy5fX3BhdHRlcm5zLnNtYXJ0eV9saXRlcmFsLnJlYWQoKSxjPWN8fHRoaXMuX19wYXR0ZXJucy5zbWFydHkucmVhZCgpKSk7cmV0dXJuIGN9LHIuZXhwb3J0cy5UZW1wbGF0YWJsZVBhdHRlcm49dX0sLCwsZnVuY3Rpb24ocixzLG8pe3ZhciBsPW8oMTkpLkJlYXV0aWZpZXIsYT1vKDIwKS5PcHRpb25zO2Z1bmN0aW9uIHUoYyxkLG0sZil7dmFyIF89bmV3IGwoYyxkLG0sZik7cmV0dXJuIF8uYmVhdXRpZnkoKX1yLmV4cG9ydHM9dSxyLmV4cG9ydHMuZGVmYXVsdE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGF9fSxmdW5jdGlvbihyLHMsbyl7dmFyIGw9bygyMCkuT3B0aW9ucyxhPW8oMikuT3V0cHV0LHU9bygyMSkuVG9rZW5pemVyLGM9bygyMSkuVE9LRU4sZD0vXHJcbnxbXHJcbl0vLG09L1xyXG58W1xyXG5dL2csZj1mdW5jdGlvbihiLHApe3RoaXMuaW5kZW50X2xldmVsPTAsdGhpcy5hbGlnbm1lbnRfc2l6ZT0wLHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzPWIubWF4X3ByZXNlcnZlX25ld2xpbmVzLHRoaXMucHJlc2VydmVfbmV3bGluZXM9Yi5wcmVzZXJ2ZV9uZXdsaW5lcyx0aGlzLl9vdXRwdXQ9bmV3IGEoYixwKX07Zi5wcm90b3R5cGUuY3VycmVudF9saW5lX2hhc19tYXRjaD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5fb3V0cHV0LmN1cnJlbnRfbGluZS5oYXNfbWF0Y2goYil9LGYucHJvdG90eXBlLnNldF9zcGFjZV9iZWZvcmVfdG9rZW49ZnVuY3Rpb24oYixwKXt0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPWIsdGhpcy5fb3V0cHV0Lm5vbl9icmVha2luZ19zcGFjZT1wfSxmLnByb3RvdHlwZS5zZXRfd3JhcF9wb2ludD1mdW5jdGlvbigpe3RoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuaW5kZW50X2xldmVsLHRoaXMuYWxpZ25tZW50X3NpemUpLHRoaXMuX291dHB1dC5zZXRfd3JhcF9wb2ludCgpfSxmLnByb3RvdHlwZS5hZGRfcmF3X3Rva2VuPWZ1bmN0aW9uKGIpe3RoaXMuX291dHB1dC5hZGRfcmF3X3Rva2VuKGIpfSxmLnByb3RvdHlwZS5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXM9ZnVuY3Rpb24oYil7dmFyIHA9MDtiLnR5cGUhPT1jLlRFWFQmJmIucHJldmlvdXMudHlwZSE9PWMuVEVYVCYmKHA9Yi5uZXdsaW5lcz8xOjApLHRoaXMucHJlc2VydmVfbmV3bGluZXMmJihwPWIubmV3bGluZXM8dGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXMrMT9iLm5ld2xpbmVzOnRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzKzEpO2Zvcih2YXIgVD0wO1Q8cDtUKyspdGhpcy5wcmludF9uZXdsaW5lKFQ+MCk7cmV0dXJuIHAhPT0wfSxmLnByb3RvdHlwZS50cmF2ZXJzZV93aGl0ZXNwYWNlPWZ1bmN0aW9uKGIpe3JldHVybiBiLndoaXRlc3BhY2VfYmVmb3JlfHxiLm5ld2xpbmVzPyh0aGlzLnByaW50X3ByZXNlcnZlZF9uZXdsaW5lcyhiKXx8KHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApLCEwKTohMX0sZi5wcm90b3R5cGUucHJldmlvdXNfdG9rZW5fd3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vdXRwdXQucHJldmlvdXNfdG9rZW5fd3JhcHBlZH0sZi5wcm90b3R5cGUucHJpbnRfbmV3bGluZT1mdW5jdGlvbihiKXt0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKGIpfSxmLnByb3RvdHlwZS5wcmludF90b2tlbj1mdW5jdGlvbihiKXtiLnRleHQmJih0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLmluZGVudF9sZXZlbCx0aGlzLmFsaWdubWVudF9zaXplKSx0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKGIudGV4dCkpfSxmLnByb3RvdHlwZS5pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLmluZGVudF9sZXZlbCsrfSxmLnByb3RvdHlwZS5kZWluZGVudD1mdW5jdGlvbigpe3RoaXMuaW5kZW50X2xldmVsPjAmJih0aGlzLmluZGVudF9sZXZlbC0tLHRoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuaW5kZW50X2xldmVsLHRoaXMuYWxpZ25tZW50X3NpemUpKX0sZi5wcm90b3R5cGUuZ2V0X2Z1bGxfaW5kZW50PWZ1bmN0aW9uKGIpe3JldHVybiBiPXRoaXMuaW5kZW50X2xldmVsKyhifHwwKSxiPDE/IiI6dGhpcy5fb3V0cHV0LmdldF9pbmRlbnRfc3RyaW5nKGIpfTt2YXIgXz1mdW5jdGlvbihiKXtmb3IodmFyIHA9bnVsbCxUPWIubmV4dDtULnR5cGUhPT1jLkVPRiYmYi5jbG9zZWQhPT1UOyl7aWYoVC50eXBlPT09Yy5BVFRSSUJVVEUmJlQudGV4dD09PSJ0eXBlIil7VC5uZXh0JiZULm5leHQudHlwZT09PWMuRVFVQUxTJiZULm5leHQubmV4dCYmVC5uZXh0Lm5leHQudHlwZT09PWMuVkFMVUUmJihwPVQubmV4dC5uZXh0LnRleHQpO2JyZWFrfVQ9VC5uZXh0fXJldHVybiBwfSxnPWZ1bmN0aW9uKGIscCl7dmFyIFQ9bnVsbCxIPW51bGw7cmV0dXJuIHAuY2xvc2VkPyhiPT09InNjcmlwdCI/VD0idGV4dC9qYXZhc2NyaXB0IjpiPT09InN0eWxlIiYmKFQ9InRleHQvY3NzIiksVD1fKHApfHxULFQuc2VhcmNoKCJ0ZXh0L2NzcyIpPi0xP0g9ImNzcyI6VC5zZWFyY2goL21vZHVsZXwoKHRleHR8YXBwbGljYXRpb258ZG9qbylcLyh4LSk/KGphdmFzY3JpcHR8ZWNtYXNjcmlwdHxqc2NyaXB0fGxpdmVzY3JpcHR8KGxkXCspP2pzb258bWV0aG9kfGFzcGVjdCkpLyk+LTE/SD0iamF2YXNjcmlwdCI6VC5zZWFyY2goLyh0ZXh0fGFwcGxpY2F0aW9ufGRvam8pXC8oeC0pPyhodG1sKS8pPi0xP0g9Imh0bWwiOlQuc2VhcmNoKC90ZXN0XC9udWxsLyk+LTEmJihIPSJudWxsIiksSCk6bnVsbH07ZnVuY3Rpb24gQShiLHApe3JldHVybiBwLmluZGV4T2YoYikhPT0tMX1mdW5jdGlvbiB2KGIscCxUKXt0aGlzLnBhcmVudD1ifHxudWxsLHRoaXMudGFnPXA/cC50YWdfbmFtZToiIix0aGlzLmluZGVudF9sZXZlbD1UfHwwLHRoaXMucGFyc2VyX3Rva2VuPXB8fG51bGx9ZnVuY3Rpb24geShiKXt0aGlzLl9wcmludGVyPWIsdGhpcy5fY3VycmVudF9mcmFtZT1udWxsfXkucHJvdG90eXBlLmdldF9wYXJzZXJfdG9rZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudF9mcmFtZT90aGlzLl9jdXJyZW50X2ZyYW1lLnBhcnNlcl90b2tlbjpudWxsfSx5LnByb3RvdHlwZS5yZWNvcmRfdGFnPWZ1bmN0aW9uKGIpe3ZhciBwPW5ldyB2KHRoaXMuX2N1cnJlbnRfZnJhbWUsYix0aGlzLl9wcmludGVyLmluZGVudF9sZXZlbCk7dGhpcy5fY3VycmVudF9mcmFtZT1wfSx5LnByb3RvdHlwZS5fdHJ5X3BvcF9mcmFtZT1mdW5jdGlvbihiKXt2YXIgcD1udWxsO3JldHVybiBiJiYocD1iLnBhcnNlcl90b2tlbix0aGlzLl9wcmludGVyLmluZGVudF9sZXZlbD1iLmluZGVudF9sZXZlbCx0aGlzLl9jdXJyZW50X2ZyYW1lPWIucGFyZW50KSxwfSx5LnByb3RvdHlwZS5fZ2V0X2ZyYW1lPWZ1bmN0aW9uKGIscCl7Zm9yKHZhciBUPXRoaXMuX2N1cnJlbnRfZnJhbWU7VCYmYi5pbmRleE9mKFQudGFnKT09PS0xOyl7aWYocCYmcC5pbmRleE9mKFQudGFnKSE9PS0xKXtUPW51bGw7YnJlYWt9VD1ULnBhcmVudH1yZXR1cm4gVH0seS5wcm90b3R5cGUudHJ5X3BvcD1mdW5jdGlvbihiLHApe3ZhciBUPXRoaXMuX2dldF9mcmFtZShbYl0scCk7cmV0dXJuIHRoaXMuX3RyeV9wb3BfZnJhbWUoVCl9LHkucHJvdG90eXBlLmluZGVudF90b190YWc9ZnVuY3Rpb24oYil7dmFyIHA9dGhpcy5fZ2V0X2ZyYW1lKGIpO3AmJih0aGlzLl9wcmludGVyLmluZGVudF9sZXZlbD1wLmluZGVudF9sZXZlbCl9O2Z1bmN0aW9uIEUoYixwLFQsSCl7dGhpcy5fc291cmNlX3RleHQ9Ynx8IiIscD1wfHx7fSx0aGlzLl9qc19iZWF1dGlmeT1ULHRoaXMuX2Nzc19iZWF1dGlmeT1ILHRoaXMuX3RhZ19zdGFjaz1udWxsO3ZhciBMPW5ldyBsKHAsImh0bWwiKTt0aGlzLl9vcHRpb25zPUwsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzLnN1YnN0cigwLDUpPT09ImZvcmNlIix0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZT10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcz09PSJmb3JjZS1leHBhbmQtbXVsdGlsaW5lIix0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfYWxpZ25lZD10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcz09PSJmb3JjZS1hbGlnbmVkIix0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfYWxpZ25lZF9tdWx0aXBsZT10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcz09PSJhbGlnbmVkLW11bHRpcGxlIix0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmU9dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXMuc3Vic3RyKDAsOCk9PT0icHJlc2VydmUiLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZV9hbGlnbmVkPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzPT09InByZXNlcnZlLWFsaWduZWQifUUucHJvdG90eXBlLmJlYXV0aWZ5PWZ1bmN0aW9uKCl7aWYodGhpcy5fb3B0aW9ucy5kaXNhYmxlZClyZXR1cm4gdGhpcy5fc291cmNlX3RleHQ7dmFyIGI9dGhpcy5fc291cmNlX3RleHQscD10aGlzLl9vcHRpb25zLmVvbDt0aGlzLl9vcHRpb25zLmVvbD09PSJhdXRvIiYmKHA9YApgLGImJmQudGVzdChiKSYmKHA9Yi5tYXRjaChkKVswXSkpLGI9Yi5yZXBsYWNlKG0sYApgKTt2YXIgVD1iLm1hdGNoKC9eW1x0IF0qLylbMF0sSD17dGV4dDoiIix0eXBlOiIifSxMPW5ldyBSLHc9bmV3IGYodGhpcy5fb3B0aW9ucyxUKSxrPW5ldyB1KGIsdGhpcy5fb3B0aW9ucykudG9rZW5pemUoKTt0aGlzLl90YWdfc3RhY2s9bmV3IHkodyk7Zm9yKHZhciB4PW51bGwsUz1rLm5leHQoKTtTLnR5cGUhPT1jLkVPRjspUy50eXBlPT09Yy5UQUdfT1BFTnx8Uy50eXBlPT09Yy5DT01NRU5UPyh4PXRoaXMuX2hhbmRsZV90YWdfb3Blbih3LFMsTCxILGspLEw9eCk6Uy50eXBlPT09Yy5BVFRSSUJVVEV8fFMudHlwZT09PWMuRVFVQUxTfHxTLnR5cGU9PT1jLlZBTFVFfHxTLnR5cGU9PT1jLlRFWFQmJiFMLnRhZ19jb21wbGV0ZT94PXRoaXMuX2hhbmRsZV9pbnNpZGVfdGFnKHcsUyxMLEgpOlMudHlwZT09PWMuVEFHX0NMT1NFP3g9dGhpcy5faGFuZGxlX3RhZ19jbG9zZSh3LFMsTCk6Uy50eXBlPT09Yy5URVhUP3g9dGhpcy5faGFuZGxlX3RleHQodyxTLEwpOlMudHlwZT09PWMuQ09OVFJPTF9GTE9XX09QRU4/eD10aGlzLl9oYW5kbGVfY29udHJvbF9mbG93X29wZW4odyxTKTpTLnR5cGU9PT1jLkNPTlRST0xfRkxPV19DTE9TRT94PXRoaXMuX2hhbmRsZV9jb250cm9sX2Zsb3dfY2xvc2UodyxTKTp3LmFkZF9yYXdfdG9rZW4oUyksSD14LFM9ay5uZXh0KCk7dmFyIEQ9dy5fb3V0cHV0LmdldF9jb2RlKHApO3JldHVybiBEfSxFLnByb3RvdHlwZS5faGFuZGxlX2NvbnRyb2xfZmxvd19vcGVuPWZ1bmN0aW9uKGIscCl7dmFyIFQ9e3RleHQ6cC50ZXh0LHR5cGU6cC50eXBlfTtyZXR1cm4gYi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKHAubmV3bGluZXN8fHAud2hpdGVzcGFjZV9iZWZvcmUhPT0iIiwhMCkscC5uZXdsaW5lcz9iLnByaW50X3ByZXNlcnZlZF9uZXdsaW5lcyhwKTpiLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4ocC5uZXdsaW5lc3x8cC53aGl0ZXNwYWNlX2JlZm9yZSE9PSIiLCEwKSxiLnByaW50X3Rva2VuKHApLGIuaW5kZW50KCksVH0sRS5wcm90b3R5cGUuX2hhbmRsZV9jb250cm9sX2Zsb3dfY2xvc2U9ZnVuY3Rpb24oYixwKXt2YXIgVD17dGV4dDpwLnRleHQsdHlwZTpwLnR5cGV9O3JldHVybiBiLmRlaW5kZW50KCkscC5uZXdsaW5lcz9iLnByaW50X3ByZXNlcnZlZF9uZXdsaW5lcyhwKTpiLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4ocC5uZXdsaW5lc3x8cC53aGl0ZXNwYWNlX2JlZm9yZSE9PSIiLCEwKSxiLnByaW50X3Rva2VuKHApLFR9LEUucHJvdG90eXBlLl9oYW5kbGVfdGFnX2Nsb3NlPWZ1bmN0aW9uKGIscCxUKXt2YXIgSD17dGV4dDpwLnRleHQsdHlwZTpwLnR5cGV9O3JldHVybiBiLmFsaWdubWVudF9zaXplPTAsVC50YWdfY29tcGxldGU9ITAsYi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKHAubmV3bGluZXN8fHAud2hpdGVzcGFjZV9iZWZvcmUhPT0iIiwhMCksVC5pc191bmZvcm1hdHRlZD9iLmFkZF9yYXdfdG9rZW4ocCk6KFQudGFnX3N0YXJ0X2NoYXI9PT0iPCImJihiLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4ocC50ZXh0WzBdPT09Ii8iLCEwKSx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZSYmVC5oYXNfd3JhcHBlZF9hdHRycyYmYi5wcmludF9uZXdsaW5lKCExKSksYi5wcmludF90b2tlbihwKSksVC5pbmRlbnRfY29udGVudCYmIShULmlzX3VuZm9ybWF0dGVkfHxULmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpJiYoYi5pbmRlbnQoKSxULmluZGVudF9jb250ZW50PSExKSwhVC5pc19pbmxpbmVfZWxlbWVudCYmIShULmlzX3VuZm9ybWF0dGVkfHxULmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpJiZiLnNldF93cmFwX3BvaW50KCksSH0sRS5wcm90b3R5cGUuX2hhbmRsZV9pbnNpZGVfdGFnPWZ1bmN0aW9uKGIscCxULEgpe3ZhciBMPVQuaGFzX3dyYXBwZWRfYXR0cnMsdz17dGV4dDpwLnRleHQsdHlwZTpwLnR5cGV9O3JldHVybiBiLnNldF9zcGFjZV9iZWZvcmVfdG9rZW4ocC5uZXdsaW5lc3x8cC53aGl0ZXNwYWNlX2JlZm9yZSE9PSIiLCEwKSxULmlzX3VuZm9ybWF0dGVkP2IuYWRkX3Jhd190b2tlbihwKTpULnRhZ19zdGFydF9jaGFyPT09InsiJiZwLnR5cGU9PT1jLlRFWFQ/Yi5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXMocCk/KHAubmV3bGluZXM9MCxiLmFkZF9yYXdfdG9rZW4ocCkpOmIucHJpbnRfdG9rZW4ocCk6KHAudHlwZT09PWMuQVRUUklCVVRFP2Iuc2V0X3NwYWNlX2JlZm9yZV90b2tlbighMCk6KHAudHlwZT09PWMuRVFVQUxTfHxwLnR5cGU9PT1jLlZBTFVFJiZwLnByZXZpb3VzLnR5cGU9PT1jLkVRVUFMUykmJmIuc2V0X3NwYWNlX2JlZm9yZV90b2tlbighMSkscC50eXBlPT09Yy5BVFRSSUJVVEUmJlQudGFnX3N0YXJ0X2NoYXI9PT0iPCImJigodGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlfHx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmVfYWxpZ25lZCkmJihiLnRyYXZlcnNlX3doaXRlc3BhY2UocCksTD1MfHxwLm5ld2xpbmVzIT09MCksdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2ZvcmNlJiZULmF0dHJfY291bnQ+PXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzX21pbl9hdHRycyYmKEgudHlwZSE9PWMuVEFHX09QRU58fHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZV9leHBhbmRfbXVsdGlsaW5lKSYmKGIucHJpbnRfbmV3bGluZSghMSksTD0hMCkpLGIucHJpbnRfdG9rZW4ocCksTD1MfHxiLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQoKSxULmhhc193cmFwcGVkX2F0dHJzPUwpLHd9LEUucHJvdG90eXBlLl9oYW5kbGVfdGV4dD1mdW5jdGlvbihiLHAsVCl7dmFyIEg9e3RleHQ6cC50ZXh0LHR5cGU6IlRLX0NPTlRFTlQifTtyZXR1cm4gVC5jdXN0b21fYmVhdXRpZmllcl9uYW1lP3RoaXMuX3ByaW50X2N1c3RvbV9iZWF0aWZpZXJfdGV4dChiLHAsVCk6VC5pc191bmZvcm1hdHRlZHx8VC5pc19jb250ZW50X3VuZm9ybWF0dGVkP2IuYWRkX3Jhd190b2tlbihwKTooYi50cmF2ZXJzZV93aGl0ZXNwYWNlKHApLGIucHJpbnRfdG9rZW4ocCkpLEh9LEUucHJvdG90eXBlLl9wcmludF9jdXN0b21fYmVhdGlmaWVyX3RleHQ9ZnVuY3Rpb24oYixwLFQpe3ZhciBIPXRoaXM7aWYocC50ZXh0IT09IiIpe3ZhciBMPXAudGV4dCx3LGs9MSx4PSIiLFM9IiI7VC5jdXN0b21fYmVhdXRpZmllcl9uYW1lPT09ImphdmFzY3JpcHQiJiZ0eXBlb2YgdGhpcy5fanNfYmVhdXRpZnk9PSJmdW5jdGlvbiI/dz10aGlzLl9qc19iZWF1dGlmeTpULmN1c3RvbV9iZWF1dGlmaWVyX25hbWU9PT0iY3NzIiYmdHlwZW9mIHRoaXMuX2Nzc19iZWF1dGlmeT09ImZ1bmN0aW9uIj93PXRoaXMuX2Nzc19iZWF1dGlmeTpULmN1c3RvbV9iZWF1dGlmaWVyX25hbWU9PT0iaHRtbCImJih3PWZ1bmN0aW9uKFYsWSl7dmFyIHNlPW5ldyBFKFYsWSxILl9qc19iZWF1dGlmeSxILl9jc3NfYmVhdXRpZnkpO3JldHVybiBzZS5iZWF1dGlmeSgpfSksdGhpcy5fb3B0aW9ucy5pbmRlbnRfc2NyaXB0cz09PSJrZWVwIj9rPTA6dGhpcy5fb3B0aW9ucy5pbmRlbnRfc2NyaXB0cz09PSJzZXBhcmF0ZSImJihrPS1iLmluZGVudF9sZXZlbCk7dmFyIEQ9Yi5nZXRfZnVsbF9pbmRlbnQoayk7aWYoTD1MLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLFQuY3VzdG9tX2JlYXV0aWZpZXJfbmFtZSE9PSJodG1sIiYmTFswXT09PSI8IiYmTC5tYXRjaCgvXig8IS0tfDwhXFtDREFUQVxbKS8pKXt2YXIgST0vXig8IS0tW15cbl0qfDwhXFtDREFUQVxbKShcbj8pKFsgXHRcbl0qKShbXHNcU10qKSgtLT58XV0+KSQvLmV4ZWMoTCk7aWYoIUkpe2IuYWRkX3Jhd190b2tlbihwKTtyZXR1cm59eD1EK0lbMV0rYApgLEw9SVs0XSxJWzVdJiYoUz1EK0lbNV0pLEw9TC5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKSwoSVsyXXx8SVszXS5pbmRleE9mKGAKYCkhPT0tMSkmJihJPUlbM10ubWF0Y2goL1sgXHRdKyQvKSxJJiYocC53aGl0ZXNwYWNlX2JlZm9yZT1JWzBdKSl9aWYoTClpZih3KXt2YXIgRj1mdW5jdGlvbigpe3RoaXMuZW9sPWAKYH07Ri5wcm90b3R5cGU9dGhpcy5fb3B0aW9ucy5yYXdfb3B0aW9uczt2YXIgVz1uZXcgRjtMPXcoRCtMLFcpfWVsc2V7dmFyIFU9cC53aGl0ZXNwYWNlX2JlZm9yZTtVJiYoTD1MLnJlcGxhY2UobmV3IFJlZ0V4cChgCihgK1UrIik/IiwiZyIpLGAKYCkpLEw9RCtMLnJlcGxhY2UoL1xuL2csYApgK0QpfXgmJihMP0w9eCtMK2AKYCtTOkw9eCtTKSxiLnByaW50X25ld2xpbmUoITEpLEwmJihwLnRleHQ9TCxwLndoaXRlc3BhY2VfYmVmb3JlPSIiLHAubmV3bGluZXM9MCxiLmFkZF9yYXdfdG9rZW4ocCksYi5wcmludF9uZXdsaW5lKCEwKSl9fSxFLnByb3RvdHlwZS5faGFuZGxlX3RhZ19vcGVuPWZ1bmN0aW9uKGIscCxULEgsTCl7dmFyIHc9dGhpcy5fZ2V0X3RhZ19vcGVuX3Rva2VuKHApO2lmKChULmlzX3VuZm9ybWF0dGVkfHxULmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpJiYhVC5pc19lbXB0eV9lbGVtZW50JiZwLnR5cGU9PT1jLlRBR19PUEVOJiYhdy5pc19zdGFydF90YWc/KGIuYWRkX3Jhd190b2tlbihwKSx3LnN0YXJ0X3RhZ190b2tlbj10aGlzLl90YWdfc3RhY2sudHJ5X3BvcCh3LnRhZ19uYW1lKSk6KGIudHJhdmVyc2Vfd2hpdGVzcGFjZShwKSx0aGlzLl9zZXRfdGFnX3Bvc2l0aW9uKGIscCx3LFQsSCksdy5pc19pbmxpbmVfZWxlbWVudHx8Yi5zZXRfd3JhcF9wb2ludCgpLGIucHJpbnRfdG9rZW4ocCkpLHcuaXNfc3RhcnRfdGFnJiZ0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2Upe3ZhciBrPTAseDtkbyB4PUwucGVlayhrKSx4LnR5cGU9PT1jLkFUVFJJQlVURSYmKHcuYXR0cl9jb3VudCs9MSksays9MTt3aGlsZSh4LnR5cGUhPT1jLkVPRiYmeC50eXBlIT09Yy5UQUdfQ0xPU0UpfXJldHVybih0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfYWxpZ25lZHx8dGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2FsaWduZWRfbXVsdGlwbGV8fHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZV9hbGlnbmVkKSYmKHcuYWxpZ25tZW50X3NpemU9cC50ZXh0Lmxlbmd0aCsxKSwhdy50YWdfY29tcGxldGUmJiF3LmlzX3VuZm9ybWF0dGVkJiYoYi5hbGlnbm1lbnRfc2l6ZT13LmFsaWdubWVudF9zaXplKSx3fTt2YXIgUj1mdW5jdGlvbihiLHApe2lmKHRoaXMucGFyZW50PWJ8fG51bGwsdGhpcy50ZXh0PSIiLHRoaXMudHlwZT0iVEtfVEFHX09QRU4iLHRoaXMudGFnX25hbWU9IiIsdGhpcy5pc19pbmxpbmVfZWxlbWVudD0hMSx0aGlzLmlzX3VuZm9ybWF0dGVkPSExLHRoaXMuaXNfY29udGVudF91bmZvcm1hdHRlZD0hMSx0aGlzLmlzX2VtcHR5X2VsZW1lbnQ9ITEsdGhpcy5pc19zdGFydF90YWc9ITEsdGhpcy5pc19lbmRfdGFnPSExLHRoaXMuaW5kZW50X2NvbnRlbnQ9ITEsdGhpcy5tdWx0aWxpbmVfY29udGVudD0hMSx0aGlzLmN1c3RvbV9iZWF1dGlmaWVyX25hbWU9bnVsbCx0aGlzLnN0YXJ0X3RhZ190b2tlbj1udWxsLHRoaXMuYXR0cl9jb3VudD0wLHRoaXMuaGFzX3dyYXBwZWRfYXR0cnM9ITEsdGhpcy5hbGlnbm1lbnRfc2l6ZT0wLHRoaXMudGFnX2NvbXBsZXRlPSExLHRoaXMudGFnX3N0YXJ0X2NoYXI9IiIsdGhpcy50YWdfY2hlY2s9IiIsIXApdGhpcy50YWdfY29tcGxldGU9ITA7ZWxzZXt2YXIgVDt0aGlzLnRhZ19zdGFydF9jaGFyPXAudGV4dFswXSx0aGlzLnRleHQ9cC50ZXh0LHRoaXMudGFnX3N0YXJ0X2NoYXI9PT0iPCI/KFQ9cC50ZXh0Lm1hdGNoKC9ePChbXlxzPl0qKS8pLHRoaXMudGFnX2NoZWNrPVQ/VFsxXToiIik6KFQ9cC50ZXh0Lm1hdGNoKC9ee3t+Pyg/OltcXl18I1wqPyk/KFteXHN9XSspLyksdGhpcy50YWdfY2hlY2s9VD9UWzFdOiIiLChwLnRleHQuc3RhcnRzV2l0aCgie3sjPiIpfHxwLnRleHQuc3RhcnRzV2l0aCgie3t+Iz4iKSkmJnRoaXMudGFnX2NoZWNrWzBdPT09Ij4iJiYodGhpcy50YWdfY2hlY2s9PT0iPiImJnAubmV4dCE9PW51bGw/dGhpcy50YWdfY2hlY2s9cC5uZXh0LnRleHQuc3BsaXQoIiAiKVswXTp0aGlzLnRhZ19jaGVjaz1wLnRleHQuc3BsaXQoIj4iKVsxXSkpLHRoaXMudGFnX2NoZWNrPXRoaXMudGFnX2NoZWNrLnRvTG93ZXJDYXNlKCkscC50eXBlPT09Yy5DT01NRU5UJiYodGhpcy50YWdfY29tcGxldGU9ITApLHRoaXMuaXNfc3RhcnRfdGFnPXRoaXMudGFnX2NoZWNrLmNoYXJBdCgwKSE9PSIvIix0aGlzLnRhZ19uYW1lPXRoaXMuaXNfc3RhcnRfdGFnP3RoaXMudGFnX2NoZWNrOnRoaXMudGFnX2NoZWNrLnN1YnN0cigxKSx0aGlzLmlzX2VuZF90YWc9IXRoaXMuaXNfc3RhcnRfdGFnfHxwLmNsb3NlZCYmcC5jbG9zZWQudGV4dD09PSIvPiI7dmFyIEg9Mjt0aGlzLnRhZ19zdGFydF9jaGFyPT09InsiJiZ0aGlzLnRleHQubGVuZ3RoPj0zJiZ0aGlzLnRleHQuY2hhckF0KDIpPT09In4iJiYoSD0zKSx0aGlzLmlzX2VuZF90YWc9dGhpcy5pc19lbmRfdGFnfHx0aGlzLnRhZ19zdGFydF9jaGFyPT09InsiJiYodGhpcy50ZXh0Lmxlbmd0aDwzfHwvW14jXF5dLy50ZXN0KHRoaXMudGV4dC5jaGFyQXQoSCkpKX19O0UucHJvdG90eXBlLl9nZXRfdGFnX29wZW5fdG9rZW49ZnVuY3Rpb24oYil7dmFyIHA9bmV3IFIodGhpcy5fdGFnX3N0YWNrLmdldF9wYXJzZXJfdG9rZW4oKSxiKTtyZXR1cm4gcC5hbGlnbm1lbnRfc2l6ZT10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZSxwLmlzX2VuZF90YWc9cC5pc19lbmRfdGFnfHxBKHAudGFnX2NoZWNrLHRoaXMuX29wdGlvbnMudm9pZF9lbGVtZW50cykscC5pc19lbXB0eV9lbGVtZW50PXAudGFnX2NvbXBsZXRlfHxwLmlzX3N0YXJ0X3RhZyYmcC5pc19lbmRfdGFnLHAuaXNfdW5mb3JtYXR0ZWQ9IXAudGFnX2NvbXBsZXRlJiZBKHAudGFnX2NoZWNrLHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWQpLHAuaXNfY29udGVudF91bmZvcm1hdHRlZD0hcC5pc19lbXB0eV9lbGVtZW50JiZBKHAudGFnX2NoZWNrLHRoaXMuX29wdGlvbnMuY29udGVudF91bmZvcm1hdHRlZCkscC5pc19pbmxpbmVfZWxlbWVudD1BKHAudGFnX25hbWUsdGhpcy5fb3B0aW9ucy5pbmxpbmUpfHx0aGlzLl9vcHRpb25zLmlubGluZV9jdXN0b21fZWxlbWVudHMmJnAudGFnX25hbWUuaW5jbHVkZXMoIi0iKXx8cC50YWdfc3RhcnRfY2hhcj09PSJ7IixwfSxFLnByb3RvdHlwZS5fc2V0X3RhZ19wb3NpdGlvbj1mdW5jdGlvbihiLHAsVCxILEwpe2lmKFQuaXNfZW1wdHlfZWxlbWVudHx8KFQuaXNfZW5kX3RhZz9ULnN0YXJ0X3RhZ190b2tlbj10aGlzLl90YWdfc3RhY2sudHJ5X3BvcChULnRhZ19uYW1lKToodGhpcy5fZG9fb3B0aW9uYWxfZW5kX2VsZW1lbnQoVCkmJihULmlzX2lubGluZV9lbGVtZW50fHxiLnByaW50X25ld2xpbmUoITEpKSx0aGlzLl90YWdfc3RhY2sucmVjb3JkX3RhZyhUKSwoVC50YWdfbmFtZT09PSJzY3JpcHQifHxULnRhZ19uYW1lPT09InN0eWxlIikmJiEoVC5pc191bmZvcm1hdHRlZHx8VC5pc19jb250ZW50X3VuZm9ybWF0dGVkKSYmKFQuY3VzdG9tX2JlYXV0aWZpZXJfbmFtZT1nKFQudGFnX2NoZWNrLHApKSkpLEEoVC50YWdfY2hlY2ssdGhpcy5fb3B0aW9ucy5leHRyYV9saW5lcnMpJiYoYi5wcmludF9uZXdsaW5lKCExKSxiLl9vdXRwdXQuanVzdF9hZGRlZF9ibGFua2xpbmUoKXx8Yi5wcmludF9uZXdsaW5lKCEwKSksVC5pc19lbXB0eV9lbGVtZW50KXtpZihULnRhZ19zdGFydF9jaGFyPT09InsiJiZULnRhZ19jaGVjaz09PSJlbHNlIil7dGhpcy5fdGFnX3N0YWNrLmluZGVudF90b190YWcoWyJpZiIsInVubGVzcyIsImVhY2giXSksVC5pbmRlbnRfY29udGVudD0hMDt2YXIgdz1iLmN1cnJlbnRfbGluZV9oYXNfbWF0Y2goL3t7I2lmLyk7d3x8Yi5wcmludF9uZXdsaW5lKCExKX1ULnRhZ19uYW1lPT09IiEtLSImJkwudHlwZT09PWMuVEFHX0NMT1NFJiZILmlzX2VuZF90YWcmJlQudGV4dC5pbmRleE9mKGAKYCk9PT0tMXx8KFQuaXNfaW5saW5lX2VsZW1lbnR8fFQuaXNfdW5mb3JtYXR0ZWR8fGIucHJpbnRfbmV3bGluZSghMSksdGhpcy5fY2FsY2x1YXRlX3BhcmVudF9tdWx0aWxpbmUoYixUKSl9ZWxzZSBpZihULmlzX2VuZF90YWcpe3ZhciBrPSExO2s9VC5zdGFydF90YWdfdG9rZW4mJlQuc3RhcnRfdGFnX3Rva2VuLm11bHRpbGluZV9jb250ZW50LGs9a3x8IVQuaXNfaW5saW5lX2VsZW1lbnQmJiEoSC5pc19pbmxpbmVfZWxlbWVudHx8SC5pc191bmZvcm1hdHRlZCkmJiEoTC50eXBlPT09Yy5UQUdfQ0xPU0UmJlQuc3RhcnRfdGFnX3Rva2VuPT09SCkmJkwudHlwZSE9PSJUS19DT05URU5UIiwoVC5pc19jb250ZW50X3VuZm9ybWF0dGVkfHxULmlzX3VuZm9ybWF0dGVkKSYmKGs9ITEpLGsmJmIucHJpbnRfbmV3bGluZSghMSl9ZWxzZSBULmluZGVudF9jb250ZW50PSFULmN1c3RvbV9iZWF1dGlmaWVyX25hbWUsVC50YWdfc3RhcnRfY2hhcj09PSI8IiYmKFQudGFnX25hbWU9PT0iaHRtbCI/VC5pbmRlbnRfY29udGVudD10aGlzLl9vcHRpb25zLmluZGVudF9pbm5lcl9odG1sOlQudGFnX25hbWU9PT0iaGVhZCI/VC5pbmRlbnRfY29udGVudD10aGlzLl9vcHRpb25zLmluZGVudF9oZWFkX2lubmVyX2h0bWw6VC50YWdfbmFtZT09PSJib2R5IiYmKFQuaW5kZW50X2NvbnRlbnQ9dGhpcy5fb3B0aW9ucy5pbmRlbnRfYm9keV9pbm5lcl9odG1sKSksIShULmlzX2lubGluZV9lbGVtZW50fHxULmlzX3VuZm9ybWF0dGVkKSYmKEwudHlwZSE9PSJUS19DT05URU5UInx8VC5pc19jb250ZW50X3VuZm9ybWF0dGVkKSYmYi5wcmludF9uZXdsaW5lKCExKSx0aGlzLl9jYWxjbHVhdGVfcGFyZW50X211bHRpbGluZShiLFQpfSxFLnByb3RvdHlwZS5fY2FsY2x1YXRlX3BhcmVudF9tdWx0aWxpbmU9ZnVuY3Rpb24oYixwKXtwLnBhcmVudCYmYi5fb3V0cHV0Lmp1c3RfYWRkZWRfbmV3bGluZSgpJiYhKChwLmlzX2lubGluZV9lbGVtZW50fHxwLmlzX3VuZm9ybWF0dGVkKSYmcC5wYXJlbnQuaXNfaW5saW5lX2VsZW1lbnQpJiYocC5wYXJlbnQubXVsdGlsaW5lX2NvbnRlbnQ9ITApfTt2YXIgTj1bImFkZHJlc3MiLCJhcnRpY2xlIiwiYXNpZGUiLCJibG9ja3F1b3RlIiwiZGV0YWlscyIsImRpdiIsImRsIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhyIiwibWFpbiIsIm1lbnUiLCJuYXYiLCJvbCIsInAiLCJwcmUiLCJzZWN0aW9uIiwidGFibGUiLCJ1bCJdLE09WyJhIiwiYXVkaW8iLCJkZWwiLCJpbnMiLCJtYXAiLCJub3NjcmlwdCIsInZpZGVvIl07RS5wcm90b3R5cGUuX2RvX29wdGlvbmFsX2VuZF9lbGVtZW50PWZ1bmN0aW9uKGIpe3ZhciBwPW51bGw7aWYoIShiLmlzX2VtcHR5X2VsZW1lbnR8fCFiLmlzX3N0YXJ0X3RhZ3x8IWIucGFyZW50KSl7aWYoYi50YWdfbmFtZT09PSJib2R5IilwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJoZWFkIik7ZWxzZSBpZihiLnRhZ19uYW1lPT09ImxpIilwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJsaSIsWyJvbCIsInVsIiwibWVudSJdKTtlbHNlIGlmKGIudGFnX25hbWU9PT0iZGQifHxiLnRhZ19uYW1lPT09ImR0IilwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJkdCIsWyJkbCJdKSxwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJkZCIsWyJkbCJdKTtlbHNlIGlmKGIucGFyZW50LnRhZ19uYW1lPT09InAiJiZOLmluZGV4T2YoYi50YWdfbmFtZSkhPT0tMSl7dmFyIFQ9Yi5wYXJlbnQucGFyZW50OyghVHx8TS5pbmRleE9mKFQudGFnX25hbWUpPT09LTEpJiYocD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgicCIpKX1lbHNlIGIudGFnX25hbWU9PT0icnAifHxiLnRhZ19uYW1lPT09InJ0Ij8ocD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgicnQiLFsicnVieSIsInJ0YyJdKSxwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJycCIsWyJydWJ5IiwicnRjIl0pKTpiLnRhZ19uYW1lPT09Im9wdGdyb3VwIj9wPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJvcHRncm91cCIsWyJzZWxlY3QiXSk6Yi50YWdfbmFtZT09PSJvcHRpb24iP3A9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoIm9wdGlvbiIsWyJzZWxlY3QiLCJkYXRhbGlzdCIsIm9wdGdyb3VwIl0pOmIudGFnX25hbWU9PT0iY29sZ3JvdXAiP3A9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNhcHRpb24iLFsidGFibGUiXSk6Yi50YWdfbmFtZT09PSJ0aGVhZCI/KHA9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNhcHRpb24iLFsidGFibGUiXSkscD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY29sZ3JvdXAiLFsidGFibGUiXSkpOmIudGFnX25hbWU9PT0idGJvZHkifHxiLnRhZ19uYW1lPT09InRmb290Ij8ocD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY2FwdGlvbiIsWyJ0YWJsZSJdKSxwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjb2xncm91cCIsWyJ0YWJsZSJdKSxwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJ0aGVhZCIsWyJ0YWJsZSJdKSxwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJ0Ym9keSIsWyJ0YWJsZSJdKSk6Yi50YWdfbmFtZT09PSJ0ciI/KHA9cHx8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNhcHRpb24iLFsidGFibGUiXSkscD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY29sZ3JvdXAiLFsidGFibGUiXSkscD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgidHIiLFsidGFibGUiLCJ0aGVhZCIsInRib2R5IiwidGZvb3QiXSkpOihiLnRhZ19uYW1lPT09InRoInx8Yi50YWdfbmFtZT09PSJ0ZCIpJiYocD1wfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgidGQiLFsidGFibGUiLCJ0aGVhZCIsInRib2R5IiwidGZvb3QiLCJ0ciJdKSxwPXB8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJ0aCIsWyJ0YWJsZSIsInRoZWFkIiwidGJvZHkiLCJ0Zm9vdCIsInRyIl0pKTtyZXR1cm4gYi5wYXJlbnQ9dGhpcy5fdGFnX3N0YWNrLmdldF9wYXJzZXJfdG9rZW4oKSxwfX0sci5leHBvcnRzLkJlYXV0aWZpZXI9RX0sZnVuY3Rpb24ocixzLG8pe3ZhciBsPW8oNikuT3B0aW9ucztmdW5jdGlvbiBhKHUpe2wuY2FsbCh0aGlzLHUsImh0bWwiKSx0aGlzLnRlbXBsYXRpbmcubGVuZ3RoPT09MSYmdGhpcy50ZW1wbGF0aW5nWzBdPT09ImF1dG8iJiYodGhpcy50ZW1wbGF0aW5nPVsiZGphbmdvIiwiZXJiIiwiaGFuZGxlYmFycyIsInBocCJdKSx0aGlzLmluZGVudF9pbm5lcl9odG1sPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfaW5uZXJfaHRtbCIpLHRoaXMuaW5kZW50X2JvZHlfaW5uZXJfaHRtbD10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2JvZHlfaW5uZXJfaHRtbCIsITApLHRoaXMuaW5kZW50X2hlYWRfaW5uZXJfaHRtbD10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2hlYWRfaW5uZXJfaHRtbCIsITApLHRoaXMuaW5kZW50X2hhbmRsZWJhcnM9dGhpcy5fZ2V0X2Jvb2xlYW4oImluZGVudF9oYW5kbGViYXJzIiwhMCksdGhpcy53cmFwX2F0dHJpYnV0ZXM9dGhpcy5fZ2V0X3NlbGVjdGlvbigid3JhcF9hdHRyaWJ1dGVzIixbImF1dG8iLCJmb3JjZSIsImZvcmNlLWFsaWduZWQiLCJmb3JjZS1leHBhbmQtbXVsdGlsaW5lIiwiYWxpZ25lZC1tdWx0aXBsZSIsInByZXNlcnZlIiwicHJlc2VydmUtYWxpZ25lZCJdKSx0aGlzLndyYXBfYXR0cmlidXRlc19taW5fYXR0cnM9dGhpcy5fZ2V0X251bWJlcigid3JhcF9hdHRyaWJ1dGVzX21pbl9hdHRycyIsMiksdGhpcy53cmFwX2F0dHJpYnV0ZXNfaW5kZW50X3NpemU9dGhpcy5fZ2V0X251bWJlcigid3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplIix0aGlzLmluZGVudF9zaXplKSx0aGlzLmV4dHJhX2xpbmVycz10aGlzLl9nZXRfYXJyYXkoImV4dHJhX2xpbmVycyIsWyJoZWFkIiwiYm9keSIsIi9odG1sIl0pLHRoaXMuaW5saW5lPXRoaXMuX2dldF9hcnJheSgiaW5saW5lIixbImEiLCJhYmJyIiwiYXJlYSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2l0ZSIsImNvZGUiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZWwiLCJkZm4iLCJlbSIsImVtYmVkIiwiaSIsImlmcmFtZSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwia2V5Z2VuIiwibGFiZWwiLCJtYXAiLCJtYXJrIiwibWF0aCIsIm1ldGVyIiwibm9zY3JpcHQiLCJvYmplY3QiLCJvdXRwdXQiLCJwcm9ncmVzcyIsInEiLCJydWJ5IiwicyIsInNhbXAiLCJzZWxlY3QiLCJzbWFsbCIsInNwYW4iLCJzdHJvbmciLCJzdWIiLCJzdXAiLCJzdmciLCJ0ZW1wbGF0ZSIsInRleHRhcmVhIiwidGltZSIsInUiLCJ2YXIiLCJ2aWRlbyIsIndiciIsInRleHQiLCJhY3JvbnltIiwiYmlnIiwic3RyaWtlIiwidHQiXSksdGhpcy5pbmxpbmVfY3VzdG9tX2VsZW1lbnRzPXRoaXMuX2dldF9ib29sZWFuKCJpbmxpbmVfY3VzdG9tX2VsZW1lbnRzIiwhMCksdGhpcy52b2lkX2VsZW1lbnRzPXRoaXMuX2dldF9hcnJheSgidm9pZF9lbGVtZW50cyIsWyJhcmVhIiwiYmFzZSIsImJyIiwiY29sIiwiZW1iZWQiLCJociIsImltZyIsImlucHV0Iiwia2V5Z2VuIiwibGluayIsIm1lbnVpdGVtIiwibWV0YSIsInBhcmFtIiwic291cmNlIiwidHJhY2siLCJ3YnIiLCIhZG9jdHlwZSIsIj94bWwiLCJiYXNlZm9udCIsImlzaW5kZXgiXSksdGhpcy51bmZvcm1hdHRlZD10aGlzLl9nZXRfYXJyYXkoInVuZm9ybWF0dGVkIixbXSksdGhpcy5jb250ZW50X3VuZm9ybWF0dGVkPXRoaXMuX2dldF9hcnJheSgiY29udGVudF91bmZvcm1hdHRlZCIsWyJwcmUiLCJ0ZXh0YXJlYSJdKSx0aGlzLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyPXRoaXMuX2dldF9jaGFyYWN0ZXJzKCJ1bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlciIpLHRoaXMuaW5kZW50X3NjcmlwdHM9dGhpcy5fZ2V0X3NlbGVjdGlvbigiaW5kZW50X3NjcmlwdHMiLFsibm9ybWFsIiwia2VlcCIsInNlcGFyYXRlIl0pfWEucHJvdG90eXBlPW5ldyBsLHIuZXhwb3J0cy5PcHRpb25zPWF9LGZ1bmN0aW9uKHIscyxvKXt2YXIgbD1vKDkpLlRva2VuaXplcixhPW8oOSkuVE9LRU4sdT1vKDEzKS5EaXJlY3RpdmVzLGM9bygxNCkuVGVtcGxhdGFibGVQYXR0ZXJuLGQ9bygxMikuUGF0dGVybixtPXtUQUdfT1BFTjoiVEtfVEFHX09QRU4iLFRBR19DTE9TRToiVEtfVEFHX0NMT1NFIixDT05UUk9MX0ZMT1dfT1BFTjoiVEtfQ09OVFJPTF9GTE9XX09QRU4iLENPTlRST0xfRkxPV19DTE9TRToiVEtfQ09OVFJPTF9GTE9XX0NMT1NFIixBVFRSSUJVVEU6IlRLX0FUVFJJQlVURSIsRVFVQUxTOiJUS19FUVVBTFMiLFZBTFVFOiJUS19WQUxVRSIsQ09NTUVOVDoiVEtfQ09NTUVOVCIsVEVYVDoiVEtfVEVYVCIsVU5LTk9XTjoiVEtfVU5LTk9XTiIsU1RBUlQ6YS5TVEFSVCxSQVc6YS5SQVcsRU9GOmEuRU9GfSxmPW5ldyB1KC88XCEtLS8sLy0tPi8pLF89ZnVuY3Rpb24oZyxBKXtsLmNhbGwodGhpcyxnLEEpLHRoaXMuX2N1cnJlbnRfdGFnX25hbWU9IiI7dmFyIHY9bmV3IGModGhpcy5faW5wdXQpLnJlYWRfb3B0aW9ucyh0aGlzLl9vcHRpb25zKSx5PW5ldyBkKHRoaXMuX2lucHV0KTtpZih0aGlzLl9fcGF0dGVybnM9e3dvcmQ6di51bnRpbCgvW1xuXHJcdCA8XS8pLHdvcmRfY29udHJvbF9mbG93X2Nsb3NlX2V4Y2x1ZGVkOnYudW50aWwoL1tcblxyXHQgPH1dLyksc2luZ2xlX3F1b3RlOnYudW50aWxfYWZ0ZXIoLycvKSxkb3VibGVfcXVvdGU6di51bnRpbF9hZnRlcigvIi8pLGF0dHJpYnV0ZTp2LnVudGlsKC9bXG5cclx0ID0+XXxcLz4vKSxlbGVtZW50X25hbWU6di51bnRpbCgvW1xuXHJcdCA+XC9dLyksYW5ndWxhcl9jb250cm9sX2Zsb3dfc3RhcnQ6eS5tYXRjaGluZygvXEBbYS16QS1aXStbXih7XSpbKHtdLyksaGFuZGxlYmFyc19jb21tZW50Onkuc3RhcnRpbmdfd2l0aCgve3shLS0vKS51bnRpbF9hZnRlcigvLS19fS8pLGhhbmRsZWJhcnM6eS5zdGFydGluZ193aXRoKC97ey8pLnVudGlsX2FmdGVyKC99fS8pLGhhbmRsZWJhcnNfb3Blbjp5LnVudGlsKC9bXG5cclx0IH1dLyksaGFuZGxlYmFyc19yYXdfY2xvc2U6eS51bnRpbCgvfX0vKSxjb21tZW50Onkuc3RhcnRpbmdfd2l0aCgvPCEtLS8pLnVudGlsX2FmdGVyKC8tLT4vKSxjZGF0YTp5LnN0YXJ0aW5nX3dpdGgoLzwhXFtDREFUQVxbLykudW50aWxfYWZ0ZXIoL11dPi8pLGNvbmRpdGlvbmFsX2NvbW1lbnQ6eS5zdGFydGluZ193aXRoKC88IVxbLykudW50aWxfYWZ0ZXIoL10+LykscHJvY2Vzc2luZzp5LnN0YXJ0aW5nX3dpdGgoLzxcPy8pLnVudGlsX2FmdGVyKC9cPz4vKX0sdGhpcy5fb3B0aW9ucy5pbmRlbnRfaGFuZGxlYmFycyYmKHRoaXMuX19wYXR0ZXJucy53b3JkPXRoaXMuX19wYXR0ZXJucy53b3JkLmV4Y2x1ZGUoImhhbmRsZWJhcnMiKSx0aGlzLl9fcGF0dGVybnMud29yZF9jb250cm9sX2Zsb3dfY2xvc2VfZXhjbHVkZWQ9dGhpcy5fX3BhdHRlcm5zLndvcmRfY29udHJvbF9mbG93X2Nsb3NlX2V4Y2x1ZGVkLmV4Y2x1ZGUoImhhbmRsZWJhcnMiKSksdGhpcy5fdW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXI9bnVsbCx0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyKXt2YXIgRT10aGlzLl9pbnB1dC5nZXRfbGl0ZXJhbF9yZWdleHAodGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcik7dGhpcy5fX3BhdHRlcm5zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyPXkubWF0Y2hpbmcoRSkudW50aWxfYWZ0ZXIoRSl9fTtfLnByb3RvdHlwZT1uZXcgbCxfLnByb3RvdHlwZS5faXNfY29tbWVudD1mdW5jdGlvbihnKXtyZXR1cm4hMX0sXy5wcm90b3R5cGUuX2lzX29wZW5pbmc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcudHlwZT09PW0uVEFHX09QRU58fGcudHlwZT09PW0uQ09OVFJPTF9GTE9XX09QRU59LF8ucHJvdG90eXBlLl9pc19jbG9zaW5nPWZ1bmN0aW9uKGcsQSl7cmV0dXJuIGcudHlwZT09PW0uVEFHX0NMT1NFJiZBJiYoKGcudGV4dD09PSI+Inx8Zy50ZXh0PT09Ii8+IikmJkEudGV4dFswXT09PSI8Inx8Zy50ZXh0PT09In19IiYmQS50ZXh0WzBdPT09InsiJiZBLnRleHRbMV09PT0ieyIpfHxnLnR5cGU9PT1tLkNPTlRST0xfRkxPV19DTE9TRSYmZy50ZXh0PT09In0iJiZBLnRleHQuZW5kc1dpdGgoInsiKX0sXy5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudF90YWdfbmFtZT0iIn0sXy5wcm90b3R5cGUuX2dldF9uZXh0X3Rva2VuPWZ1bmN0aW9uKGcsQSl7dmFyIHY9bnVsbDt0aGlzLl9yZWFkV2hpdGVzcGFjZSgpO3ZhciB5PXRoaXMuX2lucHV0LnBlZWsoKTtyZXR1cm4geT09PW51bGw/dGhpcy5fY3JlYXRlX3Rva2VuKG0uRU9GLCIiKToodj12fHx0aGlzLl9yZWFkX29wZW5faGFuZGxlYmFycyh5LEEpLHY9dnx8dGhpcy5fcmVhZF9hdHRyaWJ1dGUoeSxnLEEpLHY9dnx8dGhpcy5fcmVhZF9jbG9zZSh5LEEpLHY9dnx8dGhpcy5fcmVhZF9jb250cm9sX2Zsb3dzKHksQSksdj12fHx0aGlzLl9yZWFkX3Jhd19jb250ZW50KHksZyxBKSx2PXZ8fHRoaXMuX3JlYWRfY29udGVudF93b3JkKHksQSksdj12fHx0aGlzLl9yZWFkX2NvbW1lbnRfb3JfY2RhdGEoeSksdj12fHx0aGlzLl9yZWFkX3Byb2Nlc3NpbmcoeSksdj12fHx0aGlzLl9yZWFkX29wZW4oeSxBKSx2PXZ8fHRoaXMuX2NyZWF0ZV90b2tlbihtLlVOS05PV04sdGhpcy5faW5wdXQubmV4dCgpKSx2KX0sXy5wcm90b3R5cGUuX3JlYWRfY29tbWVudF9vcl9jZGF0YT1mdW5jdGlvbihnKXt2YXIgQT1udWxsLHY9bnVsbCx5PW51bGw7aWYoZz09PSI8Iil7dmFyIEU9dGhpcy5faW5wdXQucGVlaygxKTtFPT09IiEiJiYodj10aGlzLl9fcGF0dGVybnMuY29tbWVudC5yZWFkKCksdj8oeT1mLmdldF9kaXJlY3RpdmVzKHYpLHkmJnkuaWdub3JlPT09InN0YXJ0IiYmKHYrPWYucmVhZElnbm9yZWQodGhpcy5faW5wdXQpKSk6dj10aGlzLl9fcGF0dGVybnMuY2RhdGEucmVhZCgpKSx2JiYoQT10aGlzLl9jcmVhdGVfdG9rZW4obS5DT01NRU5ULHYpLEEuZGlyZWN0aXZlcz15KX1yZXR1cm4gQX0sXy5wcm90b3R5cGUuX3JlYWRfcHJvY2Vzc2luZz1mdW5jdGlvbihnKXt2YXIgQT1udWxsLHY9bnVsbCx5PW51bGw7aWYoZz09PSI8Iil7dmFyIEU9dGhpcy5faW5wdXQucGVlaygxKTsoRT09PSIhInx8RT09PSI/IikmJih2PXRoaXMuX19wYXR0ZXJucy5jb25kaXRpb25hbF9jb21tZW50LnJlYWQoKSx2PXZ8fHRoaXMuX19wYXR0ZXJucy5wcm9jZXNzaW5nLnJlYWQoKSksdiYmKEE9dGhpcy5fY3JlYXRlX3Rva2VuKG0uQ09NTUVOVCx2KSxBLmRpcmVjdGl2ZXM9eSl9cmV0dXJuIEF9LF8ucHJvdG90eXBlLl9yZWFkX29wZW49ZnVuY3Rpb24oZyxBKXt2YXIgdj1udWxsLHk9bnVsbDtyZXR1cm4oIUF8fEEudHlwZT09PW0uQ09OVFJPTF9GTE9XX09QRU4pJiZnPT09IjwiJiYodj10aGlzLl9pbnB1dC5uZXh0KCksdGhpcy5faW5wdXQucGVlaygpPT09Ii8iJiYodis9dGhpcy5faW5wdXQubmV4dCgpKSx2Kz10aGlzLl9fcGF0dGVybnMuZWxlbWVudF9uYW1lLnJlYWQoKSx5PXRoaXMuX2NyZWF0ZV90b2tlbihtLlRBR19PUEVOLHYpKSx5fSxfLnByb3RvdHlwZS5fcmVhZF9vcGVuX2hhbmRsZWJhcnM9ZnVuY3Rpb24oZyxBKXt2YXIgdj1udWxsLHk9bnVsbDtyZXR1cm4oIUF8fEEudHlwZT09PW0uQ09OVFJPTF9GTE9XX09QRU4pJiZ0aGlzLl9vcHRpb25zLmluZGVudF9oYW5kbGViYXJzJiZnPT09InsiJiZ0aGlzLl9pbnB1dC5wZWVrKDEpPT09InsiJiYodGhpcy5faW5wdXQucGVlaygyKT09PSIhIj8odj10aGlzLl9fcGF0dGVybnMuaGFuZGxlYmFyc19jb21tZW50LnJlYWQoKSx2PXZ8fHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzLnJlYWQoKSx5PXRoaXMuX2NyZWF0ZV90b2tlbihtLkNPTU1FTlQsdikpOih2PXRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX29wZW4ucmVhZCgpLHk9dGhpcy5fY3JlYXRlX3Rva2VuKG0uVEFHX09QRU4sdikpKSx5fSxfLnByb3RvdHlwZS5fcmVhZF9jb250cm9sX2Zsb3dzPWZ1bmN0aW9uKGcsQSl7dmFyIHY9IiIseT1udWxsO2lmKCF0aGlzLl9vcHRpb25zLnRlbXBsYXRpbmcuaW5jbHVkZXMoImFuZ3VsYXIiKXx8IXRoaXMuX29wdGlvbnMuaW5kZW50X2hhbmRsZWJhcnMpcmV0dXJuIHk7aWYoZz09PSJAIil7aWYodj10aGlzLl9fcGF0dGVybnMuYW5ndWxhcl9jb250cm9sX2Zsb3dfc3RhcnQucmVhZCgpLHY9PT0iIilyZXR1cm4geTtmb3IodmFyIEU9di5lbmRzV2l0aCgiKCIpPzE6MCxSPTA7ISh2LmVuZHNXaXRoKCJ7IikmJkU9PT1SKTspe3ZhciBOPXRoaXMuX2lucHV0Lm5leHQoKTtpZihOPT09bnVsbClicmVhaztOPT09IigiP0UrKzpOPT09IikiJiZSKyssdis9Tn15PXRoaXMuX2NyZWF0ZV90b2tlbihtLkNPTlRST0xfRkxPV19PUEVOLHYpfWVsc2UgZz09PSJ9IiYmQSYmQS50eXBlPT09bS5DT05UUk9MX0ZMT1dfT1BFTiYmKHY9dGhpcy5faW5wdXQubmV4dCgpLHk9dGhpcy5fY3JlYXRlX3Rva2VuKG0uQ09OVFJPTF9GTE9XX0NMT1NFLHYpKTtyZXR1cm4geX0sXy5wcm90b3R5cGUuX3JlYWRfY2xvc2U9ZnVuY3Rpb24oZyxBKXt2YXIgdj1udWxsLHk9bnVsbDtyZXR1cm4gQSYmQS50eXBlPT09bS5UQUdfT1BFTiYmKEEudGV4dFswXT09PSI8IiYmKGc9PT0iPiJ8fGc9PT0iLyImJnRoaXMuX2lucHV0LnBlZWsoMSk9PT0iPiIpPyh2PXRoaXMuX2lucHV0Lm5leHQoKSxnPT09Ii8iJiYodis9dGhpcy5faW5wdXQubmV4dCgpKSx5PXRoaXMuX2NyZWF0ZV90b2tlbihtLlRBR19DTE9TRSx2KSk6QS50ZXh0WzBdPT09InsiJiZnPT09In0iJiZ0aGlzLl9pbnB1dC5wZWVrKDEpPT09In0iJiYodGhpcy5faW5wdXQubmV4dCgpLHRoaXMuX2lucHV0Lm5leHQoKSx5PXRoaXMuX2NyZWF0ZV90b2tlbihtLlRBR19DTE9TRSwifX0iKSkpLHl9LF8ucHJvdG90eXBlLl9yZWFkX2F0dHJpYnV0ZT1mdW5jdGlvbihnLEEsdil7dmFyIHk9bnVsbCxFPSIiO2lmKHYmJnYudGV4dFswXT09PSI8IilpZihnPT09Ij0iKXk9dGhpcy5fY3JlYXRlX3Rva2VuKG0uRVFVQUxTLHRoaXMuX2lucHV0Lm5leHQoKSk7ZWxzZSBpZihnPT09JyInfHxnPT09IiciKXt2YXIgUj10aGlzLl9pbnB1dC5uZXh0KCk7Zz09PSciJz9SKz10aGlzLl9fcGF0dGVybnMuZG91YmxlX3F1b3RlLnJlYWQoKTpSKz10aGlzLl9fcGF0dGVybnMuc2luZ2xlX3F1b3RlLnJlYWQoKSx5PXRoaXMuX2NyZWF0ZV90b2tlbihtLlZBTFVFLFIpfWVsc2UgRT10aGlzLl9fcGF0dGVybnMuYXR0cmlidXRlLnJlYWQoKSxFJiYoQS50eXBlPT09bS5FUVVBTFM/eT10aGlzLl9jcmVhdGVfdG9rZW4obS5WQUxVRSxFKTp5PXRoaXMuX2NyZWF0ZV90b2tlbihtLkFUVFJJQlVURSxFKSk7cmV0dXJuIHl9LF8ucHJvdG90eXBlLl9pc19jb250ZW50X3VuZm9ybWF0dGVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9vcHRpb25zLnZvaWRfZWxlbWVudHMuaW5kZXhPZihnKT09PS0xJiYodGhpcy5fb3B0aW9ucy5jb250ZW50X3VuZm9ybWF0dGVkLmluZGV4T2YoZykhPT0tMXx8dGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZC5pbmRleE9mKGcpIT09LTEpfSxfLnByb3RvdHlwZS5fcmVhZF9yYXdfY29udGVudD1mdW5jdGlvbihnLEEsdil7dmFyIHk9IiI7aWYodiYmdi50ZXh0WzBdPT09InsiKXk9dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfcmF3X2Nsb3NlLnJlYWQoKTtlbHNlIGlmKEEudHlwZT09PW0uVEFHX0NMT1NFJiZBLm9wZW5lZC50ZXh0WzBdPT09IjwiJiZBLnRleHRbMF0hPT0iLyIpe3ZhciBFPUEub3BlbmVkLnRleHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7aWYoRT09PSJzY3JpcHQifHxFPT09InN0eWxlIil7dmFyIFI9dGhpcy5fcmVhZF9jb21tZW50X29yX2NkYXRhKGcpO2lmKFIpcmV0dXJuIFIudHlwZT1tLlRFWFQsUjt5PXRoaXMuX2lucHV0LnJlYWRVbnRpbChuZXcgUmVnRXhwKCI8LyIrRSsiW1xcblxcclxcdCBdKj8+IiwiaWciKSl9ZWxzZSB0aGlzLl9pc19jb250ZW50X3VuZm9ybWF0dGVkKEUpJiYoeT10aGlzLl9pbnB1dC5yZWFkVW50aWwobmV3IFJlZ0V4cCgiPC8iK0UrIltcXG5cXHJcXHQgXSo/PiIsImlnIikpKX1yZXR1cm4geT90aGlzLl9jcmVhdGVfdG9rZW4obS5URVhULHkpOm51bGx9LF8ucHJvdG90eXBlLl9yZWFkX2NvbnRlbnRfd29yZD1mdW5jdGlvbihnLEEpe3ZhciB2PSIiO2lmKHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXImJmc9PT10aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyWzBdJiYodj10aGlzLl9fcGF0dGVybnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIucmVhZCgpKSx2fHwodj1BJiZBLnR5cGU9PT1tLkNPTlRST0xfRkxPV19PUEVOP3RoaXMuX19wYXR0ZXJucy53b3JkX2NvbnRyb2xfZmxvd19jbG9zZV9leGNsdWRlZC5yZWFkKCk6dGhpcy5fX3BhdHRlcm5zLndvcmQucmVhZCgpKSx2KXJldHVybiB0aGlzLl9jcmVhdGVfdG9rZW4obS5URVhULHYpfSxyLmV4cG9ydHMuVG9rZW5pemVyPV8sci5leHBvcnRzLlRPS0VOPW19XSx0PXt9O2Z1bmN0aW9uIG4ocil7dmFyIHM9dFtyXTtpZihzIT09dm9pZCAwKXJldHVybiBzLmV4cG9ydHM7dmFyIG89dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0obyxvLmV4cG9ydHMsbiksby5leHBvcnRzfXZhciBpPW4oMTgpO3FhPWl9KSgpO2Z1bmN0aW9uIGRjKGUsdCl7cmV0dXJuIHFhKGUsdCxjYyxoYyl9ZnVuY3Rpb24gbWMoZSx0LG4pe2xldCBpPWUuZ2V0VGV4dCgpLHI9ITAscz0wO2NvbnN0IG89bi50YWJTaXplfHw0O2lmKHQpe2xldCB1PWUub2Zmc2V0QXQodC5zdGFydCksYz11O2Zvcig7Yz4wJiZWYShpLGMtMSk7KWMtLTtjPT09MHx8T2EoaSxjLTEpP3U9YzpjPHUmJih1PWMrMSk7bGV0IGQ9ZS5vZmZzZXRBdCh0LmVuZCksbT1kO2Zvcig7bTxpLmxlbmd0aCYmVmEoaSxtKTspbSsrOyhtPT09aS5sZW5ndGh8fE9hKGksbSkpJiYoZD1tKSx0PUcuY3JlYXRlKGUucG9zaXRpb25BdCh1KSxlLnBvc2l0aW9uQXQoZCkpO2NvbnN0IGY9aS5zdWJzdHJpbmcoMCx1KTtpZihuZXcgUmVnRXhwKC8uKls8XVtePl0qJC8pLnRlc3QoZikpcmV0dXJuIGk9aS5zdWJzdHJpbmcodSxkKSxbe3JhbmdlOnQsbmV3VGV4dDppfV07aWYocj1kPT09aS5sZW5ndGgsaT1pLnN1YnN0cmluZyh1LGQpLHUhPT0wKXtjb25zdCBfPWUub2Zmc2V0QXQocmUuY3JlYXRlKHQuc3RhcnQubGluZSwwKSk7cz1nYyhlLmdldFRleHQoKSxfLG4pfX1lbHNlIHQ9Ry5jcmVhdGUocmUuY3JlYXRlKDAsMCksZS5wb3NpdGlvbkF0KGkubGVuZ3RoKSk7Y29uc3QgbD17aW5kZW50X3NpemU6byxpbmRlbnRfY2hhcjpuLmluc2VydFNwYWNlcz8iICI6IgkiLGluZGVudF9lbXB0eV9saW5lczpiZShuLCJpbmRlbnRFbXB0eUxpbmVzIiwhMSksd3JhcF9saW5lX2xlbmd0aDpiZShuLCJ3cmFwTGluZUxlbmd0aCIsMTIwKSx1bmZvcm1hdHRlZDpTaShuLCJ1bmZvcm1hdHRlZCIsdm9pZCAwKSxjb250ZW50X3VuZm9ybWF0dGVkOlNpKG4sImNvbnRlbnRVbmZvcm1hdHRlZCIsdm9pZCAwKSxpbmRlbnRfaW5uZXJfaHRtbDpiZShuLCJpbmRlbnRJbm5lckh0bWwiLCExKSxwcmVzZXJ2ZV9uZXdsaW5lczpiZShuLCJwcmVzZXJ2ZU5ld0xpbmVzIiwhMCksbWF4X3ByZXNlcnZlX25ld2xpbmVzOmJlKG4sIm1heFByZXNlcnZlTmV3TGluZXMiLDMyNzg2KSxpbmRlbnRfaGFuZGxlYmFyczpiZShuLCJpbmRlbnRIYW5kbGViYXJzIiwhMSksZW5kX3dpdGhfbmV3bGluZTpyJiZiZShuLCJlbmRXaXRoTmV3bGluZSIsITEpLGV4dHJhX2xpbmVyczpTaShuLCJleHRyYUxpbmVycyIsdm9pZCAwKSx3cmFwX2F0dHJpYnV0ZXM6YmUobiwid3JhcEF0dHJpYnV0ZXMiLCJhdXRvIiksd3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplOmJlKG4sIndyYXBBdHRyaWJ1dGVzSW5kZW50U2l6ZSIsdm9pZCAwKSxlb2w6YApgLGluZGVudF9zY3JpcHRzOmJlKG4sImluZGVudFNjcmlwdHMiLCJub3JtYWwiKSx0ZW1wbGF0aW5nOnBjKG4sImFsbCIpLHVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyOmJlKG4sInVuZm9ybWF0dGVkQ29udGVudERlbGltaXRlciIsIiIpfTtsZXQgYT1kYyhmYyhpKSxsKTtpZihzPjApe2NvbnN0IHU9bi5pbnNlcnRTcGFjZXM/V2EoIiAiLG8qcyk6V2EoIgkiLHMpO2E9YS5zcGxpdChgCmApLmpvaW4oYApgK3UpLHQuc3RhcnQuY2hhcmFjdGVyPT09MCYmKGE9dSthKX1yZXR1cm5be3JhbmdlOnQsbmV3VGV4dDphfV19ZnVuY3Rpb24gZmMoZSl7cmV0dXJuIGUucmVwbGFjZSgvXlxzKy8sIiIpfWZ1bmN0aW9uIGJlKGUsdCxuKXtpZihlJiZlLmhhc093blByb3BlcnR5KHQpKXtjb25zdCBpPWVbdF07aWYoaSE9PW51bGwpcmV0dXJuIGl9cmV0dXJuIG59ZnVuY3Rpb24gU2koZSx0LG4pe2NvbnN0IGk9YmUoZSx0LG51bGwpO3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/aS5sZW5ndGg+MD9pLnNwbGl0KCIsIikubWFwKHI9PnIudHJpbSgpLnRvTG93ZXJDYXNlKCkpOltdOm59ZnVuY3Rpb24gcGMoZSx0KXtjb25zdCBuPWJlKGUsInRlbXBsYXRpbmciLHQpO3JldHVybiBuPT09ITA/WyJhdXRvIl06bj09PSExfHxuPT09dHx8QXJyYXkuaXNBcnJheShuKT09PSExP1sibm9uZSJdOm59ZnVuY3Rpb24gZ2MoZSx0LG4pe2xldCBpPXQscj0wO2NvbnN0IHM9bi50YWJTaXplfHw0O2Zvcig7aTxlLmxlbmd0aDspe2NvbnN0IG89ZS5jaGFyQXQoaSk7aWYobz09PSIgIilyKys7ZWxzZSBpZihvPT09IgkiKXIrPXM7ZWxzZSBicmVhaztpKyt9cmV0dXJuIE1hdGguZmxvb3Ioci9zKX1mdW5jdGlvbiBPYShlLHQpe3JldHVybmBccgpgLmluZGV4T2YoZS5jaGFyQXQodCkpIT09LTF9ZnVuY3Rpb24gVmEoZSx0KXtyZXR1cm4iIAkiLmluZGV4T2YoZS5jaGFyQXQodCkpIT09LTF9dmFyIGphOygoKT0+e3ZhciBlPXs0NzA6cj0+e2Z1bmN0aW9uIHMoYSl7aWYodHlwZW9mIGEhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeShhKSl9ZnVuY3Rpb24gbyhhLHUpe2Zvcih2YXIgYyxkPSIiLG09MCxmPS0xLF89MCxnPTA7Zzw9YS5sZW5ndGg7KytnKXtpZihnPGEubGVuZ3RoKWM9YS5jaGFyQ29kZUF0KGcpO2Vsc2V7aWYoYz09PTQ3KWJyZWFrO2M9NDd9aWYoYz09PTQ3KXtpZighKGY9PT1nLTF8fF89PT0xKSlpZihmIT09Zy0xJiZfPT09Mil7aWYoZC5sZW5ndGg8Mnx8bSE9PTJ8fGQuY2hhckNvZGVBdChkLmxlbmd0aC0xKSE9PTQ2fHxkLmNoYXJDb2RlQXQoZC5sZW5ndGgtMikhPT00Nil7aWYoZC5sZW5ndGg+Mil7dmFyIEE9ZC5sYXN0SW5kZXhPZigiLyIpO2lmKEEhPT1kLmxlbmd0aC0xKXtBPT09LTE/KGQ9IiIsbT0wKTptPShkPWQuc2xpY2UoMCxBKSkubGVuZ3RoLTEtZC5sYXN0SW5kZXhPZigiLyIpLGY9ZyxfPTA7Y29udGludWV9fWVsc2UgaWYoZC5sZW5ndGg9PT0yfHxkLmxlbmd0aD09PTEpe2Q9IiIsbT0wLGY9ZyxfPTA7Y29udGludWV9fXUmJihkLmxlbmd0aD4wP2QrPSIvLi4iOmQ9Ii4uIixtPTIpfWVsc2UgZC5sZW5ndGg+MD9kKz0iLyIrYS5zbGljZShmKzEsZyk6ZD1hLnNsaWNlKGYrMSxnKSxtPWctZi0xO2Y9ZyxfPTB9ZWxzZSBjPT09NDYmJl8hPT0tMT8rK186Xz0tMX1yZXR1cm4gZH12YXIgbD17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgYSx1PSIiLGM9ITEsZD1hcmd1bWVudHMubGVuZ3RoLTE7ZD49LTEmJiFjO2QtLSl7dmFyIG07ZD49MD9tPWFyZ3VtZW50c1tkXTooYT09PXZvaWQgMCYmKGE9cHJvY2Vzcy5jd2QoKSksbT1hKSxzKG0pLG0ubGVuZ3RoIT09MCYmKHU9bSsiLyIrdSxjPW0uY2hhckNvZGVBdCgwKT09PTQ3KX1yZXR1cm4gdT1vKHUsIWMpLGM/dS5sZW5ndGg+MD8iLyIrdToiLyI6dS5sZW5ndGg+MD91OiIuIn0sbm9ybWFsaXplOmZ1bmN0aW9uKGEpe2lmKHMoYSksYS5sZW5ndGg9PT0wKXJldHVybiIuIjt2YXIgdT1hLmNoYXJDb2RlQXQoMCk9PT00NyxjPWEuY2hhckNvZGVBdChhLmxlbmd0aC0xKT09PTQ3O3JldHVybihhPW8oYSwhdSkpLmxlbmd0aCE9PTB8fHV8fChhPSIuIiksYS5sZW5ndGg+MCYmYyYmKGErPSIvIiksdT8iLyIrYTphfSxpc0Fic29sdXRlOmZ1bmN0aW9uKGEpe3JldHVybiBzKGEpLGEubGVuZ3RoPjAmJmEuY2hhckNvZGVBdCgwKT09PTQ3fSxqb2luOmZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIi4iO2Zvcih2YXIgYSx1PTA7dTxhcmd1bWVudHMubGVuZ3RoOysrdSl7dmFyIGM9YXJndW1lbnRzW3VdO3MoYyksYy5sZW5ndGg+MCYmKGE9PT12b2lkIDA/YT1jOmErPSIvIitjKX1yZXR1cm4gYT09PXZvaWQgMD8iLiI6bC5ub3JtYWxpemUoYSl9LHJlbGF0aXZlOmZ1bmN0aW9uKGEsdSl7aWYocyhhKSxzKHUpLGE9PT11fHwoYT1sLnJlc29sdmUoYSkpPT09KHU9bC5yZXNvbHZlKHUpKSlyZXR1cm4iIjtmb3IodmFyIGM9MTtjPGEubGVuZ3RoJiZhLmNoYXJDb2RlQXQoYyk9PT00NzsrK2MpO2Zvcih2YXIgZD1hLmxlbmd0aCxtPWQtYyxmPTE7Zjx1Lmxlbmd0aCYmdS5jaGFyQ29kZUF0KGYpPT09NDc7KytmKTtmb3IodmFyIF89dS5sZW5ndGgtZixnPW08Xz9tOl8sQT0tMSx2PTA7djw9ZzsrK3Ype2lmKHY9PT1nKXtpZihfPmcpe2lmKHUuY2hhckNvZGVBdChmK3YpPT09NDcpcmV0dXJuIHUuc2xpY2UoZit2KzEpO2lmKHY9PT0wKXJldHVybiB1LnNsaWNlKGYrdil9ZWxzZSBtPmcmJihhLmNoYXJDb2RlQXQoYyt2KT09PTQ3P0E9djp2PT09MCYmKEE9MCkpO2JyZWFrfXZhciB5PWEuY2hhckNvZGVBdChjK3YpO2lmKHkhPT11LmNoYXJDb2RlQXQoZit2KSlicmVhazt5PT09NDcmJihBPXYpfXZhciBFPSIiO2Zvcih2PWMrQSsxO3Y8PWQ7Kyt2KXYhPT1kJiZhLmNoYXJDb2RlQXQodikhPT00N3x8KEUubGVuZ3RoPT09MD9FKz0iLi4iOkUrPSIvLi4iKTtyZXR1cm4gRS5sZW5ndGg+MD9FK3Uuc2xpY2UoZitBKTooZis9QSx1LmNoYXJDb2RlQXQoZik9PT00NyYmKytmLHUuc2xpY2UoZikpfSxfbWFrZUxvbmc6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGRpcm5hbWU6ZnVuY3Rpb24oYSl7aWYocyhhKSxhLmxlbmd0aD09PTApcmV0dXJuIi4iO2Zvcih2YXIgdT1hLmNoYXJDb2RlQXQoMCksYz11PT09NDcsZD0tMSxtPSEwLGY9YS5sZW5ndGgtMTtmPj0xOy0tZilpZigodT1hLmNoYXJDb2RlQXQoZikpPT09NDcpe2lmKCFtKXtkPWY7YnJlYWt9fWVsc2UgbT0hMTtyZXR1cm4gZD09PS0xP2M/Ii8iOiIuIjpjJiZkPT09MT8iLy8iOmEuc2xpY2UoMCxkKX0sYmFzZW5hbWU6ZnVuY3Rpb24oYSx1KXtpZih1IT09dm9pZCAwJiZ0eXBlb2YgdSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO3MoYSk7dmFyIGMsZD0wLG09LTEsZj0hMDtpZih1IT09dm9pZCAwJiZ1Lmxlbmd0aD4wJiZ1Lmxlbmd0aDw9YS5sZW5ndGgpe2lmKHUubGVuZ3RoPT09YS5sZW5ndGgmJnU9PT1hKXJldHVybiIiO3ZhciBfPXUubGVuZ3RoLTEsZz0tMTtmb3IoYz1hLmxlbmd0aC0xO2M+PTA7LS1jKXt2YXIgQT1hLmNoYXJDb2RlQXQoYyk7aWYoQT09PTQ3KXtpZighZil7ZD1jKzE7YnJlYWt9fWVsc2UgZz09PS0xJiYoZj0hMSxnPWMrMSksXz49MCYmKEE9PT11LmNoYXJDb2RlQXQoXyk/LS1fPT0tMSYmKG09Yyk6KF89LTEsbT1nKSl9cmV0dXJuIGQ9PT1tP209ZzptPT09LTEmJihtPWEubGVuZ3RoKSxhLnNsaWNlKGQsbSl9Zm9yKGM9YS5sZW5ndGgtMTtjPj0wOy0tYylpZihhLmNoYXJDb2RlQXQoYyk9PT00Nyl7aWYoIWYpe2Q9YysxO2JyZWFrfX1lbHNlIG09PT0tMSYmKGY9ITEsbT1jKzEpO3JldHVybiBtPT09LTE/IiI6YS5zbGljZShkLG0pfSxleHRuYW1lOmZ1bmN0aW9uKGEpe3MoYSk7Zm9yKHZhciB1PS0xLGM9MCxkPS0xLG09ITAsZj0wLF89YS5sZW5ndGgtMTtfPj0wOy0tXyl7dmFyIGc9YS5jaGFyQ29kZUF0KF8pO2lmKGchPT00NylkPT09LTEmJihtPSExLGQ9XysxKSxnPT09NDY/dT09PS0xP3U9XzpmIT09MSYmKGY9MSk6dSE9PS0xJiYoZj0tMSk7ZWxzZSBpZighbSl7Yz1fKzE7YnJlYWt9fXJldHVybiB1PT09LTF8fGQ9PT0tMXx8Zj09PTB8fGY9PT0xJiZ1PT09ZC0xJiZ1PT09YysxPyIiOmEuc2xpY2UodSxkKX0sZm9ybWF0OmZ1bmN0aW9uKGEpe2lmKGE9PT1udWxsfHx0eXBlb2YgYSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGEpO3JldHVybiBmdW5jdGlvbih1LGMpe3ZhciBkPWMuZGlyfHxjLnJvb3QsbT1jLmJhc2V8fChjLm5hbWV8fCIiKSsoYy5leHR8fCIiKTtyZXR1cm4gZD9kPT09Yy5yb290P2QrbTpkKyIvIittOm19KDAsYSl9LHBhcnNlOmZ1bmN0aW9uKGEpe3MoYSk7dmFyIHU9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKGEubGVuZ3RoPT09MClyZXR1cm4gdTt2YXIgYyxkPWEuY2hhckNvZGVBdCgwKSxtPWQ9PT00NzttPyh1LnJvb3Q9Ii8iLGM9MSk6Yz0wO2Zvcih2YXIgZj0tMSxfPTAsZz0tMSxBPSEwLHY9YS5sZW5ndGgtMSx5PTA7dj49YzstLXYpaWYoKGQ9YS5jaGFyQ29kZUF0KHYpKSE9PTQ3KWc9PT0tMSYmKEE9ITEsZz12KzEpLGQ9PT00Nj9mPT09LTE/Zj12OnkhPT0xJiYoeT0xKTpmIT09LTEmJih5PS0xKTtlbHNlIGlmKCFBKXtfPXYrMTticmVha31yZXR1cm4gZj09PS0xfHxnPT09LTF8fHk9PT0wfHx5PT09MSYmZj09PWctMSYmZj09PV8rMT9nIT09LTEmJih1LmJhc2U9dS5uYW1lPV89PT0wJiZtP2Euc2xpY2UoMSxnKTphLnNsaWNlKF8sZykpOihfPT09MCYmbT8odS5uYW1lPWEuc2xpY2UoMSxmKSx1LmJhc2U9YS5zbGljZSgxLGcpKToodS5uYW1lPWEuc2xpY2UoXyxmKSx1LmJhc2U9YS5zbGljZShfLGcpKSx1LmV4dD1hLnNsaWNlKGYsZykpLF8+MD91LmRpcj1hLnNsaWNlKDAsXy0xKTptJiYodS5kaXI9Ii8iKSx1fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtsLnBvc2l4PWwsci5leHBvcnRzPWx9fSx0PXt9O2Z1bmN0aW9uIG4ocil7dmFyIHM9dFtyXTtpZihzIT09dm9pZCAwKXJldHVybiBzLmV4cG9ydHM7dmFyIG89dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0obyxvLmV4cG9ydHMsbiksby5leHBvcnRzfW4uZD0ocixzKT0+e2Zvcih2YXIgbyBpbiBzKW4ubyhzLG8pJiYhbi5vKHIsbykmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se2VudW1lcmFibGU6ITAsZ2V0OnNbb119KX0sbi5vPShyLHMpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixzKSxuLnI9cj0+e3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBpPXt9OygoKT0+e2xldCByO24ucihpKSxuLmQoaSx7VVJJOigpPT5tLFV0aWxzOigpPT5IfSksdHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiP3I9cHJvY2Vzcy5wbGF0Zm9ybT09PSJ3aW4zMiI6dHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJihyPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiV2luZG93cyIpPj0wKTtjb25zdCBzPS9eXHdbXHdcZCsuLV0qJC8sbz0vXlwvLyxsPS9eXC9cLy87ZnVuY3Rpb24gYShMLHcpe2lmKCFMLnNjaGVtZSYmdyl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtMLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtMLnBhdGh9IiwgcXVlcnk6ICIke0wucXVlcnl9IiwgZnJhZ21lbnQ6ICIke0wuZnJhZ21lbnR9In1gKTtpZihMLnNjaGVtZSYmIXMudGVzdChMLnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKEwucGF0aCl7aWYoTC5hdXRob3JpdHkpe2lmKCFvLnRlc3QoTC5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKGwudGVzdChMLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1jb25zdCB1PSIiLGM9Ii8iLGQ9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87Y2xhc3MgbXtjb25zdHJ1Y3Rvcih3LGsseCxTLEQsST0hMSl7JGUodGhpcywic2NoZW1lIik7JGUodGhpcywiYXV0aG9yaXR5Iik7JGUodGhpcywicGF0aCIpOyRlKHRoaXMsInF1ZXJ5Iik7JGUodGhpcywiZnJhZ21lbnQiKTt0eXBlb2Ygdz09Im9iamVjdCI/KHRoaXMuc2NoZW1lPXcuc2NoZW1lfHx1LHRoaXMuYXV0aG9yaXR5PXcuYXV0aG9yaXR5fHx1LHRoaXMucGF0aD13LnBhdGh8fHUsdGhpcy5xdWVyeT13LnF1ZXJ5fHx1LHRoaXMuZnJhZ21lbnQ9dy5mcmFnbWVudHx8dSk6KHRoaXMuc2NoZW1lPWZ1bmN0aW9uKEYsVyl7cmV0dXJuIEZ8fFc/RjoiZmlsZSJ9KHcsSSksdGhpcy5hdXRob3JpdHk9a3x8dSx0aGlzLnBhdGg9ZnVuY3Rpb24oRixXKXtzd2l0Y2goRil7Y2FzZSJodHRwcyI6Y2FzZSJodHRwIjpjYXNlImZpbGUiOlc/V1swXSE9PWMmJihXPWMrVyk6Vz1jfXJldHVybiBXfSh0aGlzLnNjaGVtZSx4fHx1KSx0aGlzLnF1ZXJ5PVN8fHUsdGhpcy5mcmFnbWVudD1EfHx1LGEodGhpcyxJKSl9c3RhdGljIGlzVXJpKHcpe3JldHVybiB3IGluc3RhbmNlb2YgbXx8ISF3JiZ0eXBlb2Ygdy5hdXRob3JpdHk9PSJzdHJpbmciJiZ0eXBlb2Ygdy5mcmFnbWVudD09InN0cmluZyImJnR5cGVvZiB3LnBhdGg9PSJzdHJpbmciJiZ0eXBlb2Ygdy5xdWVyeT09InN0cmluZyImJnR5cGVvZiB3LnNjaGVtZT09InN0cmluZyImJnR5cGVvZiB3LmZzUGF0aD09InN0cmluZyImJnR5cGVvZiB3LndpdGg9PSJmdW5jdGlvbiImJnR5cGVvZiB3LnRvU3RyaW5nPT0iZnVuY3Rpb24ifWdldCBmc1BhdGgoKXtyZXR1cm4geSh0aGlzKX13aXRoKHcpe2lmKCF3KXJldHVybiB0aGlzO2xldHtzY2hlbWU6ayxhdXRob3JpdHk6eCxwYXRoOlMscXVlcnk6RCxmcmFnbWVudDpJfT13O3JldHVybiBrPT09dm9pZCAwP2s9dGhpcy5zY2hlbWU6az09PW51bGwmJihrPXUpLHg9PT12b2lkIDA/eD10aGlzLmF1dGhvcml0eTp4PT09bnVsbCYmKHg9dSksUz09PXZvaWQgMD9TPXRoaXMucGF0aDpTPT09bnVsbCYmKFM9dSksRD09PXZvaWQgMD9EPXRoaXMucXVlcnk6RD09PW51bGwmJihEPXUpLEk9PT12b2lkIDA/ST10aGlzLmZyYWdtZW50Okk9PT1udWxsJiYoST11KSxrPT09dGhpcy5zY2hlbWUmJng9PT10aGlzLmF1dGhvcml0eSYmUz09PXRoaXMucGF0aCYmRD09PXRoaXMucXVlcnkmJkk9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IF8oayx4LFMsRCxJKX1zdGF0aWMgcGFyc2UodyxrPSExKXtjb25zdCB4PWQuZXhlYyh3KTtyZXR1cm4geD9uZXcgXyh4WzJdfHx1LE0oeFs0XXx8dSksTSh4WzVdfHx1KSxNKHhbN118fHUpLE0oeFs5XXx8dSksayk6bmV3IF8odSx1LHUsdSx1KX1zdGF0aWMgZmlsZSh3KXtsZXQgaz11O2lmKHImJih3PXcucmVwbGFjZSgvXFwvZyxjKSksd1swXT09PWMmJndbMV09PT1jKXtjb25zdCB4PXcuaW5kZXhPZihjLDIpO3g9PT0tMT8oaz13LnN1YnN0cmluZygyKSx3PWMpOihrPXcuc3Vic3RyaW5nKDIseCksdz13LnN1YnN0cmluZyh4KXx8Yyl9cmV0dXJuIG5ldyBfKCJmaWxlIixrLHcsdSx1KX1zdGF0aWMgZnJvbSh3KXtjb25zdCBrPW5ldyBfKHcuc2NoZW1lLHcuYXV0aG9yaXR5LHcucGF0aCx3LnF1ZXJ5LHcuZnJhZ21lbnQpO3JldHVybiBhKGssITApLGt9dG9TdHJpbmcodz0hMSl7cmV0dXJuIEUodGhpcyx3KX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKHcpe2lmKHcpe2lmKHcgaW5zdGFuY2VvZiBtKXJldHVybiB3O3tjb25zdCBrPW5ldyBfKHcpO3JldHVybiBrLl9mb3JtYXR0ZWQ9dy5leHRlcm5hbCxrLl9mc1BhdGg9dy5fc2VwPT09Zj93LmZzUGF0aDpudWxsLGt9fXJldHVybiB3fX1jb25zdCBmPXI/MTp2b2lkIDA7Y2xhc3MgXyBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpOyRlKHRoaXMsIl9mb3JtYXR0ZWQiLG51bGwpOyRlKHRoaXMsIl9mc1BhdGgiLG51bGwpfWdldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPXkodGhpcykpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyhrPSExKXtyZXR1cm4gaz9FKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9RSh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCBrPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihrLmZzUGF0aD10aGlzLl9mc1BhdGgsay5fc2VwPWYpLHRoaXMuX2Zvcm1hdHRlZCYmKGsuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihrLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGsuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGsuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoay5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoay5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxrfX1jb25zdCBnPXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gQShMLHcsayl7bGV0IHgsUz0tMTtmb3IobGV0IEQ9MDtEPEwubGVuZ3RoO0QrKyl7Y29uc3QgST1MLmNoYXJDb2RlQXQoRCk7aWYoST49OTcmJkk8PTEyMnx8ST49NjUmJkk8PTkwfHxJPj00OCYmSTw9NTd8fEk9PT00NXx8ST09PTQ2fHxJPT09OTV8fEk9PT0xMjZ8fHcmJkk9PT00N3x8ayYmST09PTkxfHxrJiZJPT09OTN8fGsmJkk9PT01OClTIT09LTEmJih4Kz1lbmNvZGVVUklDb21wb25lbnQoTC5zdWJzdHJpbmcoUyxEKSksUz0tMSkseCE9PXZvaWQgMCYmKHgrPUwuY2hhckF0KEQpKTtlbHNle3g9PT12b2lkIDAmJih4PUwuc3Vic3RyKDAsRCkpO2NvbnN0IEY9Z1tJXTtGIT09dm9pZCAwPyhTIT09LTEmJih4Kz1lbmNvZGVVUklDb21wb25lbnQoTC5zdWJzdHJpbmcoUyxEKSksUz0tMSkseCs9Rik6Uz09PS0xJiYoUz1EKX19cmV0dXJuIFMhPT0tMSYmKHgrPWVuY29kZVVSSUNvbXBvbmVudChMLnN1YnN0cmluZyhTKSkpLHghPT12b2lkIDA/eDpMfWZ1bmN0aW9uIHYoTCl7bGV0IHc7Zm9yKGxldCBrPTA7azxMLmxlbmd0aDtrKyspe2NvbnN0IHg9TC5jaGFyQ29kZUF0KGspO3g9PT0zNXx8eD09PTYzPyh3PT09dm9pZCAwJiYodz1MLnN1YnN0cigwLGspKSx3Kz1nW3hdKTp3IT09dm9pZCAwJiYodys9TFtrXSl9cmV0dXJuIHchPT12b2lkIDA/dzpMfWZ1bmN0aW9uIHkoTCx3KXtsZXQgaztyZXR1cm4gaz1MLmF1dGhvcml0eSYmTC5wYXRoLmxlbmd0aD4xJiZMLnNjaGVtZT09PSJmaWxlIj9gLy8ke0wuYXV0aG9yaXR5fSR7TC5wYXRofWA6TC5wYXRoLmNoYXJDb2RlQXQoMCk9PT00NyYmKEwucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmTC5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxMLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJkwucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiZMLnBhdGguY2hhckNvZGVBdCgyKT09PTU4P0wucGF0aFsxXS50b0xvd2VyQ2FzZSgpK0wucGF0aC5zdWJzdHIoMik6TC5wYXRoLHImJihrPWsucmVwbGFjZSgvXC8vZywiXFwiKSksa31mdW5jdGlvbiBFKEwsdyl7Y29uc3Qgaz13P3Y6QTtsZXQgeD0iIix7c2NoZW1lOlMsYXV0aG9yaXR5OkQscGF0aDpJLHF1ZXJ5OkYsZnJhZ21lbnQ6V309TDtpZihTJiYoeCs9Uyx4Kz0iOiIpLChEfHxTPT09ImZpbGUiKSYmKHgrPWMseCs9YyksRCl7bGV0IFU9RC5pbmRleE9mKCJAIik7aWYoVSE9PS0xKXtjb25zdCBWPUQuc3Vic3RyKDAsVSk7RD1ELnN1YnN0cihVKzEpLFU9Vi5sYXN0SW5kZXhPZigiOiIpLFU9PT0tMT94Kz1rKFYsITEsITEpOih4Kz1rKFYuc3Vic3RyKDAsVSksITEsITEpLHgrPSI6Iix4Kz1rKFYuc3Vic3RyKFUrMSksITEsITApKSx4Kz0iQCJ9RD1ELnRvTG93ZXJDYXNlKCksVT1ELmxhc3RJbmRleE9mKCI6IiksVT09PS0xP3grPWsoRCwhMSwhMCk6KHgrPWsoRC5zdWJzdHIoMCxVKSwhMSwhMCkseCs9RC5zdWJzdHIoVSkpfWlmKEkpe2lmKEkubGVuZ3RoPj0zJiZJLmNoYXJDb2RlQXQoMCk9PT00NyYmSS5jaGFyQ29kZUF0KDIpPT09NTgpe2NvbnN0IFU9SS5jaGFyQ29kZUF0KDEpO1U+PTY1JiZVPD05MCYmKEk9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoVSszMil9OiR7SS5zdWJzdHIoMyl9YCl9ZWxzZSBpZihJLmxlbmd0aD49MiYmSS5jaGFyQ29kZUF0KDEpPT09NTgpe2NvbnN0IFU9SS5jaGFyQ29kZUF0KDApO1U+PTY1JiZVPD05MCYmKEk9YCR7U3RyaW5nLmZyb21DaGFyQ29kZShVKzMyKX06JHtJLnN1YnN0cigyKX1gKX14Kz1rKEksITAsITEpfXJldHVybiBGJiYoeCs9Ij8iLHgrPWsoRiwhMSwhMSkpLFcmJih4Kz0iIyIseCs9dz9XOkEoVywhMSwhMSkpLHh9ZnVuY3Rpb24gUihMKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChMKX1jYXRjaHtyZXR1cm4gTC5sZW5ndGg+Mz9MLnN1YnN0cigwLDMpK1IoTC5zdWJzdHIoMykpOkx9fWNvbnN0IE49LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gTShMKXtyZXR1cm4gTC5tYXRjaChOKT9MLnJlcGxhY2UoTix3PT5SKHcpKTpMfXZhciBiPW4oNDcwKTtjb25zdCBwPWIucG9zaXh8fGIsVD0iLyI7dmFyIEg7KGZ1bmN0aW9uKEwpe0wuam9pblBhdGg9ZnVuY3Rpb24odywuLi5rKXtyZXR1cm4gdy53aXRoKHtwYXRoOnAuam9pbih3LnBhdGgsLi4uayl9KX0sTC5yZXNvbHZlUGF0aD1mdW5jdGlvbih3LC4uLmspe2xldCB4PXcucGF0aCxTPSExO3hbMF0hPT1UJiYoeD1UK3gsUz0hMCk7bGV0IEQ9cC5yZXNvbHZlKHgsLi4uayk7cmV0dXJuIFMmJkRbMF09PT1UJiYhdy5hdXRob3JpdHkmJihEPUQuc3Vic3RyaW5nKDEpKSx3LndpdGgoe3BhdGg6RH0pfSxMLmRpcm5hbWU9ZnVuY3Rpb24odyl7aWYody5wYXRoLmxlbmd0aD09PTB8fHcucGF0aD09PVQpcmV0dXJuIHc7bGV0IGs9cC5kaXJuYW1lKHcucGF0aCk7cmV0dXJuIGsubGVuZ3RoPT09MSYmay5jaGFyQ29kZUF0KDApPT09NDYmJihrPSIiKSx3LndpdGgoe3BhdGg6a30pfSxMLmJhc2VuYW1lPWZ1bmN0aW9uKHcpe3JldHVybiBwLmJhc2VuYW1lKHcucGF0aCl9LEwuZXh0bmFtZT1mdW5jdGlvbih3KXtyZXR1cm4gcC5leHRuYW1lKHcucGF0aCl9fSkoSHx8KEg9e30pKX0pKCksamE9aX0pKCk7dmFye1VSSTpiYyxVdGlsczokY309amE7ZnVuY3Rpb24gTGkoZSl7Y29uc3QgdD1lWzBdLG49ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdD09PW4mJih0PT09IicifHx0PT09JyInKSYmKGU9ZS5zdWJzdHJpbmcoMSxlLmxlbmd0aC0xKSksZX1mdW5jdGlvbiBfYyhlLHQpe3JldHVybiFlLmxlbmd0aHx8dD09PSJoYW5kbGViYXJzIiYmL3t7fH19Ly50ZXN0KGUpPyExOi9cYih3W1x3XGQrLi1dKjpcL1wvKT9bXlxzKCk8Pl0rKD86XChbXHdcZF0rXCl8KFteWzpwdW5jdDpdXHNdfFwvPykpLy50ZXN0KGUpfWZ1bmN0aW9uIHdjKGUsdCxuLGkpe2lmKC9eXHMqamF2YXNjcmlwdFw6L2kudGVzdCh0KXx8L1tcblxyXS8udGVzdCh0KSlyZXR1cm47dD10LnJlcGxhY2UoL15ccyovZywiIik7Y29uc3Qgcj10Lm1hdGNoKC9eKFx3W1x3XGQrLi1dKik6Lyk7aWYocil7Y29uc3Qgcz1yWzFdLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHM9PT0iaHR0cCJ8fHM9PT0iaHR0cHMifHxzPT09ImZpbGUiP3Q6dm9pZCAwfXJldHVybi9eXCMvaS50ZXN0KHQpP2UrdDovXlwvXC8vaS50ZXN0KHQpPyhWZShlLCJodHRwczovLyIpPyJodHRwcyI6Imh0dHAiKSsiOiIrdC5yZXBsYWNlKC9eXHMqL2csIiIpOm4/bi5yZXNvbHZlUmVmZXJlbmNlKHQsaXx8ZSk6dH1mdW5jdGlvbiB2YyhlLHQsbixpLHIscyl7Y29uc3Qgbz1MaShuKTtpZighX2MobyxlLmxhbmd1YWdlSWQpKXJldHVybjtvLmxlbmd0aDxuLmxlbmd0aCYmKGkrKyxyLS0pO2NvbnN0IGw9d2MoZS51cmksbyx0LHMpO2lmKCFsKXJldHVybjtjb25zdCBhPXhjKGwsZSk7cmV0dXJue3JhbmdlOkcuY3JlYXRlKGUucG9zaXRpb25BdChpKSxlLnBvc2l0aW9uQXQocikpLHRhcmdldDphfX12YXIgeWM9MzU7ZnVuY3Rpb24geGMoZSx0KXt0cnl7bGV0IG49YmMucGFyc2UoZSk7cmV0dXJuIG4uc2NoZW1lPT09ImZpbGUiJiZuLnF1ZXJ5JiYobj1uLndpdGgoe3F1ZXJ5Om51bGx9KSxlPW4udG9TdHJpbmcoITApKSxuLnNjaGVtZT09PSJmaWxlIiYmbi5mcmFnbWVudCYmIShlLnN0YXJ0c1dpdGgodC51cmkpJiZlLmNoYXJDb2RlQXQodC51cmkubGVuZ3RoKT09PXljKT9uLndpdGgoe2ZyYWdtZW50Om51bGx9KS50b1N0cmluZyghMCk6ZX1jYXRjaHtyZXR1cm59fXZhciBUYz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRhdGFNYW5hZ2VyPWV9ZmluZERvY3VtZW50TGlua3MoZSx0KXtjb25zdCBuPVtdLGk9Z2UoZS5nZXRUZXh0KCksMCk7bGV0IHI9aS5zY2FuKCkscyxvLGw9ITEsYTtjb25zdCB1PXt9O2Zvcig7ciE9PXouRU9TOyl7c3dpdGNoKHIpe2Nhc2Ugei5TdGFydFRhZzpvPWkuZ2V0VG9rZW5UZXh0KCkudG9Mb3dlckNhc2UoKSxhfHwobD1vPT09ImJhc2UiKTticmVhaztjYXNlIHouQXR0cmlidXRlTmFtZTpzPWkuZ2V0VG9rZW5UZXh0KCkudG9Mb3dlckNhc2UoKTticmVhaztjYXNlIHouQXR0cmlidXRlVmFsdWU6aWYobyYmcyYmdGhpcy5kYXRhTWFuYWdlci5pc1BhdGhBdHRyaWJ1dGUobyxzKSl7Y29uc3QgYz1pLmdldFRva2VuVGV4dCgpO2lmKCFsKXtjb25zdCBkPXZjKGUsdCxjLGkuZ2V0VG9rZW5PZmZzZXQoKSxpLmdldFRva2VuRW5kKCksYSk7ZCYmbi5wdXNoKGQpfWwmJnR5cGVvZiBhPiJ1IiYmKGE9TGkoYyksYSYmdCYmKGE9dC5yZXNvbHZlUmVmZXJlbmNlKGEsZS51cmkpKSksbD0hMSxzPXZvaWQgMH1lbHNlIGlmKHM9PT0iaWQiKXtjb25zdCBjPUxpKGkuZ2V0VG9rZW5UZXh0KCkpO3VbY109aS5nZXRUb2tlbk9mZnNldCgpfWJyZWFrfXI9aS5zY2FuKCl9Zm9yKGNvbnN0IGMgb2Ygbil7Y29uc3QgZD1lLnVyaSsiIyI7aWYoYy50YXJnZXQmJlZlKGMudGFyZ2V0LGQpKXtjb25zdCBtPWMudGFyZ2V0LnN1YnN0cmluZyhkLmxlbmd0aCksZj11W21dO2lmKGYhPT12b2lkIDApe2NvbnN0IF89ZS5wb3NpdGlvbkF0KGYpO2MudGFyZ2V0PWAke2R9JHtfLmxpbmUrMX0sJHtfLmNoYXJhY3RlcisxfWB9ZWxzZSBjLnRhcmdldD1lLnVyaX19cmV0dXJuIG59fTtmdW5jdGlvbiBrYyhlLHQsbil7Y29uc3QgaT1lLm9mZnNldEF0KHQpLHI9bi5maW5kTm9kZUF0KGkpO2lmKCFyLnRhZylyZXR1cm5bXTtjb25zdCBzPVtdLG89WGEoei5TdGFydFRhZyxlLHIuc3RhcnQpLGw9dHlwZW9mIHIuZW5kVGFnU3RhcnQ9PSJudW1iZXIiJiZYYSh6LkVuZFRhZyxlLHIuZW5kVGFnU3RhcnQpO3JldHVybihvJiYkYShvLHQpfHxsJiYkYShsLHQpKSYmKG8mJnMucHVzaCh7a2luZDpsbi5SZWFkLHJhbmdlOm99KSxsJiZzLnB1c2goe2tpbmQ6bG4uUmVhZCxyYW5nZTpsfSkpLHN9ZnVuY3Rpb24gR2EoZSx0KXtyZXR1cm4gZS5saW5lPHQubGluZXx8ZS5saW5lPT09dC5saW5lJiZlLmNoYXJhY3Rlcjw9dC5jaGFyYWN0ZXJ9ZnVuY3Rpb24gJGEoZSx0KXtyZXR1cm4gR2EoZS5zdGFydCx0KSYmR2EodCxlLmVuZCl9ZnVuY3Rpb24gWGEoZSx0LG4pe2NvbnN0IGk9Z2UodC5nZXRUZXh0KCksbik7bGV0IHI9aS5zY2FuKCk7Zm9yKDtyIT09ei5FT1MmJnIhPT1lOylyPWkuc2NhbigpO3JldHVybiByIT09ei5FT1M/e3N0YXJ0OnQucG9zaXRpb25BdChpLmdldFRva2VuT2Zmc2V0KCkpLGVuZDp0LnBvc2l0aW9uQXQoaS5nZXRUb2tlbkVuZCgpKX06bnVsbH1mdW5jdGlvbiBBYyhlLHQpe2NvbnN0IG49W10saT1KYShlLHQpO2Zvcihjb25zdCBzIG9mIGkpcihzLHZvaWQgMCk7cmV0dXJuIG47ZnVuY3Rpb24gcihzLG8pe2NvbnN0IGw9X2kuY3JlYXRlKHMubmFtZSxzLmtpbmQscy5yYW5nZSxlLnVyaSxvPy5uYW1lKTtpZihsLmNvbnRhaW5lck5hbWU/PyhsLmNvbnRhaW5lck5hbWU9IiIpLG4ucHVzaChsKSxzLmNoaWxkcmVuKWZvcihjb25zdCBhIG9mIHMuY2hpbGRyZW4pcihhLHMpfX1mdW5jdGlvbiBKYShlLHQpe2NvbnN0IG49W107cmV0dXJuIHQucm9vdHMuZm9yRWFjaChpPT57WWEoZSxpLG4pfSksbn1mdW5jdGlvbiBZYShlLHQsbil7Y29uc3QgaT1TYyh0KSxyPUcuY3JlYXRlKGUucG9zaXRpb25BdCh0LnN0YXJ0KSxlLnBvc2l0aW9uQXQodC5lbmQpKSxzPXdpLmNyZWF0ZShpLHZvaWQgMCxiaS5GaWVsZCxyLHIpO24ucHVzaChzKSx0LmNoaWxkcmVuLmZvckVhY2gobz0+e3MuY2hpbGRyZW4/PyhzLmNoaWxkcmVuPVtdKSxZYShlLG8scy5jaGlsZHJlbil9KX1mdW5jdGlvbiBTYyhlKXtsZXQgdD1lLnRhZztpZihlLmF0dHJpYnV0ZXMpe2NvbnN0IG49ZS5hdHRyaWJ1dGVzLmlkLGk9ZS5hdHRyaWJ1dGVzLmNsYXNzO24mJih0Kz1gIyR7bi5yZXBsYWNlKC9bXCJcJ10vZywiIil9YCksaSYmKHQrPWkucmVwbGFjZSgvW1wiXCddL2csIiIpLnNwbGl0KC9ccysvKS5tYXAocj0+YC4ke3J9YCkuam9pbigiIikpfXJldHVybiB0fHwiPyJ9ZnVuY3Rpb24gTGMoZSx0LG4saSl7Y29uc3Qgcj1lLm9mZnNldEF0KHQpLHM9aS5maW5kTm9kZUF0KHIpO2lmKCFzLnRhZ3x8IUNjKHMscixzLnRhZykpcmV0dXJuIG51bGw7Y29uc3Qgbz1bXSxsPXtzdGFydDplLnBvc2l0aW9uQXQocy5zdGFydCsxKSxlbmQ6ZS5wb3NpdGlvbkF0KHMuc3RhcnQrMStzLnRhZy5sZW5ndGgpfTtpZihvLnB1c2goe3JhbmdlOmwsbmV3VGV4dDpufSkscy5lbmRUYWdTdGFydCl7Y29uc3QgdT17c3RhcnQ6ZS5wb3NpdGlvbkF0KHMuZW5kVGFnU3RhcnQrMiksZW5kOmUucG9zaXRpb25BdChzLmVuZFRhZ1N0YXJ0KzIrcy50YWcubGVuZ3RoKX07by5wdXNoKHtyYW5nZTp1LG5ld1RleHQ6bn0pfXJldHVybntjaGFuZ2VzOntbZS51cmkudG9TdHJpbmcoKV06b319fWZ1bmN0aW9uIENjKGUsdCxuKXtyZXR1cm4gZS5lbmRUYWdTdGFydCYmZS5lbmRUYWdTdGFydCsyPD10JiZ0PD1lLmVuZFRhZ1N0YXJ0KzIrbi5sZW5ndGg/ITA6ZS5zdGFydCsxPD10JiZ0PD1lLnN0YXJ0KzErbi5sZW5ndGh9ZnVuY3Rpb24gRWMoZSx0LG4pe2NvbnN0IGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKTtpZighci50YWd8fCFyLmVuZFRhZ1N0YXJ0KXJldHVybiBudWxsO2lmKHIuc3RhcnQrMTw9aSYmaTw9ci5zdGFydCsxK3IudGFnLmxlbmd0aCl7Y29uc3Qgcz1pLTEtci5zdGFydCtyLmVuZFRhZ1N0YXJ0KzI7cmV0dXJuIGUucG9zaXRpb25BdChzKX1pZihyLmVuZFRhZ1N0YXJ0KzI8PWkmJmk8PXIuZW5kVGFnU3RhcnQrMityLnRhZy5sZW5ndGgpe2NvbnN0IHM9aS0yLXIuZW5kVGFnU3RhcnQrci5zdGFydCsxO3JldHVybiBlLnBvc2l0aW9uQXQocyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gUWEoZSx0LG4pe2NvbnN0IGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKSxzPXIudGFnP3IudGFnLmxlbmd0aDowO3JldHVybiByLmVuZFRhZ1N0YXJ0JiYoci5zdGFydCsxPD1pJiZpPD1yLnN0YXJ0KzErc3x8ci5lbmRUYWdTdGFydCsyPD1pJiZpPD1yLmVuZFRhZ1N0YXJ0KzIrcyk/W0cuY3JlYXRlKGUucG9zaXRpb25BdChyLnN0YXJ0KzEpLGUucG9zaXRpb25BdChyLnN0YXJ0KzErcykpLEcuY3JlYXRlKGUucG9zaXRpb25BdChyLmVuZFRhZ1N0YXJ0KzIpLGUucG9zaXRpb25BdChyLmVuZFRhZ1N0YXJ0KzIrcykpXTpudWxsfXZhciBSYz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRhdGFNYW5hZ2VyPWV9bGltaXRSYW5nZXMoZSx0KXtlPWUuc29ydCgoYyxkKT0+e2xldCBtPWMuc3RhcnRMaW5lLWQuc3RhcnRMaW5lO3JldHVybiBtPT09MCYmKG09Yy5lbmRMaW5lLWQuZW5kTGluZSksbX0pO2xldCBuO2NvbnN0IGk9W10scj1bXSxzPVtdLG89KGMsZCk9PntyW2NdPWQsZDwzMCYmKHNbZF09KHNbZF18fDApKzEpfTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7Y29uc3QgZD1lW2NdO2lmKCFuKW49ZCxvKGMsMCk7ZWxzZSBpZihkLnN0YXJ0TGluZT5uLnN0YXJ0TGluZSl7aWYoZC5lbmRMaW5lPD1uLmVuZExpbmUpaS5wdXNoKG4pLG49ZCxvKGMsaS5sZW5ndGgpO2Vsc2UgaWYoZC5zdGFydExpbmU+bi5lbmRMaW5lKXtkbyBuPWkucG9wKCk7d2hpbGUobiYmZC5zdGFydExpbmU+bi5lbmRMaW5lKTtuJiZpLnB1c2gobiksbj1kLG8oYyxpLmxlbmd0aCl9fX1sZXQgbD0wLGE9MDtmb3IobGV0IGM9MDtjPHMubGVuZ3RoO2MrKyl7Y29uc3QgZD1zW2NdO2lmKGQpe2lmKGQrbD50KXthPWM7YnJlYWt9bCs9ZH19Y29uc3QgdT1bXTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7Y29uc3QgZD1yW2NdO3R5cGVvZiBkPT0ibnVtYmVyIiYmKGQ8YXx8ZD09PWEmJmwrKzx0KSYmdS5wdXNoKGVbY10pfXJldHVybiB1fWdldEZvbGRpbmdSYW5nZXMoZSx0KXtjb25zdCBuPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Vm9pZEVsZW1lbnRzKGUubGFuZ3VhZ2VJZCksaT1nZShlLmdldFRleHQoKSk7bGV0IHI9aS5zY2FuKCk7Y29uc3Qgcz1bXSxvPVtdO2xldCBsPW51bGwsYT0tMTtmdW5jdGlvbiB1KGQpe3MucHVzaChkKSxhPWQuc3RhcnRMaW5lfWZvcig7ciE9PXouRU9TOyl7c3dpdGNoKHIpe2Nhc2Ugei5TdGFydFRhZzp7Y29uc3QgZD1pLmdldFRva2VuVGV4dCgpLG09ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtvLnB1c2goe3N0YXJ0TGluZTptLHRhZ05hbWU6ZH0pLGw9ZDticmVha31jYXNlIHouRW5kVGFnOntsPWkuZ2V0VG9rZW5UZXh0KCk7YnJlYWt9Y2FzZSB6LlN0YXJ0VGFnQ2xvc2U6aWYoIWx8fCF0aGlzLmRhdGFNYW5hZ2VyLmlzVm9pZEVsZW1lbnQobCxuKSlicmVhaztjYXNlIHouRW5kVGFnQ2xvc2U6Y2FzZSB6LlN0YXJ0VGFnU2VsZkNsb3NlOntsZXQgZD1vLmxlbmd0aC0xO2Zvcig7ZD49MCYmb1tkXS50YWdOYW1lIT09bDspZC0tO2lmKGQ+PTApe2NvbnN0IG09b1tkXTtvLmxlbmd0aD1kO2NvbnN0IGY9ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxfPW0uc3RhcnRMaW5lLGc9Zi0xO2c+XyYmYSE9PV8mJnUoe3N0YXJ0TGluZTpfLGVuZExpbmU6Z30pfWJyZWFrfWNhc2Ugei5Db21tZW50OntsZXQgZD1lLnBvc2l0aW9uQXQoaS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2NvbnN0IGY9aS5nZXRUb2tlblRleHQoKS5tYXRjaCgvXlxzKiMocmVnaW9uXGIpfChlbmRyZWdpb25cYikvKTtpZihmKWlmKGZbMV0pby5wdXNoKHtzdGFydExpbmU6ZCx0YWdOYW1lOiIifSk7ZWxzZXtsZXQgXz1vLmxlbmd0aC0xO2Zvcig7Xz49MCYmb1tfXS50YWdOYW1lLmxlbmd0aDspXy0tO2lmKF8+PTApe2NvbnN0IGc9b1tfXTtvLmxlbmd0aD1fO2NvbnN0IEE9ZDtkPWcuc3RhcnRMaW5lLEE+ZCYmYSE9PWQmJnUoe3N0YXJ0TGluZTpkLGVuZExpbmU6QSxraW5kOnNuLlJlZ2lvbn0pfX1lbHNle2NvbnN0IF89ZS5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKStpLmdldFRva2VuTGVuZ3RoKCkpLmxpbmU7ZDxfJiZ1KHtzdGFydExpbmU6ZCxlbmRMaW5lOl8sa2luZDpzbi5Db21tZW50fSl9YnJlYWt9fXI9aS5zY2FuKCl9Y29uc3QgYz10JiZ0LnJhbmdlTGltaXR8fE51bWJlci5NQVhfVkFMVUU7cmV0dXJuIHMubGVuZ3RoPmM/dGhpcy5saW1pdFJhbmdlcyhzLGMpOnN9fSxNYz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmh0bWxQYXJzZXI9ZX1nZXRTZWxlY3Rpb25SYW5nZXMoZSx0KXtjb25zdCBuPXRoaXMuaHRtbFBhcnNlci5wYXJzZURvY3VtZW50KGUpO3JldHVybiB0Lm1hcChpPT50aGlzLmdldFNlbGVjdGlvblJhbmdlKGksZSxuKSl9Z2V0U2VsZWN0aW9uUmFuZ2UoZSx0LG4pe2NvbnN0IGk9dGhpcy5nZXRBcHBsaWNhYmxlUmFuZ2VzKHQsZSxuKTtsZXQgcixzO2ZvcihsZXQgbz1pLmxlbmd0aC0xO28+PTA7by0tKXtjb25zdCBsPWlbb107KCFyfHxsWzBdIT09clswXXx8bFsxXSE9PXJbMV0pJiYocz1jbi5jcmVhdGUoRy5jcmVhdGUodC5wb3NpdGlvbkF0KGlbb11bMF0pLHQucG9zaXRpb25BdChpW29dWzFdKSkscykpLHI9bH1yZXR1cm4gc3x8KHM9Y24uY3JlYXRlKEcuY3JlYXRlKGUsZSkpKSxzfWdldEFwcGxpY2FibGVSYW5nZXMoZSx0LG4pe2NvbnN0IGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKTtsZXQgcz10aGlzLmdldEFsbFBhcmVudFRhZ1JhbmdlcyhyKTtpZihyLnN0YXJ0VGFnRW5kJiYhci5lbmRUYWdTdGFydCl7aWYoci5zdGFydFRhZ0VuZCE9PXIuZW5kKXJldHVybltbci5zdGFydCxyLmVuZF1dO2NvbnN0IG89Ry5jcmVhdGUoZS5wb3NpdGlvbkF0KHIuc3RhcnRUYWdFbmQtMiksZS5wb3NpdGlvbkF0KHIuc3RhcnRUYWdFbmQpKTtyZXR1cm4gZS5nZXRUZXh0KG8pPT09Ii8+Ij9zLnVuc2hpZnQoW3Iuc3RhcnQrMSxyLnN0YXJ0VGFnRW5kLTJdKTpzLnVuc2hpZnQoW3Iuc3RhcnQrMSxyLnN0YXJ0VGFnRW5kLTFdKSxzPXRoaXMuZ2V0QXR0cmlidXRlTGV2ZWxSYW5nZXMoZSxyLGkpLmNvbmNhdChzKSxzfXJldHVybiFyLnN0YXJ0VGFnRW5kfHwhci5lbmRUYWdTdGFydD9zOihzLnVuc2hpZnQoW3Iuc3RhcnQsci5lbmRdKSxyLnN0YXJ0PGkmJmk8ci5zdGFydFRhZ0VuZD8ocy51bnNoaWZ0KFtyLnN0YXJ0KzEsci5zdGFydFRhZ0VuZC0xXSkscz10aGlzLmdldEF0dHJpYnV0ZUxldmVsUmFuZ2VzKGUscixpKS5jb25jYXQocykscyk6ci5zdGFydFRhZ0VuZDw9aSYmaTw9ci5lbmRUYWdTdGFydD8ocy51bnNoaWZ0KFtyLnN0YXJ0VGFnRW5kLHIuZW5kVGFnU3RhcnRdKSxzKTooaT49ci5lbmRUYWdTdGFydCsyJiZzLnVuc2hpZnQoW3IuZW5kVGFnU3RhcnQrMixyLmVuZC0xXSkscykpfWdldEFsbFBhcmVudFRhZ1JhbmdlcyhlKXtsZXQgdD1lO2NvbnN0IG49W107Zm9yKDt0LnBhcmVudDspdD10LnBhcmVudCx0aGlzLmdldE5vZGVSYW5nZXModCkuZm9yRWFjaChpPT5uLnB1c2goaSkpO3JldHVybiBufWdldE5vZGVSYW5nZXMoZSl7cmV0dXJuIGUuc3RhcnRUYWdFbmQmJmUuZW5kVGFnU3RhcnQmJmUuc3RhcnRUYWdFbmQ8ZS5lbmRUYWdTdGFydD9bW2Uuc3RhcnRUYWdFbmQsZS5lbmRUYWdTdGFydF0sW2Uuc3RhcnQsZS5lbmRdXTpbW2Uuc3RhcnQsZS5lbmRdXX1nZXRBdHRyaWJ1dGVMZXZlbFJhbmdlcyhlLHQsbil7Y29uc3QgaT1HLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5zdGFydCksZS5wb3NpdGlvbkF0KHQuZW5kKSkscj1lLmdldFRleHQoaSkscz1uLXQuc3RhcnQsbz1nZShyKTtsZXQgbD1vLnNjYW4oKTtjb25zdCBhPXQuc3RhcnQsdT1bXTtsZXQgYz0hMSxkPS0xO2Zvcig7bCE9PXouRU9TOyl7c3dpdGNoKGwpe2Nhc2Ugei5BdHRyaWJ1dGVOYW1lOntpZihzPG8uZ2V0VG9rZW5PZmZzZXQoKSl7Yz0hMTticmVha31zPD1vLmdldFRva2VuRW5kKCkmJnUudW5zaGlmdChbby5nZXRUb2tlbk9mZnNldCgpLG8uZ2V0VG9rZW5FbmQoKV0pLGM9ITAsZD1vLmdldFRva2VuT2Zmc2V0KCk7YnJlYWt9Y2FzZSB6LkF0dHJpYnV0ZVZhbHVlOntpZighYylicmVhaztjb25zdCBtPW8uZ2V0VG9rZW5UZXh0KCk7aWYoczxvLmdldFRva2VuT2Zmc2V0KCkpe3UucHVzaChbZCxvLmdldFRva2VuRW5kKCldKTticmVha31zPj1vLmdldFRva2VuT2Zmc2V0KCkmJnM8PW8uZ2V0VG9rZW5FbmQoKSYmKHUudW5zaGlmdChbby5nZXRUb2tlbk9mZnNldCgpLG8uZ2V0VG9rZW5FbmQoKV0pLChtWzBdPT09JyInJiZtW20ubGVuZ3RoLTFdPT09JyInfHxtWzBdPT09IiciJiZtW20ubGVuZ3RoLTFdPT09IiciKSYmcz49by5nZXRUb2tlbk9mZnNldCgpKzEmJnM8PW8uZ2V0VG9rZW5FbmQoKS0xJiZ1LnVuc2hpZnQoW28uZ2V0VG9rZW5PZmZzZXQoKSsxLG8uZ2V0VG9rZW5FbmQoKS0xXSksdS5wdXNoKFtkLG8uZ2V0VG9rZW5FbmQoKV0pKTticmVha319bD1vLnNjYW4oKX1yZXR1cm4gdS5tYXAobT0+W21bMF0rYSxtWzFdK2FdKX19LE5jPXt2ZXJzaW9uOjEuMSx0YWdzOlt7bmFtZToiaHRtbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGh0bWwgZWxlbWVudCByZXByZXNlbnRzIHRoZSByb290IG9mIGFuIEhUTUwgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6Im1hbmlmZXN0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJTcGVjaWZpZXMgdGhlIFVSSSBvZiBhIHJlc291cmNlIG1hbmlmZXN0IGluZGljYXRpbmcgcmVzb3VyY2VzIHRoYXQgc2hvdWxkIGJlIGNhY2hlZCBsb2NhbGx5LiBTZWUgW1VzaW5nIHRoZSBhcHBsaWNhdGlvbiBjYWNoZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9Vc2luZ190aGVfYXBwbGljYXRpb25fY2FjaGUpIGZvciBkZXRhaWxzLiJ9fSx7bmFtZToidmVyc2lvbiIsZGVzY3JpcHRpb246J1NwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiB0aGUgSFRNTCBbRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0RURCAiRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uOiBJbiBIVE1MLCB0aGUgZG9jdHlwZSBpcyB0aGUgcmVxdWlyZWQgIjwhRE9DVFlQRSBodG1sPiIgcHJlYW1ibGUgZm91bmQgYXQgdGhlIHRvcCBvZiBhbGwgZG9jdW1lbnRzLiBJdHMgc29sZSBwdXJwb3NlIGlzIHRvIHByZXZlbnQgYSBicm93c2VyIGZyb20gc3dpdGNoaW5nIGludG8gc28tY2FsbGVkIOKAnHF1aXJrcyBtb2Rl4oCdIHdoZW4gcmVuZGVyaW5nIGEgZG9jdW1lbnQ7IHRoYXQgaXMsIHRoZSAiPCFET0NUWVBFIGh0bWw+IiBkb2N0eXBlIGVuc3VyZXMgdGhhdCB0aGUgYnJvd3NlciBtYWtlcyBhIGJlc3QtZWZmb3J0IGF0dGVtcHQgYXQgZm9sbG93aW5nIHRoZSByZWxldmFudCBzcGVjaWZpY2F0aW9ucywgcmF0aGVyIHRoYW4gdXNpbmcgYSBkaWZmZXJlbnQgcmVuZGVyaW5nIG1vZGUgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBzb21lIHNwZWNpZmljYXRpb25zLiIpIHRoYXQgZ292ZXJucyB0aGUgY3VycmVudCBkb2N1bWVudC4gVGhpcyBhdHRyaWJ1dGUgaXMgbm90IG5lZWRlZCwgYmVjYXVzZSBpdCBpcyByZWR1bmRhbnQgd2l0aCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbi4nfSx7bmFtZToieG1sbnMiLGRlc2NyaXB0aW9uOidTcGVjaWZpZXMgdGhlIFhNTCBOYW1lc3BhY2Ugb2YgdGhlIGRvY3VtZW50LiBEZWZhdWx0IHZhbHVlIGlzIGAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCJgLiBUaGlzIGlzIHJlcXVpcmVkIGluIGRvY3VtZW50cyBwYXJzZWQgd2l0aCBYTUwgcGFyc2VycywgYW5kIG9wdGlvbmFsIGluIHRleHQvaHRtbCBkb2N1bWVudHMuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9odG1sIn1dfSx7bmFtZToiaGVhZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhlYWQgZWxlbWVudCByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBtZXRhZGF0YSBmb3IgdGhlIERvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJwcm9maWxlIixkZXNjcmlwdGlvbjoiVGhlIFVSSXMgb2Ygb25lIG9yIG1vcmUgbWV0YWRhdGEgcHJvZmlsZXMsIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2hlYWQifV19LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRpdGxlIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgZG9jdW1lbnQncyB0aXRsZSBvciBuYW1lLiBBdXRob3JzIHNob3VsZCB1c2UgdGl0bGVzIHRoYXQgaWRlbnRpZnkgdGhlaXIgZG9jdW1lbnRzIGV2ZW4gd2hlbiB0aGV5IGFyZSB1c2VkIG91dCBvZiBjb250ZXh0LCBmb3IgZXhhbXBsZSBpbiBhIHVzZXIncyBoaXN0b3J5IG9yIGJvb2ttYXJrcywgb3IgaW4gc2VhcmNoIHJlc3VsdHMuIFRoZSBkb2N1bWVudCdzIHRpdGxlIGlzIG9mdGVuIGRpZmZlcmVudCBmcm9tIGl0cyBmaXJzdCBoZWFkaW5nLCBzaW5jZSB0aGUgZmlyc3QgaGVhZGluZyBkb2VzIG5vdCBoYXZlIHRvIHN0YW5kIGFsb25lIHdoZW4gdGFrZW4gb3V0IG9mIGNvbnRleHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGl0bGUifV19LHtuYW1lOiJiYXNlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYmFzZSBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIHNwZWNpZnkgdGhlIGRvY3VtZW50IGJhc2UgVVJMIGZvciB0aGUgcHVycG9zZXMgb2YgcmVzb2x2aW5nIHJlbGF0aXZlIFVSTHMsIGFuZCB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBicm93c2luZyBjb250ZXh0IGZvciB0aGUgcHVycG9zZXMgb2YgZm9sbG93aW5nIGh5cGVybGlua3MuIFRoZSBlbGVtZW50IGRvZXMgbm90IHJlcHJlc2VudCBhbnkgY29udGVudCBiZXlvbmQgdGhpcyBpbmZvcm1hdGlvbi4ifSx2b2lkOiEwLGF0dHJpYnV0ZXM6W3tuYW1lOiJocmVmIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYmFzZSBVUkwgdG8gYmUgdXNlZCB0aHJvdWdob3V0IHRoZSBkb2N1bWVudCBmb3IgcmVsYXRpdmUgVVJMIGFkZHJlc3Nlcy4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCB0aGlzIGVsZW1lbnQgbXVzdCBjb21lIGJlZm9yZSBhbnkgb3RoZXIgZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVzIHdob3NlIHZhbHVlcyBhcmUgVVJMcy4gQWJzb2x1dGUgYW5kIHJlbGF0aXZlIFVSTHMgYXJlIGFsbG93ZWQuIn19LHtuYW1lOiJ0YXJnZXQiLHZhbHVlU2V0OiJ0YXJnZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgbmFtZSBvciBrZXl3b3JkIGluZGljYXRpbmcgdGhlIGRlZmF1bHQgbG9jYXRpb24gdG8gZGlzcGxheSB0aGUgcmVzdWx0IHdoZW4gaHlwZXJsaW5rcyBvciBmb3JtcyBjYXVzZSBuYXZpZ2F0aW9uLCBmb3IgZWxlbWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhbiBleHBsaWNpdCB0YXJnZXQgcmVmZXJlbmNlLiBJdCBpcyBhIG5hbWUgb2YsIG9yIGtleXdvcmQgZm9yLCBhIF9icm93c2luZyBjb250ZXh0XyAoZm9yIGV4YW1wbGU6IHRhYiwgd2luZG93LCBvciBpbmxpbmUgZnJhbWUpLiBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGhhdmUgc3BlY2lhbCBtZWFuaW5nczpcblxuKiAgIGBfc2VsZmA6IExvYWQgdGhlIHJlc3VsdCBpbnRvIHRoZSBzYW1lIGJyb3dzaW5nIGNvbnRleHQgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGlzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgX2JsYW5rYDogTG9hZCB0aGUgcmVzdWx0IGludG8gYSBuZXcgdW5uYW1lZCBicm93c2luZyBjb250ZXh0LlxuKiAgIGBfcGFyZW50YDogTG9hZCB0aGUgcmVzdWx0IGludG8gdGhlIHBhcmVudCBicm93c2luZyBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9uZS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLlxuKiAgIGBfdG9wYDogTG9hZCB0aGUgcmVzdWx0IGludG8gdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0ICh0aGF0IGlzLCB0aGUgYnJvd3NpbmcgY29udGV4dCB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50IG9uZSwgYW5kIGhhcyBubyBwYXJlbnQpLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgb3B0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgdGhpcyBlbGVtZW50IG11c3QgY29tZSBiZWZvcmUgYW55IG90aGVyIGVsZW1lbnRzIHdpdGggYXR0cmlidXRlcyB3aG9zZSB2YWx1ZXMgYXJlIFVSTHMuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYmFzZSJ9XX0se25hbWU6ImxpbmsiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBsaW5rIGVsZW1lbnQgYWxsb3dzIGF1dGhvcnMgdG8gbGluayB0aGVpciBkb2N1bWVudCB0byBvdGhlciByZXNvdXJjZXMuIn0sdm9pZDohMCxhdHRyaWJ1dGVzOlt7bmFtZToiaHJlZiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBbVVJMXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1VSTCAiVVJMOiBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkgaXMgYSB0ZXh0IHN0cmluZyBzcGVjaWZ5aW5nIHdoZXJlIGEgcmVzb3VyY2UgY2FuIGJlIGZvdW5kIG9uIHRoZSBJbnRlcm5ldC4iKSBvZiB0aGUgbGlua2VkIHJlc291cmNlLiBBIFVSTCBjYW4gYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUuJ319LHtuYW1lOiJjcm9zc29yaWdpbiIsdmFsdWVTZXQ6InhvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRlcyB3aGV0aGVyIFtDT1JTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0NPUlMgIkNPUlM6IENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBpcyBhIHN5c3RlbSwgY29uc2lzdGluZyBvZiB0cmFuc21pdHRpbmcgSFRUUCBoZWFkZXJzLCB0aGF0IGRldGVybWluZXMgd2hldGhlciBicm93c2VycyBibG9jayBmcm9udGVuZCBKYXZhU2NyaXB0IGNvZGUgZnJvbSBhY2Nlc3NpbmcgcmVzcG9uc2VzIGZvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuIikgbXVzdCBiZSB1c2VkIHdoZW4gZmV0Y2hpbmcgdGhlIHJlc291cmNlLiBbQ09SUy1lbmFibGVkIGltYWdlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX0VuYWJsZWRfSW1hZ2UpIGNhbiBiZSByZXVzZWQgaW4gdGhlIFtgPGNhbnZhcz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FudmFzICJVc2UgdGhlIEhUTUwgPGNhbnZhcz4gZWxlbWVudCB3aXRoIGVpdGhlciB0aGUgY2FudmFzIHNjcmlwdGluZyBBUEkgb3IgdGhlIFdlYkdMIEFQSSB0byBkcmF3IGdyYXBoaWNzIGFuZCBhbmltYXRpb25zLiIpIGVsZW1lbnQgd2l0aG91dCBiZWluZyBfdGFpbnRlZF8uIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmU6XG5cbmBhbm9ueW1vdXNgXG5cbkEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QgKGkuZS4gd2l0aCBhbiBbYE9yaWdpbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9PcmlnaW4gIlRoZSBPcmlnaW4gcmVxdWVzdCBoZWFkZXIgaW5kaWNhdGVzIHdoZXJlIGEgZmV0Y2ggb3JpZ2luYXRlcyBmcm9tLiBJdCBkb2VzblwndCBpbmNsdWRlIGFueSBwYXRoIGluZm9ybWF0aW9uLCBidXQgb25seSB0aGUgc2VydmVyIG5hbWUuIEl0IGlzIHNlbnQgd2l0aCBDT1JTIHJlcXVlc3RzLCBhcyB3ZWxsIGFzIHdpdGggUE9TVCByZXF1ZXN0cy4gSXQgaXMgc2ltaWxhciB0byB0aGUgUmVmZXJlciBoZWFkZXIsIGJ1dCwgdW5saWtlIHRoaXMgaGVhZGVyLCBpdCBkb2VzblwndCBkaXNjbG9zZSB0aGUgd2hvbGUgcGF0aC4iKSBIVFRQIGhlYWRlcikgaXMgcGVyZm9ybWVkLCBidXQgbm8gY3JlZGVudGlhbCBpcyBzZW50IChpLmUuIG5vIGNvb2tpZSwgWC41MDkgY2VydGlmaWNhdGUsIG9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24pLiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IGdpdmUgY3JlZGVudGlhbHMgdG8gdGhlIG9yaWdpbiBzaXRlIChieSBub3Qgc2V0dGluZyB0aGUgW2BBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luICJUaGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luIHJlc3BvbnNlIGhlYWRlciBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzcG9uc2UgY2FuIGJlIHNoYXJlZCB3aXRoIHJlcXVlc3RpbmcgY29kZSBmcm9tIHRoZSBnaXZlbiBvcmlnaW4uIikgSFRUUCBoZWFkZXIpIHRoZSBpbWFnZSB3aWxsIGJlIHRhaW50ZWQgYW5kIGl0cyB1c2FnZSByZXN0cmljdGVkLlxuXG5gdXNlLWNyZWRlbnRpYWxzYFxuXG5BIGNyb3NzLW9yaWdpbiByZXF1ZXN0IChpLmUuIHdpdGggYW4gYE9yaWdpbmAgSFRUUCBoZWFkZXIpIGlzIHBlcmZvcm1lZCBhbG9uZyB3aXRoIGEgY3JlZGVudGlhbCBzZW50IChpLmUuIGEgY29va2llLCBjZXJ0aWZpY2F0ZSwgYW5kL29yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gaXMgcGVyZm9ybWVkKS4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBnaXZlIGNyZWRlbnRpYWxzIHRvIHRoZSBvcmlnaW4gc2l0ZSAodGhyb3VnaCBbYEFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzICJUaGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMgcmVzcG9uc2UgaGVhZGVyIHRlbGxzIGJyb3dzZXJzIHdoZXRoZXIgdG8gZXhwb3NlIHRoZSByZXNwb25zZSB0byBmcm9udGVuZCBKYXZhU2NyaXB0IGNvZGUgd2hlbiB0aGUgcmVxdWVzdFwncyBjcmVkZW50aWFscyBtb2RlIChSZXF1ZXN0LmNyZWRlbnRpYWxzKSBpcyAiaW5jbHVkZSIuIikgSFRUUCBoZWFkZXIpLCB0aGUgcmVzb3VyY2Ugd2lsbCBiZSBfdGFpbnRlZF8gYW5kIGl0cyB1c2FnZSByZXN0cmljdGVkLlxuXG5JZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBwcmVzZW50LCB0aGUgcmVzb3VyY2UgaXMgZmV0Y2hlZCB3aXRob3V0IGEgW0NPUlNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ09SUyAiQ09SUzogQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIGlzIGEgc3lzdGVtLCBjb25zaXN0aW5nIG9mIHRyYW5zbWl0dGluZyBIVFRQIGhlYWRlcnMsIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGJyb3dzZXJzIGJsb2NrIGZyb250ZW5kIEphdmFTY3JpcHQgY29kZSBmcm9tIGFjY2Vzc2luZyByZXNwb25zZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy4iKSByZXF1ZXN0IChpLmUuIHdpdGhvdXQgc2VuZGluZyB0aGUgYE9yaWdpbmAgSFRUUCBoZWFkZXIpLCBwcmV2ZW50aW5nIGl0cyBub24tdGFpbnRlZCB1c2FnZS4gSWYgaW52YWxpZCwgaXQgaXMgaGFuZGxlZCBhcyBpZiB0aGUgZW51bWVyYXRlZCBrZXl3b3JkICoqYW5vbnltb3VzKiogd2FzIHVzZWQuIFNlZSBbQ09SUyBzZXR0aW5ncyBhdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uJ319LHtuYW1lOiJyZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIG5hbWVzIGEgcmVsYXRpb25zaGlwIG9mIHRoZSBsaW5rZWQgZG9jdW1lbnQgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQuIFRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBbbGluayB0eXBlcyB2YWx1ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvTGlua190eXBlcykuIn19LHtuYW1lOiJtZWRpYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBtZWRpYSB0aGF0IHRoZSBsaW5rZWQgcmVzb3VyY2UgYXBwbGllcyB0by4gSXRzIHZhbHVlIG11c3QgYmUgYSBtZWRpYSB0eXBlIC8gW21lZGlhIHF1ZXJ5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvTWVkaWFfcXVlcmllcykuIFRoaXMgYXR0cmlidXRlIGlzIG1haW5seSB1c2VmdWwgd2hlbiBsaW5raW5nIHRvIGV4dGVybmFsIHN0eWxlc2hlZXRzIOKAlCBpdCBhbGxvd3MgdGhlIHVzZXIgYWdlbnQgdG8gcGljayB0aGUgYmVzdCBhZGFwdGVkIG9uZSBmb3IgdGhlIGRldmljZSBpdCBydW5zIG9uLlxuXG4qKk5vdGVzOioqXG5cbiogICBJbiBIVE1MIDQsIHRoaXMgY2FuIG9ubHkgYmUgYSBzaW1wbGUgd2hpdGUtc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRpb24gbGl0ZXJhbHMsIGkuZS4sIFttZWRpYSB0eXBlcyBhbmQgZ3JvdXBzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQG1lZGlhKSwgd2hlcmUgZGVmaW5lZCBhbmQgYWxsb3dlZCBhcyB2YWx1ZXMgZm9yIHRoaXMgYXR0cmlidXRlLCBzdWNoIGFzIGBwcmludGAsIGBzY3JlZW5gLCBgYXVyYWxgLCBgYnJhaWxsZWAuIEhUTUw1IGV4dGVuZGVkIHRoaXMgdG8gYW55IGtpbmQgb2YgW21lZGlhIHF1ZXJpZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9NZWRpYV9xdWVyaWVzKSwgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGFsbG93ZWQgdmFsdWVzIG9mIEhUTUwgNC5cbiogICBCcm93c2VycyBub3Qgc3VwcG9ydGluZyBbQ1NTMyBNZWRpYSBRdWVyaWVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvTWVkaWFfcXVlcmllcykgd29uJ3QgbmVjZXNzYXJpbHkgcmVjb2duaXplIHRoZSBhZGVxdWF0ZSBsaW5rOyBkbyBub3QgZm9yZ2V0IHRvIHNldCBmYWxsYmFjayBsaW5rcywgdGhlIHJlc3RyaWN0ZWQgc2V0IG9mIG1lZGlhIHF1ZXJpZXMgZGVmaW5lZCBpbiBIVE1MIDQuIn19LHtuYW1lOiJocmVmbGFuZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBsYW5ndWFnZSBvZiB0aGUgbGlua2VkIHJlc291cmNlLiBJdCBpcyBwdXJlbHkgYWR2aXNvcnkuIEFsbG93ZWQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IFtCQ1A0N10oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL2JjcC9iY3A0Ny50eHQpLiBVc2UgdGhpcyBhdHRyaWJ1dGUgb25seSBpZiB0aGUgW2BocmVmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EjYXR0ci1ocmVmKSBhdHRyaWJ1dGUgaXMgcHJlc2VudC4ifX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHRoZSBjb250ZW50IGxpbmtlZCB0by4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgTUlNRSB0eXBlIHN1Y2ggYXMgKip0ZXh0L2h0bWwqKiwgKip0ZXh0L2NzcyoqLCBhbmQgc28gb24uIFRoZSBjb21tb24gdXNlIG9mIHRoaXMgYXR0cmlidXRlIGlzIHRvIGRlZmluZSB0aGUgdHlwZSBvZiBzdHlsZXNoZWV0IGJlaW5nIHJlZmVyZW5jZWQgKHN1Y2ggYXMgKip0ZXh0L2NzcyoqKSwgYnV0IGdpdmVuIHRoYXQgQ1NTIGlzIHRoZSBvbmx5IHN0eWxlc2hlZXQgbGFuZ3VhZ2UgdXNlZCBvbiB0aGUgd2ViLCBub3Qgb25seSBpcyBpdCBwb3NzaWJsZSB0byBvbWl0IHRoZSBgdHlwZWAgYXR0cmlidXRlLCBidXQgaXMgYWN0dWFsbHkgbm93IHJlY29tbWVuZGVkIHByYWN0aWNlLiBJdCBpcyBhbHNvIHVzZWQgb24gYHJlbD0icHJlbG9hZCJgIGxpbmsgdHlwZXMsIHRvIG1ha2Ugc3VyZSB0aGUgYnJvd3NlciBvbmx5IGRvd25sb2FkcyBmaWxlIHR5cGVzIHRoYXQgaXQgc3VwcG9ydHMuJ319LHtuYW1lOiJzaXplcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgc2l6ZXMgb2YgdGhlIGljb25zIGZvciB2aXN1YWwgbWVkaWEgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZS4gSXQgbXVzdCBiZSBwcmVzZW50IG9ubHkgaWYgdGhlIFtgcmVsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWwpIGNvbnRhaW5zIGEgdmFsdWUgb2YgYGljb25gIG9yIGEgbm9uLXN0YW5kYXJkIHR5cGUgc3VjaCBhcyBBcHBsZSdzIGBhcHBsZS10b3VjaC1pY29uYC4gSXQgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgYW55YCwgbWVhbmluZyB0aGF0IHRoZSBpY29uIGNhbiBiZSBzY2FsZWQgdG8gYW55IHNpemUgYXMgaXQgaXMgaW4gYSB2ZWN0b3IgZm9ybWF0LCBsaWtlIGBpbWFnZS9zdmcreG1sYC5cbiogICBhIHdoaXRlLXNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHNpemVzLCBlYWNoIGluIHRoZSBmb3JtYXQgYF88d2lkdGggaW4gcGl4ZWxzPl94XzxoZWlnaHQgaW4gcGl4ZWxzPl9gIG9yIGBfPHdpZHRoIGluIHBpeGVscz5fWF88aGVpZ2h0IGluIHBpeGVscz5fYC4gRWFjaCBvZiB0aGVzZSBzaXplcyBtdXN0IGJlIGNvbnRhaW5lZCBpbiB0aGUgcmVzb3VyY2UuXG5cbioqTm90ZToqKiBNb3N0IGljb24gZm9ybWF0cyBhcmUgb25seSBhYmxlIHRvIHN0b3JlIG9uZSBzaW5nbGUgaWNvbjsgdGhlcmVmb3JlIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIFtgc2l6ZXNgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItc2l6ZXMpIGNvbnRhaW5zIG9ubHkgb25lIGVudHJ5LiBNUydzIElDTyBmb3JtYXQgZG9lcywgYXMgd2VsbCBhcyBBcHBsZSdzIElDTlMuIElDTyBpcyBtb3JlIHViaXF1aXRvdXM7IHlvdSBzaG91bGQgZGVmaW5pdGVseSB1c2UgaXQuIn19LHtuYW1lOiJhcyIsZGVzY3JpcHRpb246J1RoaXMgYXR0cmlidXRlIGlzIG9ubHkgdXNlZCB3aGVuIGByZWw9InByZWxvYWQiYCBvciBgcmVsPSJwcmVmZXRjaCJgIGhhcyBiZWVuIHNldCBvbiB0aGUgYDxsaW5rPmAgZWxlbWVudC4gSXQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGNvbnRlbnQgYmVpbmcgbG9hZGVkIGJ5IHRoZSBgPGxpbms+YCwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBjb250ZW50IHByaW9yaXRpemF0aW9uLCByZXF1ZXN0IG1hdGNoaW5nLCBhcHBsaWNhdGlvbiBvZiBjb3JyZWN0IFtjb250ZW50IHNlY3VyaXR5IHBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9DU1ApLCBhbmQgc2V0dGluZyBvZiBjb3JyZWN0IFtgQWNjZXB0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2VwdCAiVGhlIEFjY2VwdCByZXF1ZXN0IEhUVFAgaGVhZGVyIGFkdmVydGlzZXMgd2hpY2ggY29udGVudCB0eXBlcywgZXhwcmVzc2VkIGFzIE1JTUUgdHlwZXMsIHRoZSBjbGllbnQgaXMgYWJsZSB0byB1bmRlcnN0YW5kLiBVc2luZyBjb250ZW50IG5lZ290aWF0aW9uLCB0aGUgc2VydmVyIHRoZW4gc2VsZWN0cyBvbmUgb2YgdGhlIHByb3Bvc2FscywgdXNlcyBpdCBhbmQgaW5mb3JtcyB0aGUgY2xpZW50IG9mIGl0cyBjaG9pY2Ugd2l0aCB0aGUgQ29udGVudC1UeXBlIHJlc3BvbnNlIGhlYWRlci4gQnJvd3NlcnMgc2V0IGFkZXF1YXRlIHZhbHVlcyBmb3IgdGhpcyBoZWFkZXIgZGVwZW5kaW5nIG9uwqB0aGUgY29udGV4dCB3aGVyZSB0aGUgcmVxdWVzdCBpcyBkb25lOiB3aGVuIGZldGNoaW5nIGEgQ1NTIHN0eWxlc2hlZXQgYSBkaWZmZXJlbnQgdmFsdWUgaXMgc2V0IGZvciB0aGUgcmVxdWVzdCB0aGFuIHdoZW4gZmV0Y2hpbmcgYW4gaW1hZ2UswqB2aWRlbyBvciBhIHNjcmlwdC4iKSByZXF1ZXN0IGhlYWRlci4nfSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiB0aGUgcmVzb3VyY2UuIFByaW9yaXR5IGhpbnRzIGFyZSBkZWxlZ2F0ZWQgdXNpbmcgdGhlIHZhbHVlczoifSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246JyoqYGF1dG9gKio6IEluZGljYXRlc8KgKipub8KgcHJlZmVyZW5jZSoqLiBUaGUgYnJvd3NlciBtYXkgdXNlIGl0cyBvd24gaGV1cmlzdGljcyB0byBkZWNpZGUgdGhlIHByaW9yaXR5IG9mIHRoZSByZXNvdXJjZS5cblxuKipgaGlnaGAqKjogSW5kaWNhdGVzIHRvIHRoZcKgYnJvd3NlcsKgdGhhdCB0aGUgcmVzb3VyY2UgaXMgb2bCoCoqaGlnaCoqIHByaW9yaXR5LlxuXG4qKmBsb3dgKio6wqBJbmRpY2F0ZXMgdG8gdGhlwqBicm93c2VywqB0aGF0IHRoZSByZXNvdXJjZSBpcyBvZsKgKipsb3cqKiBwcmlvcml0eS5cblxuKipOb3RlOioqIFRoZSBgaW1wb3J0YW5jZWAgYXR0cmlidXRlIG1heSBvbmx5IGJlIHVzZWQgZm9yIHRoZSBgPGxpbms+YCBlbGVtZW50IGlmIGByZWw9InByZWxvYWQiYCBvciBgcmVsPSJwcmVmZXRjaCJgIGlzIHByZXNlbnQuJ30se25hbWU6ImludGVncml0eSIsZGVzY3JpcHRpb246IkNvbnRhaW5zIGlubGluZSBtZXRhZGF0YSDigJQgYSBiYXNlNjQtZW5jb2RlZCBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIHJlc291cmNlIChmaWxlKSB5b3XigJlyZSB0ZWxsaW5nIHRoZSBicm93c2VyIHRvIGZldGNoLiBUaGUgYnJvd3NlciBjYW4gdXNlIHRoaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZldGNoZWQgcmVzb3VyY2UgaGFzIGJlZW4gZGVsaXZlcmVkIGZyZWUgb2YgdW5leHBlY3RlZCBtYW5pcHVsYXRpb24uIFNlZSBbU3VicmVzb3VyY2UgSW50ZWdyaXR5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TdWJyZXNvdXJjZV9JbnRlZ3JpdHkpLiJ9LHtuYW1lOiJyZWZlcnJlcnBvbGljeSIsZGVzY3JpcHRpb246J0Egc3RyaW5nIGluZGljYXRpbmcgd2hpY2ggcmVmZXJyZXIgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgdGhlIHJlc291cmNlOlxuXG4qICAgYG5vLXJlZmVycmVyYCBtZWFucyB0aGF0IHRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciAiVGhlIFJlZmVyZXIgcmVxdWVzdCBoZWFkZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIHdlYiBwYWdlIGZyb20gd2hpY2ggYSBsaW5rIHRvIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIHBhZ2Ugd2FzIGZvbGxvd2VkLiBUaGUgUmVmZXJlciBoZWFkZXIgYWxsb3dzIHNlcnZlcnMgdG8gaWRlbnRpZnkgd2hlcmUgcGVvcGxlIGFyZSB2aXNpdGluZyB0aGVtIGZyb20gYW5kIG1heSB1c2UgdGhhdCBkYXRhIGZvciBhbmFseXRpY3MsIGxvZ2dpbmcsIG9yIG9wdGltaXplZCBjYWNoaW5nLCBmb3IgZXhhbXBsZS4iKSBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cbiogICBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGVgIG1lYW5zIHRoYXQgbm8gW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgYmUgc2VudCB3aGVuIG5hdmlnYXRpbmcgdG8gYW4gb3JpZ2luIHdpdGhvdXQgVExTIChIVFRQUykuIFRoaXMgaXMgYSB1c2VyIGFnZW504oCZcyBkZWZhdWx0IGJlaGF2aW9yLCBpZiBubyBwb2xpY3kgaXMgb3RoZXJ3aXNlIHNwZWNpZmllZC5cbiogICBgb3JpZ2luYCBtZWFucyB0aGF0IHRoZSByZWZlcnJlciB3aWxsIGJlIHRoZSBvcmlnaW4gb2YgdGhlIHBhZ2UsIHdoaWNoIGlzIHJvdWdobHkgdGhlIHNjaGVtZSwgdGhlIGhvc3QsIGFuZCB0aGUgcG9ydC5cbiogICBgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luYCBtZWFucyB0aGF0IG5hdmlnYXRpbmcgdG8gb3RoZXIgb3JpZ2lucyB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIHNjaGVtZSwgdGhlIGhvc3QsIGFuZCB0aGUgcG9ydCwgd2hpbGUgbmF2aWdhdGluZyBvbiB0aGUgc2FtZSBvcmlnaW4gd2lsbCBpbmNsdWRlIHRoZSByZWZlcnJlclwncyBwYXRoLlxuKiAgIGB1bnNhZmUtdXJsYCBtZWFucyB0aGF0IHRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBhbmQgdGhlIHBhdGggKGJ1dCBub3QgdGhlIGZyYWdtZW50LCBwYXNzd29yZCwgb3IgdXNlcm5hbWUpLiBUaGlzIGNhc2UgaXMgdW5zYWZlIGJlY2F1c2UgaXQgY2FuIGxlYWsgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLid9LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246J1RoZSBgdGl0bGVgIGF0dHJpYnV0ZSBoYXMgc3BlY2lhbCBzZW1hbnRpY3Mgb24gdGhlIGA8bGluaz5gIGVsZW1lbnQuIFdoZW4gdXNlZCBvbiBhIGA8bGluayByZWw9InN0eWxlc2hlZXQiPmAgaXQgZGVmaW5lcyBhIFtwcmVmZXJyZWQgb3IgYW4gYWx0ZXJuYXRlIHN0eWxlc2hlZXRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9BbHRlcm5hdGl2ZV9zdHlsZV9zaGVldHMpLiBJbmNvcnJlY3RseSB1c2luZyBpdCBtYXkgW2NhdXNlIHRoZSBzdHlsZXNoZWV0IHRvIGJlIGlnbm9yZWRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ29ycmVjdGx5X1VzaW5nX1RpdGxlc19XaXRoX0V4dGVybmFsX1N0eWxlc2hlZXRzKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsifV19LHtuYW1lOiJtZXRhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbWV0YSBlbGVtZW50IHJlcHJlc2VudHMgdmFyaW91cyBraW5kcyBvZiBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgdGhlIHRpdGxlLCBiYXNlLCBsaW5rLCBzdHlsZSwgYW5kIHNjcmlwdCBlbGVtZW50cy4ifSx2b2lkOiEwLGF0dHJpYnV0ZXM6W3tuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOmBUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBuYW1lIG9mIGEgcGllY2Ugb2YgZG9jdW1lbnQtbGV2ZWwgbWV0YWRhdGEuIEl0IHNob3VsZCBub3QgYmUgc2V0IGlmIG9uZSBvZiB0aGUgYXR0cmlidXRlcyBbXGBpdGVtcHJvcFxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaXRlbXByb3ApLCBbXGBodHRwLWVxdWl2XGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItaHR0cC1lcXVpdikgb3IgW1xgY2hhcnNldFxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNoYXJzZXQpIGlzIGFsc28gc2V0LgoKVGhpcyBtZXRhZGF0YSBuYW1lIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgY29udGFpbmVkIGJ5IHRoZSBbXGBjb250ZW50XGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY29udGVudCkgYXR0cmlidXRlLiBUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgbmFtZSBhdHRyaWJ1dGUgYXJlOgoKKiAgIFxgYXBwbGljYXRpb24tbmFtZVxgIHdoaWNoIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHJ1bm5pbmcgaW4gdGhlIHdlYiBwYWdlLgogICAgCiAgICAqKk5vdGU6KioKICAgIAogICAgKiAgIEJyb3dzZXJzIG1heSB1c2UgdGhpcyB0byBpZGVudGlmeSB0aGUgYXBwbGljYXRpb24uIEl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBbXGA8dGl0bGU+XGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aXRsZSAiVGhlIEhUTUwgVGl0bGUgZWxlbWVudCAoPHRpdGxlPikgZGVmaW5lcyB0aGUgZG9jdW1lbnQncyB0aXRsZSB0aGF0IGlzIHNob3duIGluIGEgYnJvd3NlcidzIHRpdGxlIGJhciBvciBhIHBhZ2UncyB0YWIuIikgZWxlbWVudCwgd2hpY2ggdXN1YWxseSBjb250YWluIHRoZSBhcHBsaWNhdGlvbiBuYW1lLCBidXQgbWF5IGFsc28gY29udGFpbiBpbmZvcm1hdGlvbiBsaWtlIHRoZSBkb2N1bWVudCBuYW1lIG9yIGEgc3RhdHVzLgogICAgKiAgIFNpbXBsZSB3ZWIgcGFnZXMgc2hvdWxkbid0IGRlZmluZSBhbiBhcHBsaWNhdGlvbi1uYW1lLgogICAgCiogICBcYGF1dGhvclxgIHdoaWNoIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGRvY3VtZW50J3MgYXV0aG9yLgoqICAgXGBkZXNjcmlwdGlvblxgIHdoaWNoIGNvbnRhaW5zIGEgc2hvcnQgYW5kIGFjY3VyYXRlIHN1bW1hcnkgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2UuIFNldmVyYWwgYnJvd3NlcnMsIGxpa2UgRmlyZWZveCBhbmQgT3BlcmEsIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IGRlc2NyaXB0aW9uIG9mIGJvb2ttYXJrZWQgcGFnZXMuCiogICBcYGdlbmVyYXRvclxgIHdoaWNoIGNvbnRhaW5zIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBzb2Z0d2FyZSB0aGF0IGdlbmVyYXRlZCB0aGUgcGFnZS4KKiAgIFxga2V5d29yZHNcYCB3aGljaCBjb250YWlucyB3b3JkcyByZWxldmFudCB0byB0aGUgcGFnZSdzIGNvbnRlbnQgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KKiAgIFxgcmVmZXJyZXJcYCB3aGljaCBjb250cm9scyB0aGUgW1xgUmVmZXJlclxgIEhUVFAgaGVhZGVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlcikgYXR0YWNoZWQgdG8gcmVxdWVzdHMgc2VudCBmcm9tIHRoZSBkb2N1bWVudDoKICAgIAogICAgVmFsdWVzIGZvciB0aGUgXGBjb250ZW50XGAgYXR0cmlidXRlIG9mIFxgPG1ldGEgbmFtZT0icmVmZXJyZXIiPlxgCiAgICAKICAgIFxgbm8tcmVmZXJyZXJcYAogICAgCiAgICBEbyBub3Qgc2VuZCBhIEhUVFAgXGBSZWZlcnJlclxgIGhlYWRlci4KICAgIAogICAgXGBvcmlnaW5cYAogICAgCiAgICBTZW5kIHRoZSBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L09yaWdpbikgb2YgdGhlIGRvY3VtZW50LgogICAgCiAgICBcYG5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlXGAKICAgIAogICAgU2VuZCB0aGUgW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9PcmlnaW4pIGFzIGEgcmVmZXJyZXIgdG8gVVJMcyBhcyBzZWN1cmUgYXMgdGhlIGN1cnJlbnQgcGFnZSwgKGh0dHBz4oaSaHR0cHMpLCBidXQgZG9lcyBub3Qgc2VuZCBhIHJlZmVycmVyIHRvIGxlc3Mgc2VjdXJlIFVSTHMgKGh0dHBz4oaSaHR0cCkuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgogICAgCiAgICBcYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpblxgCiAgICAKICAgIFNlbmQgdGhlIGZ1bGwgVVJMIChzdHJpcHBlZCBvZiBwYXJhbWV0ZXJzKSBmb3Igc2FtZS1vcmlnaW4gcmVxdWVzdHMsIGJ1dCBvbmx5IHNlbmQgdGhlIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvT3JpZ2luKSBmb3Igb3RoZXIgY2FzZXMuCiAgICAKICAgIFxgc2FtZS1vcmlnaW5cYAogICAgCiAgICBBIHJlZmVycmVyIHdpbGwgYmUgc2VudCBmb3IgW3NhbWUtc2l0ZSBvcmlnaW5zXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TYW1lLW9yaWdpbl9wb2xpY3kpLCBidXQgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzIHdpbGwgY29udGFpbiBubyByZWZlcnJlciBpbmZvcm1hdGlvbi4KICAgIAogICAgXGBzdHJpY3Qtb3JpZ2luXGAKICAgIAogICAgT25seSBzZW5kIHRoZSBvcmlnaW4gb2YgdGhlIGRvY3VtZW50IGFzIHRoZSByZWZlcnJlciB0byBhLXByaW9yaSBhcy1tdWNoLXNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFMtPkhUVFBTKSwgYnV0IGRvbid0IHNlbmQgaXQgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFMtPkhUVFApLgogICAgCiAgICBcYHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5cYAogICAgCiAgICBTZW5kIGEgZnVsbCBVUkwgd2hlbiBwZXJmb3JtaW5nIGEgc2FtZS1vcmlnaW4gcmVxdWVzdCwgb25seSBzZW5kIHRoZSBvcmlnaW4gb2YgdGhlIGRvY3VtZW50IHRvIGEtcHJpb3JpIGFzLW11Y2gtc2VjdXJlIGRlc3RpbmF0aW9uIChIVFRQUy0+SFRUUFMpLCBhbmQgc2VuZCBubyBoZWFkZXIgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFMtPkhUVFApLgogICAgCiAgICBcYHVuc2FmZS1VUkxcYAogICAgCiAgICBTZW5kIHRoZSBmdWxsIFVSTCAoc3RyaXBwZWQgb2YgcGFyYW1ldGVycykgZm9yIHNhbWUtb3JpZ2luIG9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy4KICAgIAogICAgKipOb3RlczoqKgogICAgCiAgICAqICAgU29tZSBicm93c2VycyBzdXBwb3J0IHRoZSBkZXByZWNhdGVkIHZhbHVlcyBvZiBcYGFsd2F5c1xgLCBcYGRlZmF1bHRcYCwgYW5kIFxgbmV2ZXJcYCBmb3IgcmVmZXJyZXIuCiAgICAqICAgRHluYW1pY2FsbHkgaW5zZXJ0aW5nIFxgPG1ldGEgbmFtZT0icmVmZXJyZXIiPlxgICh3aXRoIFtcYGRvY3VtZW50LndyaXRlXGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC93cml0ZSkgb3IgW1xgYXBwZW5kQ2hpbGRcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvYXBwZW5kQ2hpbGQpKSBtYWtlcyB0aGUgcmVmZXJyZXIgYmVoYXZpb3VyIHVucHJlZGljdGFibGUuCiAgICAqICAgV2hlbiBzZXZlcmFsIGNvbmZsaWN0aW5nIHBvbGljaWVzIGFyZSBkZWZpbmVkLCB0aGUgbm8tcmVmZXJyZXIgcG9saWN5IGlzIGFwcGxpZWQuCiAgICAKClRoaXMgYXR0cmlidXRlIG1heSBhbHNvIGhhdmUgYSB2YWx1ZSB0YWtlbiBmcm9tIHRoZSBleHRlbmRlZCBsaXN0IGRlZmluZWQgb24gW1dIQVRXRyBXaWtpIE1ldGFFeHRlbnNpb25zIHBhZ2VdKGh0dHBzOi8vd2lraS53aGF0d2cub3JnL3dpa2kvTWV0YUV4dGVuc2lvbnMpLiBBbHRob3VnaCBub25lIGhhdmUgYmVlbiBmb3JtYWxseSBhY2NlcHRlZCB5ZXQsIGEgZmV3IGNvbW1vbmx5IHVzZWQgbmFtZXMgYXJlOgoKKiAgIFxgY3JlYXRvclxgIHdoaWNoIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNyZWF0b3Igb2YgdGhlIGRvY3VtZW50LCBzdWNoIGFzIGFuIG9yZ2FuaXphdGlvbiBvciBpbnN0aXR1dGlvbi4gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUsIHNldmVyYWwgW1xgPG1ldGE+XGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnRzIHNob3VsZCBiZSB1c2VkLgoqICAgXGBnb29nbGVib3RcYCwgYSBzeW5vbnltIG9mIFxgcm9ib3RzXGAsIGlzIG9ubHkgZm9sbG93ZWQgYnkgR29vZ2xlYm90ICh0aGUgaW5kZXhpbmcgY3Jhd2xlciBmb3IgR29vZ2xlKS4KKiAgIFxgcHVibGlzaGVyXGAgd2hpY2ggZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgZG9jdW1lbnQncyBwdWJsaXNoZXIuCiogICBcYHJvYm90c1xgIHdoaWNoIGRlZmluZXMgdGhlIGJlaGF2aW91ciB0aGF0IGNvb3BlcmF0aXZlIGNyYXdsZXJzLCBvciAicm9ib3RzIiwgc2hvdWxkIHVzZSB3aXRoIHRoZSBwYWdlLiBJdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSB2YWx1ZXMgYmVsb3c6CiAgICAKICAgIFZhbHVlcyBmb3IgdGhlIGNvbnRlbnQgb2YgXGA8bWV0YSBuYW1lPSJyb2JvdHMiPlxgCiAgICAKICAgIFZhbHVlCiAgICAKICAgIERlc2NyaXB0aW9uCiAgICAKICAgIFVzZWQgYnkKICAgIAogICAgXGBpbmRleFxgCiAgICAKICAgIEFsbG93cyB0aGUgcm9ib3QgdG8gaW5kZXggdGhlIHBhZ2UgKGRlZmF1bHQpLgogICAgCiAgICBBbGwKICAgIAogICAgXGBub2luZGV4XGAKICAgIAogICAgUmVxdWVzdHMgdGhlIHJvYm90IHRvIG5vdCBpbmRleCB0aGUgcGFnZS4KICAgIAogICAgQWxsCiAgICAKICAgIFxgZm9sbG93XGAKICAgIAogICAgQWxsb3dzIHRoZSByb2JvdCB0byBmb2xsb3cgdGhlIGxpbmtzIG9uIHRoZSBwYWdlIChkZWZhdWx0KS4KICAgIAogICAgQWxsCiAgICAKICAgIFxgbm9mb2xsb3dcYAogICAgCiAgICBSZXF1ZXN0cyB0aGUgcm9ib3QgdG8gbm90IGZvbGxvdyB0aGUgbGlua3Mgb24gdGhlIHBhZ2UuCiAgICAKICAgIEFsbAogICAgCiAgICBcYG5vbmVcYAogICAgCiAgICBFcXVpdmFsZW50IHRvIFxgbm9pbmRleCwgbm9mb2xsb3dcYAogICAgCiAgICBbR29vZ2xlXShodHRwczovL3N1cHBvcnQuZ29vZ2xlLmNvbS93ZWJtYXN0ZXJzL2Fuc3dlci83OTgxMikKICAgIAogICAgXGBub29kcFxgCiAgICAKICAgIFByZXZlbnRzIHVzaW5nIHRoZSBbT3BlbiBEaXJlY3RvcnkgUHJvamVjdF0oaHR0cHM6Ly93d3cuZG1vei5vcmcvKSBkZXNjcmlwdGlvbiwgaWYgYW55LCBhcyB0aGUgcGFnZSBkZXNjcmlwdGlvbiBpbiBzZWFyY2ggZW5naW5lIHJlc3VsdHMuCiAgICAKICAgIFtHb29nbGVdKGh0dHBzOi8vc3VwcG9ydC5nb29nbGUuY29tL3dlYm1hc3RlcnMvYW5zd2VyLzM1NjI0I25vZG1veiksIFtZYWhvb10oaHR0cHM6Ly9oZWxwLnlhaG9vLmNvbS9rYi9zZWFyY2gtZm9yLWRlc2t0b3AvbWV0YS10YWdzLXJvYm90c3R4dC15YWhvby1zZWFyY2gtc2xuMjIxMy5odG1sI2NvbnQ1KSwgW0JpbmddKGh0dHBzOi8vd3d3LmJpbmcuY29tL3dlYm1hc3Rlci9oZWxwL3doaWNoLXJvYm90cy1tZXRhdGFncy1kb2VzLWJpbmctc3VwcG9ydC01MTk4ZDI0MCkKICAgIAogICAgXGBub2FyY2hpdmVcYAogICAgCiAgICBSZXF1ZXN0cyB0aGUgc2VhcmNoIGVuZ2luZSBub3QgdG8gY2FjaGUgdGhlIHBhZ2UgY29udGVudC4KICAgIAogICAgW0dvb2dsZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vd2VibWFzdGVycy9jb250cm9sLWNyYXdsLWluZGV4L2RvY3Mvcm9ib3RzX21ldGFfdGFnI3ZhbGlkLWluZGV4aW5nLS1zZXJ2aW5nLWRpcmVjdGl2ZXMpLCBbWWFob29dKGh0dHBzOi8vaGVscC55YWhvby5jb20va2Ivc2VhcmNoLWZvci1kZXNrdG9wL1NMTjIyMTMuaHRtbCksIFtCaW5nXShodHRwczovL3d3dy5iaW5nLmNvbS93ZWJtYXN0ZXIvaGVscC93aGljaC1yb2JvdHMtbWV0YXRhZ3MtZG9lcy1iaW5nLXN1cHBvcnQtNTE5OGQyNDApCiAgICAKICAgIFxgbm9zbmlwcGV0XGAKICAgIAogICAgUHJldmVudHMgZGlzcGxheWluZyBhbnkgZGVzY3JpcHRpb24gb2YgdGhlIHBhZ2UgaW4gc2VhcmNoIGVuZ2luZSByZXN1bHRzLgogICAgCiAgICBbR29vZ2xlXShodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWJtYXN0ZXJzL2NvbnRyb2wtY3Jhd2wtaW5kZXgvZG9jcy9yb2JvdHNfbWV0YV90YWcjdmFsaWQtaW5kZXhpbmctLXNlcnZpbmctZGlyZWN0aXZlcyksIFtCaW5nXShodHRwczovL3d3dy5iaW5nLmNvbS93ZWJtYXN0ZXIvaGVscC93aGljaC1yb2JvdHMtbWV0YXRhZ3MtZG9lcy1iaW5nLXN1cHBvcnQtNTE5OGQyNDApCiAgICAKICAgIFxgbm9pbWFnZWluZGV4XGAKICAgIAogICAgUmVxdWVzdHMgdGhpcyBwYWdlIG5vdCB0byBhcHBlYXIgYXMgdGhlIHJlZmVycmluZyBwYWdlIG9mIGFuIGluZGV4ZWQgaW1hZ2UuCiAgICAKICAgIFtHb29nbGVdKGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3dlYm1hc3RlcnMvY29udHJvbC1jcmF3bC1pbmRleC9kb2NzL3JvYm90c19tZXRhX3RhZyN2YWxpZC1pbmRleGluZy0tc2VydmluZy1kaXJlY3RpdmVzKQogICAgCiAgICBcYG5vY2FjaGVcYAogICAgCiAgICBTeW5vbnltIG9mIFxgbm9hcmNoaXZlXGAuCiAgICAKICAgIFtCaW5nXShodHRwczovL3d3dy5iaW5nLmNvbS93ZWJtYXN0ZXIvaGVscC93aGljaC1yb2JvdHMtbWV0YXRhZ3MtZG9lcy1iaW5nLXN1cHBvcnQtNTE5OGQyNDApCiAgICAKICAgICoqTm90ZXM6KioKICAgIAogICAgKiAgIE9ubHkgY29vcGVyYXRpdmUgcm9ib3RzIGZvbGxvdyB0aGVzZSBydWxlcy4gRG8gbm90IGV4cGVjdCB0byBwcmV2ZW50IGUtbWFpbCBoYXJ2ZXN0ZXJzIHdpdGggdGhlbS4KICAgICogICBUaGUgcm9ib3Qgc3RpbGwgbmVlZHMgdG8gYWNjZXNzIHRoZSBwYWdlIGluIG9yZGVyIHRvIHJlYWQgdGhlc2UgcnVsZXMuIFRvIHByZXZlbnQgYmFuZHdpZHRoIGNvbnN1bXB0aW9uLCB1c2UgYSBfW3JvYm90cy50eHRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvcm9ib3RzLnR4dCAicm9ib3RzLnR4dDogUm9ib3RzLnR4dCBpcyBhIGZpbGUgd2hpY2ggaXMgdXN1YWxseSBwbGFjZWQgaW4gdGhlIHJvb3Qgb2YgYW55IHdlYnNpdGUuIEl0IGRlY2lkZXMgd2hldGhlcsKgY3Jhd2xlcnMgYXJlIHBlcm1pdHRlZCBvciBmb3JiaWRkZW4gYWNjZXNzIHRvIHRoZSB3ZWIgc2l0ZS4iKV8gZmlsZS4KICAgICogICBJZiB5b3Ugd2FudCB0byByZW1vdmUgYSBwYWdlLCBcYG5vaW5kZXhcYCB3aWxsIHdvcmssIGJ1dCBvbmx5IGFmdGVyIHRoZSByb2JvdCB2aXNpdHMgdGhlIHBhZ2UgYWdhaW4uIEVuc3VyZSB0aGF0IHRoZSBcYHJvYm90cy50eHRcYCBmaWxlIGlzIG5vdCBwcmV2ZW50aW5nIHJldmlzaXRzLgogICAgKiAgIFNvbWUgdmFsdWVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIGxpa2UgXGBpbmRleFxgIGFuZCBcYG5vaW5kZXhcYCwgb3IgXGBmb2xsb3dcYCBhbmQgXGBub2ZvbGxvd1xgLiBJbiB0aGVzZSBjYXNlcyB0aGUgcm9ib3QncyBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkIGFuZCBtYXkgdmFyeSBiZXR3ZWVuIHRoZW0uCiAgICAqICAgU29tZSBjcmF3bGVyIHJvYm90cywgbGlrZSBHb29nbGUsIFlhaG9vIGFuZCBCaW5nLCBzdXBwb3J0IHRoZSBzYW1lIHZhbHVlcyBmb3IgdGhlIEhUVFAgaGVhZGVyIFxgWC1Sb2JvdHMtVGFnXGA7IHRoaXMgYWxsb3dzIG5vbi1IVE1MIGRvY3VtZW50cyBsaWtlIGltYWdlcyB0byB1c2UgdGhlc2UgcnVsZXMuCiAgICAKKiAgIFxgc2x1cnBcYCwgaXMgYSBzeW5vbnltIG9mIFxgcm9ib3RzXGAsIGJ1dCBvbmx5IGZvciBTbHVycCAtIHRoZSBjcmF3bGVyIGZvciBZYWhvbyBTZWFyY2guCiogICBcYHZpZXdwb3J0XGAsIHdoaWNoIGdpdmVzIGhpbnRzIGFib3V0IHRoZSBzaXplIG9mIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIFt2aWV3cG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS92aWV3cG9ydCAidmlld3BvcnQ6IEEgdmlld3BvcnQgcmVwcmVzZW50cyBhIHBvbHlnb25hbCAobm9ybWFsbHkgcmVjdGFuZ3VsYXIpIGFyZWEgaW4gY29tcHV0ZXIgZ3JhcGhpY3MgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdmlld2VkLiBJbiB3ZWIgYnJvd3NlciB0ZXJtcywgaXQgcmVmZXJzIHRvIHRoZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCB5b3UncmUgdmlld2luZyB3aGljaCBpcyBjdXJyZW50bHkgdmlzaWJsZSBpbiBpdHMgd2luZG93IChvciB0aGUgc2NyZWVuLCBpZiB0aGUgZG9jdW1lbnQgaXMgYmVpbmcgdmlld2VkIGluIGZ1bGwgc2NyZWVuIG1vZGUpLiBDb250ZW50IG91dHNpZGUgdGhlIHZpZXdwb3J0IGlzIG5vdCB2aXNpYmxlIG9uc2NyZWVuIHVudGlsIHNjcm9sbGVkIGludG8gdmlldy4iKS4gVXNlZCBieSBtb2JpbGUgZGV2aWNlcyBvbmx5LgogICAgCiAgICBWYWx1ZXMgZm9yIHRoZSBjb250ZW50IG9mIFxgPG1ldGEgbmFtZT0idmlld3BvcnQiPlxgCiAgICAKICAgIFZhbHVlCiAgICAKICAgIFBvc3NpYmxlIHN1YnZhbHVlcwogICAgCiAgICBEZXNjcmlwdGlvbgogICAgCiAgICBcYHdpZHRoXGAKICAgIAogICAgQSBwb3NpdGl2ZSBpbnRlZ2VyIG51bWJlciwgb3IgdGhlIHRleHQgXGBkZXZpY2Utd2lkdGhcYAogICAgCiAgICBEZWZpbmVzIHRoZSBwaXhlbCB3aWR0aCBvZiB0aGUgdmlld3BvcnQgdGhhdCB5b3Ugd2FudCB0aGUgd2ViIHNpdGUgdG8gYmUgcmVuZGVyZWQgYXQuCiAgICAKICAgIFxgaGVpZ2h0XGAKICAgIAogICAgQSBwb3NpdGl2ZSBpbnRlZ2VyLCBvciB0aGUgdGV4dCBcYGRldmljZS1oZWlnaHRcYAogICAgCiAgICBEZWZpbmVzIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0LiBOb3QgdXNlZCBieSBhbnkgYnJvd3Nlci4KICAgIAogICAgXGBpbml0aWFsLXNjYWxlXGAKICAgIAogICAgQSBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiBcYDAuMFxgIGFuZCBcYDEwLjBcYAogICAgCiAgICBEZWZpbmVzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSBkZXZpY2Ugd2lkdGggKFxgZGV2aWNlLXdpZHRoXGAgaW4gcG9ydHJhaXQgbW9kZSBvciBcYGRldmljZS1oZWlnaHRcYCBpbiBsYW5kc2NhcGUgbW9kZSkgYW5kIHRoZSB2aWV3cG9ydCBzaXplLgogICAgCiAgICBcYG1heGltdW0tc2NhbGVcYAogICAgCiAgICBBIHBvc2l0aXZlIG51bWJlciBiZXR3ZWVuIFxgMC4wXGAgYW5kIFxgMTAuMFxgCiAgICAKICAgIERlZmluZXMgdGhlIG1heGltdW0gYW1vdW50IHRvIHpvb20gaW4uIEl0IG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgXGBtaW5pbXVtLXNjYWxlXGAgb3IgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuIEJyb3dzZXIgc2V0dGluZ3MgY2FuIGlnbm9yZSB0aGlzIHJ1bGUgYW5kIGlPUzEwKyBpZ25vcmVzIGl0IGJ5IGRlZmF1bHQuCiAgICAKICAgIFxgbWluaW11bS1zY2FsZVxgCiAgICAKICAgIEEgcG9zaXRpdmUgbnVtYmVyIGJldHdlZW4gXGAwLjBcYCBhbmQgXGAxMC4wXGAKICAgIAogICAgRGVmaW5lcyB0aGUgbWluaW11bSB6b29tIGxldmVsLiBJdCBtdXN0IGJlIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIFxgbWF4aW11bS1zY2FsZVxgIG9yIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkLiBCcm93c2VyIHNldHRpbmdzIGNhbiBpZ25vcmUgdGhpcyBydWxlIGFuZCBpT1MxMCsgaWdub3JlcyBpdCBieSBkZWZhdWx0LgogICAgCiAgICBcYHVzZXItc2NhbGFibGVcYAogICAgCiAgICBcYHllc1xgIG9yIFxgbm9cYAogICAgCiAgICBJZiBzZXQgdG8gXGBub1xgLCB0aGUgdXNlciBpcyBub3QgYWJsZSB0byB6b29tIGluIHRoZSB3ZWJwYWdlLiBUaGUgZGVmYXVsdCBpcyBcYHllc1xgLiBCcm93c2VyIHNldHRpbmdzIGNhbiBpZ25vcmUgdGhpcyBydWxlLCBhbmQgaU9TMTArIGlnbm9yZXMgaXQgYnkgZGVmYXVsdC4KICAgIAogICAgU3BlY2lmaWNhdGlvbgogICAgCiAgICBTdGF0dXMKICAgIAogICAgQ29tbWVudAogICAgCiAgICBbQ1NTIERldmljZSBBZGFwdGF0aW9uICAKICAgIFRoZSBkZWZpbml0aW9uIG9mICc8bWV0YSBuYW1lPSJ2aWV3cG9ydCI+JyBpbiB0aGF0IHNwZWNpZmljYXRpb24uXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRldmljZS1hZGFwdC8jdmlld3BvcnQtbWV0YSkKICAgIAogICAgV29ya2luZyBEcmFmdAogICAgCiAgICBOb24tbm9ybWF0aXZlbHkgZGVzY3JpYmVzIHRoZSBWaWV3cG9ydCBNRVRBIGVsZW1lbnQKICAgIAogICAgU2VlIGFsc286IFtcYEB2aWV3cG9ydFxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQHZpZXdwb3J0ICJUaGUgQHZpZXdwb3J0IENTUyBhdC1ydWxlIGxldHMgeW91IGNvbmZpZ3VyZSB0aGUgdmlld3BvcnQgdGhyb3VnaCB3aGljaCB0aGUgZG9jdW1lbnQgaXMgdmlld2VkLiBJdCdzIHByaW1hcmlseSB1c2VkIGZvciBtb2JpbGUgZGV2aWNlcywgYnV0IGlzIGFsc28gdXNlZCBieSBkZXNrdG9wIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBmZWF0dXJlcyBsaWtlICJzbmFwIHRvIGVkZ2UiIChzdWNoIGFzIE1pY3Jvc29mdCBFZGdlKS4iKQogICAgCiAgICAqKk5vdGVzOioqCiAgICAKICAgICogICBUaG91Z2ggdW5zdGFuZGFyZGl6ZWQsIHRoaXMgZGVjbGFyYXRpb24gaXMgcmVzcGVjdGVkIGJ5IG1vc3QgbW9iaWxlIGJyb3dzZXJzIGR1ZSB0byBkZS1mYWN0byBkb21pbmFuY2UuCiAgICAqICAgVGhlIGRlZmF1bHQgdmFsdWVzIG1heSB2YXJ5IGJldHdlZW4gZGV2aWNlcyBhbmQgYnJvd3NlcnMuCiAgICAqICAgVG8gbGVhcm4gYWJvdXQgdGhpcyBkZWNsYXJhdGlvbiBpbiBGaXJlZm94IGZvciBNb2JpbGUsIHNlZSBbdGhpcyBhcnRpY2xlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL01vYmlsZS9WaWV3cG9ydF9tZXRhX3RhZyAiTW9iaWxlL1ZpZXdwb3J0IG1ldGEgdGFnIikuYH19LHtuYW1lOiJodHRwLWVxdWl2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidEZWZpbmVzIGEgcHJhZ21hIGRpcmVjdGl2ZS4gVGhlIGF0dHJpYnV0ZSBpcyBuYW1lZCBgKipodHRwLWVxdWl2KiooYWxlbnQpYCBiZWNhdXNlIGFsbCB0aGUgYWxsb3dlZCB2YWx1ZXMgYXJlIG5hbWVzIG9mIHBhcnRpY3VsYXIgSFRUUCBoZWFkZXJzOlxuXG4qICAgYCJjb250ZW50LWxhbmd1YWdlImAgIFxuICAgIERlZmluZXMgdGhlIGRlZmF1bHQgbGFuZ3VhZ2Ugb2YgdGhlIHBhZ2UuIEl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBbbGFuZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9sYW5nKSBhdHRyaWJ1dGUgb24gYW55IGVsZW1lbnQuXG4gICAgXG4gICAgKipXYXJuaW5nOioqIERvIG5vdCB1c2UgdGhpcyB2YWx1ZSwgYXMgaXQgaXMgb2Jzb2xldGUuIFByZWZlciB0aGUgYGxhbmdgIGF0dHJpYnV0ZSBvbiB0aGUgW2A8aHRtbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaHRtbCAiVGhlIEhUTUwgPGh0bWw+IGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgcm9vdCAodG9wLWxldmVsIGVsZW1lbnQpIG9mIGFuIEhUTUwgZG9jdW1lbnQsIHNvIGl0IGlzIGFsc28gcmVmZXJyZWQgdG8gYXMgdGhlIHJvb3QgZWxlbWVudC4gQWxsIG90aGVyIGVsZW1lbnRzIG11c3QgYmUgZGVzY2VuZGFudHMgb2YgdGhpcyBlbGVtZW50LiIpIGVsZW1lbnQuXG4gICAgXG4qICAgYCJjb250ZW50LXNlY3VyaXR5LXBvbGljeSJgICBcbiAgICBBbGxvd3MgcGFnZSBhdXRob3JzIHRvIGRlZmluZSBhIFtjb250ZW50IHBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvQ1NQL0NTUF9wb2xpY3lfZGlyZWN0aXZlcykgZm9yIHRoZSBjdXJyZW50IHBhZ2UuIENvbnRlbnQgcG9saWNpZXMgbW9zdGx5IHNwZWNpZnkgYWxsb3dlZCBzZXJ2ZXIgb3JpZ2lucyBhbmQgc2NyaXB0IGVuZHBvaW50cyB3aGljaCBoZWxwIGd1YXJkIGFnYWluc3QgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgYXR0YWNrcy5cbiogICBgImNvbnRlbnQtdHlwZSJgICBcbiAgICBEZWZpbmVzIHRoZSBbTUlNRSB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L01JTUVfdHlwZSkgb2YgdGhlIGRvY3VtZW50LCBmb2xsb3dlZCBieSBpdHMgY2hhcmFjdGVyIGVuY29kaW5nLiBJdCBmb2xsb3dzIHRoZSBzYW1lIHN5bnRheCBhcyB0aGUgSFRUUCBgY29udGVudC10eXBlYCBlbnRpdHktaGVhZGVyIGZpZWxkLCBidXQgYXMgaXQgaXMgaW5zaWRlIGEgSFRNTCBwYWdlLCBtb3N0IHZhbHVlcyBvdGhlciB0aGFuIGB0ZXh0L2h0bWxgIGFyZSBpbXBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIHZhbGlkIHN5bnRheCBmb3IgaXRzIGBjb250ZW50YCBpcyB0aGUgc3RyaW5nIFwnYHRleHQvaHRtbGBcJyBmb2xsb3dlZCBieSBhIGNoYXJhY3RlciBzZXQgd2l0aCB0aGUgZm9sbG93aW5nIHN5bnRheDogXCdgOyBjaGFyc2V0PV9JQU5BY2hhcnNldF9gXCcsIHdoZXJlIGBJQU5BY2hhcnNldGAgaXMgdGhlIF9wcmVmZXJyZWQgTUlNRSBuYW1lXyBmb3IgYSBjaGFyYWN0ZXIgc2V0IGFzIFtkZWZpbmVkIGJ5IHRoZSBJQU5BLl0oaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMpXG4gICAgXG4gICAgKipXYXJuaW5nOioqIERvIG5vdCB1c2UgdGhpcyB2YWx1ZSwgYXMgaXQgaXMgb2Jzb2xldGUuIFVzZSB0aGUgW2BjaGFyc2V0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jaGFyc2V0KSBhdHRyaWJ1dGUgb24gdGhlIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgZWxlbWVudC5cbiAgICBcbiAgICAqKk5vdGU6KiogQXMgW2A8bWV0YT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSAiVGhlIEhUTUwgPG1ldGE+IGVsZW1lbnQgcmVwcmVzZW50cyBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBvdGhlciBIVE1MIG1ldGEtcmVsYXRlZCBlbGVtZW50cywgbGlrZSA8YmFzZT4sIDxsaW5rPiwgPHNjcmlwdD4sIDxzdHlsZT4gb3IgPHRpdGxlPi4iKSBjYW5cJ3QgY2hhbmdlIGRvY3VtZW50c1wnIHR5cGVzIGluIFhIVE1MIG9yIEhUTUw1XCdzIFhIVE1MIHNlcmlhbGl6YXRpb24sIG5ldmVyIHNldCB0aGUgTUlNRSB0eXBlIHRvIGFuIFhIVE1MIE1JTUUgdHlwZSB3aXRoIGA8bWV0YT5gLlxuICAgIFxuKiAgIGAicmVmcmVzaCJgICBcbiAgICBUaGlzIGluc3RydWN0aW9uIHNwZWNpZmllczpcbiAgICAqICAgVGhlIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBwYWdlIHNob3VsZCBiZSByZWxvYWRlZCAtIG9ubHkgaWYgdGhlIFtgY29udGVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY29udGVudCkgYXR0cmlidXRlIGNvbnRhaW5zIGEgcG9zaXRpdmUgaW50ZWdlci5cbiAgICAqICAgVGhlIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBwYWdlIHNob3VsZCByZWRpcmVjdCB0byBhbm90aGVyIC0gb25seSBpZiB0aGUgW2Bjb250ZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jb250ZW50KSBhdHRyaWJ1dGUgY29udGFpbnMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGZvbGxvd2VkIGJ5IHRoZSBzdHJpbmcgXCdgO3VybD1gXCcsIGFuZCBhIHZhbGlkIFVSTC5cbiogICBgInNldC1jb29raWUiYCAgXG4gICAgRGVmaW5lcyBhIFtjb29raWVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvY29va2llKSBmb3IgdGhlIHBhZ2UuIEl0cyBjb250ZW50IG11c3QgZm9sbG93IHRoZSBzeW50YXggZGVmaW5lZCBpbiB0aGUgW0lFVEYgSFRUUCBDb29raWUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtaHR0cHN0YXRlLWNvb2tpZS0xNCkuXG4gICAgXG4gICAgKipXYXJuaW5nOioqIERvIG5vdCB1c2UgdGhpcyBpbnN0cnVjdGlvbiwgYXMgaXQgaXMgb2Jzb2xldGUuIFVzZSB0aGUgSFRUUCBoZWFkZXIgW2BTZXQtQ29va2llYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1NldC1Db29raWUpIGluc3RlYWQuJ319LHtuYW1lOiJjb250ZW50IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBjb250YWlucyB0aGUgdmFsdWUgZm9yIHRoZSBbYGh0dHAtZXF1aXZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWh0dHAtZXF1aXYpIG9yIFtgbmFtZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItbmFtZSkgYXR0cmlidXRlLCBkZXBlbmRpbmcgb24gd2hpY2ggaXMgdXNlZC4ifX0se25hbWU6ImNoYXJzZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGRlY2xhcmVzIHRoZSBwYWdlXCdzIGNoYXJhY3RlciBlbmNvZGluZy4gSXQgbXVzdCBjb250YWluIGEgW3N0YW5kYXJkIElBTkEgTUlNRSBuYW1lIGZvciBjaGFyYWN0ZXIgZW5jb2RpbmdzXShodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cykuIEFsdGhvdWdoIHRoZSBzdGFuZGFyZCBkb2VzblwndCByZXF1ZXN0IGEgc3BlY2lmaWMgZW5jb2RpbmcsIGl0IHN1Z2dlc3RzOlxuXG4qICAgQXV0aG9ycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgW2BVVEYtOGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvVVRGLTgpLlxuKiAgIEF1dGhvcnMgc2hvdWxkIG5vdCB1c2UgQVNDSUktaW5jb21wYXRpYmxlIGVuY29kaW5ncyB0byBhdm9pZCBzZWN1cml0eSByaXNrOiBicm93c2VycyBub3Qgc3VwcG9ydGluZyB0aGVtIG1heSBpbnRlcnByZXQgaGFybWZ1bCBjb250ZW50IGFzIEhUTUwuIFRoaXMgaGFwcGVucyB3aXRoIHRoZSBgSklTX0M2MjI2LTE5ODNgLCBgSklTX1gwMjEyLTE5OTBgLCBgSFotR0ItMjMxMmAsIGBKT0hBQmAsIHRoZSBJU08tMjAyMiBmYW1pbHkgYW5kIHRoZSBFQkNESUMgZmFtaWx5LlxuXG4qKk5vdGU6KiogQVNDSUktaW5jb21wYXRpYmxlIGVuY29kaW5ncyBhcmUgdGhvc2UgdGhhdCBkb25cJ3QgbWFwIHRoZSA4LWJpdCBjb2RlIHBvaW50cyBgMHgyMGAgdG8gYDB4N0VgIHRvIHRoZSBgMHgwMDIwYCB0byBgMHgwMDdFYCBVbmljb2RlIGNvZGUgcG9pbnRzKVxuXG4qICAgQXV0aG9ycyAqKm11c3Qgbm90KiogdXNlIGBDRVNVLThgLCBgVVRGLTdgLCBgQk9DVS0xYCBhbmQvb3IgYFNDU1VgIGFzIFtjcm9zcy1zaXRlIHNjcmlwdGluZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9Dcm9zcy1zaXRlX3NjcmlwdGluZykgYXR0YWNrcyB3aXRoIHRoZXNlIGVuY29kaW5ncyBoYXZlIGJlZW4gZGVtb25zdHJhdGVkLlxuKiAgIEF1dGhvcnMgc2hvdWxkIG5vdCB1c2UgYFVURi0zMmAgYmVjYXVzZSBub3QgYWxsIEhUTUw1IGVuY29kaW5nIGFsZ29yaXRobXMgY2FuIGRpc3Rpbmd1aXNoIGl0IGZyb20gYFVURi0xNmAuXG5cbioqTm90ZXM6KipcblxuKiAgIFRoZSBkZWNsYXJlZCBjaGFyYWN0ZXIgZW5jb2RpbmcgbXVzdCBtYXRjaCB0aGUgb25lIHRoZSBwYWdlIHdhcyBzYXZlZCB3aXRoIHRvIGF2b2lkIGdhcmJsZWQgY2hhcmFjdGVycyBhbmQgc2VjdXJpdHkgaG9sZXMuXG4qICAgVGhlIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgZWxlbWVudCBkZWNsYXJpbmcgdGhlIGVuY29kaW5nIG11c3QgYmUgaW5zaWRlIHRoZSBbYDxoZWFkPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9oZWFkICJUaGUgSFRNTCA8aGVhZD4gZWxlbWVudCBwcm92aWRlcyBnZW5lcmFsIGluZm9ybWF0aW9uIChtZXRhZGF0YSkgYWJvdXQgdGhlIGRvY3VtZW50LCBpbmNsdWRpbmcgaXRzIHRpdGxlIGFuZCBsaW5rcyB0byBpdHPCoHNjcmlwdHMgYW5kIHN0eWxlIHNoZWV0cy4iKSBlbGVtZW50IGFuZCAqKndpdGhpbiB0aGUgZmlyc3QgMTAyNCBieXRlcyoqIG9mIHRoZSBIVE1MIGFzIHNvbWUgYnJvd3NlcnMgb25seSBsb29rIGF0IHRob3NlIGJ5dGVzIGJlZm9yZSBjaG9vc2luZyBhbiBlbmNvZGluZy5cbiogICBUaGlzIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgZWxlbWVudCBpcyBvbmx5IG9uZSBwYXJ0IG9mIHRoZSBbYWxnb3JpdGhtIHRvIGRldGVybWluZSBhIHBhZ2VcJ3MgY2hhcmFjdGVyIHNldF0oaHR0cHM6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNlbmNvZGluZy1zbmlmZmluZy1hbGdvcml0aG0gIkFsZ29yaXRobSBjaGFyc2V0IHBhZ2UiKS4gVGhlIFtgQ29udGVudC1UeXBlYCBoZWFkZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LVR5cGUpIGFuZCBhbnkgW0J5dGUtT3JkZXIgTWFya3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQnl0ZS1PcmRlcl9NYXJrICJUaGUgZGVmaW5pdGlvbiBvZiB0aGF0IHRlcm0gKEJ5dGUtT3JkZXIgTWFya3MpIGhhcyBub3QgYmVlbiB3cml0dGVuIHlldDsgcGxlYXNlIGNvbnNpZGVyIGNvbnRyaWJ1dGluZyBpdCEiKSBvdmVycmlkZSB0aGlzIGVsZW1lbnQuXG4qICAgSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gZGVmaW5lIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcuIElmIGEgcGFnZVwncyBlbmNvZGluZyBpcyB1bmRlZmluZWQsIGNyb3NzLXNjcmlwdGluZyB0ZWNobmlxdWVzIGFyZSBwb3NzaWJsZSwgc3VjaCBhcyB0aGUgW2BVVEYtN2AgZmFsbGJhY2sgY3Jvc3Mtc2NyaXB0aW5nIHRlY2huaXF1ZV0oaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9kb2N0eXBlLW1pcnJvci93aWtpL0FydGljbGVVdGY3KS5cbiogICBUaGUgW2A8bWV0YT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSAiVGhlIEhUTUwgPG1ldGE+IGVsZW1lbnQgcmVwcmVzZW50cyBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBvdGhlciBIVE1MIG1ldGEtcmVsYXRlZCBlbGVtZW50cywgbGlrZSA8YmFzZT4sIDxsaW5rPiwgPHNjcmlwdD4sIDxzdHlsZT4gb3IgPHRpdGxlPi4iKSBlbGVtZW50IHdpdGggYSBgY2hhcnNldGAgYXR0cmlidXRlIGlzIGEgc3lub255bSBmb3IgdGhlIHByZS1IVE1MNSBgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9X0lBTkFjaGFyc2V0XyI+YCwgd2hlcmUgX2BJQU5BY2hhcnNldGBfIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZXF1aXZhbGVudCBbYGNoYXJzZXRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNoYXJzZXQpIGF0dHJpYnV0ZS4gVGhpcyBzeW50YXggaXMgc3RpbGwgYWxsb3dlZCwgYWx0aG91Z2ggbm8gbG9uZ2VyIHJlY29tbWVuZGVkLid9fSx7bmFtZToic2NoZW1lIixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgc2NoZW1lIGluIHdoaWNoIG1ldGFkYXRhIGlzIGRlc2NyaWJlZC4gQSBzY2hlbWUgaXMgYSBjb250ZXh0IGxlYWRpbmcgdG8gdGhlIGNvcnJlY3QgaW50ZXJwcmV0YXRpb25zIG9mIHRoZSBbYGNvbnRlbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNvbnRlbnQpIHZhbHVlLCBsaWtlIGEgZm9ybWF0LlxuXG4qKldhcm5pbmc6KiogRG8gbm90IHVzZSB0aGlzIHZhbHVlLCBhcyBpdCBpcyBvYnNvbGV0ZS4gVGhlcmUgaXMgbm8gcmVwbGFjZW1lbnQgYXMgdGhlcmUgd2FzIG5vIHJlYWwgdXNhZ2UgZm9yIGl0LiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSJ9XX0se25hbWU6InN0eWxlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3R5bGUgZWxlbWVudCBhbGxvd3MgYXV0aG9ycyB0byBlbWJlZCBzdHlsZSBpbmZvcm1hdGlvbiBpbiB0aGVpciBkb2N1bWVudHMuIFRoZSBzdHlsZSBlbGVtZW50IGlzIG9uZSBvZiBzZXZlcmFsIGlucHV0cyB0byB0aGUgc3R5bGluZyBwcm9jZXNzaW5nIG1vZGVsLiBUaGUgZWxlbWVudCBkb2VzIG5vdCByZXByZXNlbnQgY29udGVudCBmb3IgdGhlIHVzZXIuIn0sYXR0cmlidXRlczpbe25hbWU6Im1lZGlhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHdoaWNoIG1lZGlhIHRoZSBzdHlsZSBzaG91bGQgYmUgYXBwbGllZCB0by4gSXRzIHZhbHVlIGlzIGEgW21lZGlhIHF1ZXJ5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9HdWlkZS9DU1MvTWVkaWFfcXVlcmllcyksIHdoaWNoIGRlZmF1bHRzIHRvIGBhbGxgIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbWlzc2luZy4ifX0se25hbWU6Im5vbmNlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGNyeXB0b2dyYXBoaWMgbm9uY2UgKG51bWJlciB1c2VkIG9uY2UpIHVzZWQgdG8gd2hpdGVsaXN0IGlubGluZSBzdHlsZXMgaW4gYSBbc3R5bGUtc3JjIENvbnRlbnQtU2VjdXJpdHktUG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1TZWN1cml0eS1Qb2xpY3kvc3R5bGUtc3JjKS4gVGhlIHNlcnZlciBtdXN0IGdlbmVyYXRlIGEgdW5pcXVlIG5vbmNlIHZhbHVlIGVhY2ggdGltZSBpdCB0cmFuc21pdHMgYSBwb2xpY3kuIEl0IGlzIGNyaXRpY2FsIHRvIHByb3ZpZGUgYSBub25jZSB0aGF0IGNhbm5vdCBiZSBndWVzc2VkIGFzIGJ5cGFzc2luZyBhIHJlc291cmNl4oCZcyBwb2xpY3kgaXMgb3RoZXJ3aXNlIHRyaXZpYWwuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBzdHlsaW5nIGxhbmd1YWdlIGFzIGEgTUlNRSB0eXBlIChjaGFyc2V0IHNob3VsZCBub3QgYmUgc3BlY2lmaWVkKS4gVGhpcyBhdHRyaWJ1dGUgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIGB0ZXh0L2Nzc2AgaWYgaXQgaXMgbm90IHNwZWNpZmllZCDigJQgdGhlcmUgaXMgdmVyeSBsaXR0bGUgcmVhc29uIHRvIGluY2x1ZGUgdGhpcyBpbiBtb2Rlcm4gd2ViIGRvY3VtZW50cy4ifX0se25hbWU6InNjb3BlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToidGl0bGUiLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgW2FsdGVybmF0aXZlIHN0eWxlIHNoZWV0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQWx0ZXJuYXRpdmVfc3R5bGVfc2hlZXRzKSBzZXRzLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3R5bGUifV19LHtuYW1lOiJib2R5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYm9keSBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGNvbnRlbnQgb2YgdGhlIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJvbmFmdGVycHJpbnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgdGhlIHVzZXIgaGFzIHByaW50ZWQgdGhlIGRvY3VtZW50LiJ9fSx7bmFtZToib25iZWZvcmVwcmludCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSB1c2VyIHJlcXVlc3RzIHByaW50aW5nIG9mIHRoZSBkb2N1bWVudC4ifX0se25hbWU6Im9uYmVmb3JldW5sb2FkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGlzIGFib3V0IHRvIGJlIHVubG9hZGVkLiJ9fSx7bmFtZToib25oYXNoY2hhbmdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGZyYWdtZW50IGlkZW50aWZpZXIgcGFydCAoc3RhcnRpbmcgd2l0aCB0aGUgaGFzaCAoYCcjJ2ApIGNoYXJhY3Rlcikgb2YgdGhlIGRvY3VtZW50J3MgY3VycmVudCBhZGRyZXNzIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25sYW5ndWFnZWNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBwcmVmZXJyZWQgbGFuZ3VhZ2VzIGNoYW5nZWQuIn19LHtuYW1lOiJvbm1lc3NhZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIHJlY2VpdmVkIGEgbWVzc2FnZS4ifX0se25hbWU6Im9ub2ZmbGluZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIG5ldHdvcmsgY29tbXVuaWNhdGlvbiBoYXMgZmFpbGVkLiJ9fSx7bmFtZToib25vbmxpbmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBuZXR3b3JrIGNvbW11bmljYXRpb24gaGFzIGJlZW4gcmVzdG9yZWQuIn19LHtuYW1lOiJvbnBhZ2VoaWRlIn0se25hbWU6Im9ucGFnZXNob3cifSx7bmFtZToib25wb3BzdGF0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSB1c2VyIGhhcyBuYXZpZ2F0ZWQgc2Vzc2lvbiBoaXN0b3J5LiJ9fSx7bmFtZToib25zdG9yYWdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHN0b3JhZ2UgYXJlYSBoYXMgY2hhbmdlZC4ifX0se25hbWU6Im9udW5sb2FkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGlzIGdvaW5nIGF3YXkuIn19LHtuYW1lOiJhbGluayIsZGVzY3JpcHRpb246J0NvbG9yIG9mIHRleHQgZm9yIGh5cGVybGlua3Mgd2hlbiBzZWxlY3RlZC4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgY29sb3JgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY29sb3IgIlRoZSBjb2xvciBDU1MgcHJvcGVydHkgc2V0cyB0aGUgZm9yZWdyb3VuZCBjb2xvciB2YWx1ZSBvZiBhbiBlbGVtZW50XCdzIHRleHQgYW5kIHRleHQgZGVjb3JhdGlvbnMsIGFuZCBzZXRzIHRoZSBjdXJyZW50Y29sb3IgdmFsdWUuIikgcHJvcGVydHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgW2A6YWN0aXZlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTLzphY3RpdmUgIlRoZSA6YWN0aXZlIENTUyBwc2V1ZG8tY2xhc3MgcmVwcmVzZW50cyBhbiBlbGVtZW50IChzdWNoIGFzIGEgYnV0dG9uKSB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZCBieSB0aGUgdXNlci4iKSBwc2V1ZG8tY2xhc3MgaW5zdGVhZC5fJ30se25hbWU6ImJhY2tncm91bmQiLGRlc2NyaXB0aW9uOidVUkkgb2YgYSBpbWFnZSB0byB1c2UgYXMgYSBiYWNrZ3JvdW5kLiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BiYWNrZ3JvdW5kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQgIlRoZSBiYWNrZ3JvdW5kIHNob3J0aGFuZCBDU1MgcHJvcGVydHkgc2V0cyBhbGwgYmFja2dyb3VuZCBzdHlsZSBwcm9wZXJ0aWVzIGF0IG9uY2UsIHN1Y2ggYXMgY29sb3IsIGltYWdlLCBvcmlnaW4gYW5kIHNpemUsIG9yIHJlcGVhdCBtZXRob2QuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6ImJnY29sb3IiLGRlc2NyaXB0aW9uOidCYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgZG9jdW1lbnQuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGJhY2tncm91bmQtY29sb3JgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYmFja2dyb3VuZC1jb2xvciAiVGhlIGJhY2tncm91bmQtY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgYW4gZWxlbWVudC4iKSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkLl8nfSx7bmFtZToiYm90dG9tbWFyZ2luIixkZXNjcmlwdGlvbjonVGhlIG1hcmdpbiBvZiB0aGUgYm90dG9tIG9mIHRoZSBib2R5LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BtYXJnaW4tYm90dG9tYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi1ib3R0b20gIlRoZSBtYXJnaW4tYm90dG9tIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgYm90dG9tIG9mIGFuIGVsZW1lbnQuIEEgcG9zaXRpdmUgdmFsdWUgcGxhY2VzIGl0IGZhcnRoZXIgZnJvbSBpdHMgbmVpZ2hib3JzLCB3aGlsZSBhIG5lZ2F0aXZlIHZhbHVlIHBsYWNlcyBpdCBjbG9zZXIuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6ImxlZnRtYXJnaW4iLGRlc2NyaXB0aW9uOidUaGUgbWFyZ2luIG9mIHRoZSBsZWZ0IG9mIHRoZSBib2R5LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BtYXJnaW4tbGVmdGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4tbGVmdCAiVGhlIG1hcmdpbi1sZWZ0IENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgbGVmdCBzaWRlIG9mIGFuIGVsZW1lbnQuIEEgcG9zaXRpdmUgdmFsdWUgcGxhY2VzIGl0IGZhcnRoZXIgZnJvbSBpdHMgbmVpZ2hib3JzLCB3aGlsZSBhIG5lZ2F0aXZlIHZhbHVlIHBsYWNlcyBpdCBjbG9zZXIuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6ImxpbmsiLGRlc2NyaXB0aW9uOidDb2xvciBvZiB0ZXh0IGZvciB1bnZpc2l0ZWQgaHlwZXJ0ZXh0IGxpbmtzLiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2Bjb2xvcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvciAiVGhlIGNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHZhbHVlIG9mIGFuIGVsZW1lbnRcJ3MgdGV4dCBhbmQgdGV4dCBkZWNvcmF0aW9ucywgYW5kIHNldHMgdGhlIGN1cnJlbnRjb2xvciB2YWx1ZS4iKSBwcm9wZXJ0eSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBbYDpsaW5rYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTLzpsaW5rICJUaGUgOmxpbmsgQ1NTIHBzZXVkby1jbGFzcyByZXByZXNlbnRzIGFuIGVsZW1lbnQgdGhhdCBoYXMgbm90IHlldCBiZWVuIHZpc2l0ZWQuIEl0IG1hdGNoZXMgZXZlcnkgdW52aXNpdGVkIDxhPiwgPGFyZWE+LCBvciA8bGluaz4gZWxlbWVudCB0aGF0IGhhcyBhbiBocmVmIGF0dHJpYnV0ZS4iKSBwc2V1ZG8tY2xhc3MgaW5zdGVhZC5fJ30se25hbWU6Im9uYmx1ciIsZGVzY3JpcHRpb246IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgbG9zZXMgZm9jdXMuIn0se25hbWU6Im9uZXJyb3IiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGZhaWxzIHRvIGxvYWQgcHJvcGVybHkuIn0se25hbWU6Im9uZm9jdXMiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IHJlY2VpdmVzIGZvY3VzLiJ9LHtuYW1lOiJvbmxvYWQiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nLiJ9LHtuYW1lOiJvbnJlZG8iLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHVzZXIgaGFzIG1vdmVkIGZvcndhcmQgaW4gdW5kbyB0cmFuc2FjdGlvbiBoaXN0b3J5LiJ9LHtuYW1lOiJvbnJlc2l6ZSIsZGVzY3JpcHRpb246IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gcmVzaXplZC4ifSx7bmFtZToib251bmRvIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSB1c2VyIGhhcyBtb3ZlZCBiYWNrd2FyZCBpbiB1bmRvIHRyYW5zYWN0aW9uIGhpc3RvcnkuIn0se25hbWU6InJpZ2h0bWFyZ2luIixkZXNjcmlwdGlvbjonVGhlIG1hcmdpbiBvZiB0aGUgcmlnaHQgb2YgdGhlIGJvZHkuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYG1hcmdpbi1yaWdodGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4tcmlnaHQgIlRoZSBtYXJnaW4tcmlnaHQgQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmdpbiBhcmVhIG9uIHRoZSByaWdodCBzaWRlIG9mIGFuIGVsZW1lbnQuIEEgcG9zaXRpdmUgdmFsdWUgcGxhY2VzIGl0IGZhcnRoZXIgZnJvbSBpdHMgbmVpZ2hib3JzLCB3aGlsZSBhIG5lZ2F0aXZlIHZhbHVlIHBsYWNlcyBpdCBjbG9zZXIuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6InRleHQiLGRlc2NyaXB0aW9uOidGb3JlZ3JvdW5kIGNvbG9yIG9mIHRleHQuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yICJUaGUgY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGZvcmVncm91bmQgY29sb3IgdmFsdWUgb2YgYW4gZWxlbWVudFwncyB0ZXh0IGFuZCB0ZXh0IGRlY29yYXRpb25zLCBhbmQgc2V0cyB0aGUgY3VycmVudGNvbG9yIHZhbHVlLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJ0b3BtYXJnaW4iLGRlc2NyaXB0aW9uOidUaGUgbWFyZ2luIG9mIHRoZSB0b3Agb2YgdGhlIGJvZHkuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYG1hcmdpbi10b3BgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLXRvcCAiVGhlIG1hcmdpbi10b3AgQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmdpbiBhcmVhIG9uIHRoZSB0b3Agb2YgYW4gZWxlbWVudC4gQSBwb3NpdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgZmFydGhlciBmcm9tIGl0cyBuZWlnaGJvcnMsIHdoaWxlIGEgbmVnYXRpdmUgdmFsdWUgcGxhY2VzIGl0IGNsb3Nlci4iKSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkLl8nfSx7bmFtZToidmxpbmsiLGRlc2NyaXB0aW9uOidDb2xvciBvZiB0ZXh0IGZvciB2aXNpdGVkIGh5cGVydGV4dCBsaW5rcy4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgY29sb3JgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY29sb3IgIlRoZSBjb2xvciBDU1MgcHJvcGVydHkgc2V0cyB0aGUgZm9yZWdyb3VuZCBjb2xvciB2YWx1ZSBvZiBhbiBlbGVtZW50XCdzIHRleHQgYW5kIHRleHQgZGVjb3JhdGlvbnMsIGFuZCBzZXRzIHRoZSBjdXJyZW50Y29sb3IgdmFsdWUuIikgcHJvcGVydHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgW2A6dmlzaXRlZGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy86dmlzaXRlZCAiVGhlIDp2aXNpdGVkIENTUyBwc2V1ZG8tY2xhc3MgcmVwcmVzZW50cyBsaW5rcyB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHZpc2l0ZWQuIEZvciBwcml2YWN5IHJlYXNvbnMsIHRoZSBzdHlsZXMgdGhhdCBjYW4gYmUgbW9kaWZpZWQgdXNpbmcgdGhpcyBzZWxlY3RvciBhcmUgdmVyeSBsaW1pdGVkLiIpIHBzZXVkby1jbGFzcyBpbnN0ZWFkLl8nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2JvZHkifV19LHtuYW1lOiJhcnRpY2xlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYXJ0aWNsZSBlbGVtZW50IHJlcHJlc2VudHMgYSBjb21wbGV0ZSwgb3Igc2VsZi1jb250YWluZWQsIGNvbXBvc2l0aW9uIGluIGEgZG9jdW1lbnQsIHBhZ2UsIGFwcGxpY2F0aW9uLCBvciBzaXRlIGFuZCB0aGF0IGlzLCBpbiBwcmluY2lwbGUsIGluZGVwZW5kZW50bHkgZGlzdHJpYnV0YWJsZSBvciByZXVzYWJsZSwgZS5nLiBpbiBzeW5kaWNhdGlvbi4gVGhpcyBjb3VsZCBiZSBhIGZvcnVtIHBvc3QsIGEgbWFnYXppbmUgb3IgbmV3c3BhcGVyIGFydGljbGUsIGEgYmxvZyBlbnRyeSwgYSB1c2VyLXN1Ym1pdHRlZCBjb21tZW50LCBhbiBpbnRlcmFjdGl2ZSB3aWRnZXQgb3IgZ2FkZ2V0LCBvciBhbnkgb3RoZXIgaW5kZXBlbmRlbnQgaXRlbSBvZiBjb250ZW50LiBFYWNoIGFydGljbGUgc2hvdWxkIGJlIGlkZW50aWZpZWQsIHR5cGljYWxseSBieSBpbmNsdWRpbmcgYSBoZWFkaW5nIChoMeKAk2g2IGVsZW1lbnQpIGFzIGEgY2hpbGQgb2YgdGhlIGFydGljbGUgZWxlbWVudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hcnRpY2xlIn1dfSx7bmFtZToic2VjdGlvbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNlY3Rpb24gZWxlbWVudCByZXByZXNlbnRzIGEgZ2VuZXJpYyBzZWN0aW9uIG9mIGEgZG9jdW1lbnQgb3IgYXBwbGljYXRpb24uIEEgc2VjdGlvbiwgaW4gdGhpcyBjb250ZXh0LCBpcyBhIHRoZW1hdGljIGdyb3VwaW5nIG9mIGNvbnRlbnQuIEVhY2ggc2VjdGlvbiBzaG91bGQgYmUgaWRlbnRpZmllZCwgdHlwaWNhbGx5IGJ5IGluY2x1ZGluZyBhIGhlYWRpbmcgKCBoMS0gaDYgZWxlbWVudCkgYXMgYSBjaGlsZCBvZiB0aGUgc2VjdGlvbiBlbGVtZW50LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NlY3Rpb24ifV19LHtuYW1lOiJuYXYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYXYgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBvZiBhIHBhZ2UgdGhhdCBsaW5rcyB0byBvdGhlciBwYWdlcyBvciB0byBwYXJ0cyB3aXRoaW4gdGhlIHBhZ2U6IGEgc2VjdGlvbiB3aXRoIG5hdmlnYXRpb24gbGlua3MuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbmF2In1dfSx7bmFtZToiYXNpZGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBhc2lkZSBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIG9mIGEgcGFnZSB0aGF0IGNvbnNpc3RzIG9mIGNvbnRlbnQgdGhhdCBpcyB0YW5nZW50aWFsbHkgcmVsYXRlZCB0byB0aGUgY29udGVudCBhcm91bmQgdGhlIGFzaWRlIGVsZW1lbnQsIGFuZCB3aGljaCBjb3VsZCBiZSBjb25zaWRlcmVkIHNlcGFyYXRlIGZyb20gdGhhdCBjb250ZW50LiBTdWNoIHNlY3Rpb25zIGFyZSBvZnRlbiByZXByZXNlbnRlZCBhcyBzaWRlYmFycyBpbiBwcmludGVkIHR5cG9ncmFwaHkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYXNpZGUifV19LHtuYW1lOiJoMSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGgxIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaDIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoMiBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6ImgzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDMgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoNCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGg0IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaDUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoNSBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6Img2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDYgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoZWFkZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZWFkZXIgZWxlbWVudCByZXByZXNlbnRzIGludHJvZHVjdG9yeSBjb250ZW50IGZvciBpdHMgbmVhcmVzdCBhbmNlc3RvciBzZWN0aW9uaW5nIGNvbnRlbnQgb3Igc2VjdGlvbmluZyByb290IGVsZW1lbnQuIEEgaGVhZGVyIHR5cGljYWxseSBjb250YWlucyBhIGdyb3VwIG9mIGludHJvZHVjdG9yeSBvciBuYXZpZ2F0aW9uYWwgYWlkcy4gV2hlbiB0aGUgbmVhcmVzdCBhbmNlc3RvciBzZWN0aW9uaW5nIGNvbnRlbnQgb3Igc2VjdGlvbmluZyByb290IGVsZW1lbnQgaXMgdGhlIGJvZHkgZWxlbWVudCwgdGhlbiBpdCBhcHBsaWVzIHRvIHRoZSB3aG9sZSBwYWdlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2hlYWRlciJ9XX0se25hbWU6ImZvb3RlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZvb3RlciBlbGVtZW50IHJlcHJlc2VudHMgYSBmb290ZXIgZm9yIGl0cyBuZWFyZXN0IGFuY2VzdG9yIHNlY3Rpb25pbmcgY29udGVudCBvciBzZWN0aW9uaW5nIHJvb3QgZWxlbWVudC4gQSBmb290ZXIgdHlwaWNhbGx5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGl0cyBzZWN0aW9uIHN1Y2ggYXMgd2hvIHdyb3RlIGl0LCBsaW5rcyB0byByZWxhdGVkIGRvY3VtZW50cywgY29weXJpZ2h0IGRhdGEsIGFuZCB0aGUgbGlrZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb290ZXIifV19LHtuYW1lOiJhZGRyZXNzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYWRkcmVzcyBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGNvbnRhY3QgaW5mb3JtYXRpb24gZm9yIGl0cyBuZWFyZXN0IGFydGljbGUgb3IgYm9keSBlbGVtZW50IGFuY2VzdG9yLiBJZiB0aGF0IGlzIHRoZSBib2R5IGVsZW1lbnQsIHRoZW4gdGhlIGNvbnRhY3QgaW5mb3JtYXRpb24gYXBwbGllcyB0byB0aGUgZG9jdW1lbnQgYXMgYSB3aG9sZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hZGRyZXNzIn1dfSx7bmFtZToicCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHAgZWxlbWVudCByZXByZXNlbnRzIGEgcGFyYWdyYXBoLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3AifV19LHtuYW1lOiJociIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHBhcmFncmFwaC1sZXZlbCB0aGVtYXRpYyBicmVhaywgZS5nLiBhIHNjZW5lIGNoYW5nZSBpbiBhIHN0b3J5LCBvciBhIHRyYW5zaXRpb24gdG8gYW5vdGhlciB0b3BpYyB3aXRoaW4gYSBzZWN0aW9uIG9mIGEgcmVmZXJlbmNlIGJvb2suIn0sdm9pZDohMCxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOiJTZXRzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHJ1bGUgb24gdGhlIHBhZ2UuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYGxlZnRgLiJ9LHtuYW1lOiJjb2xvciIsZGVzY3JpcHRpb246IlNldHMgdGhlIGNvbG9yIG9mIHRoZSBydWxlIHRocm91Z2ggY29sb3IgbmFtZSBvciBoZXhhZGVjaW1hbCB2YWx1ZS4ifSx7bmFtZToibm9zaGFkZSIsZGVzY3JpcHRpb246IlNldHMgdGhlIHJ1bGUgdG8gaGF2ZSBubyBzaGFkaW5nLiJ9LHtuYW1lOiJzaXplIixkZXNjcmlwdGlvbjoiU2V0cyB0aGUgaGVpZ2h0LCBpbiBwaXhlbHMsIG9mIHRoZSBydWxlLiJ9LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246IlNldHMgdGhlIGxlbmd0aCBvZiB0aGUgcnVsZSBvbiB0aGUgcGFnZSB0aHJvdWdoIGEgcGl4ZWwgb3IgcGVyY2VudGFnZSB2YWx1ZS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2hyIn1dfSx7bmFtZToicHJlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcHJlIGVsZW1lbnQgcmVwcmVzZW50cyBhIGJsb2NrIG9mIHByZWZvcm1hdHRlZCB0ZXh0LCBpbiB3aGljaCBzdHJ1Y3R1cmUgaXMgcmVwcmVzZW50ZWQgYnkgdHlwb2dyYXBoaWMgY29udmVudGlvbnMgcmF0aGVyIHRoYW4gYnkgZWxlbWVudHMuIn0sYXR0cmlidXRlczpbe25hbWU6ImNvbHMiLGRlc2NyaXB0aW9uOidDb250YWlucyB0aGUgX3ByZWZlcnJlZF8gY291bnQgb2YgY2hhcmFjdGVycyB0aGF0IGEgbGluZSBzaG91bGQgaGF2ZS4gSXQgd2FzIGEgbm9uLXN0YW5kYXJkIHN5bm9ueW0gb2YgW2B3aWR0aGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9wcmUjYXR0ci13aWR0aCkuIFRvIGFjaGlldmUgc3VjaCBhbiBlZmZlY3QsIHVzZSBDU1MgW2B3aWR0aGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy93aWR0aCAiVGhlIHdpZHRoIENTUyBwcm9wZXJ0eSBzZXRzIGFuIGVsZW1lbnRcJ3Mgd2lkdGguIEJ5IGRlZmF1bHQgaXQgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbnRlbnQgYXJlYSwgYnV0IGlmIGJveC1zaXppbmcgaXMgc2V0IHRvIGJvcmRlci1ib3gsIGl0IHNldHMgdGhlIHdpZHRoIG9mIHRoZSBib3JkZXIgYXJlYS4iKSBpbnN0ZWFkLid9LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246J0NvbnRhaW5zIHRoZSBfcHJlZmVycmVkXyBjb3VudCBvZiBjaGFyYWN0ZXJzIHRoYXQgYSBsaW5lIHNob3VsZCBoYXZlLiBUaG91Z2ggdGVjaG5pY2FsbHkgc3RpbGwgaW1wbGVtZW50ZWQsIHRoaXMgYXR0cmlidXRlIGhhcyBubyB2aXN1YWwgZWZmZWN0OyB0byBhY2hpZXZlIHN1Y2ggYW4gZWZmZWN0LCB1c2UgQ1NTIFtgd2lkdGhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1Mvd2lkdGggIlRoZSB3aWR0aCBDU1MgcHJvcGVydHkgc2V0cyBhbiBlbGVtZW50XCdzIHdpZHRoLiBCeSBkZWZhdWx0IGl0IHNldHMgdGhlIHdpZHRoIG9mIHRoZSBjb250ZW50IGFyZWEsIGJ1dCBpZiBib3gtc2l6aW5nIGlzIHNldCB0byBib3JkZXItYm94LCBpdCBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgYm9yZGVyIGFyZWEuIikgaW5zdGVhZC4nfSx7bmFtZToid3JhcCIsZGVzY3JpcHRpb246J0lzIGEgX2hpbnRfIGluZGljYXRpbmcgaG93IHRoZSBvdmVyZmxvdyBtdXN0IGhhcHBlbi4gSW4gbW9kZXJuIGJyb3dzZXIgdGhpcyBoaW50IGlzIGlnbm9yZWQgYW5kIG5vIHZpc3VhbCBlZmZlY3QgcmVzdWx0cyBpbiBpdHMgcHJlc2VudDsgdG8gYWNoaWV2ZSBzdWNoIGFuIGVmZmVjdCwgdXNlIENTUyBbYHdoaXRlLXNwYWNlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3doaXRlLXNwYWNlICJUaGUgd2hpdGUtc3BhY2UgQ1NTIHByb3BlcnR5IHNldHMgaG93IHdoaXRlIHNwYWNlIGluc2lkZSBhbiBlbGVtZW50IGlzIGhhbmRsZWQuIikgaW5zdGVhZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3ByZSJ9XX0se25hbWU6ImJsb2NrcXVvdGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBibG9ja3F1b3RlIGVsZW1lbnQgcmVwcmVzZW50cyBjb250ZW50IHRoYXQgaXMgcXVvdGVkIGZyb20gYW5vdGhlciBzb3VyY2UsIG9wdGlvbmFsbHkgd2l0aCBhIGNpdGF0aW9uIHdoaWNoIG11c3QgYmUgd2l0aGluIGEgZm9vdGVyIG9yIGNpdGUgZWxlbWVudCwgYW5kIG9wdGlvbmFsbHkgd2l0aCBpbi1saW5lIGNoYW5nZXMgc3VjaCBhcyBhbm5vdGF0aW9ucyBhbmQgYWJicmV2aWF0aW9ucy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY2l0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBVUkwgdGhhdCBkZXNpZ25hdGVzIGEgc291cmNlIGRvY3VtZW50IG9yIG1lc3NhZ2UgZm9yIHRoZSBpbmZvcm1hdGlvbiBxdW90ZWQuIFRoaXMgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHBvaW50IHRvIGluZm9ybWF0aW9uIGV4cGxhaW5pbmcgdGhlIGNvbnRleHQgb3IgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIHF1b3RlLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Jsb2NrcXVvdGUifV19LHtuYW1lOiJvbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG9sIGVsZW1lbnQgcmVwcmVzZW50cyBhIGxpc3Qgb2YgaXRlbXMsIHdoZXJlIHRoZSBpdGVtcyBoYXZlIGJlZW4gaW50ZW50aW9uYWxseSBvcmRlcmVkLCBzdWNoIHRoYXQgY2hhbmdpbmcgdGhlIG9yZGVyIHdvdWxkIGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6InJldmVyc2VkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhhdCB0aGUgaXRlbXMgb2YgdGhlIGxpc3QgYXJlIHNwZWNpZmllZCBpbiByZXZlcnNlZCBvcmRlci4ifX0se25hbWU6InN0YXJ0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGludGVnZXIgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgc3RhcnQgdmFsdWUgZm9yIG51bWJlcmluZyB0aGUgaW5kaXZpZHVhbCBsaXN0IGl0ZW1zLiBBbHRob3VnaCB0aGUgb3JkZXJpbmcgdHlwZSBvZiBsaXN0IGVsZW1lbnRzIG1pZ2h0IGJlIFJvbWFuIG51bWVyYWxzLCBzdWNoIGFzIFhYWEksIG9yIGxldHRlcnMsIHRoZSB2YWx1ZSBvZiBzdGFydCBpcyBhbHdheXMgcmVwcmVzZW50ZWQgYXMgYSBudW1iZXIuIFRvIHN0YXJ0IG51bWJlcmluZyBlbGVtZW50cyBmcm9tIHRoZSBsZXR0ZXIgIkMiLCB1c2UgYDxvbCBzdGFydD0iMyI+YC5cblxuKipOb3RlKio6IFRoaXMgYXR0cmlidXRlIHdhcyBkZXByZWNhdGVkIGluIEhUTUw0LCBidXQgcmVpbnRyb2R1Y2VkIGluIEhUTUw1Lid9fSx7bmFtZToidHlwZSIsdmFsdWVTZXQ6Imx0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIG51bWJlcmluZyB0eXBlOlxuXG4qICAgYCdhJ2AgaW5kaWNhdGVzIGxvd2VyY2FzZSBsZXR0ZXJzLFxuKiAgIGAnQSdgIGluZGljYXRlcyB1cHBlcmNhc2UgbGV0dGVycyxcbiogICBgJ2knYCBpbmRpY2F0ZXMgbG93ZXJjYXNlIFJvbWFuIG51bWVyYWxzLFxuKiAgIGAnSSdgIGluZGljYXRlcyB1cHBlcmNhc2UgUm9tYW4gbnVtZXJhbHMsXG4qICAgYW5kIGAnMSdgIGluZGljYXRlcyBudW1iZXJzIChkZWZhdWx0KS5cblxuVGhlIHR5cGUgc2V0IGlzIHVzZWQgZm9yIHRoZSBlbnRpcmUgbGlzdCB1bmxlc3MgYSBkaWZmZXJlbnQgW2B0eXBlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpI2F0dHItdHlwZSkgYXR0cmlidXRlIGlzIHVzZWQgd2l0aGluIGFuIGVuY2xvc2VkIFtgPGxpPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saSBcIlRoZSBIVE1MIDxsaT4gZWxlbWVudCBpcyB1c2VkIHRvIHJlcHJlc2VudCBhbiBpdGVtIGluIGEgbGlzdC4gSXQgbXVzdCBiZSBjb250YWluZWQgaW4gYSBwYXJlbnQgZWxlbWVudDogYW4gb3JkZXJlZCBsaXN0ICg8b2w+KSwgYW4gdW5vcmRlcmVkIGxpc3QgKDx1bD4pLCBvciBhIG1lbnUgKDxtZW51PikuIEluIG1lbnVzIGFuZCB1bm9yZGVyZWQgbGlzdHMsIGxpc3QgaXRlbXMgYXJlIHVzdWFsbHkgZGlzcGxheWVkIHVzaW5nIGJ1bGxldCBwb2ludHMuIEluIG9yZGVyZWQgbGlzdHMsIHRoZXkgYXJlIHVzdWFsbHkgZGlzcGxheWVkIHdpdGggYW4gYXNjZW5kaW5nIGNvdW50ZXIgb24gdGhlIGxlZnQsIHN1Y2ggYXMgYSBudW1iZXIgb3IgbGV0dGVyLlwiKSBlbGVtZW50LlxuXG4qKk5vdGU6KiogVGhpcyBhdHRyaWJ1dGUgd2FzIGRlcHJlY2F0ZWQgaW4gSFRNTDQsIGJ1dCByZWludHJvZHVjZWQgaW4gSFRNTDUuXG5cblVubGVzcyB0aGUgdmFsdWUgb2YgdGhlIGxpc3QgbnVtYmVyIG1hdHRlcnMgKGUuZy4gaW4gbGVnYWwgb3IgdGVjaG5pY2FsIGRvY3VtZW50cyB3aGVyZSBpdGVtcyBhcmUgdG8gYmUgcmVmZXJlbmNlZCBieSB0aGVpciBudW1iZXIvbGV0dGVyKSwgdGhlIENTUyBbYGxpc3Qtc3R5bGUtdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9saXN0LXN0eWxlLXR5cGUgXCJUaGUgbGlzdC1zdHlsZS10eXBlIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJrZXIgKHN1Y2ggYXMgYSBkaXNjLCBjaGFyYWN0ZXIsIG9yIGN1c3RvbSBjb3VudGVyIHN0eWxlKSBvZiBhIGxpc3QgaXRlbSBlbGVtZW50LlwiKSBwcm9wZXJ0eSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiJ9fSx7bmFtZToiY29tcGFjdCIsZGVzY3JpcHRpb246J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaGludHMgdGhhdCB0aGUgbGlzdCBzaG91bGQgYmUgcmVuZGVyZWQgaW4gYSBjb21wYWN0IHN0eWxlLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBhdHRyaWJ1dGUgZGVwZW5kcyBvbiB0aGUgdXNlciBhZ2VudCBhbmQgaXQgZG9lc25cJ3Qgd29yayBpbiBhbGwgYnJvd3NlcnMuXG5cbioqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBoYXMgYmVlbiBkZXByZWNhdGVkOiB0aGUgW2A8b2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29sICJUaGUgSFRNTCA8b2w+IGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIG51bWJlcmVkIGxpc3QuIikgZWxlbWVudCBzaG91bGQgYmUgc3R5bGVkIHVzaW5nIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKS4gVG8gZ2l2ZSBhbiBlZmZlY3Qgc2ltaWxhciB0byB0aGUgYGNvbXBhY3RgIGF0dHJpYnV0ZSwgdGhlIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKSBwcm9wZXJ0eSBbYGxpbmUtaGVpZ2h0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xpbmUtaGVpZ2h0ICJUaGUgbGluZS1oZWlnaHQgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGFtb3VudCBvZiBzcGFjZSB1c2VkIGZvciBsaW5lcywgc3VjaCBhcyBpbiB0ZXh0LiBPbiBibG9jay1sZXZlbCBlbGVtZW50cywgaXQgc3BlY2lmaWVzIHRoZSBtaW5pbXVtIGhlaWdodCBvZiBsaW5lIGJveGVzIHdpdGhpbiB0aGUgZWxlbWVudC4gT24gbm9uLXJlcGxhY2VkIGlubGluZSBlbGVtZW50cywgaXQgc3BlY2lmaWVzIHRoZSBoZWlnaHQgdGhhdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBsaW5lIGJveCBoZWlnaHQuIikgY2FuIGJlIHVzZWQgd2l0aCBhIHZhbHVlIG9mIGA4MCVgLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2wifV19LHtuYW1lOiJ1bCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVsIGVsZW1lbnQgcmVwcmVzZW50cyBhIGxpc3Qgb2YgaXRlbXMsIHdoZXJlIHRoZSBvcmRlciBvZiB0aGUgaXRlbXMgaXMgbm90IGltcG9ydGFudCDigJQgdGhhdCBpcywgd2hlcmUgY2hhbmdpbmcgdGhlIG9yZGVyIHdvdWxkIG5vdCBtYXRlcmlhbGx5IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImNvbXBhY3QiLGRlc2NyaXB0aW9uOidUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGhpbnRzIHRoYXQgdGhlIGxpc3Qgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGEgY29tcGFjdCBzdHlsZS4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgYXR0cmlidXRlIGRlcGVuZHMgb24gdGhlIHVzZXIgYWdlbnQgYW5kIGl0IGRvZXNuXCd0IHdvcmsgaW4gYWxsIGJyb3dzZXJzLlxuXG4qKlVzYWdlIG5vdGU6wqAqKkRvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUsIGFzIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQ6IHRoZSBbYDx1bD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdWwgIlRoZSBIVE1MIDx1bD4gZWxlbWVudCByZXByZXNlbnRzIGFuIHVub3JkZXJlZCBsaXN0IG9mIGl0ZW1zLCB0eXBpY2FsbHkgcmVuZGVyZWQgYXMgYSBidWxsZXRlZCBsaXN0LiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykuIFRvIGdpdmUgYSBzaW1pbGFyIGVmZmVjdCBhcyB0aGUgYGNvbXBhY3RgIGF0dHJpYnV0ZSwgdGhlIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKSBwcm9wZXJ0eSBbbGluZS1oZWlnaHRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2xpbmUtaGVpZ2h0KSBjYW4gYmUgdXNlZCB3aXRoIGEgdmFsdWUgb2YgYDgwJWAuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC91bCJ9XX0se25hbWU6ImxpIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbGkgZWxlbWVudCByZXByZXNlbnRzIGEgbGlzdCBpdGVtLiBJZiBpdHMgcGFyZW50IGVsZW1lbnQgaXMgYW4gb2wsIHVsLCBvciBtZW51IGVsZW1lbnQsIHRoZW4gdGhlIGVsZW1lbnQgaXMgYW4gaXRlbSBvZiB0aGUgcGFyZW50IGVsZW1lbnQncyBsaXN0LCBhcyBkZWZpbmVkIGZvciB0aG9zZSBlbGVtZW50cy4gT3RoZXJ3aXNlLCB0aGUgbGlzdCBpdGVtIGhhcyBubyBkZWZpbmVkIGxpc3QtcmVsYXRlZCByZWxhdGlvbnNoaXAgdG8gYW55IG90aGVyIGxpIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6InZhbHVlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGludGVnZXIgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgY3VycmVudCBvcmRpbmFsIHZhbHVlIG9mIHRoZSBsaXN0IGl0ZW0gYXMgZGVmaW5lZCBieSB0aGUgW2A8b2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29sICJUaGUgSFRNTCA8b2w+IGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIG51bWJlcmVkIGxpc3QuIikgZWxlbWVudC4gVGhlIG9ubHkgYWxsb3dlZCB2YWx1ZSBmb3IgdGhpcyBhdHRyaWJ1dGUgaXMgYSBudW1iZXIsIGV2ZW4gaWYgdGhlIGxpc3QgaXMgZGlzcGxheWVkIHdpdGggUm9tYW4gbnVtZXJhbHMgb3IgbGV0dGVycy4gTGlzdCBpdGVtcyB0aGF0IGZvbGxvdyB0aGlzIG9uZSBjb250aW51ZSBudW1iZXJpbmcgZnJvbSB0aGUgdmFsdWUgc2V0LiBUaGUgKip2YWx1ZSoqIGF0dHJpYnV0ZSBoYXMgbm8gbWVhbmluZyBmb3IgdW5vcmRlcmVkIGxpc3RzIChbYDx1bD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdWwgIlRoZSBIVE1MIDx1bD4gZWxlbWVudCByZXByZXNlbnRzIGFuIHVub3JkZXJlZCBsaXN0IG9mIGl0ZW1zLCB0eXBpY2FsbHkgcmVuZGVyZWQgYXMgYSBidWxsZXRlZCBsaXN0LiIpKSBvciBmb3IgbWVudXMgKFtgPG1lbnU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21lbnUgIlRoZSBIVE1MIDxtZW51PiBlbGVtZW50IHJlcHJlc2VudHMgYSBncm91cCBvZiBjb21tYW5kcyB0aGF0IGEgdXNlciBjYW4gcGVyZm9ybSBvciBhY3RpdmF0ZS4gVGhpcyBpbmNsdWRlcyBib3RoIGxpc3QgbWVudXMsIHdoaWNoIG1pZ2h0IGFwcGVhciBhY3Jvc3MgdGhlIHRvcCBvZiBhIHNjcmVlbiwgYXMgd2VsbCBhcyBjb250ZXh0IG1lbnVzLCBzdWNoIGFzIHRob3NlIHRoYXQgbWlnaHQgYXBwZWFyIHVuZGVybmVhdGggYSBidXR0b24gYWZ0ZXIgaXQgaGFzIGJlZW4gY2xpY2tlZC4iKSkuXG5cbioqTm90ZSoqOiBUaGlzIGF0dHJpYnV0ZSB3YXMgZGVwcmVjYXRlZCBpbiBIVE1MNCwgYnV0IHJlaW50cm9kdWNlZCBpbiBIVE1MNS5cblxuKipOb3RlOioqIFByaW9yIHRvIEdlY2tvwqA5LjAsIG5lZ2F0aXZlIHZhbHVlcyB3ZXJlIGluY29ycmVjdGx5IGNvbnZlcnRlZCB0byAwLiBTdGFydGluZyBpbiBHZWNrb8KgOS4wIGFsbCBpbnRlZ2VyIHZhbHVlcyBhcmUgY29ycmVjdGx5IHBhcnNlZC4nfX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOidUaGlzIGNoYXJhY3RlciBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBudW1iZXJpbmcgdHlwZTpcblxuKiAgIGBhYDogbG93ZXJjYXNlIGxldHRlcnNcbiogICBgQWA6IHVwcGVyY2FzZSBsZXR0ZXJzXG4qICAgYGlgOiBsb3dlcmNhc2UgUm9tYW4gbnVtZXJhbHNcbiogICBgSWA6IHVwcGVyY2FzZSBSb21hbiBudW1lcmFsc1xuKiAgIGAxYDogbnVtYmVyc1xuXG5UaGlzIHR5cGUgb3ZlcnJpZGVzIHRoZSBvbmUgdXNlZCBieSBpdHMgcGFyZW50IFtgPG9sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vbCAiVGhlIEhUTUwgPG9sPiBlbGVtZW50IHJlcHJlc2VudHMgYW4gb3JkZXJlZCBsaXN0IG9mIGl0ZW1zLCB0eXBpY2FsbHkgcmVuZGVyZWQgYXMgYSBudW1iZXJlZCBsaXN0LiIpIGVsZW1lbnQsIGlmIGFueS5cblxuKipVc2FnZSBub3RlOioqIFRoaXMgYXR0cmlidXRlIGhhcyBiZWVuIGRlcHJlY2F0ZWQ6IHVzZSB0aGUgQ1NTIFtgbGlzdC1zdHlsZS10eXBlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xpc3Qtc3R5bGUtdHlwZSAiVGhlIGxpc3Qtc3R5bGUtdHlwZSBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFya2VyIChzdWNoIGFzIGEgZGlzYywgY2hhcmFjdGVyLCBvciBjdXN0b20gY291bnRlciBzdHlsZSkgb2YgYSBsaXN0IGl0ZW0gZWxlbWVudC4iKSBwcm9wZXJ0eSBpbnN0ZWFkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGkifV19LHtuYW1lOiJkbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRsIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBhc3NvY2lhdGlvbiBsaXN0IGNvbnNpc3Rpbmcgb2YgemVybyBvciBtb3JlIG5hbWUtdmFsdWUgZ3JvdXBzIChhIGRlc2NyaXB0aW9uIGxpc3QpLiBBIG5hbWUtdmFsdWUgZ3JvdXAgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgbmFtZXMgKGR0IGVsZW1lbnRzKSBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSB2YWx1ZXMgKGRkIGVsZW1lbnRzKSwgaWdub3JpbmcgYW55IG5vZGVzIG90aGVyIHRoYW4gZHQgYW5kIGRkIGVsZW1lbnRzLiBXaXRoaW4gYSBzaW5nbGUgZGwgZWxlbWVudCwgdGhlcmUgc2hvdWxkIG5vdCBiZSBtb3JlIHRoYW4gb25lIGR0IGVsZW1lbnQgZm9yIGVhY2ggbmFtZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kbCJ9XX0se25hbWU6ImR0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZHQgZWxlbWVudCByZXByZXNlbnRzIHRoZSB0ZXJtLCBvciBuYW1lLCBwYXJ0IG9mIGEgdGVybS1kZXNjcmlwdGlvbiBncm91cCBpbiBhIGRlc2NyaXB0aW9uIGxpc3QgKGRsIGVsZW1lbnQpLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2R0In1dfSx7bmFtZToiZGQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkZCBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGRlc2NyaXB0aW9uLCBkZWZpbml0aW9uLCBvciB2YWx1ZSwgcGFydCBvZiBhIHRlcm0tZGVzY3JpcHRpb24gZ3JvdXAgaW4gYSBkZXNjcmlwdGlvbiBsaXN0IChkbCBlbGVtZW50KS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToibm93cmFwIixkZXNjcmlwdGlvbjoiSWYgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzIHNldCB0byBgeWVzYCwgdGhlIGRlZmluaXRpb24gdGV4dCB3aWxsIG5vdCB3cmFwLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbm9gLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGQifV19LHtuYW1lOiJmaWd1cmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmaWd1cmUgZWxlbWVudCByZXByZXNlbnRzIHNvbWUgZmxvdyBjb250ZW50LCBvcHRpb25hbGx5IHdpdGggYSBjYXB0aW9uLCB0aGF0IGlzIHNlbGYtY29udGFpbmVkIChsaWtlIGEgY29tcGxldGUgc2VudGVuY2UpIGFuZCBpcyB0eXBpY2FsbHkgcmVmZXJlbmNlZCBhcyBhIHNpbmdsZSB1bml0IGZyb20gdGhlIG1haW4gZmxvdyBvZiB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZmlndXJlIn1dfSx7bmFtZToiZmlnY2FwdGlvbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZpZ2NhcHRpb24gZWxlbWVudCByZXByZXNlbnRzIGEgY2FwdGlvbiBvciBsZWdlbmQgZm9yIHRoZSByZXN0IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZmlnY2FwdGlvbiBlbGVtZW50J3MgcGFyZW50IGZpZ3VyZSBlbGVtZW50LCBpZiBhbnkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZmlnY2FwdGlvbiJ9XX0se25hbWU6Im1haW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtYWluIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbWFpbiBjb250ZW50IG9mIHRoZSBib2R5IG9mIGEgZG9jdW1lbnQgb3IgYXBwbGljYXRpb24uIFRoZSBtYWluIGNvbnRlbnQgYXJlYSBjb25zaXN0cyBvZiBjb250ZW50IHRoYXQgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBvciBleHBhbmRzIHVwb24gdGhlIGNlbnRyYWwgdG9waWMgb2YgYSBkb2N1bWVudCBvciBjZW50cmFsIGZ1bmN0aW9uYWxpdHkgb2YgYW4gYXBwbGljYXRpb24uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWFpbiJ9XX0se25hbWU6ImRpdiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRpdiBlbGVtZW50IGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYXQgYWxsLiBJdCByZXByZXNlbnRzIGl0cyBjaGlsZHJlbi4gSXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgY2xhc3MsIGxhbmcsIGFuZCB0aXRsZSBhdHRyaWJ1dGVzIHRvIG1hcmsgdXAgc2VtYW50aWNzIGNvbW1vbiB0byBhIGdyb3VwIG9mIGNvbnNlY3V0aXZlIGVsZW1lbnRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RpdiJ9XX0se25hbWU6ImEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklmIHRoZSBhIGVsZW1lbnQgaGFzIGFuIGhyZWYgYXR0cmlidXRlLCB0aGVuIGl0IHJlcHJlc2VudHMgYSBoeXBlcmxpbmsgKGEgaHlwZXJ0ZXh0IGFuY2hvcikgbGFiZWxlZCBieSBpdHMgY29udGVudHMuIn0sYXR0cmlidXRlczpbe25hbWU6ImhyZWYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0NvbnRhaW5zIGEgVVJMIG9yIGEgVVJMIGZyYWdtZW50IHRoYXQgdGhlIGh5cGVybGluayBwb2ludHMgdG8uXG5BIFVSTCBmcmFnbWVudCBpcyBhIG5hbWUgcHJlY2VkZWQgYnkgYSBoYXNoIG1hcmsgKGAjYCksIHdoaWNoIHNwZWNpZmllcyBhbiBpbnRlcm5hbCB0YXJnZXQgbG9jYXRpb24gKGFuIFtgaWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaWQpIG9mIGFuIEhUTUwgZWxlbWVudCkgd2l0aGluIHRoZSBjdXJyZW50IGRvY3VtZW50LiBVUkxzIGFyZSBub3QgcmVzdHJpY3RlZCB0byBXZWIgKEhUVFApLWJhc2VkIGRvY3VtZW50cywgYnV0IGNhbiB1c2UgYW55IHByb3RvY29sIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci4gRm9yIGV4YW1wbGUsIFtgZmlsZTpgXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaWxlX1VSSV9zY2hlbWUpLCBgZnRwOmAsIGFuZCBgbWFpbHRvOmAgd29yayBpbiBtb3N0IGJyb3dzZXJzLlxuXG4qKk5vdGU6KiogWW91IGNhbiB1c2UgYGhyZWY9IiN0b3AiYCBvciB0aGUgZW1wdHkgZnJhZ21lbnQgYGhyZWY9IiMiYCB0byBsaW5rIHRvIHRoZSB0b3Agb2YgdGhlIGN1cnJlbnQgcGFnZS4gW1RoaXMgYmVoYXZpb3IgaXMgc3BlY2lmaWVkIGJ5IEhUTUw1XShodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvc2luZ2xlLXBhZ2UuaHRtbCNzY3JvbGwtdG8tZnJhZ2lkKS4nfX0se25hbWU6InRhcmdldCIsdmFsdWVTZXQ6InRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgdGhlIGxpbmtlZCBVUkwuIEl0IGlzIGEgbmFtZSBvZiwgb3Iga2V5d29yZCBmb3IsIGEgX2Jyb3dzaW5nIGNvbnRleHRfOiBhIHRhYiwgd2luZG93LCBvciBgPGlmcmFtZT5gLiBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGhhdmUgc3BlY2lhbCBtZWFuaW5nczpcblxuKiAgIGBfc2VsZmA6IExvYWQgdGhlIFVSTCBpbnRvIHRoZSBzYW1lIGJyb3dzaW5nIGNvbnRleHQgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuKiAgIGBfYmxhbmtgOiBMb2FkIHRoZSBVUkwgaW50byBhIG5ldyBicm93c2luZyBjb250ZXh0LiBUaGlzIGlzIHVzdWFsbHkgYSB0YWIsIGJ1dCB1c2VycyBjYW4gY29uZmlndXJlIGJyb3dzZXJzIHRvIHVzZSBuZXcgd2luZG93cyBpbnN0ZWFkLlxuKiAgIGBfcGFyZW50YDogTG9hZCB0aGUgVVJMIGludG8gdGhlIHBhcmVudCBicm93c2luZyBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9uZS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgYF90b3BgOiBMb2FkIHRoZSBVUkwgaW50byB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKHRoYXQgaXMsIHRoZSAiaGlnaGVzdCIgYnJvd3NpbmcgY29udGV4dCB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50IG9uZSwgYW5kIGhhcyBubyBwYXJlbnQpLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cblxuKipOb3RlOioqIFdoZW4gdXNpbmcgYHRhcmdldGAsIGNvbnNpZGVyIGFkZGluZyBgcmVsPSJub3JlZmVycmVyImAgdG8gYXZvaWQgZXhwbG9pdGF0aW9uIG9mIHRoZSBgd2luZG93Lm9wZW5lcmAgQVBJLlxuXG4qKk5vdGU6KiogTGlua2luZyB0byBhbm90aGVyIHBhZ2UgdXNpbmcgYHRhcmdldD0iX2JsYW5rImAgd2lsbCBydW4gdGhlIG5ldyBwYWdlIG9uIHRoZSBzYW1lIHByb2Nlc3MgYXMgeW91ciBwYWdlLiBJZiB0aGUgbmV3IHBhZ2UgaXMgZXhlY3V0aW5nIGV4cGVuc2l2ZSBKUywgeW91ciBwYWdlXCdzIHBlcmZvcm1hbmNlIG1heSBzdWZmZXIuIFRvIGF2b2lkIHRoaXMgdXNlIGByZWw9Im5vb3BlbmVyImAuJ319LHtuYW1lOiJkb3dubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgaW5zdHJ1Y3RzIGJyb3dzZXJzIHRvIGRvd25sb2FkIGEgVVJMIGluc3RlYWQgb2YgbmF2aWdhdGluZyB0byBpdCwgc28gdGhlIHVzZXIgd2lsbCBiZSBwcm9tcHRlZCB0byBzYXZlIGl0IGFzIGEgbG9jYWwgZmlsZS4gSWYgdGhlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSwgaXQgaXMgdXNlZCBhcyB0aGUgcHJlLWZpbGxlZCBmaWxlIG5hbWUgaW4gdGhlIFNhdmUgcHJvbXB0ICh0aGUgdXNlciBjYW4gc3RpbGwgY2hhbmdlIHRoZSBmaWxlIG5hbWUgaWYgdGhleSB3YW50KS4gVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIHZhbHVlcywgdGhvdWdoIGAvYCBhbmQgYFxcYCBhcmUgY29udmVydGVkIHRvIHVuZGVyc2NvcmVzLiBNb3N0IGZpbGUgc3lzdGVtcyBsaW1pdCBzb21lIHB1bmN0dWF0aW9uIGluIGZpbGUgbmFtZXMsIGFuZCBicm93c2VycyB3aWxsIGFkanVzdCB0aGUgc3VnZ2VzdGVkIG5hbWUgYWNjb3JkaW5nbHkuXG5cbioqTm90ZXM6KipcblxuKiAgIFRoaXMgYXR0cmlidXRlIG9ubHkgd29ya3MgZm9yIFtzYW1lLW9yaWdpbiBVUkxzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TYW1lLW9yaWdpbl9wb2xpY3kpLlxuKiAgIEFsdGhvdWdoIEhUVFAocykgVVJMcyBuZWVkIHRvIGJlIGluIHRoZSBzYW1lLW9yaWdpbiwgW2BibG9iOmAgVVJMc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC5jcmVhdGVPYmplY3RVUkwpIGFuZCBbYGRhdGE6YCBVUkxzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL0RhdGFfVVJJcykgYXJlIGFsbG93ZWQgc28gdGhhdCBjb250ZW50IGdlbmVyYXRlZCBieSBKYXZhU2NyaXB0LCBzdWNoIGFzIHBpY3R1cmVzIGNyZWF0ZWQgaW4gYW4gaW1hZ2UtZWRpdG9yIFdlYiBhcHAsIGNhbiBiZSBkb3dubG9hZGVkLlxuKiAgIElmIHRoZSBIVFRQIGhlYWRlciBbYENvbnRlbnQtRGlzcG9zaXRpb246YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtRGlzcG9zaXRpb24pIGdpdmVzIGEgZGlmZmVyZW50IGZpbGVuYW1lIHRoYW4gdGhpcyBhdHRyaWJ1dGUsIHRoZSBIVFRQIGhlYWRlciB0YWtlcyBwcmlvcml0eSBvdmVyIHRoaXMgYXR0cmlidXRlLlxuKiAgIElmIGBDb250ZW50LURpc3Bvc2l0aW9uOmAgaXMgc2V0IHRvIGBpbmxpbmVgLCBGaXJlZm94IHByaW9yaXRpemVzIGBDb250ZW50LURpc3Bvc2l0aW9uYCwgbGlrZSB0aGUgZmlsZW5hbWUgY2FzZSwgd2hpbGUgQ2hyb21lIHByaW9yaXRpemVzIHRoZSBgZG93bmxvYWRgIGF0dHJpYnV0ZS4ifX0se25hbWU6InBpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0NvbnRhaW5zIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVVJMcyB0byB3aGljaCwgd2hlbiB0aGUgaHlwZXJsaW5rIGlzIGZvbGxvd2VkLCBbYFBPU1RgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL01ldGhvZHMvUE9TVCAiVGhlIEhUVFAgUE9TVCBtZXRob2Qgc2VuZHMgZGF0YSB0byB0aGUgc2VydmVyLiBUaGUgdHlwZSBvZiB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdCBpcyBpbmRpY2F0ZWQgYnkgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuIikgcmVxdWVzdHMgd2l0aCB0aGUgYm9keSBgUElOR2Agd2lsbCBiZSBzZW50IGJ5IHRoZSBicm93c2VyIChpbiB0aGUgYmFja2dyb3VuZCkuIFR5cGljYWxseSB1c2VkIGZvciB0cmFja2luZy4nfX0se25hbWU6InJlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHRhcmdldCBvYmplY3QgdG8gdGhlIGxpbmsgb2JqZWN0LiBUaGUgdmFsdWUgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBbbGluayB0eXBlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9MaW5rX3R5cGVzKS4ifX0se25hbWU6ImhyZWZsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGh1bWFuIGxhbmd1YWdlIG9mIHRoZSBsaW5rZWQgcmVzb3VyY2UuIEl0IGlzIHB1cmVseSBhZHZpc29yeSwgd2l0aCBubyBidWlsdC1pbiBmdW5jdGlvbmFsaXR5LiBBbGxvd2VkIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSBbQkNQNDddKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9iY3AvYmNwNDcudHh0ICJUYWdzIGZvciBJZGVudGlmeWluZyBMYW5ndWFnZXMiKS4nfX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1NwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSBpbiB0aGUgZm9ybSBvZiBhIFtNSU1FIHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvTUlNRV90eXBlICJNSU1FIHR5cGU6IEHCoE1JTUUgdHlwZcKgKG5vdyBwcm9wZXJseSBjYWxsZWQgIm1lZGlhIHR5cGUiLCBidXTCoGFsc28gc29tZXRpbWVzICJjb250ZW50IHR5cGUiKSBpcyBhIHN0cmluZyBzZW50IGFsb25nwqB3aXRoIGEgZmlsZSBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIHRoZSBmaWxlIChkZXNjcmliaW5nIHRoZSBjb250ZW50IGZvcm1hdCwgZm9yIGV4YW1wbGUsIGEgc291bmQgZmlsZSBtaWdodCBiZSBsYWJlbGVkwqBhdWRpby9vZ2csIG9yIGFuIGltYWdlIGZpbGXCoGltYWdlL3BuZykuIikgZm9yIHRoZSBsaW5rZWQgVVJMLiBJdCBpcyBwdXJlbHkgYWR2aXNvcnksIHdpdGggbm8gYnVpbHQtaW4gZnVuY3Rpb25hbGl0eS4nfX0se25hbWU6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjoiSW5kaWNhdGVzIHdoaWNoIFtyZWZlcnJlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIpIHRvIHNlbmQgd2hlbiBmZXRjaGluZyB0aGUgVVJMOlxuXG4qICAgYCduby1yZWZlcnJlcidgIG1lYW5zIHRoZSBgUmVmZXJlcjpgIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnYCBtZWFucyBubyBgUmVmZXJlcjpgIGhlYWRlciB3aWxsIGJlIHNlbnQgd2hlbiBuYXZpZ2F0aW5nIHRvIGFuIG9yaWdpbiB3aXRob3V0IEhUVFBTLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuKiAgIGAnb3JpZ2luJ2AgbWVhbnMgdGhlIHJlZmVycmVyIHdpbGwgYmUgdGhlIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvT3JpZ2luKSBvZiB0aGUgcGFnZSwgbm90IGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhZnRlciB0aGUgZG9tYWluLlxuKiAgIGAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ2AgbWVhbmluZyB0aGF0IG5hdmlnYXRpb25zIHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0IGFuZCB0aGUgcG9ydCwgd2hpbGUgbmF2aWdhdGlvbnMgb24gdGhlIHNhbWUgb3JpZ2luIHdpbGwgaW5jbHVkZSB0aGUgcmVmZXJyZXIncyBwYXRoLlxuKiAgIGAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidgXG4qICAgYCd1bnNhZmUtdXJsJ2AgbWVhbnMgdGhlIHJlZmVycmVyIHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luIGFuZCBwYXRoLCBidXQgbm90IHRoZSBmcmFnbWVudCwgcGFzc3dvcmQsIG9yIHVzZXJuYW1lLiBUaGlzIGlzIHVuc2FmZSBiZWNhdXNlIGl0IGNhbiBsZWFrIGRhdGEgZnJvbSBzZWN1cmUgVVJMcyB0byBpbnNlY3VyZSBvbmVzLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYSJ9XX0se25hbWU6ImVtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZW0gZWxlbWVudCByZXByZXNlbnRzIHN0cmVzcyBlbXBoYXNpcyBvZiBpdHMgY29udGVudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZW0ifV19LHtuYW1lOiJzdHJvbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzdHJvbmcgZWxlbWVudCByZXByZXNlbnRzIHN0cm9uZyBpbXBvcnRhbmNlLCBzZXJpb3VzbmVzcywgb3IgdXJnZW5jeSBmb3IgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N0cm9uZyJ9XX0se25hbWU6InNtYWxsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc21hbGwgZWxlbWVudCByZXByZXNlbnRzIHNpZGUgY29tbWVudHMgc3VjaCBhcyBzbWFsbCBwcmludC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbWFsbCJ9XX0se25hbWU6InMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzIGVsZW1lbnQgcmVwcmVzZW50cyBjb250ZW50cyB0aGF0IGFyZSBubyBsb25nZXIgYWNjdXJhdGUgb3Igbm8gbG9uZ2VyIHJlbGV2YW50LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3MifV19LHtuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY2l0ZSBlbGVtZW50IHJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYSBjcmVhdGl2ZSB3b3JrLiBJdCBtdXN0IGluY2x1ZGUgdGhlIHRpdGxlIG9mIHRoZSB3b3JrIG9yIHRoZSBuYW1lIG9mIHRoZSBhdXRob3IocGVyc29uLCBwZW9wbGUgb3Igb3JnYW5pemF0aW9uKSBvciBhbiBVUkwgcmVmZXJlbmNlLCBvciBhIHJlZmVyZW5jZSBpbiBhYmJyZXZpYXRlZCBmb3JtIGFzIHBlciB0aGUgY29udmVudGlvbnMgdXNlZCBmb3IgdGhlIGFkZGl0aW9uIG9mIGNpdGF0aW9uIG1ldGFkYXRhLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NpdGUifV19LHtuYW1lOiJxIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcSBlbGVtZW50IHJlcHJlc2VudHMgc29tZSBwaHJhc2luZyBjb250ZW50IHF1b3RlZCBmcm9tIGFub3RoZXIgc291cmNlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgYSBVUkwgdGhhdCBkZXNpZ25hdGVzIGEgc291cmNlIGRvY3VtZW50IG9yIG1lc3NhZ2UgZm9yIHRoZSBpbmZvcm1hdGlvbiBxdW90ZWQuIFRoaXMgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHBvaW50IHRvIGluZm9ybWF0aW9uIGV4cGxhaW5pbmcgdGhlIGNvbnRleHQgb3IgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIHF1b3RlLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3EifV19LHtuYW1lOiJkZm4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkZm4gZWxlbWVudCByZXByZXNlbnRzIHRoZSBkZWZpbmluZyBpbnN0YW5jZSBvZiBhIHRlcm0uIFRoZSBwYXJhZ3JhcGgsIGRlc2NyaXB0aW9uIGxpc3QgZ3JvdXAsIG9yIHNlY3Rpb24gdGhhdCBpcyB0aGUgbmVhcmVzdCBhbmNlc3RvciBvZiB0aGUgZGZuIGVsZW1lbnQgbXVzdCBhbHNvIGNvbnRhaW4gdGhlIGRlZmluaXRpb24ocykgZm9yIHRoZSB0ZXJtIGdpdmVuIGJ5IHRoZSBkZm4gZWxlbWVudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZm4ifV19LHtuYW1lOiJhYmJyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYWJiciBlbGVtZW50IHJlcHJlc2VudHMgYW4gYWJicmV2aWF0aW9uIG9yIGFjcm9ueW0sIG9wdGlvbmFsbHkgd2l0aCBpdHMgZXhwYW5zaW9uLiBUaGUgdGl0bGUgYXR0cmlidXRlIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgYW4gZXhwYW5zaW9uIG9mIHRoZSBhYmJyZXZpYXRpb24uIFRoZSBhdHRyaWJ1dGUsIGlmIHNwZWNpZmllZCwgbXVzdCBjb250YWluIGFuIGV4cGFuc2lvbiBvZiB0aGUgYWJicmV2aWF0aW9uLCBhbmQgbm90aGluZyBlbHNlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FiYnIifV19LHtuYW1lOiJydWJ5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcnVieSBlbGVtZW50IGFsbG93cyBvbmUgb3IgbW9yZSBzcGFucyBvZiBwaHJhc2luZyBjb250ZW50IHRvIGJlIG1hcmtlZCB3aXRoIHJ1YnkgYW5ub3RhdGlvbnMuIFJ1YnkgYW5ub3RhdGlvbnMgYXJlIHNob3J0IHJ1bnMgb2YgdGV4dCBwcmVzZW50ZWQgYWxvbmdzaWRlIGJhc2UgdGV4dCwgcHJpbWFyaWx5IHVzZWQgaW4gRWFzdCBBc2lhbiB0eXBvZ3JhcGh5IGFzIGEgZ3VpZGUgZm9yIHByb251bmNpYXRpb24gb3IgdG8gaW5jbHVkZSBvdGhlciBhbm5vdGF0aW9ucy4gSW4gSmFwYW5lc2UsIHRoaXMgZm9ybSBvZiB0eXBvZ3JhcGh5IGlzIGFsc28ga25vd24gYXMgZnVyaWdhbmEuIFJ1YnkgdGV4dCBjYW4gYXBwZWFyIG9uIGVpdGhlciBzaWRlLCBhbmQgc29tZXRpbWVzIGJvdGggc2lkZXMsIG9mIHRoZSBiYXNlIHRleHQsIGFuZCBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIGl0cyBwb3NpdGlvbiB1c2luZyBDU1MuIEEgbW9yZSBjb21wbGV0ZSBpbnRyb2R1Y3Rpb24gdG8gcnVieSBjYW4gYmUgZm91bmQgaW4gdGhlIFVzZSBDYXNlcyAmIEV4cGxvcmF0b3J5IEFwcHJvYWNoZXMgZm9yIFJ1YnkgTWFya3VwIGRvY3VtZW50IGFzIHdlbGwgYXMgaW4gQ1NTIFJ1YnkgTW9kdWxlIExldmVsIDEuIFtSVUJZLVVDXSBbQ1NTUlVCWV0ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9ydWJ5In1dfSx7bmFtZToicmIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByYiBlbGVtZW50IG1hcmtzIHRoZSBiYXNlIHRleHQgY29tcG9uZW50IG9mIGEgcnVieSBhbm5vdGF0aW9uLiBXaGVuIGl0IGlzIHRoZSBjaGlsZCBvZiBhIHJ1YnkgZWxlbWVudCwgaXQgZG9lc24ndCByZXByZXNlbnQgYW55dGhpbmcgaXRzZWxmLCBidXQgaXRzIHBhcmVudCBydWJ5IGVsZW1lbnQgdXNlcyBpdCBhcyBwYXJ0IG9mIGRldGVybWluaW5nIHdoYXQgaXQgcmVwcmVzZW50cy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9yYiJ9XX0se25hbWU6InJ0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcnQgZWxlbWVudCBtYXJrcyB0aGUgcnVieSB0ZXh0IGNvbXBvbmVudCBvZiBhIHJ1YnkgYW5ub3RhdGlvbi4gV2hlbiBpdCBpcyB0aGUgY2hpbGQgb2YgYSBydWJ5IGVsZW1lbnQgb3Igb2YgYW4gcnRjIGVsZW1lbnQgdGhhdCBpcyBpdHNlbGYgdGhlIGNoaWxkIG9mIGEgcnVieSBlbGVtZW50LCBpdCBkb2Vzbid0IHJlcHJlc2VudCBhbnl0aGluZyBpdHNlbGYsIGJ1dCBpdHMgYW5jZXN0b3IgcnVieSBlbGVtZW50IHVzZXMgaXQgYXMgcGFydCBvZiBkZXRlcm1pbmluZyB3aGF0IGl0IHJlcHJlc2VudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcnQifV19LHtuYW1lOiJycCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHJwIGVsZW1lbnQgaXMgdXNlZCB0byBwcm92aWRlIGZhbGxiYWNrIHRleHQgdG8gYmUgc2hvd24gYnkgdXNlciBhZ2VudHMgdGhhdCBkb24ndCBzdXBwb3J0IHJ1YnkgYW5ub3RhdGlvbnMuIE9uZSB3aWRlc3ByZWFkIGNvbnZlbnRpb24gaXMgdG8gcHJvdmlkZSBwYXJlbnRoZXNlcyBhcm91bmQgdGhlIHJ1YnkgdGV4dCBjb21wb25lbnQgb2YgYSBydWJ5IGFubm90YXRpb24uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcnAifV19LHtuYW1lOiJ0aW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGltZSBlbGVtZW50IHJlcHJlc2VudHMgaXRzIGNvbnRlbnRzLCBhbG9uZyB3aXRoIGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtIG9mIHRob3NlIGNvbnRlbnRzIGluIHRoZSBkYXRldGltZSBhdHRyaWJ1dGUuIFRoZSBraW5kIG9mIGNvbnRlbnQgaXMgbGltaXRlZCB0byB2YXJpb3VzIGtpbmRzIG9mIGRhdGVzLCB0aW1lcywgdGltZS16b25lIG9mZnNldHMsIGFuZCBkdXJhdGlvbnMsIGFzIGRlc2NyaWJlZCBiZWxvdy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGF0ZXRpbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgdGltZSBhbmQvb3IgZGF0ZSBvZiB0aGUgZWxlbWVudCBhbmQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIGZvcm1hdHMgZGVzY3JpYmVkIGJlbG93LiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RpbWUifV19LHtuYW1lOiJjb2RlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY29kZSBlbGVtZW50IHJlcHJlc2VudHMgYSBmcmFnbWVudCBvZiBjb21wdXRlciBjb2RlLiBUaGlzIGNvdWxkIGJlIGFuIFhNTCBlbGVtZW50IG5hbWUsIGEgZmlsZSBuYW1lLCBhIGNvbXB1dGVyIHByb2dyYW0sIG9yIGFueSBvdGhlciBzdHJpbmcgdGhhdCBhIGNvbXB1dGVyIHdvdWxkIHJlY29nbml6ZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2RlIn1dfSx7bmFtZToidmFyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdmFyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHZhcmlhYmxlLiBUaGlzIGNvdWxkIGJlIGFuIGFjdHVhbCB2YXJpYWJsZSBpbiBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIG9yIHByb2dyYW1taW5nIGNvbnRleHQsIGFuIGlkZW50aWZpZXIgcmVwcmVzZW50aW5nIGEgY29uc3RhbnQsIGEgc3ltYm9sIGlkZW50aWZ5aW5nIGEgcGh5c2ljYWwgcXVhbnRpdHksIGEgZnVuY3Rpb24gcGFyYW1ldGVyLCBvciBqdXN0IGJlIGEgdGVybSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgaW4gcHJvc2UuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmFyIn1dfSx7bmFtZToic2FtcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNhbXAgZWxlbWVudCByZXByZXNlbnRzIHNhbXBsZSBvciBxdW90ZWQgb3V0cHV0IGZyb20gYW5vdGhlciBwcm9ncmFtIG9yIGNvbXB1dGluZyBzeXN0ZW0uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2FtcCJ9XX0se25hbWU6ImtiZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGtiZCBlbGVtZW50IHJlcHJlc2VudHMgdXNlciBpbnB1dCAodHlwaWNhbGx5IGtleWJvYXJkIGlucHV0LCBhbHRob3VnaCBpdCBtYXkgYWxzbyBiZSB1c2VkIHRvIHJlcHJlc2VudCBvdGhlciBpbnB1dCwgc3VjaCBhcyB2b2ljZSBjb21tYW5kcykuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQva2JkIn1dfSx7bmFtZToic3ViIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3ViIGVsZW1lbnQgcmVwcmVzZW50cyBhIHN1YnNjcmlwdC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdWIifV19LHtuYW1lOiJzdXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzdXAgZWxlbWVudCByZXByZXNlbnRzIGEgc3VwZXJzY3JpcHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3VwIn1dfSx7bmFtZToiaSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGkgZWxlbWVudCByZXByZXNlbnRzIGEgc3BhbiBvZiB0ZXh0IGluIGFuIGFsdGVybmF0ZSB2b2ljZSBvciBtb29kLCBvciBvdGhlcndpc2Ugb2Zmc2V0IGZyb20gdGhlIG5vcm1hbCBwcm9zZSBpbiBhIG1hbm5lciBpbmRpY2F0aW5nIGEgZGlmZmVyZW50IHF1YWxpdHkgb2YgdGV4dCwgc3VjaCBhcyBhIHRheG9ub21pYyBkZXNpZ25hdGlvbiwgYSB0ZWNobmljYWwgdGVybSwgYW4gaWRpb21hdGljIHBocmFzZSBmcm9tIGFub3RoZXIgbGFuZ3VhZ2UsIHRyYW5zbGl0ZXJhdGlvbiwgYSB0aG91Z2h0LCBvciBhIHNoaXAgbmFtZSBpbiBXZXN0ZXJuIHRleHRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2kifV19LHtuYW1lOiJiIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYiBlbGVtZW50IHJlcHJlc2VudHMgYSBzcGFuIG9mIHRleHQgdG8gd2hpY2ggYXR0ZW50aW9uIGlzIGJlaW5nIGRyYXduIGZvciB1dGlsaXRhcmlhbiBwdXJwb3NlcyB3aXRob3V0IGNvbnZleWluZyBhbnkgZXh0cmEgaW1wb3J0YW5jZSBhbmQgd2l0aCBubyBpbXBsaWNhdGlvbiBvZiBhbiBhbHRlcm5hdGUgdm9pY2Ugb3IgbW9vZCwgc3VjaCBhcyBrZXkgd29yZHMgaW4gYSBkb2N1bWVudCBhYnN0cmFjdCwgcHJvZHVjdCBuYW1lcyBpbiBhIHJldmlldywgYWN0aW9uYWJsZSB3b3JkcyBpbiBpbnRlcmFjdGl2ZSB0ZXh0LWRyaXZlbiBzb2Z0d2FyZSwgb3IgYW4gYXJ0aWNsZSBsZWRlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2IifV19LHtuYW1lOiJ1IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdSBlbGVtZW50IHJlcHJlc2VudHMgYSBzcGFuIG9mIHRleHQgd2l0aCBhbiB1bmFydGljdWxhdGVkLCB0aG91Z2ggZXhwbGljaXRseSByZW5kZXJlZCwgbm9uLXRleHR1YWwgYW5ub3RhdGlvbiwgc3VjaCBhcyBsYWJlbGluZyB0aGUgdGV4dCBhcyBiZWluZyBhIHByb3BlciBuYW1lIGluIENoaW5lc2UgdGV4dCAoYSBDaGluZXNlIHByb3BlciBuYW1lIG1hcmspLCBvciBsYWJlbGluZyB0aGUgdGV4dCBhcyBiZWluZyBtaXNzcGVsdC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC91In1dfSx7bmFtZToibWFyayIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1hcmsgZWxlbWVudCByZXByZXNlbnRzIGEgcnVuIG9mIHRleHQgaW4gb25lIGRvY3VtZW50IG1hcmtlZCBvciBoaWdobGlnaHRlZCBmb3IgcmVmZXJlbmNlIHB1cnBvc2VzLCBkdWUgdG8gaXRzIHJlbGV2YW5jZSBpbiBhbm90aGVyIGNvbnRleHQuIFdoZW4gdXNlZCBpbiBhIHF1b3RhdGlvbiBvciBvdGhlciBibG9jayBvZiB0ZXh0IHJlZmVycmVkIHRvIGZyb20gdGhlIHByb3NlLCBpdCBpbmRpY2F0ZXMgYSBoaWdobGlnaHQgdGhhdCB3YXMgbm90IG9yaWdpbmFsbHkgcHJlc2VudCBidXQgd2hpY2ggaGFzIGJlZW4gYWRkZWQgdG8gYnJpbmcgdGhlIHJlYWRlcidzIGF0dGVudGlvbiB0byBhIHBhcnQgb2YgdGhlIHRleHQgdGhhdCBtaWdodCBub3QgaGF2ZSBiZWVuIGNvbnNpZGVyZWQgaW1wb3J0YW50IGJ5IHRoZSBvcmlnaW5hbCBhdXRob3Igd2hlbiB0aGUgYmxvY2sgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiwgYnV0IHdoaWNoIGlzIG5vdyB1bmRlciBwcmV2aW91c2x5IHVuZXhwZWN0ZWQgc2NydXRpbnkuIFdoZW4gdXNlZCBpbiB0aGUgbWFpbiBwcm9zZSBvZiBhIGRvY3VtZW50LCBpdCBpbmRpY2F0ZXMgYSBwYXJ0IG9mIHRoZSBkb2N1bWVudCB0aGF0IGhhcyBiZWVuIGhpZ2hsaWdodGVkIGR1ZSB0byBpdHMgbGlrZWx5IHJlbGV2YW5jZSB0byB0aGUgdXNlcidzIGN1cnJlbnQgYWN0aXZpdHkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWFyayJ9XX0se25hbWU6ImJkaSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJkaSBlbGVtZW50IHJlcHJlc2VudHMgYSBzcGFuIG9mIHRleHQgdGhhdCBpcyB0byBiZSBpc29sYXRlZCBmcm9tIGl0cyBzdXJyb3VuZGluZ3MgZm9yIHRoZSBwdXJwb3NlcyBvZiBiaWRpcmVjdGlvbmFsIHRleHQgZm9ybWF0dGluZy4gW0JJREldIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYmRpIn1dfSx7bmFtZToiYmRvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYmRvIGVsZW1lbnQgcmVwcmVzZW50cyBleHBsaWNpdCB0ZXh0IGRpcmVjdGlvbmFsaXR5IGZvcm1hdHRpbmcgY29udHJvbCBmb3IgaXRzIGNoaWxkcmVuLiBJdCBhbGxvd3MgYXV0aG9ycyB0byBvdmVycmlkZSB0aGUgVW5pY29kZSBiaWRpcmVjdGlvbmFsIGFsZ29yaXRobSBieSBleHBsaWNpdGx5IHNwZWNpZnlpbmcgYSBkaXJlY3Rpb24gb3ZlcnJpZGUuIFtCSURJXSJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJkaXIiLGRlc2NyaXB0aW9uOiJUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRleHQgc2hvdWxkIGJlIHJlbmRlcmVkIGluIHRoaXMgZWxlbWVudCdzIGNvbnRlbnRzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGx0cmA6IEluZGljYXRlcyB0aGF0IHRoZSB0ZXh0IHNob3VsZCBnbyBpbiBhIGxlZnQtdG8tcmlnaHQgZGlyZWN0aW9uLlxuKiAgIGBydGxgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgdGV4dCBzaG91bGQgZ28gaW4gYSByaWdodC10by1sZWZ0IGRpcmVjdGlvbi4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2JkbyJ9XX0se25hbWU6InNwYW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzcGFuIGVsZW1lbnQgZG9lc24ndCBtZWFuIGFueXRoaW5nIG9uIGl0cyBvd24sIGJ1dCBjYW4gYmUgdXNlZnVsIHdoZW4gdXNlZCB0b2dldGhlciB3aXRoIHRoZSBnbG9iYWwgYXR0cmlidXRlcywgZS5nLiBjbGFzcywgbGFuZywgb3IgZGlyLiBJdCByZXByZXNlbnRzIGl0cyBjaGlsZHJlbi4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zcGFuIn1dfSx7bmFtZToiYnIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBiciBlbGVtZW50IHJlcHJlc2VudHMgYSBsaW5lIGJyZWFrLiJ9LHZvaWQ6ITAsYXR0cmlidXRlczpbe25hbWU6ImNsZWFyIixkZXNjcmlwdGlvbjoiSW5kaWNhdGVzIHdoZXJlIHRvIGJlZ2luIHRoZSBuZXh0IGxpbmUgYWZ0ZXIgdGhlIGJyZWFrLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnIifV19LHtuYW1lOiJ3YnIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB3YnIgZWxlbWVudCByZXByZXNlbnRzIGEgbGluZSBicmVhayBvcHBvcnR1bml0eS4ifSx2b2lkOiEwLGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3diciJ9XX0se25hbWU6ImlucyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGlucyBlbGVtZW50IHJlcHJlc2VudHMgYW4gYWRkaXRpb24gdG8gdGhlIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgVVJJIG9mIGEgcmVzb3VyY2UgdGhhdCBleHBsYWlucyB0aGUgY2hhbmdlLCBzdWNoIGFzIGEgbGluayB0byBtZWV0aW5nIG1pbnV0ZXMgb3IgYSB0aWNrZXQgaW4gYSB0cm91Ymxlc2hvb3Rpbmcgc3lzdGVtLiJ9LHtuYW1lOiJkYXRldGltZSIsZGVzY3JpcHRpb246J1RoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgdGltZSBhbmQgZGF0ZSBvZiB0aGUgY2hhbmdlIGFuZCBtdXN0IGJlIGEgdmFsaWQgZGF0ZSB3aXRoIGFuIG9wdGlvbmFsIHRpbWUgc3RyaW5nLiBJZiB0aGUgdmFsdWUgY2Fubm90IGJlIHBhcnNlZCBhcyBhIGRhdGUgd2l0aCBhbiBvcHRpb25hbCB0aW1lIHN0cmluZywgdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHRpbWUgc3RhbXAuIEZvciB0aGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgd2l0aG91dCBhIHRpbWUsIHNlZSBbRm9ybWF0IG9mIGEgdmFsaWQgZGF0ZSBzdHJpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzI0Zvcm1hdF9vZl9hX3ZhbGlkX2RhdGVfc3RyaW5nICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikgaW4gW0RhdGUgYW5kIHRpbWUgZm9ybWF0cyB1c2VkIGluIEhUTUxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikuIFRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpZiBpdCBpbmNsdWRlcyBib3RoIGRhdGUgYW5kIHRpbWUgaXMgY292ZXJlZCBpbiBbRm9ybWF0IG9mIGEgdmFsaWQgbG9jYWwgZGF0ZSBhbmQgdGltZSBzdHJpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzI0Zvcm1hdF9vZl9hX3ZhbGlkX2xvY2FsX2RhdGVfYW5kX3RpbWVfc3RyaW5nICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikgaW4gW0RhdGUgYW5kIHRpbWUgZm9ybWF0cyB1c2VkIGluIEhUTUxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnMifV19LHtuYW1lOiJkZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkZWwgZWxlbWVudCByZXByZXNlbnRzIGEgcmVtb3ZhbCBmcm9tIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY2l0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBVUkkgZm9yIGEgcmVzb3VyY2UgdGhhdCBleHBsYWlucyB0aGUgY2hhbmdlIChmb3IgZXhhbXBsZSwgbWVldGluZyBtaW51dGVzKS4ifX0se25hbWU6ImRhdGV0aW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIHRpbWUgYW5kIGRhdGUgb2YgdGhlIGNoYW5nZSBhbmQgbXVzdCBiZSBhIHZhbGlkIGRhdGUgc3RyaW5nIHdpdGggYW4gb3B0aW9uYWwgdGltZS4gSWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBwYXJzZWQgYXMgYSBkYXRlIHdpdGggYW4gb3B0aW9uYWwgdGltZSBzdHJpbmcsIHRoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCB0aW1lIHN0YW1wLiBGb3IgdGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIHdpdGhvdXQgYSB0aW1lLCBzZWUgW0Zvcm1hdCBvZiBhIHZhbGlkIGRhdGUgc3RyaW5nXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyNGb3JtYXRfb2ZfYV92YWxpZF9kYXRlX3N0cmluZyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpIGluIFtEYXRlIGFuZCB0aW1lIGZvcm1hdHMgdXNlZCBpbiBIVE1MXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpLiBUaGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgaWYgaXQgaW5jbHVkZXMgYm90aCBkYXRlIGFuZCB0aW1lIGlzIGNvdmVyZWQgaW4gW0Zvcm1hdCBvZiBhIHZhbGlkIGxvY2FsIGRhdGUgYW5kIHRpbWUgc3RyaW5nXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyNGb3JtYXRfb2ZfYV92YWxpZF9sb2NhbF9kYXRlX2FuZF90aW1lX3N0cmluZyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpIGluIFtEYXRlIGFuZCB0aW1lIGZvcm1hdHMgdXNlZCBpbiBIVE1MXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0RhdGVfYW5kX3RpbWVfZm9ybWF0cyAiQ2VydGFpbiBIVE1MIGVsZW1lbnRzIHVzZSBkYXRlIGFuZC9vciB0aW1lIHZhbHVlcy4gVGhlIGZvcm1hdHMgb2YgdGhlIHN0cmluZ3MgdGhhdCBzcGVjaWZ5IHRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBhcnRpY2xlLiIpLid9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RlbCJ9XX0se25hbWU6InBpY3R1cmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwaWN0dXJlIGVsZW1lbnQgaXMgYSBjb250YWluZXIgd2hpY2ggcHJvdmlkZXMgbXVsdGlwbGUgc291cmNlcyB0byBpdHMgY29udGFpbmVkIGltZyBlbGVtZW50IHRvIGFsbG93IGF1dGhvcnMgdG8gZGVjbGFyYXRpdmVseSBjb250cm9sIG9yIGdpdmUgaGludHMgdG8gdGhlIHVzZXIgYWdlbnQgYWJvdXQgd2hpY2ggaW1hZ2UgcmVzb3VyY2UgdG8gdXNlLCBiYXNlZCBvbiB0aGUgc2NyZWVuIHBpeGVsIGRlbnNpdHksIHZpZXdwb3J0IHNpemUsIGltYWdlIGZvcm1hdCwgYW5kIG90aGVyIGZhY3RvcnMuIEl0IHJlcHJlc2VudHMgaXRzIGNoaWxkcmVuLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUifV19LHtuYW1lOiJpbWciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGltZyBlbGVtZW50IHJlcHJlc2VudHMgYW4gaW1hZ2UuIn0sdm9pZDohMCxhdHRyaWJ1dGVzOlt7bmFtZToiYWx0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIGFuIGFsdGVybmF0aXZlIHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGltYWdlLlxuXG4qKk5vdGU6KiogQnJvd3NlcnMgZG8gbm90IGFsd2F5cyBkaXNwbGF5IHRoZSBpbWFnZSByZWZlcmVuY2VkIGJ5IHRoZSBlbGVtZW50LiBUaGlzIGlzIHRoZSBjYXNlIGZvciBub24tZ3JhcGhpY2FsIGJyb3dzZXJzIChpbmNsdWRpbmcgdGhvc2UgdXNlZCBieSBwZW9wbGUgd2l0aCB2aXN1YWwgaW1wYWlybWVudHMpLCBpZiB0aGUgdXNlciBjaG9vc2VzIG5vdCB0byBkaXNwbGF5IGltYWdlcywgb3IgaWYgdGhlIGJyb3dzZXIgY2Fubm90IGRpc3BsYXkgdGhlIGltYWdlIGJlY2F1c2UgaXQgaXMgaW52YWxpZCBvciBhbiBbdW5zdXBwb3J0ZWQgdHlwZV0oI1N1cHBvcnRlZF9pbWFnZV9mb3JtYXRzKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBicm93c2VyIG1heSByZXBsYWNlIHRoZSBpbWFnZSB3aXRoIHRoZSB0ZXh0IGRlZmluZWQgaW4gdGhpcyBlbGVtZW50XCdzIGBhbHRgIGF0dHJpYnV0ZS4gWW91IHNob3VsZCwgZm9yIHRoZXNlIHJlYXNvbnMgYW5kIG90aGVycywgcHJvdmlkZSBhIHVzZWZ1bCB2YWx1ZSBmb3IgYGFsdGAgd2hlbmV2ZXIgcG9zc2libGUuXG5cbioqTm90ZToqKiBPbWl0dGluZyB0aGlzIGF0dHJpYnV0ZSBhbHRvZ2V0aGVyIGluZGljYXRlcyB0aGF0IHRoZSBpbWFnZSBpcyBhIGtleSBwYXJ0IG9mIHRoZSBjb250ZW50LCBhbmQgbm8gdGV4dHVhbCBlcXVpdmFsZW50IGlzIGF2YWlsYWJsZS4gU2V0dGluZyB0aGlzIGF0dHJpYnV0ZSB0byBhbiBlbXB0eSBzdHJpbmcgKGBhbHQ9IiJgKSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGltYWdlIGlzIF9ub3RfIGEga2V5IHBhcnQgb2YgdGhlIGNvbnRlbnQgKGRlY29yYXRpdmUpLCBhbmQgdGhhdCBub24tdmlzdWFsIGJyb3dzZXJzIG1heSBvbWl0IGl0IGZyb20gcmVuZGVyaW5nLid9fSx7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaW1hZ2UgVVJMLiBUaGlzIGF0dHJpYnV0ZSBpcyBtYW5kYXRvcnkgZm9yIHRoZSBgPGltZz5gIGVsZW1lbnQuIE9uIGJyb3dzZXJzIHN1cHBvcnRpbmcgYHNyY3NldGAsIGBzcmNgIGlzIHRyZWF0ZWQgbGlrZSBhIGNhbmRpZGF0ZSBpbWFnZSB3aXRoIGEgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9yIGAxeGAgdW5sZXNzIGFuIGltYWdlIHdpdGggdGhpcyBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGBzcmNzZXQsYCBvciB1bmxlc3MgYHNyY3NldGAgY29udGFpbnMgJ2B3YCcgZGVzY3JpcHRvcnMuIn19LHtuYW1lOiJzcmNzZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgbGlzdCBvZiBvbmUgb3IgbW9yZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMgaW5kaWNhdGluZyBhIHNldCBvZiBwb3NzaWJsZSBpbWFnZSBzb3VyY2VzIGZvciB0aGUgdXNlciBhZ2VudCB0byB1c2UuIEVhY2ggc3RyaW5nIGlzIGNvbXBvc2VkIG9mOlxuXG4xLiAgYSBVUkwgdG8gYW4gaW1hZ2UsXG4yLiAgb3B0aW9uYWxseSwgd2hpdGVzcGFjZSBmb2xsb3dlZCBieSBvbmUgb2Y6XG4gICAgKiAgIEEgd2lkdGggZGVzY3JpcHRvciwgb3IgYSBwb3NpdGl2ZSBpbnRlZ2VyIGRpcmVjdGx5IGZvbGxvd2VkIGJ5ICdgd2AnLiBUaGUgd2lkdGggZGVzY3JpcHRvciBpcyBkaXZpZGVkIGJ5IHRoZSBzb3VyY2Ugc2l6ZSBnaXZlbiBpbiB0aGUgYHNpemVzYCBhdHRyaWJ1dGUgdG8gY2FsY3VsYXRlIHRoZSBlZmZlY3RpdmUgcGl4ZWwgZGVuc2l0eS5cbiAgICAqICAgQSBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IsIHdoaWNoIGlzIGEgcG9zaXRpdmUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGRpcmVjdGx5IGZvbGxvd2VkIGJ5ICdgeGAnLlxuXG5JZiBubyBkZXNjcmlwdG9yIGlzIHNwZWNpZmllZCwgdGhlIHNvdXJjZSBpcyBhc3NpZ25lZCB0aGUgZGVmYXVsdCBkZXNjcmlwdG9yOiBgMXhgLlxuXG5JdCBpcyBpbmNvcnJlY3QgdG8gbWl4IHdpZHRoIGRlc2NyaXB0b3JzIGFuZCBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3JzIGluIHRoZSBzYW1lIGBzcmNzZXRgIGF0dHJpYnV0ZS4gRHVwbGljYXRlIGRlc2NyaXB0b3JzIChmb3IgaW5zdGFuY2UsIHR3byBzb3VyY2VzIGluIHRoZSBzYW1lIGBzcmNzZXRgIHdoaWNoIGFyZSBib3RoIGRlc2NyaWJlZCB3aXRoICdgMnhgJykgYXJlIGFsc28gaW52YWxpZC5cblxuVGhlIHVzZXIgYWdlbnQgc2VsZWN0cyBhbnkgb25lIG9mIHRoZSBhdmFpbGFibGUgc291cmNlcyBhdCBpdHMgZGlzY3JldGlvbi4gVGhpcyBwcm92aWRlcyB0aGVtIHdpdGggc2lnbmlmaWNhbnQgbGVld2F5IHRvIHRhaWxvciB0aGVpciBzZWxlY3Rpb24gYmFzZWQgb24gdGhpbmdzIGxpa2UgdXNlciBwcmVmZXJlbmNlcyBvciBiYW5kd2lkdGggY29uZGl0aW9ucy4gU2VlIG91ciBbUmVzcG9uc2l2ZSBpbWFnZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTGVhcm4vSFRNTC9NdWx0aW1lZGlhX2FuZF9lbWJlZGRpbmcvUmVzcG9uc2l2ZV9pbWFnZXMpIHR1dG9yaWFsIGZvciBhbiBleGFtcGxlLiJ9fSx7bmFtZToiY3Jvc3NvcmlnaW4iLHZhbHVlU2V0OiJ4byIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgaWYgdGhlIGZldGNoaW5nIG9mIHRoZSByZWxhdGVkIGltYWdlIG11c3QgYmUgZG9uZSB1c2luZyBDT1JTIG9yIG5vdC4gW0NPUlMtZW5hYmxlZCBpbWFnZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ09SU19FbmFibGVkX0ltYWdlKSBjYW4gYmUgcmV1c2VkIGluIHRoZSBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhbnZhcyAiVXNlIHRoZSBIVE1MIDxjYW52YXM+IGVsZW1lbnQgd2l0aCBlaXRoZXIgdGhlIGNhbnZhcyBzY3JpcHRpbmcgQVBJIG9yIHRoZSBXZWJHTCBBUEkgdG8gZHJhdyBncmFwaGljcyBhbmQgYW5pbWF0aW9ucy4iKSBlbGVtZW50IHdpdGhvdXQgYmVpbmcgIlt0YWludGVkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfZW5hYmxlZF9pbWFnZSNXaGF0X2lzX2FfdGFpbnRlZF9jYW52YXMpLiIgVGhlIGFsbG93ZWQgdmFsdWVzIGFyZTpcbmBhbm9ueW1vdXNgXG5cbkEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QgKGkuZS4sIHdpdGggYE9yaWdpbjpgIEhUVFAgaGVhZGVyKSBpcyBwZXJmb3JtZWQsIGJ1dCBubyBjcmVkZW50aWFsIGlzIHNlbnQgKGkuZS4sIG5vIGNvb2tpZSwgWC41MDkgY2VydGlmaWNhdGUsIG9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24pLiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IGdpdmUgY3JlZGVudGlhbHMgdG8gdGhlIG9yaWdpbiBzaXRlIChieSBub3Qgc2V0dGluZyB0aGUgW2BBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luICJUaGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luIHJlc3BvbnNlIGhlYWRlciBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzcG9uc2UgY2FuIGJlIHNoYXJlZCB3aXRoIHJlcXVlc3RpbmcgY29kZSBmcm9tIHRoZSBnaXZlbiBvcmlnaW4uIikgSFRUUCBoZWFkZXIpLCB0aGUgaW1hZ2Ugd2lsbCBiZSB0YWludGVkIGFuZCBpdHMgdXNhZ2UgcmVzdHJpY3RlZC5cblxuYHVzZS1jcmVkZW50aWFsc2BcblxuQSBjcm9zcy1vcmlnaW4gcmVxdWVzdCAoaS5lLiwgd2l0aCB0aGUgW2BPcmlnaW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvT3JpZ2luICJUaGUgT3JpZ2luIHJlcXVlc3QgaGVhZGVyIGluZGljYXRlcyB3aGVyZSBhIGZldGNoIG9yaWdpbmF0ZXMgZnJvbS4gSXQgZG9lc25cJ3QgaW5jbHVkZSBhbnkgcGF0aCBpbmZvcm1hdGlvbiwgYnV0IG9ubHkgdGhlIHNlcnZlciBuYW1lLiBJdCBpcyBzZW50IHdpdGggQ09SUyByZXF1ZXN0cywgYXMgd2VsbCBhcyB3aXRoIFBPU1QgcmVxdWVzdHMuIEl0IGlzIHNpbWlsYXIgdG8gdGhlIFJlZmVyZXIgaGVhZGVyLCBidXQsIHVubGlrZSB0aGlzIGhlYWRlciwgaXQgZG9lc25cJ3QgZGlzY2xvc2UgdGhlIHdob2xlIHBhdGguIikgSFRUUCBoZWFkZXIpIHBlcmZvcm1lZCBhbG9uZyB3aXRoIGNyZWRlbnRpYWxzIHNlbnQgKGkuZS4sIGEgY29va2llLCBjZXJ0aWZpY2F0ZSwgb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbikuIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgZ2l2ZSBjcmVkZW50aWFscyB0byB0aGUgb3JpZ2luIHNpdGUgKHRocm91Z2ggdGhlIGBBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsc2AgSFRUUCBoZWFkZXIpLCB0aGUgaW1hZ2Ugd2lsbCBiZSB0YWludGVkIGFuZCBpdHMgdXNhZ2UgcmVzdHJpY3RlZC5cblxuSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCwgdGhlIHJlc291cmNlIGlzIGZldGNoZWQgd2l0aG91dCBhIENPUlMgcmVxdWVzdCAoaS5lLiwgd2l0aG91dCBzZW5kaW5nIHRoZSBgT3JpZ2luYCBIVFRQIGhlYWRlciksIHByZXZlbnRpbmcgaXRzIG5vbi10YWludGVkIHVzYWdlIGluIFtgPGNhbnZhcz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FudmFzICJVc2UgdGhlIEhUTUwgPGNhbnZhcz4gZWxlbWVudCB3aXRoIGVpdGhlciB0aGUgY2FudmFzIHNjcmlwdGluZyBBUEkgb3IgdGhlIFdlYkdMIEFQSSB0byBkcmF3IGdyYXBoaWNzIGFuZCBhbmltYXRpb25zLiIpIGVsZW1lbnRzLiBJZiBpbnZhbGlkLCBpdCBpcyBoYW5kbGVkIGFzIGlmIHRoZSBgYW5vbnltb3VzYCB2YWx1ZSB3YXMgdXNlZC4gU2VlIFtDT1JTIHNldHRpbmdzIGF0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLid9fSx7bmFtZToidXNlbWFwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGUgcGFydGlhbCBVUkwgKHN0YXJ0aW5nIHdpdGggXCcjXCcpIG9mIGFuIFtpbWFnZSBtYXBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSFRNTC9FbGVtZW50L21hcCkgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50LlxuXG4qKk5vdGU6KiogWW91IGNhbm5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgaWYgdGhlIGA8aW1nPmAgZWxlbWVudCBpcyBhIGRlc2NlbmRhbnQgb2YgYW4gW2A8YT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYSAiVGhlIEhUTUwgPGE+IGVsZW1lbnQgKG9yIGFuY2hvciBlbGVtZW50KSBjcmVhdGVzIGEgaHlwZXJsaW5rIHRvIG90aGVyIHdlYiBwYWdlcywgZmlsZXMsIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHNhbWUgcGFnZSwgZW1haWwgYWRkcmVzc2VzLCBvciBhbnkgb3RoZXIgVVJMLiIpIG9yIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBlbGVtZW50Lid9fSx7bmFtZToiaXNtYXAiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSBpbWFnZSBpcyBwYXJ0IG9mIGEgc2VydmVyLXNpZGUgbWFwLiBJZiBzbywgdGhlIHByZWNpc2UgY29vcmRpbmF0ZXMgb2YgYSBjbGljayBhcmUgc2VudCB0byB0aGUgc2VydmVyLlxuXG4qKk5vdGU6KiogVGhpcyBhdHRyaWJ1dGUgaXMgYWxsb3dlZCBvbmx5IGlmIHRoZSBgPGltZz5gIGVsZW1lbnQgaXMgYSBkZXNjZW5kYW50IG9mIGFuIFtgPGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EgIlRoZSBIVE1MIDxhPiBlbGVtZW50IChvciBhbmNob3IgZWxlbWVudCkgY3JlYXRlcyBhIGh5cGVybGluayB0byBvdGhlciB3ZWIgcGFnZXMsIGZpbGVzLCBsb2NhdGlvbnMgd2l0aGluIHRoZSBzYW1lIHBhZ2UsIGVtYWlsIGFkZHJlc3Nlcywgb3IgYW55IG90aGVyIFVSTC4iKSBlbGVtZW50IHdpdGggYSB2YWxpZCBbYGhyZWZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYSNhdHRyLWhyZWYpIGF0dHJpYnV0ZS4nfX0se25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuIn19LHtuYW1lOiJoZWlnaHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuIn19LHtuYW1lOiJkZWNvZGluZyIsdmFsdWVTZXQ6ImRlY29kaW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOmBQcm92aWRlcyBhbiBpbWFnZSBkZWNvZGluZyBoaW50IHRvIHRoZSBicm93c2VyLiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlOgpcYHN5bmNcYAoKRGVjb2RlIHRoZSBpbWFnZSBzeW5jaHJvbm91c2x5IGZvciBhdG9taWMgcHJlc2VudGF0aW9uIHdpdGggb3RoZXIgY29udGVudC4KClxgYXN5bmNcYAoKRGVjb2RlIHRoZSBpbWFnZSBhc3luY2hyb25vdXNseSB0byByZWR1Y2UgZGVsYXkgaW4gcHJlc2VudGluZyBvdGhlciBjb250ZW50LgoKXGBhdXRvXGAKCkRlZmF1bHQgbW9kZSwgd2hpY2ggaW5kaWNhdGVzIG5vIHByZWZlcmVuY2UgZm9yIHRoZSBkZWNvZGluZyBtb2RlLiBUaGUgYnJvd3NlciBkZWNpZGVzIHdoYXQgaXMgYmVzdCBmb3IgdGhlIHVzZXIuYH19LHtuYW1lOiJsb2FkaW5nIix2YWx1ZVNldDoibG9hZGluZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIGhvdyB0aGUgYnJvd3NlciBzaG91bGQgbG9hZCB0aGUgaW1hZ2UuIn19LHtuYW1lOiJyZWZlcnJlcnBvbGljeSIsdmFsdWVTZXQ6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHN0cmluZyBpbmRpY2F0aW5nIHdoaWNoIHJlZmVycmVyIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSByZXNvdXJjZTpcblxuKiAgIGBuby1yZWZlcnJlcjpgIFRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciBcIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuXCIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZTpgIE5vIGBSZWZlcmVyYCBoZWFkZXIgd2lsbCBiZSBzZW50IHdoZW4gbmF2aWdhdGluZyB0byBhbiBvcmlnaW4gd2l0aG91dCBUTFMgKEhUVFBTKS4gVGhpcyBpcyBhIHVzZXIgYWdlbnTigJlzIGRlZmF1bHQgYmVoYXZpb3IgaWYgbm8gcG9saWN5IGlzIG90aGVyd2lzZSBzcGVjaWZpZWQuXG4qICAgYG9yaWdpbjpgIFRoZSBgUmVmZXJlcmAgaGVhZGVyIHdpbGwgaW5jbHVkZSB0aGUgcGFnZSBvZiBvcmlnaW4ncyBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbjpgIE5hdmlnYXRpbmcgdG8gb3RoZXIgb3JpZ2lucyB3aWxsIGxpbWl0IHRoZSBpbmNsdWRlZCByZWZlcnJhbCBkYXRhIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0IGFuZCB0aGUgcG9ydCwgd2hpbGUgbmF2aWdhdGluZyBmcm9tIHRoZSBzYW1lIG9yaWdpbiB3aWxsIGluY2x1ZGUgdGhlIHJlZmVycmVyJ3MgZnVsbCBwYXRoLlxuKiAgIGB1bnNhZmUtdXJsOmAgVGhlIGBSZWZlcmVyYCBoZWFkZXIgd2lsbCBpbmNsdWRlIHRoZSBvcmlnaW4gYW5kIHRoZSBwYXRoLCBidXQgbm90IHRoZSBmcmFnbWVudCwgcGFzc3dvcmQsIG9yIHVzZXJuYW1lLiBUaGlzIGNhc2UgaXMgdW5zYWZlIGJlY2F1c2UgaXQgY2FuIGxlYWsgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLiJ9fSx7bmFtZToic2l6ZXMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgbGlzdCBvZiBvbmUgb3IgbW9yZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMgaW5kaWNhdGluZyBhIHNldCBvZiBzb3VyY2Ugc2l6ZXMuIEVhY2ggc291cmNlIHNpemUgY29uc2lzdHMgb2Y6XG5cbjEuICBhIG1lZGlhIGNvbmRpdGlvbi4gVGhpcyBtdXN0IGJlIG9taXR0ZWQgZm9yIHRoZSBsYXN0IGl0ZW0uXG4yLiAgYSBzb3VyY2Ugc2l6ZSB2YWx1ZS5cblxuU291cmNlIHNpemUgdmFsdWVzIHNwZWNpZnkgdGhlIGludGVuZGVkIGRpc3BsYXkgc2l6ZSBvZiB0aGUgaW1hZ2UuIFVzZXIgYWdlbnRzIHVzZSB0aGUgY3VycmVudCBzb3VyY2Ugc2l6ZSB0byBzZWxlY3Qgb25lIG9mIHRoZSBzb3VyY2VzIHN1cHBsaWVkIGJ5IHRoZSBgc3Jjc2V0YCBhdHRyaWJ1dGUsIHdoZW4gdGhvc2Ugc291cmNlcyBhcmUgZGVzY3JpYmVkIHVzaW5nIHdpZHRoICgnYHdgJykgZGVzY3JpcHRvcnMuIFRoZSBzZWxlY3RlZCBzb3VyY2Ugc2l6ZSBhZmZlY3RzIHRoZSBpbnRyaW5zaWMgc2l6ZSBvZiB0aGUgaW1hZ2UgKHRoZSBpbWFnZeKAmXMgZGlzcGxheSBzaXplIGlmIG5vIENTUyBzdHlsaW5nIGlzIGFwcGxpZWQpLiBJZiB0aGUgYHNyY3NldGAgYXR0cmlidXRlIGlzIGFic2VudCwgb3IgY29udGFpbnMgbm8gdmFsdWVzIHdpdGggYSB3aWR0aCAoYHdgKSBkZXNjcmlwdG9yLCB0aGVuIHRoZSBgc2l6ZXNgIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0LiJ9fSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiB0aGUgcmVzb3VyY2UuIFByaW9yaXR5IGhpbnRzIGFyZSBkZWxlZ2F0ZWQgdXNpbmcgdGhlIHZhbHVlczoifSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246ImBhdXRvYDogSW5kaWNhdGVzwqAqKm5vwqBwcmVmZXJlbmNlKiouIFRoZSBicm93c2VyIG1heSB1c2UgaXRzIG93biBoZXVyaXN0aWNzIHRvIGRlY2lkZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGltYWdlLlxuXG5gaGlnaGA6IEluZGljYXRlcyB0byB0aGXCoGJyb3dzZXLCoHRoYXQgdGhlIGltYWdlIGlzIG9mwqAqKmhpZ2gqKiBwcmlvcml0eS5cblxuYGxvd2A6wqBJbmRpY2F0ZXMgdG8gdGhlwqBicm93c2VywqB0aGF0IHRoZSBpbWFnZSBpcyBvZsKgKipsb3cqKiBwcmlvcml0eS4ifSx7bmFtZToiaW50cmluc2ljc2l6ZSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIHRlbGxzIHRoZSBicm93c2VyIHRvIGlnbm9yZSB0aGUgYWN0dWFsIGludHJpbnNpYyBzaXplIG9mIHRoZSBpbWFnZSBhbmQgcHJldGVuZCBpdOKAmXMgdGhlIHNpemUgc3BlY2lmaWVkIGluIHRoZSBhdHRyaWJ1dGUuIFNwZWNpZmljYWxseSwgdGhlIGltYWdlIHdvdWxkIHJhc3RlciBhdCB0aGVzZSBkaW1lbnNpb25zIGFuZCBgbmF0dXJhbFdpZHRoYC9gbmF0dXJhbEhlaWdodGAgb24gaW1hZ2VzIHdvdWxkIHJldHVybiB0aGUgdmFsdWVzIHNwZWNpZmllZCBpbiB0aGlzIGF0dHJpYnV0ZS4gW0V4cGxhaW5lcl0oaHR0cHM6Ly9naXRodWIuY29tL29qYW52YWZhaS9pbnRyaW5zaWNzaXplLWF0dHJpYnV0ZSksIFtleGFtcGxlc10oaHR0cHM6Ly9nb29nbGVjaHJvbWUuZ2l0aHViLmlvL3NhbXBsZXMvaW50cmluc2ljLXNpemUvaW5kZXguaHRtbCkifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyJ9XX0se25hbWU6ImlmcmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGlmcmFtZSBlbGVtZW50IHJlcHJlc2VudHMgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGUgVVJMIG9mIHRoZSBwYWdlIHRvIGVtYmVkLiBVc2UgYSB2YWx1ZSBvZiBgYWJvdXQ6YmxhbmtgIHRvIGVtYmVkIGFuIGVtcHR5IHBhZ2UgdGhhdCBjb25mb3JtcyB0byB0aGUgW3NhbWUtb3JpZ2luIHBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2FtZS1vcmlnaW5fcG9saWN5I0luaGVyaXRlZF9vcmlnaW5zKS4gQWxzbyBub3RlIHRoYXQgcHJvZ3JhbWF0aWNhbGx5IHJlbW92aW5nIGFuIGA8aWZyYW1lPmBcJ3Mgc3JjIGF0dHJpYnV0ZSAoZS5nLiB2aWEgW2BFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVtb3ZlQXR0cmlidXRlICJUaGUgRWxlbWVudCBtZXRob2QgcmVtb3ZlQXR0cmlidXRlKCkgcmVtb3ZlcyB0aGUgYXR0cmlidXRlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGZyb20gdGhlIGVsZW1lbnQuIikpIGNhdXNlcyBgYWJvdXQ6YmxhbmtgIHRvIGJlIGxvYWRlZCBpbiB0aGUgZnJhbWUgaW4gRmlyZWZveCAoZnJvbSB2ZXJzaW9uIDY1KSwgQ2hyb21pdW0tYmFzZWQgYnJvd3NlcnMsIGFuZCBTYWZhcmkvaU9TLid9fSx7bmFtZToic3JjZG9jIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmxpbmUgSFRNTCB0byBlbWJlZCwgb3ZlcnJpZGluZyB0aGUgYHNyY2AgYXR0cmlidXRlLiBJZiBhIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYHNyY2RvY2AgYXR0cmlidXRlLCBpdCB3aWxsIGZhbGwgYmFjayB0byB0aGUgVVJMIGluIHRoZSBgc3JjYCBhdHRyaWJ1dGUuIn19LHtuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIHRhcmdldGFibGUgbmFtZSBmb3IgdGhlIGVtYmVkZGVkIGJyb3dzaW5nIGNvbnRleHQuIFRoaXMgY2FuIGJlIHVzZWQgaW4gdGhlIGB0YXJnZXRgIGF0dHJpYnV0ZSBvZiB0aGUgW2A8YT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYSAiVGhlIEhUTUwgPGE+IGVsZW1lbnQgKG9yIGFuY2hvciBlbGVtZW50KSBjcmVhdGVzIGEgaHlwZXJsaW5rIHRvIG90aGVyIHdlYiBwYWdlcywgZmlsZXMsIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHNhbWUgcGFnZSwgZW1haWwgYWRkcmVzc2VzLCBvciBhbnkgb3RoZXIgVVJMLiIpLCBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSwgb3IgW2A8YmFzZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYmFzZSAiVGhlIEhUTUwgPGJhc2U+IGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIGFsbCByZWxhdGl2ZSBVUkxzIGNvbnRhaW5lZCB3aXRoaW4gYSBkb2N1bWVudC4gVGhlcmUgY2FuIGJlIG9ubHkgb25lIDxiYXNlPiBlbGVtZW50IGluIGEgZG9jdW1lbnQuIikgZWxlbWVudHM7IHRoZSBgZm9ybXRhcmdldGAgYXR0cmlidXRlIG9mIHRoZSBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBvciBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgZWxlbWVudHM7IG9yIHRoZSBgd2luZG93TmFtZWAgcGFyYW1ldGVyIGluIHRoZSBbYHdpbmRvdy5vcGVuKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L29wZW4gIlRoZcKgV2luZG93IGludGVyZmFjZVwncyBvcGVuKCkgbWV0aG9kIGxvYWRzIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgaW50byB0aGUgYnJvd3NpbmcgY29udGV4dCAod2luZG93LCA8aWZyYW1lPiBvciB0YWIpIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLiBJZiB0aGUgbmFtZSBkb2VzblwndCBleGlzdCwgdGhlbiBhIG5ldyB3aW5kb3cgaXMgb3BlbmVkIGFuZCB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGlzIGxvYWRlZCBpbnRvIGl0cyBicm93c2luZyBjb250ZXh0LiIpIG1ldGhvZC4nfX0se25hbWU6InNhbmRib3giLHZhbHVlU2V0OiJzYiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQXBwbGllcyBleHRyYSByZXN0cmljdGlvbnMgdG8gdGhlIGNvbnRlbnQgaW4gdGhlIGZyYW1lLiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBjYW4gZWl0aGVyIGJlIGVtcHR5IHRvIGFwcGx5IGFsbCByZXN0cmljdGlvbnMsIG9yIHNwYWNlLXNlcGFyYXRlZCB0b2tlbnMgdG8gbGlmdCBwYXJ0aWN1bGFyIHJlc3RyaWN0aW9uczpcblxuKiAgIGBhbGxvdy1mb3Jtc2A6IEFsbG93cyB0aGUgcmVzb3VyY2UgdG8gc3VibWl0IGZvcm1zLiBJZiB0aGlzIGtleXdvcmQgaXMgbm90IHVzZWQsIGZvcm0gc3VibWlzc2lvbiBpcyBibG9ja2VkLlxuKiAgIGBhbGxvdy1tb2RhbHNgOiBMZXRzIHRoZSByZXNvdXJjZSBbb3BlbiBtb2RhbCB3aW5kb3dzXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNzYW5kYm94ZWQtbW9kYWxzLWZsYWcpLlxuKiAgIGBhbGxvdy1vcmllbnRhdGlvbi1sb2NrYDogTGV0cyB0aGUgcmVzb3VyY2UgW2xvY2sgdGhlIHNjcmVlbiBvcmllbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1NjcmVlbi9sb2NrT3JpZW50YXRpb24pLlxuKiAgIGBhbGxvdy1wb2ludGVyLWxvY2tgOiBMZXRzIHRoZSByZXNvdXJjZSB1c2UgdGhlIFtQb2ludGVyIExvY2sgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYkFQSS9Qb2ludGVyX0xvY2spLlxuKiAgIGBhbGxvdy1wb3B1cHNgOiBBbGxvd3MgcG9wdXBzIChzdWNoIGFzIGB3aW5kb3cub3BlbigpYCwgYHRhcmdldD0iX2JsYW5rImAsIG9yIGBzaG93TW9kYWxEaWFsb2coKWApLiBJZiB0aGlzIGtleXdvcmQgaXMgbm90IHVzZWQsIHRoZSBwb3B1cCB3aWxsIHNpbGVudGx5IGZhaWwgdG8gb3Blbi5cbiogICBgYWxsb3ctcG9wdXBzLXRvLWVzY2FwZS1zYW5kYm94YDogTGV0cyB0aGUgc2FuZGJveGVkIGRvY3VtZW50IG9wZW4gbmV3IHdpbmRvd3Mgd2l0aG91dCB0aG9zZSB3aW5kb3dzIGluaGVyaXRpbmcgdGhlIHNhbmRib3hpbmcuIEZvciBleGFtcGxlLCB0aGlzIGNhbiBzYWZlbHkgc2FuZGJveCBhbiBhZHZlcnRpc2VtZW50IHdpdGhvdXQgZm9yY2luZyB0aGUgc2FtZSByZXN0cmljdGlvbnMgdXBvbiB0aGUgcGFnZSB0aGUgYWQgbGlua3MgdG8uXG4qICAgYGFsbG93LXByZXNlbnRhdGlvbmA6IExldHMgdGhlIHJlc291cmNlIHN0YXJ0IGEgW3ByZXNlbnRhdGlvbiBzZXNzaW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUHJlc2VudGF0aW9uUmVxdWVzdCkuXG4qICAgYGFsbG93LXNhbWUtb3JpZ2luYDogSWYgdGhpcyB0b2tlbiBpcyBub3QgdXNlZCwgdGhlIHJlc291cmNlIGlzIHRyZWF0ZWQgYXMgYmVpbmcgZnJvbSBhIHNwZWNpYWwgb3JpZ2luIHRoYXQgYWx3YXlzIGZhaWxzIHRoZSBbc2FtZS1vcmlnaW4gcG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3NhbWUtb3JpZ2luX3BvbGljeSAic2FtZS1vcmlnaW4gcG9saWN5OiBUaGUgc2FtZS1vcmlnaW4gcG9saWN5IGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgbWVjaGFuaXNtIHRoYXQgcmVzdHJpY3RzIGhvdyBhIGRvY3VtZW50IG9yIHNjcmlwdCBsb2FkZWQgZnJvbSBvbmUgb3JpZ2luIGNhbiBpbnRlcmFjdCB3aXRoIGEgcmVzb3VyY2UgZnJvbSBhbm90aGVyIG9yaWdpbi4iKS5cbiogICBgYWxsb3ctc2NyaXB0c2A6IExldHMgdGhlIHJlc291cmNlIHJ1biBzY3JpcHRzIChidXQgbm90IGNyZWF0ZSBwb3B1cCB3aW5kb3dzKS5cbiogICBgYWxsb3ctc3RvcmFnZS1hY2Nlc3MtYnktdXNlci1hY3RpdmF0aW9uYCA6IExldHMgdGhlIHJlc291cmNlIHJlcXVlc3QgYWNjZXNzIHRvIHRoZSBwYXJlbnRcJ3Mgc3RvcmFnZSBjYXBhYmlsaXRpZXMgd2l0aCB0aGUgW1N0b3JhZ2UgQWNjZXNzIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1N0b3JhZ2VfQWNjZXNzX0FQSSkuXG4qICAgYGFsbG93LXRvcC1uYXZpZ2F0aW9uYDogTGV0cyB0aGUgcmVzb3VyY2UgbmF2aWdhdGUgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0ICh0aGUgb25lIG5hbWVkIGBfdG9wYCkuXG4qICAgYGFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbmA6IExldHMgdGhlIHJlc291cmNlIG5hdmlnYXRlIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCwgYnV0IG9ubHkgaWYgaW5pdGlhdGVkIGJ5IGEgdXNlciBnZXN0dXJlLlxuXG4qKk5vdGVzIGFib3V0IHNhbmRib3hpbmc6KipcblxuKiAgIFdoZW4gdGhlIGVtYmVkZGVkIGRvY3VtZW50IGhhcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGVtYmVkZGluZyBwYWdlLCBpdCBpcyAqKnN0cm9uZ2x5IGRpc2NvdXJhZ2VkKiogdG8gdXNlIGJvdGggYGFsbG93LXNjcmlwdHNgIGFuZCBgYWxsb3ctc2FtZS1vcmlnaW5gLCBhcyB0aGF0IGxldHMgdGhlIGVtYmVkZGVkIGRvY3VtZW50IHJlbW92ZSB0aGUgYHNhbmRib3hgIGF0dHJpYnV0ZSDigJQgbWFraW5nIGl0IG5vIG1vcmUgc2VjdXJlIHRoYW4gbm90IHVzaW5nIHRoZSBgc2FuZGJveGAgYXR0cmlidXRlIGF0IGFsbC5cbiogICBTYW5kYm94aW5nIGlzIHVzZWxlc3MgaWYgdGhlIGF0dGFja2VyIGNhbiBkaXNwbGF5IGNvbnRlbnQgb3V0c2lkZSBhIHNhbmRib3hlZCBgaWZyYW1lYCDigJQgc3VjaCBhcyBpZiB0aGUgdmlld2VyIG9wZW5zIHRoZSBmcmFtZSBpbiBhIG5ldyB0YWIuIFN1Y2ggY29udGVudCBzaG91bGQgYmUgYWxzbyBzZXJ2ZWQgZnJvbSBhIF9zZXBhcmF0ZSBvcmlnaW5fIHRvIGxpbWl0IHBvdGVudGlhbCBkYW1hZ2UuXG4qICAgVGhlIGBzYW5kYm94YCBhdHRyaWJ1dGUgaXMgdW5zdXBwb3J0ZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIgOSBhbmQgZWFybGllci4nfX0se25hbWU6InNlYW1sZXNzIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJhbGxvd2Z1bGxzY3JlZW4iLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidTZXQgdG8gYHRydWVgIGlmIHRoZSBgPGlmcmFtZT5gIGNhbiBhY3RpdmF0ZSBmdWxsc2NyZWVuIG1vZGUgYnkgY2FsbGluZyB0aGUgW2ByZXF1ZXN0RnVsbHNjcmVlbigpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVxdWVzdEZ1bGxzY3JlZW4gIlRoZSBFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKCkgbWV0aG9kIGlzc3VlcyBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCB0byBtYWtlIHRoZSBlbGVtZW50IGJlIGRpc3BsYXllZCBpbiBmdWxsLXNjcmVlbiBtb2RlLiIpIG1ldGhvZC5cblRoaXMgYXR0cmlidXRlIGlzIGNvbnNpZGVyZWQgYSBsZWdhY3kgYXR0cmlidXRlIGFuZCByZWRlZmluZWQgYXMgYGFsbG93PSJmdWxsc2NyZWVuImAuJ319LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHdpZHRoIG9mIHRoZSBmcmFtZSBpbiBDU1MgcGl4ZWxzLiBEZWZhdWx0IGlzIGAzMDBgLiJ9fSx7bmFtZToiaGVpZ2h0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaGVpZ2h0IG9mIHRoZSBmcmFtZSBpbiBDU1MgcGl4ZWxzLiBEZWZhdWx0IGlzIGAxNTBgLiJ9fSx7bmFtZToiYWxsb3ciLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgYSBbZmVhdHVyZSBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvRmVhdHVyZV9Qb2xpY3kpIGZvciB0aGUgYDxpZnJhbWU+YC4ifSx7bmFtZToiYWxsb3dwYXltZW50cmVxdWVzdCIsZGVzY3JpcHRpb246IlNldCB0byBgdHJ1ZWAgaWYgYSBjcm9zcy1vcmlnaW4gYDxpZnJhbWU+YCBzaG91bGQgYmUgYWxsb3dlZCB0byBpbnZva2UgdGhlIFtQYXltZW50IFJlcXVlc3QgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGF5bWVudF9SZXF1ZXN0X0FQSSkuIn0se25hbWU6ImFsbG93cGF5bWVudHJlcXVlc3QiLGRlc2NyaXB0aW9uOidUaGlzIGF0dHJpYnV0ZSBpcyBjb25zaWRlcmVkIGEgbGVnYWN5IGF0dHJpYnV0ZSBhbmQgcmVkZWZpbmVkIGFzIGBhbGxvdz0icGF5bWVudCJgLid9LHtuYW1lOiJjc3AiLGRlc2NyaXB0aW9uOidBIFtDb250ZW50IFNlY3VyaXR5IFBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9DU1ApIGVuZm9yY2VkIGZvciB0aGUgZW1iZWRkZWQgcmVzb3VyY2UuIFNlZSBbYEhUTUxJRnJhbWVFbGVtZW50LmNzcGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSUZyYW1lRWxlbWVudC9jc3AgIlRoZSBjc3AgcHJvcGVydHkgb2YgdGhlIEhUTUxJRnJhbWVFbGVtZW50IGludGVyZmFjZSBzcGVjaWZpZXMgdGhlIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHRoYXQgYW4gZW1iZWRkZWQgZG9jdW1lbnQgbXVzdCBhZ3JlZSB0byBlbmZvcmNlIHVwb24gaXRzZWxmLiIpIGZvciBkZXRhaWxzLid9LHtuYW1lOiJpbXBvcnRhbmNlIixkZXNjcmlwdGlvbjpgVGhlIGRvd25sb2FkIHByaW9yaXR5IG9mIHRoZSByZXNvdXJjZSBpbiB0aGUgXGA8aWZyYW1lPlxgJ3MgXGBzcmNcYCBhdHRyaWJ1dGUuIEFsbG93ZWQgdmFsdWVzOgoKXGBhdXRvXGAgKGRlZmF1bHQpCgpObyBwcmVmZXJlbmNlLiBUaGUgYnJvd3NlciB1c2VzIGl0cyBvd24gaGV1cmlzdGljcyB0byBkZWNpZGUgdGhlIHByaW9yaXR5IG9mIHRoZSByZXNvdXJjZS4KClxgaGlnaFxgCgpUaGUgcmVzb3VyY2Ugc2hvdWxkIGJlIGRvd25sb2FkZWQgYmVmb3JlIG90aGVyIGxvd2VyLXByaW9yaXR5IHBhZ2UgcmVzb3VyY2VzLgoKXGBsb3dcYAoKVGhlIHJlc291cmNlIHNob3VsZCBiZSBkb3dubG9hZGVkIGFmdGVyIG90aGVyIGhpZ2hlci1wcmlvcml0eSBwYWdlIHJlc291cmNlcy5gfSx7bmFtZToicmVmZXJyZXJwb2xpY3kiLGRlc2NyaXB0aW9uOidJbmRpY2F0ZXMgd2hpY2ggW3JlZmVycmVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvcmVmZXJyZXIpIHRvIHNlbmQgd2hlbiBmZXRjaGluZyB0aGUgZnJhbWVcJ3MgcmVzb3VyY2U6XG5cbiogICBgbm8tcmVmZXJyZXJgOiBUaGUgW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQuXG4qICAgYG5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlYCAoZGVmYXVsdCk6IFRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciAiVGhlIFJlZmVyZXIgcmVxdWVzdCBoZWFkZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIHdlYiBwYWdlIGZyb20gd2hpY2ggYSBsaW5rIHRvIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIHBhZ2Ugd2FzIGZvbGxvd2VkLiBUaGUgUmVmZXJlciBoZWFkZXIgYWxsb3dzIHNlcnZlcnMgdG8gaWRlbnRpZnkgd2hlcmUgcGVvcGxlIGFyZSB2aXNpdGluZyB0aGVtIGZyb20gYW5kIG1heSB1c2UgdGhhdCBkYXRhIGZvciBhbmFseXRpY3MsIGxvZ2dpbmcsIG9yIG9wdGltaXplZCBjYWNoaW5nLCBmb3IgZXhhbXBsZS4iKSBoZWFkZXIgd2lsbCBub3QgYmUgc2VudCB0byBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L29yaWdpbiAib3JpZ2luOiBXZWIgY29udGVudFwncyBvcmlnaW4gaXMgZGVmaW5lZCBieSB0aGUgc2NoZW1lIChwcm90b2NvbCksIGhvc3QgKGRvbWFpbiksIGFuZCBwb3J0IG9mIHRoZSBVUkwgdXNlZCB0byBhY2Nlc3MgaXQuIFR3byBvYmplY3RzIGhhdmUgdGhlIHNhbWUgb3JpZ2luIG9ubHkgd2hlbiB0aGUgc2NoZW1lLCBob3N0LCBhbmQgcG9ydCBhbGwgbWF0Y2guIilzIHdpdGhvdXQgW1RMU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9UTFMgIlRMUzogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpLCBwcmV2aW91c2x5IGtub3duIGFzIFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wpLCBpcyBhIHByb3RvY29sIHVzZWQgYnkgYXBwbGljYXRpb25zIHRvIGNvbW11bmljYXRlIHNlY3VyZWx5IGFjcm9zcyBhIG5ldHdvcmssIHByZXZlbnRpbmcgdGFtcGVyaW5nIHdpdGggYW5kIGVhdmVzZHJvcHBpbmcgb24gZW1haWwsIHdlYiBicm93c2luZywgbWVzc2FnaW5nLCBhbmQgb3RoZXIgcHJvdG9jb2xzLiIpIChbSFRUUFNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvSFRUUFMgIkhUVFBTOiBIVFRQUyAoSFRUUCBTZWN1cmUpIGlzIGFuIGVuY3J5cHRlZCB2ZXJzaW9uIG9mIHRoZSBIVFRQIHByb3RvY29sLiBJdCB1c3VhbGx5IHVzZXMgU1NMIG9yIFRMUyB0byBlbmNyeXB0IGFsbCBjb21tdW5pY2F0aW9uIGJldHdlZW4gYSBjbGllbnQgYW5kIGEgc2VydmVyLiBUaGlzIHNlY3VyZSBjb25uZWN0aW9uIGFsbG93cyBjbGllbnRzIHRvIHNhZmVseSBleGNoYW5nZSBzZW5zaXRpdmUgZGF0YSB3aXRoIGEgc2VydmVyLCBmb3IgZXhhbXBsZSBmb3IgYmFua2luZyBhY3Rpdml0aWVzIG9yIG9ubGluZSBzaG9wcGluZy4iKSkuXG4qICAgYG9yaWdpbmA6IFRoZSBzZW50IHJlZmVycmVyIHdpbGwgYmUgbGltaXRlZCB0byB0aGUgb3JpZ2luIG9mIHRoZSByZWZlcnJpbmcgcGFnZTogaXRzIFtzY2hlbWVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQXJjaGl2ZS9Nb3ppbGxhL1VSSVNjaGVtZSksIFtob3N0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L2hvc3QgImhvc3Q6IEEgaG9zdCBpcyBhIGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIEludGVybmV0IChvciBhIGxvY2FsIG5ldHdvcmspLiBTb21lIGhvc3RzIGNhbGxlZCBzZXJ2ZXJzIG9mZmVyIGFkZGl0aW9uYWwgc2VydmljZXMgbGlrZSBzZXJ2aW5nIHdlYnBhZ2VzIG9yIHN0b3JpbmcgZmlsZXMgYW5kIGVtYWlscy4iKSwgYW5kIFtwb3J0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3BvcnQgInBvcnQ6IEZvciBhIGNvbXB1dGVyIGNvbm5lY3RlZCB0byBhIG5ldHdvcmsgd2l0aCBhbiBJUCBhZGRyZXNzLCBhIHBvcnQgaXMgYSBjb21tdW5pY2F0aW9uIGVuZHBvaW50LiBQb3J0cyBhcmUgZGVzaWduYXRlZCBieSBudW1iZXJzLCBhbmQgYmVsb3cgMTAyNCBlYWNoIHBvcnQgaXMgYXNzb2NpYXRlZCBieSBkZWZhdWx0IHdpdGggYSBzcGVjaWZpYyBwcm90b2NvbC4iKS5cbiogICBgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luYDogVGhlIHJlZmVycmVyIHNlbnQgdG8gb3RoZXIgb3JpZ2lucyB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIHNjaGVtZSwgdGhlIGhvc3QsIGFuZCB0aGUgcG9ydC4gTmF2aWdhdGlvbnMgb24gdGhlIHNhbWUgb3JpZ2luIHdpbGwgc3RpbGwgaW5jbHVkZSB0aGUgcGF0aC5cbiogICBgc2FtZS1vcmlnaW5gOiBBIHJlZmVycmVyIHdpbGwgYmUgc2VudCBmb3IgW3NhbWUgb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1NhbWUtb3JpZ2luX3BvbGljeSAic2FtZSBvcmlnaW46IFRoZSBzYW1lLW9yaWdpbiBwb2xpY3kgaXMgYSBjcml0aWNhbCBzZWN1cml0eSBtZWNoYW5pc20gdGhhdCByZXN0cmljdHMgaG93IGEgZG9jdW1lbnQgb3Igc2NyaXB0IGxvYWRlZCBmcm9tIG9uZSBvcmlnaW4gY2FuIGludGVyYWN0IHdpdGggYSByZXNvdXJjZSBmcm9tIGFub3RoZXIgb3JpZ2luLiIpLCBidXQgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzIHdpbGwgY29udGFpbiBubyByZWZlcnJlciBpbmZvcm1hdGlvbi5cbiogICBgc3RyaWN0LW9yaWdpbmA6IE9ubHkgc2VuZCB0aGUgb3JpZ2luIG9mIHRoZSBkb2N1bWVudCBhcyB0aGUgcmVmZXJyZXIgd2hlbiB0aGUgcHJvdG9jb2wgc2VjdXJpdHkgbGV2ZWwgc3RheXMgdGhlIHNhbWUgKEhUVFBT4oaSSFRUUFMpLCBidXQgZG9uXCd0IHNlbmQgaXQgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFPihpJIVFRQKS5cbiogICBgc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmA6IFNlbmQgYSBmdWxsIFVSTCB3aGVuIHBlcmZvcm1pbmcgYSBzYW1lLW9yaWdpbiByZXF1ZXN0LCBvbmx5IHNlbmQgdGhlIG9yaWdpbiB3aGVuIHRoZSBwcm90b2NvbCBzZWN1cml0eSBsZXZlbCBzdGF5cyB0aGUgc2FtZSAoSFRUUFPihpJIVFRQUyksIGFuZCBzZW5kIG5vIGhlYWRlciB0byBhIGxlc3Mgc2VjdXJlIGRlc3RpbmF0aW9uIChIVFRQU+KGkkhUVFApLlxuKiAgIGB1bnNhZmUtdXJsYDogVGhlIHJlZmVycmVyIHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luIF9hbmRfIHRoZSBwYXRoIChidXQgbm90IHRoZSBbZnJhZ21lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzL2hhc2gpLCBbcGFzc3dvcmRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzL3Bhc3N3b3JkKSwgb3IgW3VzZXJuYW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy91c2VybmFtZSkpLiAqKlRoaXMgdmFsdWUgaXMgdW5zYWZlKiosIGJlY2F1c2UgaXQgbGVha3Mgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaWZyYW1lIn1dfSx7bmFtZToiZW1iZWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBlbWJlZCBlbGVtZW50IHByb3ZpZGVzIGFuIGludGVncmF0aW9uIHBvaW50IGZvciBhbiBleHRlcm5hbCAodHlwaWNhbGx5IG5vbi1IVE1MKSBhcHBsaWNhdGlvbiBvciBpbnRlcmFjdGl2ZSBjb250ZW50LiJ9LHZvaWQ6ITAsYXR0cmlidXRlczpbe25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIFVSTMKgb2YgdGhlIHJlc291cmNlIGJlaW5nIGVtYmVkZGVkLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIE1JTUXCoHR5cGUgdG8gdXNlIHRvIHNlbGVjdCB0aGUgcGx1Zy1pbiB0byBpbnN0YW50aWF0ZS4ifX0se25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGlzcGxheWVkIHdpZHRoIG9mIHRoZSByZXNvdXJjZSwgaW4gW0NTUyBwaXhlbHNdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLyNweCkuIFRoaXMgbXVzdCBiZSBhbiBhYnNvbHV0ZSB2YWx1ZTsgcGVyY2VudGFnZXMgYXJlIF9ub3RfIGFsbG93ZWQuIn19LHtuYW1lOiJoZWlnaHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkaXNwbGF5ZWQgaGVpZ2h0IG9mIHRoZSByZXNvdXJjZSwgaW4gW0NTUyBwaXhlbHNdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLyNweCkuIFRoaXMgbXVzdCBiZSBhbiBhYnNvbHV0ZSB2YWx1ZTsgcGVyY2VudGFnZXMgYXJlIF9ub3RfIGFsbG93ZWQuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZW1iZWQifV19LHtuYW1lOiJvYmplY3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvYmplY3QgZWxlbWVudCBjYW4gcmVwcmVzZW50IGFuIGV4dGVybmFsIHJlc291cmNlLCB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRoZSByZXNvdXJjZSwgd2lsbCBlaXRoZXIgYmUgdHJlYXRlZCBhcyBhbiBpbWFnZSwgYXMgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgb3IgYXMgYW4gZXh0ZXJuYWwgcmVzb3VyY2UgdG8gYmUgcHJvY2Vzc2VkIGJ5IGEgcGx1Z2luLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJkYXRhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb3VyY2UgYXMgYSB2YWxpZCBVUkwuIEF0IGxlYXN0IG9uZSBvZiAqKmRhdGEqKiBhbmQgKip0eXBlKiogbXVzdCBiZSBkZWZpbmVkLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIFtjb250ZW50IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ29udGVudF90eXBlKSBvZiB0aGUgcmVzb3VyY2Ugc3BlY2lmaWVkIGJ5ICoqZGF0YSoqLiBBdCBsZWFzdCBvbmUgb2YgKipkYXRhKiogYW5kICoqdHlwZSoqIG11c3QgYmUgZGVmaW5lZC4ifX0se25hbWU6InR5cGVtdXN0bWF0Y2giLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyBpZiB0aGUgKip0eXBlKiogYXR0cmlidXRlIGFuZCB0aGUgYWN0dWFsIFtjb250ZW50IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ29udGVudF90eXBlKSBvZiB0aGUgcmVzb3VyY2UgbXVzdCBtYXRjaCB0byBiZSB1c2VkLiJ9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgb2YgdmFsaWQgYnJvd3NpbmcgY29udGV4dCAoSFRNTDUpLCBvciB0aGUgbmFtZSBvZiB0aGUgY29udHJvbCAoSFRNTCA0KS4ifX0se25hbWU6InVzZW1hcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBoYXNoLW5hbWUgcmVmZXJlbmNlIHRvIGEgW2A8bWFwPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tYXAgXCJUaGUgSFRNTCA8bWFwPiBlbGVtZW50IGlzIHVzZWQgd2l0aCA8YXJlYT4gZWxlbWVudHMgdG8gZGVmaW5lIGFuIGltYWdlIG1hcCAoYSBjbGlja2FibGUgbGluayBhcmVhKS5cIikgZWxlbWVudDsgdGhhdCBpcyBhICcjJyBmb2xsb3dlZCBieSB0aGUgdmFsdWUgb2YgYSBbYG5hbWVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWFwI2F0dHItbmFtZSkgb2YgYSBtYXAgZWxlbWVudC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQsIGlmIGFueSwgdGhhdCB0aGUgb2JqZWN0IGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgX2Zvcm0gb3duZXJfKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBJRCBvZiBhIFtgPGZvcm0+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0gIlRoZSBIVE1MIDxmb3JtPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkb2N1bWVudCBzZWN0aW9uIHRoYXQgY29udGFpbnMgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHN1Ym1pdHRpbmcgaW5mb3JtYXRpb24gdG8gYSB3ZWIgc2VydmVyLiIpIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuJ319LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHdpZHRoIG9mIHRoZSBkaXNwbGF5IHJlc291cmNlLCBpbiBbQ1NTIHBpeGVsc10oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMvI3B4KS4gLS0gKEFic29sdXRlIHZhbHVlcyBvbmx5LiBbTk8gcGVyY2VudGFnZXNdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCNkaW1lbnNpb24tYXR0cmlidXRlcykpIn19LHtuYW1lOiJoZWlnaHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZWlnaHQgb2YgdGhlIGRpc3BsYXllZCByZXNvdXJjZSwgaW4gW0NTUyBwaXhlbHNdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLyNweCkuIC0tIChBYnNvbHV0ZSB2YWx1ZXMgb25seS4gW05PIHBlcmNlbnRhZ2VzXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9lbWJlZGRlZC1jb250ZW50Lmh0bWwjZGltZW5zaW9uLWF0dHJpYnV0ZXMpKSJ9fSx7bmFtZToiYXJjaGl2ZSIsZGVzY3JpcHRpb246IkEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVVJJcyBmb3IgYXJjaGl2ZXMgb2YgcmVzb3VyY2VzIGZvciB0aGUgb2JqZWN0LiJ9LHtuYW1lOiJib3JkZXIiLGRlc2NyaXB0aW9uOiJUaGUgd2lkdGggb2YgYSBib3JkZXIgYXJvdW5kIHRoZSBjb250cm9sLCBpbiBwaXhlbHMuIn0se25hbWU6ImNsYXNzaWQiLGRlc2NyaXB0aW9uOiJUaGUgVVJJIG9mIHRoZSBvYmplY3QncyBpbXBsZW1lbnRhdGlvbi4gSXQgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCwgb3IgaW4gcGxhY2Ugb2YsIHRoZSAqKmRhdGEqKiBhdHRyaWJ1dGUuIn0se25hbWU6ImNvZGViYXNlIixkZXNjcmlwdGlvbjoiVGhlIGJhc2UgcGF0aCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgVVJJcyBzcGVjaWZpZWQgYnkgKipjbGFzc2lkKiosICoqZGF0YSoqLCBvciAqKmFyY2hpdmUqKi4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgdGhlIGJhc2UgVVJJIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LiJ9LHtuYW1lOiJjb2RldHlwZSIsZGVzY3JpcHRpb246IlRoZSBjb250ZW50IHR5cGUgb2YgdGhlIGRhdGEgc3BlY2lmaWVkIGJ5ICoqY2xhc3NpZCoqLiJ9LHtuYW1lOiJkZWNsYXJlIixkZXNjcmlwdGlvbjoiVGhlIHByZXNlbmNlIG9mIHRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgbWFrZXMgdGhpcyBlbGVtZW50IGEgZGVjbGFyYXRpb24gb25seS4gVGhlIG9iamVjdCBtdXN0IGJlIGluc3RhbnRpYXRlZCBieSBhIHN1YnNlcXVlbnQgYDxvYmplY3Q+YCBlbGVtZW50LiBJbiBIVE1MNSwgcmVwZWF0IHRoZSA8b2JqZWN0PiBlbGVtZW50IGNvbXBsZXRlbHkgZWFjaCB0aGF0IHRoYXQgdGhlIHJlc291cmNlIGlzIHJldXNlZC4ifSx7bmFtZToic3RhbmRieSIsZGVzY3JpcHRpb246IkEgbWVzc2FnZSB0aGF0IHRoZSBicm93c2VyIGNhbiBzaG93IHdoaWxlIGxvYWRpbmcgdGhlIG9iamVjdCdzIGltcGxlbWVudGF0aW9uIGFuZCBkYXRhLiJ9LHtuYW1lOiJ0YWJpbmRleCIsZGVzY3JpcHRpb246IlRoZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgdGFiYmluZyBuYXZpZ2F0aW9uIG9yZGVyIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29iamVjdCJ9XX0se25hbWU6InBhcmFtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcGFyYW0gZWxlbWVudCBkZWZpbmVzIHBhcmFtZXRlcnMgZm9yIHBsdWdpbnMgaW52b2tlZCBieSBvYmplY3QgZWxlbWVudHMuIEl0IGRvZXMgbm90IHJlcHJlc2VudCBhbnl0aGluZyBvbiBpdHMgb3duLiJ9LHZvaWQ6ITAsYXR0cmlidXRlczpbe25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6Ik5hbWUgb2YgdGhlIHBhcmFtZXRlci4ifX0se25hbWU6InZhbHVlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJTcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjonT25seSB1c2VkIGlmIHRoZSBgdmFsdWV0eXBlYCBpcyBzZXQgdG8gInJlZiIuIFNwZWNpZmllcyB0aGUgTUlNRSB0eXBlIG9mIHZhbHVlcyBmb3VuZCBhdCB0aGUgVVJJIHNwZWNpZmllZCBieSB2YWx1ZS4nfSx7bmFtZToidmFsdWV0eXBlIixkZXNjcmlwdGlvbjpgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBcYHZhbHVlXGAgYXR0cmlidXRlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgoKKiAgIGRhdGE6IERlZmF1bHQgdmFsdWUuIFRoZSB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhlIG9iamVjdCdzIGltcGxlbWVudGF0aW9uIGFzIGEgc3RyaW5nLgoqICAgcmVmOiBUaGUgdmFsdWUgaXMgYSBVUkkgdG8gYSByZXNvdXJjZSB3aGVyZSBydW4tdGltZSB2YWx1ZXMgYXJlIHN0b3JlZC4KKiAgIG9iamVjdDogQW4gSUQgb2YgYW5vdGhlciBbXGA8b2JqZWN0PlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2JqZWN0ICJUaGUgSFRNTCA8b2JqZWN0PiBlbGVtZW50IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgcmVzb3VyY2UsIHdoaWNoIGNhbiBiZSB0cmVhdGVkIGFzIGFuIGltYWdlLCBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBvciBhIHJlc291cmNlIHRvIGJlIGhhbmRsZWQgYnkgYSBwbHVnaW4uIikgaW4gdGhlIHNhbWUgZG9jdW1lbnQuYH1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9wYXJhbSJ9XX0se25hbWU6InZpZGVvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHZpZGVvIGVsZW1lbnQgaXMgdXNlZCBmb3IgcGxheWluZyB2aWRlb3Mgb3IgbW92aWVzLCBhbmQgYXVkaW8gZmlsZXMgd2l0aCBjYXB0aW9ucy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIn0se25hbWU6ImNyb3Nzb3JpZ2luIix2YWx1ZVNldDoieG8ifSx7bmFtZToicG9zdGVyIn0se25hbWU6InByZWxvYWQiLHZhbHVlU2V0OiJwbCJ9LHtuYW1lOiJhdXRvcGxheSIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0EgQm9vbGVhbiBhdHRyaWJ1dGU7IGlmIHNwZWNpZmllZCwgdGhlIHZpZGVvIGF1dG9tYXRpY2FsbHkgYmVnaW5zIHRvIHBsYXkgYmFjayBhcyBzb29uIGFzIGl0IGNhbiBkbyBzbyB3aXRob3V0IHN0b3BwaW5nIHRvIGZpbmlzaCBsb2FkaW5nIHRoZSBkYXRhLlxuKipOb3RlKio6IFNpdGVzIHRoYXQgYXV0b21hdGljYWxseSBwbGF5IGF1ZGlvIChvciB2aWRlbyB3aXRoIGFuIGF1ZGlvIHRyYWNrKSBjYW4gYmUgYW4gdW5wbGVhc2FudCBleHBlcmllbmNlIGZvciB1c2Vycywgc28gaXQgc2hvdWxkIGJlIGF2b2lkZWQgd2hlbiBwb3NzaWJsZS4gSWYgeW91IG11c3Qgb2ZmZXIgYXV0b3BsYXkgZnVuY3Rpb25hbGl0eSwgeW91IHNob3VsZCBtYWtlIGl0IG9wdC1pbiAocmVxdWlyaW5nIGEgdXNlciB0byBzcGVjaWZpY2FsbHkgZW5hYmxlIGl0KS4gSG93ZXZlciwgdGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gY3JlYXRpbmcgbWVkaWEgZWxlbWVudHMgd2hvc2Ugc291cmNlIHdpbGwgYmUgc2V0IGF0IGEgbGF0ZXIgdGltZSwgdW5kZXIgdXNlciBjb250cm9sLlxuXG5UbyBkaXNhYmxlIHZpZGVvIGF1dG9wbGF5LCBgYXV0b3BsYXk9ImZhbHNlImAgd2lsbCBub3Qgd29yazsgdGhlIHZpZGVvIHdpbGwgYXV0b3BsYXkgaWYgdGhlIGF0dHJpYnV0ZSBpcyB0aGVyZSBpbiB0aGUgYDx2aWRlbz5gIHRhZyBhdCBhbGwuIFRvIHJlbW92ZSBhdXRvcGxheSB0aGUgYXR0cmlidXRlIG5lZWRzIHRvIGJlIHJlbW92ZWQgYWx0b2dldGhlci5cblxuSW4gc29tZSBicm93c2VycyAoZS5nLiBDaHJvbWUgNzAuMCkgYXV0b3BsYXkgaXMgbm90IHdvcmtpbmcgaWYgbm8gYG11dGVkYCBhdHRyaWJ1dGUgaXMgcHJlc2VudC4nfX0se25hbWU6Im1lZGlhZ3JvdXAifSx7bmFtZToibG9vcCIsdmFsdWVTZXQ6InYifSx7bmFtZToibXV0ZWQiLHZhbHVlU2V0OiJ2In0se25hbWU6ImNvbnRyb2xzIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJ3aWR0aCJ9LHtuYW1lOiJoZWlnaHQifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3ZpZGVvIn1dfSx7bmFtZToiYXVkaW8iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGF1ZGlvIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNvdW5kIG9yIGF1ZGlvIHN0cmVhbS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGUgVVJMIG9mIHRoZSBhdWRpbyB0byBlbWJlZC4gVGhpcyBpcyBzdWJqZWN0IHRvIFtIVFRQIGFjY2VzcyBjb250cm9sc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9IVFRQX2FjY2Vzc19jb250cm9sKS4gVGhpcyBpcyBvcHRpb25hbDsgeW91IG1heSBpbnN0ZWFkIHVzZSB0aGUgW2A8c291cmNlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zb3VyY2UgIlRoZSBIVE1MIDxzb3VyY2U+IGVsZW1lbnQgc3BlY2lmaWVzIG11bHRpcGxlIG1lZGlhIHJlc291cmNlcyBmb3IgdGhlIDxwaWN0dXJlPiwgdGhlIDxhdWRpbz4gZWxlbWVudCwgb3IgdGhlIDx2aWRlbz4gZWxlbWVudC4iKSBlbGVtZW50IHdpdGhpbiB0aGUgYXVkaW8gYmxvY2sgdG8gc3BlY2lmeSB0aGUgYXVkaW8gdG8gZW1iZWQuJ319LHtuYW1lOiJjcm9zc29yaWdpbiIsdmFsdWVTZXQ6InhvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBDT1JTIHRvIGZldGNoIHRoZSByZWxhdGVkIGltYWdlLiBbQ09SUy1lbmFibGVkIHJlc291cmNlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DT1JTX0VuYWJsZWRfSW1hZ2UpIGNhbiBiZSByZXVzZWQgaW4gdGhlIFtgPGNhbnZhcz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FudmFzICJVc2UgdGhlIEhUTUwgPGNhbnZhcz4gZWxlbWVudCB3aXRoIGVpdGhlciB0aGUgY2FudmFzIHNjcmlwdGluZyBBUEkgb3IgdGhlIFdlYkdMIEFQSSB0byBkcmF3IGdyYXBoaWNzIGFuZCBhbmltYXRpb25zLiIpIGVsZW1lbnQgd2l0aG91dCBiZWluZyBfdGFpbnRlZF8uIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmU6XG5cbmFub255bW91c1xuXG5TZW5kcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IHdpdGhvdXQgYSBjcmVkZW50aWFsLiBJbiBvdGhlciB3b3JkcywgaXQgc2VuZHMgdGhlIGBPcmlnaW46YCBIVFRQIGhlYWRlciB3aXRob3V0IGEgY29va2llLCBYLjUwOSBjZXJ0aWZpY2F0ZSwgb3IgcGVyZm9ybWluZyBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IGdpdmUgY3JlZGVudGlhbHMgdG8gdGhlIG9yaWdpbiBzaXRlIChieSBub3Qgc2V0dGluZyB0aGUgYEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjpgIEhUVFAgaGVhZGVyKSwgdGhlIGltYWdlIHdpbGwgYmUgX3RhaW50ZWRfLCBhbmQgaXRzIHVzYWdlIHJlc3RyaWN0ZWQuXG5cbnVzZS1jcmVkZW50aWFsc1xuXG5TZW5kcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IHdpdGggYSBjcmVkZW50aWFsLiBJbiBvdGhlciB3b3JkcywgaXQgc2VuZHMgdGhlIGBPcmlnaW46YCBIVFRQIGhlYWRlciB3aXRoIGEgY29va2llLCBhIGNlcnRpZmljYXRlLCBvciBwZXJmb3JtaW5nIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24uIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgZ2l2ZSBjcmVkZW50aWFscyB0byB0aGUgb3JpZ2luIHNpdGUgKHRocm91Z2ggYEFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzOmAgSFRUUCBoZWFkZXIpLCB0aGUgaW1hZ2Ugd2lsbCBiZSBfdGFpbnRlZF8gYW5kIGl0cyB1c2FnZSByZXN0cmljdGVkLlxuXG5XaGVuIG5vdCBwcmVzZW50LCB0aGUgcmVzb3VyY2UgaXMgZmV0Y2hlZCB3aXRob3V0IGEgQ09SUyByZXF1ZXN0IChpLmUuIHdpdGhvdXQgc2VuZGluZyB0aGUgYE9yaWdpbjpgIEhUVFAgaGVhZGVyKSwgcHJldmVudGluZyBpdHMgbm9uLXRhaW50ZWQgdXNlZCBpbiBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhbnZhcyAiVXNlIHRoZSBIVE1MIDxjYW52YXM+IGVsZW1lbnQgd2l0aCBlaXRoZXIgdGhlIGNhbnZhcyBzY3JpcHRpbmcgQVBJIG9yIHRoZSBXZWJHTCBBUEkgdG8gZHJhdyBncmFwaGljcyBhbmQgYW5pbWF0aW9ucy4iKSBlbGVtZW50cy4gSWYgaW52YWxpZCwgaXQgaXMgaGFuZGxlZCBhcyBpZiB0aGUgZW51bWVyYXRlZCBrZXl3b3JkICoqYW5vbnltb3VzKiogd2FzIHVzZWQuIFNlZSBbQ09SUyBzZXR0aW5ncyBhdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0hUTUwvQ09SU19zZXR0aW5nc19hdHRyaWJ1dGVzKSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4nfX0se25hbWU6InByZWxvYWQiLHZhbHVlU2V0OiJwbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgaGludCB0byB0aGUgYnJvd3NlciBhYm91dCB3aGF0IHRoZSBhdXRob3IgdGhpbmtzIHdpbGwgbGVhZCB0byB0aGUgYmVzdCB1c2VyIGV4cGVyaWVuY2UuIEl0IG1heSBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGBub25lYDogSW5kaWNhdGVzIHRoYXQgdGhlIGF1ZGlvIHNob3VsZCBub3QgYmUgcHJlbG9hZGVkLlxuKiAgIGBtZXRhZGF0YWA6IEluZGljYXRlcyB0aGF0IG9ubHkgYXVkaW8gbWV0YWRhdGEgKGUuZy4gbGVuZ3RoKSBpcyBmZXRjaGVkLlxuKiAgIGBhdXRvYDogSW5kaWNhdGVzIHRoYXQgdGhlIHdob2xlIGF1ZGlvIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQsIGV2ZW4gaWYgdGhlIHVzZXIgaXMgbm90IGV4cGVjdGVkIHRvIHVzZSBpdC5cbiogICBfZW1wdHkgc3RyaW5nXzogQSBzeW5vbnltIG9mIHRoZSBgYXV0b2AgdmFsdWUuXG5cbklmIG5vdCBzZXQsIGBwcmVsb2FkYCdzIGRlZmF1bHQgdmFsdWUgaXMgYnJvd3Nlci1kZWZpbmVkIChpLmUuIGVhY2ggYnJvd3NlciBtYXkgaGF2ZSBpdHMgb3duIGRlZmF1bHQgdmFsdWUpLiBUaGUgc3BlYyBhZHZpc2VzIGl0IHRvIGJlIHNldCB0byBgbWV0YWRhdGFgLlxuXG4qKlVzYWdlIG5vdGVzOioqXG5cbiogICBUaGUgYGF1dG9wbGF5YCBhdHRyaWJ1dGUgaGFzIHByZWNlZGVuY2Ugb3ZlcsKgYHByZWxvYWRgLiBJZiBgYXV0b3BsYXlgIGlzIHNwZWNpZmllZCwgdGhlIGJyb3dzZXIgd291bGQgb2J2aW91c2x5IG5lZWQgdG8gc3RhcnQgZG93bmxvYWRpbmcgdGhlIGF1ZGlvIGZvciBwbGF5YmFjay5cbiogICBUaGUgYnJvd3NlciBpcyBub3QgZm9yY2VkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uIHRvIGZvbGxvdyB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGU7IGl0IGlzIGEgbWVyZSBoaW50LiJ9fSx7bmFtZToiYXV0b3BsYXkiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOmBBIEJvb2xlYW4gYXR0cmlidXRlOsKgaWYgc3BlY2lmaWVkLCB0aGUgYXVkaW8gd2lsbCBhdXRvbWF0aWNhbGx5IGJlZ2luIHBsYXliYWNrIGFzIHNvb24gYXMgaXQgY2FuIGRvIHNvLCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBlbnRpcmUgYXVkaW8gZmlsZSB0byBmaW5pc2ggZG93bmxvYWRpbmcuCgoqKk5vdGUqKjogU2l0ZXMgdGhhdCBhdXRvbWF0aWNhbGx5IHBsYXkgYXVkaW8gKG9yIHZpZGVvcyB3aXRoIGFuIGF1ZGlvIHRyYWNrKSBjYW4gYmUgYW4gdW5wbGVhc2FudCBleHBlcmllbmNlIGZvciB1c2Vycywgc28gc2hvdWxkIGJlIGF2b2lkZWQgd2hlbiBwb3NzaWJsZS4gSWYgeW91IG11c3Qgb2ZmZXIgYXV0b3BsYXkgZnVuY3Rpb25hbGl0eSwgeW91IHNob3VsZCBtYWtlIGl0IG9wdC1pbiAocmVxdWlyaW5nIGEgdXNlciB0byBzcGVjaWZpY2FsbHkgZW5hYmxlIGl0KS4gSG93ZXZlciwgdGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gY3JlYXRpbmcgbWVkaWEgZWxlbWVudHMgd2hvc2Ugc291cmNlIHdpbGwgYmUgc2V0IGF0IGEgbGF0ZXIgdGltZSwgdW5kZXIgdXNlciBjb250cm9sLmB9fSx7bmFtZToibWVkaWFncm91cCJ9LHtuYW1lOiJsb29wIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZTrCoGlmIHNwZWNpZmllZCwgdGhlIGF1ZGlvIHBsYXllciB3aWxswqBhdXRvbWF0aWNhbGx5IHNlZWsgYmFjayB0byB0aGUgc3RhcnTCoHVwb24gcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgYXVkaW8uIn19LHtuYW1lOiJtdXRlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYXVkaW8gd2lsbCBiZSBpbml0aWFsbHkgc2lsZW5jZWQuIEl0cyBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuIn19LHtuYW1lOiJjb250cm9scyIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklmIHRoaXMgYXR0cmlidXRlIGlzIHByZXNlbnQsIHRoZSBicm93c2VyIHdpbGwgb2ZmZXIgY29udHJvbHMgdG8gYWxsb3cgdGhlIHVzZXIgdG8gY29udHJvbCBhdWRpbyBwbGF5YmFjaywgaW5jbHVkaW5nIHZvbHVtZSwgc2Vla2luZywgYW5kIHBhdXNlL3Jlc3VtZSBwbGF5YmFjay4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hdWRpbyJ9XX0se25hbWU6InNvdXJjZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNvdXJjZSBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIHNwZWNpZnkgbXVsdGlwbGUgYWx0ZXJuYXRpdmUgbWVkaWEgcmVzb3VyY2VzIGZvciBtZWRpYSBlbGVtZW50cy4gSXQgZG9lcyBub3QgcmVwcmVzZW50IGFueXRoaW5nIG9uIGl0cyBvd24uIn0sdm9pZDohMCxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidSZXF1aXJlZCBmb3IgW2A8YXVkaW8+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2F1ZGlvICJUaGUgSFRNTCA8YXVkaW8+IGVsZW1lbnQgaXMgdXNlZCB0byBlbWJlZCBzb3VuZCBjb250ZW50IGluIGRvY3VtZW50cy4gSXQgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgYXVkaW8gc291cmNlcywgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIHNyYyBhdHRyaWJ1dGUgb3IgdGhlIDxzb3VyY2U+IGVsZW1lbnQ6wqB0aGUgYnJvd3NlciB3aWxsIGNob29zZSB0aGUgbW9zdCBzdWl0YWJsZSBvbmUuIEl0IGNhbiBhbHNvIGJlIHRoZSBkZXN0aW5hdGlvbiBmb3Igc3RyZWFtZWQgbWVkaWEsIHVzaW5nIGEgTWVkaWFTdHJlYW0uIikgYW5kIFtgPHZpZGVvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC92aWRlbyAiVGhlIEhUTUwgVmlkZW8gZWxlbWVudCAoPHZpZGVvPikgZW1iZWRzIGEgbWVkaWEgcGxheWVyIHdoaWNoIHN1cHBvcnRzIHZpZGVvIHBsYXliYWNrIGludG8gdGhlIGRvY3VtZW50LiIpLCBhZGRyZXNzIG9mIHRoZSBtZWRpYSByZXNvdXJjZS4gVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzIGlnbm9yZWQgd2hlbiB0aGUgYDxzb3VyY2U+YCBlbGVtZW50IGlzIHBsYWNlZCBpbnNpZGUgYSBbYDxwaWN0dXJlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9waWN0dXJlICJUaGUgSFRNTCA8cGljdHVyZT4gZWxlbWVudCBjb250YWlucyB6ZXJvIG9yIG1vcmUgPHNvdXJjZT4gZWxlbWVudHMgYW5kIG9uZSA8aW1nPiBlbGVtZW50IHRvIHByb3ZpZGUgdmVyc2lvbnMgb2YgYW4gaW1hZ2UgZm9yIGRpZmZlcmVudCBkaXNwbGF5L2RldmljZSBzY2VuYXJpb3MuIikgZWxlbWVudC4nfX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBNSU1FLXR5cGUgb2YgdGhlIHJlc291cmNlLCBvcHRpb25hbGx5IHdpdGggYSBgY29kZWNzYCBwYXJhbWV0ZXIuIFNlZSBbUkZDIDQyODFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MjgxKSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHNwZWNpZnkgY29kZWNzLiJ9fSx7bmFtZToic2l6ZXMiLGRlc2NyaXB0aW9uOidJcyBhIGxpc3Qgb2Ygc291cmNlIHNpemVzIHRoYXQgZGVzY3JpYmVzIHRoZSBmaW5hbCByZW5kZXJlZCB3aWR0aCBvZiB0aGUgaW1hZ2UgcmVwcmVzZW50ZWQgYnkgdGhlIHNvdXJjZS4gRWFjaCBzb3VyY2Ugc2l6ZSBjb25zaXN0cyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIGNvbmRpdGlvbi1sZW5ndGggcGFpcnMuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCBieSB0aGUgYnJvd3NlciB0byBkZXRlcm1pbmUsIGJlZm9yZSBsYXlpbmcgdGhlIHBhZ2Ugb3V0LCB3aGljaCBpbWFnZSBkZWZpbmVkIGluIFtgc3Jjc2V0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NvdXJjZSNhdHRyLXNyY3NldCkgdG8gdXNlLiAgXG5UaGUgYHNpemVzYCBhdHRyaWJ1dGUgaGFzIGFuIGVmZmVjdCBvbmx5IHdoZW4gdGhlIFtgPHNvdXJjZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlICJUaGUgSFRNTCA8c291cmNlPiBlbGVtZW50IHNwZWNpZmllcyBtdWx0aXBsZSBtZWRpYSByZXNvdXJjZXMgZm9yIHRoZSA8cGljdHVyZT4sIHRoZSA8YXVkaW8+IGVsZW1lbnQsIG9yIHRoZSA8dmlkZW8+IGVsZW1lbnQuIikgZWxlbWVudCBpcyB0aGUgZGlyZWN0IGNoaWxkIG9mIGEgW2A8cGljdHVyZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcGljdHVyZSAiVGhlIEhUTUwgPHBpY3R1cmU+IGVsZW1lbnQgY29udGFpbnMgemVybyBvciBtb3JlIDxzb3VyY2U+IGVsZW1lbnRzIGFuZCBvbmUgPGltZz4gZWxlbWVudCB0byBwcm92aWRlIHZlcnNpb25zIG9mIGFuIGltYWdlIGZvciBkaWZmZXJlbnQgZGlzcGxheS9kZXZpY2Ugc2NlbmFyaW9zLiIpIGVsZW1lbnQuJ30se25hbWU6InNyY3NldCIsZGVzY3JpcHRpb246IkEgbGlzdCBvZiBvbmUgb3IgbW9yZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMgaW5kaWNhdGluZyBhIHNldCBvZiBwb3NzaWJsZSBpbWFnZXMgcmVwcmVzZW50ZWQgYnkgdGhlIHNvdXJjZSBmb3IgdGhlIGJyb3dzZXIgdG8gdXNlLiBFYWNoIHN0cmluZyBpcyBjb21wb3NlZCBvZjpcblxuMS4gIG9uZSBVUkwgdG8gYW4gaW1hZ2UsXG4yLiAgYSB3aWR0aCBkZXNjcmlwdG9yLCB0aGF0IGlzIGEgcG9zaXRpdmUgaW50ZWdlciBkaXJlY3RseSBmb2xsb3dlZCBieSBgJ3cnYC4gVGhlIGRlZmF1bHQgdmFsdWUsIGlmIG1pc3NpbmcsIGlzIHRoZSBpbmZpbml0eS5cbjMuICBhIHBpeGVsIGRlbnNpdHkgZGVzY3JpcHRvciwgdGhhdCBpcyBhIHBvc2l0aXZlIGZsb2F0aW5nIG51bWJlciBkaXJlY3RseSBmb2xsb3dlZCBieSBgJ3gnYC4gVGhlIGRlZmF1bHQgdmFsdWUsIGlmIG1pc3NpbmcsIGlzIGAxeGAuXG5cbkVhY2ggc3RyaW5nIGluIHRoZSBsaXN0IG11c3QgaGF2ZSBhdCBsZWFzdCBhIHdpZHRoIGRlc2NyaXB0b3Igb3IgYSBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IgdG8gYmUgdmFsaWQuIEFtb25nIHRoZSBsaXN0LCB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIHN0cmluZyBjb250YWluaW5nIHRoZSBzYW1lIHR1cGxlIG9mIHdpZHRoIGRlc2NyaXB0b3IgYW5kIHBpeGVsIGRlbnNpdHkgZGVzY3JpcHRvci4gIFxuVGhlIGJyb3dzZXIgY2hvb3NlcyB0aGUgbW9zdCBhZGVxdWF0ZSBpbWFnZSB0byBkaXNwbGF5IGF0IGEgZ2l2ZW4gcG9pbnQgb2YgdGltZS4gIFxuVGhlIGBzcmNzZXRgIGF0dHJpYnV0ZSBoYXMgYW4gZWZmZWN0IG9ubHkgd2hlbiB0aGUgW2A8c291cmNlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zb3VyY2UgXCJUaGUgSFRNTCA8c291cmNlPiBlbGVtZW50IHNwZWNpZmllcyBtdWx0aXBsZSBtZWRpYSByZXNvdXJjZXMgZm9yIHRoZSA8cGljdHVyZT4sIHRoZSA8YXVkaW8+IGVsZW1lbnQsIG9yIHRoZSA8dmlkZW8+IGVsZW1lbnQuXCIpIGVsZW1lbnQgaXMgdGhlIGRpcmVjdCBjaGlsZCBvZiBhIFtgPHBpY3R1cmU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUgXCJUaGUgSFRNTCA8cGljdHVyZT4gZWxlbWVudCBjb250YWlucyB6ZXJvIG9yIG1vcmUgPHNvdXJjZT4gZWxlbWVudHMgYW5kIG9uZSA8aW1nPiBlbGVtZW50IHRvIHByb3ZpZGUgdmVyc2lvbnMgb2YgYW4gaW1hZ2UgZm9yIGRpZmZlcmVudCBkaXNwbGF5L2RldmljZSBzY2VuYXJpb3MuXCIpIGVsZW1lbnQuIn0se25hbWU6Im1lZGlhIixkZXNjcmlwdGlvbjonW01lZGlhIHF1ZXJ5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9NZWRpYV9xdWVyaWVzKSBvZiB0aGUgcmVzb3VyY2VcJ3MgaW50ZW5kZWQgbWVkaWE7IHRoaXMgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBhIFtgPHBpY3R1cmU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUgIlRoZSBIVE1MIDxwaWN0dXJlPiBlbGVtZW50IGNvbnRhaW5zIHplcm8gb3IgbW9yZSA8c291cmNlPiBlbGVtZW50cyBhbmQgb25lIDxpbWc+IGVsZW1lbnQgdG8gcHJvdmlkZSB2ZXJzaW9ucyBvZiBhbiBpbWFnZSBmb3IgZGlmZmVyZW50IGRpc3BsYXkvZGV2aWNlIHNjZW5hcmlvcy4iKSBlbGVtZW50Lid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlIn1dfSx7bmFtZToidHJhY2siLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0cmFjayBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIHNwZWNpZnkgZXhwbGljaXQgZXh0ZXJuYWwgdGltZWQgdGV4dCB0cmFja3MgZm9yIG1lZGlhIGVsZW1lbnRzLiBJdCBkb2VzIG5vdCByZXByZXNlbnQgYW55dGhpbmcgb24gaXRzIG93bi4ifSx2b2lkOiEwLGF0dHJpYnV0ZXM6W3tuYW1lOiJkZWZhdWx0Iix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIHRyYWNrIHNob3VsZCBiZSBlbmFibGVkIHVubGVzcyB0aGUgdXNlcidzIHByZWZlcmVuY2VzIGluZGljYXRlIHRoYXQgYW5vdGhlciB0cmFjayBpcyBtb3JlIGFwcHJvcHJpYXRlLiBUaGlzIG1heSBvbmx5IGJlIHVzZWQgb24gb25lIGB0cmFja2AgZWxlbWVudCBwZXIgbWVkaWEgZWxlbWVudC4ifX0se25hbWU6ImtpbmQiLHZhbHVlU2V0OiJ0ayIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSG93IHRoZSB0ZXh0IHRyYWNrIGlzIG1lYW50IHRvIGJlIHVzZWQuIElmIG9taXR0ZWQgdGhlIGRlZmF1bHQga2luZCBpcyBgc3VidGl0bGVzYC4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCwgaXQgd2lsbCB1c2UgdGhlIGBzdWJ0aXRsZXNgLiBJZiB0aGUgYXR0cmlidXRlIGNvbnRhaW5zIGFuIGludmFsaWQgdmFsdWUsIGl0IHdpbGwgdXNlIGBtZXRhZGF0YWAuIChWZXJzaW9ucyBvZiBDaHJvbWUgZWFybGllciB0aGFuIDUyIHRyZWF0ZWQgYW4gaW52YWxpZCB2YWx1ZSBhcyBgc3VidGl0bGVzYC4pwqBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGFyZSBhbGxvd2VkOlxuXG4qICAgYHN1YnRpdGxlc2BcbiAgICAqICAgU3VidGl0bGVzIHByb3ZpZGUgdHJhbnNsYXRpb24gb2YgY29udGVudCB0aGF0IGNhbm5vdCBiZSB1bmRlcnN0b29kIGJ5IHRoZSB2aWV3ZXIuIEZvciBleGFtcGxlIGRpYWxvZ3VlIG9yIHRleHQgdGhhdCBpcyBub3QgRW5nbGlzaCBpbiBhbiBFbmdsaXNoIGxhbmd1YWdlIGZpbG0uXG4gICAgKiAgIFN1YnRpdGxlcyBtYXkgY29udGFpbiBhZGRpdGlvbmFsIGNvbnRlbnQsIHVzdWFsbHkgZXh0cmEgYmFja2dyb3VuZCBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUgdGhlIHRleHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgU3RhciBXYXJzIGZpbG1zLCBvciB0aGUgZGF0ZSwgdGltZSwgYW5kIGxvY2F0aW9uIG9mIGEgc2NlbmUuXG4qICAgYGNhcHRpb25zYFxuICAgICogICBDbG9zZWQgY2FwdGlvbnMgcHJvdmlkZSBhIHRyYW5zY3JpcHRpb24gYW5kIHBvc3NpYmx5IGEgdHJhbnNsYXRpb24gb2YgYXVkaW8uXG4gICAgKiAgIEl0IG1heSBpbmNsdWRlIGltcG9ydGFudCBub24tdmVyYmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgbXVzaWMgY3VlcyBvciBzb3VuZCBlZmZlY3RzLiBJdCBtYXkgaW5kaWNhdGUgdGhlIGN1ZSdzIHNvdXJjZSAoZS5nLiBtdXNpYywgdGV4dCwgY2hhcmFjdGVyKS5cbiAgICAqICAgU3VpdGFibGUgZm9yIHVzZXJzIHdobyBhcmUgZGVhZiBvciB3aGVuIHRoZSBzb3VuZCBpcyBtdXRlZC5cbiogICBgZGVzY3JpcHRpb25zYFxuICAgICogICBUZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSB2aWRlbyBjb250ZW50LlxuICAgICogICBTdWl0YWJsZSBmb3IgdXNlcnMgd2hvIGFyZSBibGluZCBvciB3aGVyZSB0aGUgdmlkZW8gY2Fubm90IGJlIHNlZW4uXG4qICAgYGNoYXB0ZXJzYFxuICAgICogICBDaGFwdGVyIHRpdGxlcyBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhlIG1lZGlhIHJlc291cmNlLlxuKiAgIGBtZXRhZGF0YWBcbiAgICAqICAgVHJhY2tzIHVzZWQgYnkgc2NyaXB0cy4gTm90IHZpc2libGUgdG8gdGhlIHVzZXIuIn19LHtuYW1lOiJsYWJlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSB1c2VyLXJlYWRhYmxlIHRpdGxlIG9mIHRoZSB0ZXh0IHRyYWNrIHdoaWNoIGlzIHVzZWQgYnkgdGhlIGJyb3dzZXIgd2hlbiBsaXN0aW5nIGF2YWlsYWJsZSB0ZXh0IHRyYWNrcy4ifX0se25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQWRkcmVzcyBvZiB0aGUgdHJhY2sgKGAudnR0YCBmaWxlKS4gTXVzdCBiZSBhIHZhbGlkIFVSTC4gVGhpcyBhdHRyaWJ1dGUgbXVzdCBiZSBzcGVjaWZpZWQgYW5kIGl0cyBVUkwgdmFsdWUgbXVzdCBoYXZlIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgZG9jdW1lbnQg4oCUIHVubGVzcyB0aGUgW2A8YXVkaW8+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2F1ZGlvICJUaGUgSFRNTCA8YXVkaW8+IGVsZW1lbnQgaXMgdXNlZCB0byBlbWJlZCBzb3VuZCBjb250ZW50IGluIGRvY3VtZW50cy4gSXQgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgYXVkaW8gc291cmNlcywgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIHNyYyBhdHRyaWJ1dGUgb3IgdGhlIDxzb3VyY2U+IGVsZW1lbnQ6wqB0aGUgYnJvd3NlciB3aWxsIGNob29zZSB0aGUgbW9zdCBzdWl0YWJsZSBvbmUuIEl0IGNhbiBhbHNvIGJlIHRoZSBkZXN0aW5hdGlvbiBmb3Igc3RyZWFtZWQgbWVkaWEsIHVzaW5nIGEgTWVkaWFTdHJlYW0uIikgb3IgW2A8dmlkZW8+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3ZpZGVvICJUaGUgSFRNTCBWaWRlbyBlbGVtZW50ICg8dmlkZW8+KSBlbWJlZHMgYSBtZWRpYSBwbGF5ZXIgd2hpY2ggc3VwcG9ydHMgdmlkZW8gcGxheWJhY2sgaW50byB0aGUgZG9jdW1lbnQuIikgcGFyZW50IGVsZW1lbnQgb2YgdGhlIGB0cmFja2AgZWxlbWVudCBoYXMgYSBbYGNyb3Nzb3JpZ2luYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGF0dHJpYnV0ZS4nfX0se25hbWU6InNyY2xhbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6Ikxhbmd1YWdlIG9mIHRoZSB0cmFjayB0ZXh0IGRhdGEuIEl0IG11c3QgYmUgYSB2YWxpZCBbQkNQIDQ3XShodHRwczovL3IxMmEuZ2l0aHViLmlvL2FwcC1zdWJ0YWdzLykgbGFuZ3VhZ2UgdGFnLiBJZiB0aGUgYGtpbmRgIGF0dHJpYnV0ZSBpcyBzZXQgdG/CoGBzdWJ0aXRsZXMsYCB0aGVuIGBzcmNsYW5nYCBtdXN0IGJlIGRlZmluZWQuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdHJhY2sifV19LHtuYW1lOiJtYXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtYXAgZWxlbWVudCwgaW4gY29uanVuY3Rpb24gd2l0aCBhbiBpbWcgZWxlbWVudCBhbmQgYW55IGFyZWEgZWxlbWVudCBkZXNjZW5kYW50cywgZGVmaW5lcyBhbiBpbWFnZSBtYXAuIFRoZSBlbGVtZW50IHJlcHJlc2VudHMgaXRzIGNoaWxkcmVuLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmFtZSBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIG1hcCBhIG5hbWUgc28gdGhhdCBpdCBjYW4gYmUgcmVmZXJlbmNlZC4gVGhlIGF0dHJpYnV0ZSBtdXN0IGJlIHByZXNlbnQgYW5kIG11c3QgaGF2ZSBhIG5vbi1lbXB0eSB2YWx1ZSB3aXRoIG5vIHNwYWNlIGNoYXJhY3RlcnMuIFRoZSB2YWx1ZSBvZiB0aGUgbmFtZSBhdHRyaWJ1dGUgbXVzdCBub3QgYmUgYSBjb21wYXRpYmlsaXR5LWNhc2VsZXNzIG1hdGNoIGZvciB0aGUgdmFsdWUgb2YgdGhlIG5hbWUgYXR0cmlidXRlIG9mIGFub3RoZXIgbWFwIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuIElmIHRoZSBpZCBhdHRyaWJ1dGUgaXMgYWxzbyBzcGVjaWZpZWQsIGJvdGggYXR0cmlidXRlcyBtdXN0IGhhdmUgdGhlIHNhbWUgdmFsdWUuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWFwIn1dfSx7bmFtZToiYXJlYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFyZWEgZWxlbWVudCByZXByZXNlbnRzIGVpdGhlciBhIGh5cGVybGluayB3aXRoIHNvbWUgdGV4dCBhbmQgYSBjb3JyZXNwb25kaW5nIGFyZWEgb24gYW4gaW1hZ2UgbWFwLCBvciBhIGRlYWQgYXJlYSBvbiBhbiBpbWFnZSBtYXAuIn0sdm9pZDohMCxhdHRyaWJ1dGVzOlt7bmFtZToiYWx0In0se25hbWU6ImNvb3JkcyJ9LHtuYW1lOiJzaGFwZSIsdmFsdWVTZXQ6InNoIn0se25hbWU6ImhyZWYifSx7bmFtZToidGFyZ2V0Iix2YWx1ZVNldDoidGFyZ2V0In0se25hbWU6ImRvd25sb2FkIn0se25hbWU6InBpbmcifSx7bmFtZToicmVsIn0se25hbWU6ImhyZWZsYW5nIn0se25hbWU6InR5cGUifSx7bmFtZToiYWNjZXNza2V5IixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIGEga2V5Ym9hcmQgbmF2aWdhdGlvbiBhY2NlbGVyYXRvciBmb3IgdGhlIGVsZW1lbnQuIFByZXNzaW5nIEFMVCBvciBhIHNpbWlsYXIga2V5IGluIGFzc29jaWF0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgc2VsZWN0cyB0aGUgZm9ybSBjb250cm9sIGNvcnJlbGF0ZWQgd2l0aCB0aGF0IGtleSBzZXF1ZW5jZS4gUGFnZSBkZXNpZ25lcnMgYXJlIGZvcmV3YXJuZWQgdG8gYXZvaWQga2V5IHNlcXVlbmNlcyBhbHJlYWR5IGJvdW5kIHRvIGJyb3dzZXJzLiBUaGlzIGF0dHJpYnV0ZSBpcyBnbG9iYWwgc2luY2UgSFRNTDUuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hcmVhIn1dfSx7bmFtZToidGFibGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0YWJsZSBlbGVtZW50IHJlcHJlc2VudHMgZGF0YSB3aXRoIG1vcmUgdGhhbiBvbmUgZGltZW5zaW9uLCBpbiB0aGUgZm9ybSBvZiBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJib3JkZXIifSx7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRlcyBob3cgdGhlIHRhYmxlIG11c3QgYmUgYWxpZ25lZCBpbnNpZGUgdGhlIGNvbnRhaW5pbmcgZG9jdW1lbnQuIEl0IG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgbGVmdDogdGhlIHRhYmxlIGlzIGRpc3BsYXllZCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBkb2N1bWVudDtcbiogICBjZW50ZXI6IHRoZSB0YWJsZSBpcyBkaXNwbGF5ZWQgaW4gdGhlIGNlbnRlciBvZiB0aGUgZG9jdW1lbnQ7XG4qICAgcmlnaHQ6IHRoZSB0YWJsZSBpcyBkaXNwbGF5ZWQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGRvY3VtZW50LlxuXG4qKlVzYWdlIE5vdGUqKlxuXG4qICAgKipEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlKiosIGFzIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFRoZSBbYDx0YWJsZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGFibGUgIlRoZSBIVE1MIDx0YWJsZT4gZWxlbWVudCByZXByZXNlbnRzIHRhYnVsYXIgZGF0YSDigJQgdGhhdCBpcywgaW5mb3JtYXRpb24gcHJlc2VudGVkIGluIGEgdHdvLWRpbWVuc2lvbmFsIHRhYmxlIGNvbXByaXNlZCBvZiByb3dzIGFuZCBjb2x1bW5zIG9mIGNlbGxzIGNvbnRhaW5pbmcgZGF0YS4iKSBlbGVtZW50IHNob3VsZCBiZSBzdHlsZWQgdXNpbmcgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpLiBTZXQgW2BtYXJnaW4tbGVmdGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4tbGVmdCAiVGhlIG1hcmdpbi1sZWZ0IENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgbGVmdCBzaWRlIG9mIGFuIGVsZW1lbnQuIEEgcG9zaXRpdmUgdmFsdWUgcGxhY2VzIGl0IGZhcnRoZXIgZnJvbSBpdHMgbmVpZ2hib3JzLCB3aGlsZSBhIG5lZ2F0aXZlIHZhbHVlIHBsYWNlcyBpdCBjbG9zZXIuIikgYW5kIFtgbWFyZ2luLXJpZ2h0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi1yaWdodCAiVGhlIG1hcmdpbi1yaWdodCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYW4gZWxlbWVudC4gQSBwb3NpdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgZmFydGhlciBmcm9tIGl0cyBuZWlnaGJvcnMsIHdoaWxlIGEgbmVnYXRpdmUgdmFsdWUgcGxhY2VzIGl0IGNsb3Nlci4iKSB0byBgYXV0b2Agb3IgW2BtYXJnaW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luICJUaGUgbWFyZ2luIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiBhbGwgZm91ciBzaWRlcyBvZiBhbiBlbGVtZW50LiBJdCBpcyBhIHNob3J0aGFuZCBmb3IgbWFyZ2luLXRvcCwgbWFyZ2luLXJpZ2h0LCBtYXJnaW4tYm90dG9tLCBhbmQgbWFyZ2luLWxlZnQuIikgdG8gYDAgYXV0b2AgdG8gYWNoaWV2ZSBhbiBlZmZlY3QgdGhhdCBpcyBzaW1pbGFyIHRvIHRoZSBhbGlnbiBhdHRyaWJ1dGUuXG4qICAgUHJpb3IgdG8gRmlyZWZveCA0LCBGaXJlZm94IGFsc28gc3VwcG9ydGVkIHRoZSBgbWlkZGxlYCwgYGFic21pZGRsZWAsIGFuZCBgYWJzY2VudGVyYCB2YWx1ZXMgYXMgc3lub255bXMgb2YgYGNlbnRlcmAsIGluIHF1aXJrcyBtb2RlIG9ubHkuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90YWJsZSJ9XX0se25hbWU6ImNhcHRpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBjYXB0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgdGl0bGUgb2YgdGhlIHRhYmxlIHRoYXQgaXMgaXRzIHBhcmVudCwgaWYgaXQgaGFzIGEgcGFyZW50IGFuZCB0aGF0IGlzIGEgdGFibGUgZWxlbWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOmBUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRlcyBob3cgdGhlIGNhcHRpb24gbXVzdCBiZSBhbGlnbmVkIHdpdGggcmVzcGVjdCB0byB0aGUgdGFibGUuIEl0IG1heSBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKClxgbGVmdFxgCgpUaGUgY2FwdGlvbiBpcyBkaXNwbGF5ZWQgdG8gdGhlIGxlZnQgb2YgdGhlIHRhYmxlLgoKXGB0b3BcYAoKVGhlIGNhcHRpb24gaXMgZGlzcGxheWVkIGFib3ZlIHRoZSB0YWJsZS4KClxgcmlnaHRcYAoKVGhlIGNhcHRpb24gaXMgZGlzcGxheWVkIHRvIHRoZSByaWdodCBvZiB0aGUgdGFibGUuCgpcYGJvdHRvbVxgCgpUaGUgY2FwdGlvbiBpcyBkaXNwbGF5ZWQgYmVsb3cgdGhlIHRhYmxlLgoKKipVc2FnZSBub3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUsIGFzIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFRoZSBbXGA8Y2FwdGlvbj5cYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhcHRpb24gIlRoZSBIVE1MIFRhYmxlIENhcHRpb24gZWxlbWVudCAoPGNhcHRpb24+KSBzcGVjaWZpZXMgdGhlIGNhcHRpb24gKG9yIHRpdGxlKSBvZiBhIHRhYmxlLCBhbmQgaWYgdXNlZCBpcyBhbHdheXMgdGhlIGZpcnN0IGNoaWxkIG9mIGEgPHRhYmxlPi4iKSBlbGVtZW50IHNob3VsZCBiZSBzdHlsZWQgdXNpbmcgdGhlIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKSBwcm9wZXJ0aWVzIFtcYGNhcHRpb24tc2lkZVxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY2FwdGlvbi1zaWRlICJUaGUgY2FwdGlvbi1zaWRlIENTUyBwcm9wZXJ0eSBwdXRzIHRoZSBjb250ZW50IG9mIGEgdGFibGUncyA8Y2FwdGlvbj4gb24gdGhlIHNwZWNpZmllZCBzaWRlLiBUaGUgdmFsdWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgd3JpdGluZy1tb2RlIG9mIHRoZSB0YWJsZS4iKSBhbmQgW1xgdGV4dC1hbGlnblxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikuYH1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYXB0aW9uIn1dfSx7bmFtZToiY29sZ3JvdXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBjb2xncm91cCBlbGVtZW50IHJlcHJlc2VudHMgYSBncm91cCBvZiBvbmUgb3IgbW9yZSBjb2x1bW5zIGluIHRoZSB0YWJsZSB0aGF0IGlzIGl0cyBwYXJlbnQsIGlmIGl0IGhhcyBhIHBhcmVudCBhbmQgdGhhdCBpcyBhIHRhYmxlIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6InNwYW4ifSx7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgZWFjaCBjb2x1bW4gY2VsbCBjb250ZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIGxlZnQgb2YgdGhlIGNlbGxcbiogICBgY2VudGVyYCwgY2VudGVyaW5nIHRoZSBjb250ZW50IGluIHRoZSBjZWxsXG4qICAgYHJpZ2h0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZWxsXG4qICAgYGp1c3RpZnlgLCBpbnNlcnRpbmcgc3BhY2VzIGludG8gdGhlIHRleHR1YWwgY29udGVudCBzbyB0aGF0IHRoZSBjb250ZW50IGlzIGp1c3RpZmllZCBpbiB0aGUgY2VsbFxuKiAgIGBjaGFyYCwgYWxpZ25pbmcgdGhlIHRleHR1YWwgY29udGVudCBvbiBhIHNwZWNpYWwgY2hhcmFjdGVyIHdpdGggYSBtaW5pbWFsIG9mZnNldCwgZGVmaW5lZCBieSB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sI2F0dHItY2hhcm9mZikgYXR0cmlidXRlcyBVbmltcGxlbWVudGVkIChzZWUgW2J1Z8KgMjIxMl0oaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMiAiY2hhcmFjdGVyIGFsaWdubWVudCBub3QgaW1wbGVtZW50ZWQgKGFsaWduPWNoYXIsIGNoYXJvZmY9LCB0ZXh0LWFsaWduOjxzdHJpbmc+KSIpKS5cblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldCwgdGhlIGBsZWZ0YCB2YWx1ZSBpcyBhc3N1bWVkLiBUaGUgZGVzY2VuZGFudCBbYDxjb2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCAiVGhlIEhUTUwgPGNvbD4gZWxlbWVudCBkZWZpbmVzIGEgY29sdW1uIHdpdGhpbiBhIHRhYmxlIGFuZCBpcyB1c2VkIGZvciBkZWZpbmluZyBjb21tb24gc2VtYW50aWNzIG9uIGFsbCBjb21tb24gY2VsbHMuIEl0IGlzIGdlbmVyYWxseSBmb3VuZCB3aXRoaW4gYSA8Y29sZ3JvdXA+IGVsZW1lbnQuIikgZWxlbWVudHMgbWF5IG92ZXJyaWRlIHRoaXMgdmFsdWUgdXNpbmcgdGhlaXIgb3duIFtgYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sI2F0dHItYWxpZ24pIGF0dHJpYnV0ZS5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzOlxuICAgICogICBEbyBub3QgdHJ5IHRvIHNldCB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGEgc2VsZWN0b3IgZ2l2aW5nIGEgW2A8Y29sZ3JvdXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwICJUaGUgSFRNTCA8Y29sZ3JvdXA+IGVsZW1lbnQgZGVmaW5lcyBhIGdyb3VwIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUuIikgZWxlbWVudC4gQmVjYXVzZSBbYDx0ZD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQgIlRoZSBIVE1MIDx0ZD4gZWxlbWVudCBkZWZpbmVzIGEgY2VsbCBvZiBhIHRhYmxlIHRoYXQgY29udGFpbnMgZGF0YS4gSXQgcGFydGljaXBhdGVzIGluIHRoZSB0YWJsZSBtb2RlbC4iKSBlbGVtZW50cyBhcmUgbm90IGRlc2NlbmRhbnQgb2YgdGhlIFtgPGNvbGdyb3VwPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2xncm91cCAiVGhlIEhUTUwgPGNvbGdyb3VwPiBlbGVtZW50IGRlZmluZXMgYSBncm91cCBvZiBjb2x1bW5zIHdpdGhpbiBhIHRhYmxlLiIpIGVsZW1lbnQsIHRoZXkgd29uXCd0IGluaGVyaXQgaXQuXG4gICAgKiAgIElmIHRoZSB0YWJsZSBkb2VzblwndCB1c2UgYSBbYGNvbHNwYW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jb2xzcGFuKSBhdHRyaWJ1dGUsIHVzZSBvbmUgYHRkOm50aC1jaGlsZChhbitiKWAgQ1NTIHNlbGVjdG9yIHBlciBjb2x1bW4sIHdoZXJlIGEgaXMgdGhlIHRvdGFsIG51bWJlciBvZiB0aGUgY29sdW1ucyBpbiB0aGUgdGFibGUgYW5kIGIgaXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgdGhpcyBjb2x1bW4gaW4gdGhlIHRhYmxlLiBPbmx5IGFmdGVyIHRoaXMgc2VsZWN0b3IgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBjYW4gYmUgdXNlZC5cbiAgICAqICAgSWYgdGhlIHRhYmxlIGRvZXMgdXNlIGEgW2Bjb2xzcGFuYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY29sc3BhbikgYXR0cmlidXRlLCB0aGUgZWZmZWN0IGNhbiBiZSBhY2hpZXZlZCBieSBjb21iaW5pbmcgYWRlcXVhdGUgQ1NTIGF0dHJpYnV0ZSBzZWxlY3RvcnMgbGlrZSBgW2NvbHNwYW49bl1gLCB0aG91Z2ggdGhpcyBpcyBub3QgdHJpdmlhbC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBpbiBDU1MzLCB5b3UgY2FuIHVzZSB0aGUgdmFsdWUgb2YgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2xncm91cCNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2xncm91cCJ9XX0se25hbWU6ImNvbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgYSBjb2wgZWxlbWVudCBoYXMgYSBwYXJlbnQgYW5kIHRoYXQgaXMgYSBjb2xncm91cCBlbGVtZW50IHRoYXQgaXRzZWxmIGhhcyBhIHBhcmVudCB0aGF0IGlzIGEgdGFibGUgZWxlbWVudCwgdGhlbiB0aGUgY29sIGVsZW1lbnQgcmVwcmVzZW50cyBvbmUgb3IgbW9yZSBjb2x1bW5zIGluIHRoZSBjb2x1bW4gZ3JvdXAgcmVwcmVzZW50ZWQgYnkgdGhhdCBjb2xncm91cC4ifSx2b2lkOiEwLGF0dHJpYnV0ZXM6W3tuYW1lOiJzcGFuIn0se25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY29sdW1uIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgW2BhbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2xncm91cCNhdHRyLWFsaWduKSBvZiB0aGUgW2A8Y29sZ3JvdXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwICJUaGUgSFRNTCA8Y29sZ3JvdXA+IGVsZW1lbnQgZGVmaW5lcyBhIGdyb3VwIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUuIikgZWxlbWVudCB0aGlzIGA8Y29sPmAgZWxlbWVudCBiZWxvbmdzIHRvby4gSWYgdGhlcmUgYXJlIG5vbmUsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzOlxuICAgICogICBEbyBub3QgdHJ5IHRvIHNldCB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGEgc2VsZWN0b3IgZ2l2aW5nIGEgW2A8Y29sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wgIlRoZSBIVE1MIDxjb2w+IGVsZW1lbnQgZGVmaW5lcyBhIGNvbHVtbiB3aXRoaW4gYSB0YWJsZSBhbmQgaXMgdXNlZCBmb3IgZGVmaW5pbmcgY29tbW9uIHNlbWFudGljcyBvbiBhbGwgY29tbW9uIGNlbGxzLiBJdCBpcyBnZW5lcmFsbHkgZm91bmQgd2l0aGluIGEgPGNvbGdyb3VwPiBlbGVtZW50LiIpIGVsZW1lbnQuIEJlY2F1c2UgW2A8dGQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkICJUaGUgSFRNTCA8dGQ+IGVsZW1lbnQgZGVmaW5lcyBhIGNlbGwgb2YgYSB0YWJsZSB0aGF0IGNvbnRhaW5zIGRhdGEuIEl0IHBhcnRpY2lwYXRlcyBpbiB0aGUgdGFibGUgbW9kZWwuIikgZWxlbWVudHMgYXJlIG5vdCBkZXNjZW5kYW50IG9mIHRoZSBbYDxjb2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCAiVGhlIEhUTUwgPGNvbD4gZWxlbWVudCBkZWZpbmVzIGEgY29sdW1uIHdpdGhpbiBhIHRhYmxlIGFuZCBpcyB1c2VkIGZvciBkZWZpbmluZyBjb21tb24gc2VtYW50aWNzIG9uIGFsbCBjb21tb24gY2VsbHMuIEl0IGlzIGdlbmVyYWxseSBmb3VuZCB3aXRoaW4gYSA8Y29sZ3JvdXA+IGVsZW1lbnQuIikgZWxlbWVudCwgdGhleSB3b25cJ3QgaW5oZXJpdCBpdC5cbiAgICAqICAgSWYgdGhlIHRhYmxlIGRvZXNuXCd0IHVzZSBhIFtgY29sc3BhbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNvbHNwYW4pIGF0dHJpYnV0ZSwgdXNlIHRoZSBgdGQ6bnRoLWNoaWxkKGFuK2IpYCBDU1Mgc2VsZWN0b3IuIFNldCBgYWAgdG8gemVybyBhbmQgYGJgIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uIGluIHRoZSB0YWJsZSwgZS5nLiBgdGQ6bnRoLWNoaWxkKDIpIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH1gIHRvIHJpZ2h0LWFsaWduIHRoZSBzZWNvbmQgY29sdW1uLlxuICAgICogICBJZiB0aGUgdGFibGUgZG9lcyB1c2UgYSBbYGNvbHNwYW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jb2xzcGFuKSBhdHRyaWJ1dGUsIHRoZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGNvbWJpbmluZyBhZGVxdWF0ZSBDU1MgYXR0cmlidXRlIHNlbGVjdG9ycyBsaWtlIGBbY29sc3Bhbj1uXWAsIHRob3VnaCB0aGlzIGlzIG5vdCB0cml2aWFsLlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wifV19LHtuYW1lOiJ0Ym9keSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRib2R5IGVsZW1lbnQgcmVwcmVzZW50cyBhIGJsb2NrIG9mIHJvd3MgdGhhdCBjb25zaXN0IG9mIGEgYm9keSBvZiBkYXRhIGZvciB0aGUgcGFyZW50IHRhYmxlIGVsZW1lbnQsIGlmIHRoZSB0Ym9keSBlbGVtZW50IGhhcyBhIHBhcmVudCBhbmQgaXQgaXMgYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgZWFjaCBjZWxsIGNvbnRlbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbFxuKiAgIGBjZW50ZXJgLCBjZW50ZXJpbmcgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiogICBgcmlnaHRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGxcbiogICBganVzdGlmeWAsIGluc2VydGluZyBzcGFjZXMgaW50byB0aGUgdGV4dHVhbCBjb250ZW50IHNvIHRoYXQgdGhlIGNvbnRlbnQgaXMganVzdGlmaWVkIGluIHRoZSBjZWxsXG4qICAgYGNoYXJgLCBhbGlnbmluZyB0aGUgdGV4dHVhbCBjb250ZW50IG9uIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIG1pbmltYWwgb2Zmc2V0LCBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGJvZHkjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rib2R5I2F0dHItY2hhcm9mZikgYXR0cmlidXRlcy5cblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldCwgdGhlIGBsZWZ0YCB2YWx1ZSBpcyBhc3N1bWVkLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSAobm90IHN1cHBvcnRlZCkgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIHVzZSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBvbiBpdC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBpbiBDU1MzLCB5b3UgY2FuIHVzZSB0aGUgdmFsdWUgb2YgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSJ9XX0se25hbWU6InRoZWFkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGhlYWQgZWxlbWVudCByZXByZXNlbnRzIHRoZSBibG9jayBvZiByb3dzIHRoYXQgY29uc2lzdCBvZiB0aGUgY29sdW1uIGxhYmVscyAoaGVhZGVycykgZm9yIHRoZSBwYXJlbnQgdGFibGUgZWxlbWVudCwgaWYgdGhlIHRoZWFkIGVsZW1lbnQgaGFzIGEgcGFyZW50IGFuZCBpdCBpcyBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBob3Jpem9udGFsIGFsaWdubWVudCBvZiBlYWNoIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aGVhZCNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGhlYWQjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgYGxlZnRgIHZhbHVlIGlzIGFzc3VtZWQuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIChub3Qgc3VwcG9ydGVkKSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLlxuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBsZWZ0YCwgYGNlbnRlcmAsIGByaWdodGAgb3IgYGp1c3RpZnlgIHZhbHVlcywgdXNlIHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGl0LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoZWFkI2F0dHItY2hhcikgYXMgdGhlIHZhbHVlIG9mIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgVW5pbXBsZW1lbnRlZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoZWFkIn1dfSx7bmFtZToidGZvb3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0Zm9vdCBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGJsb2NrIG9mIHJvd3MgdGhhdCBjb25zaXN0IG9mIHRoZSBjb2x1bW4gc3VtbWFyaWVzIChmb290ZXJzKSBmb3IgdGhlIHBhcmVudCB0YWJsZSBlbGVtZW50LCBpZiB0aGUgdGZvb3QgZWxlbWVudCBoYXMgYSBwYXJlbnQgYW5kIGl0IGlzIGEgdGFibGUuIn0sYXR0cmlidXRlczpbe25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY2VsbCBjb250ZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIGxlZnQgb2YgdGhlIGNlbGxcbiogICBgY2VudGVyYCwgY2VudGVyaW5nIHRoZSBjb250ZW50IGluIHRoZSBjZWxsXG4qICAgYHJpZ2h0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZWxsXG4qICAgYGp1c3RpZnlgLCBpbnNlcnRpbmcgc3BhY2VzIGludG8gdGhlIHRleHR1YWwgY29udGVudCBzbyB0aGF0IHRoZSBjb250ZW50IGlzIGp1c3RpZmllZCBpbiB0aGUgY2VsbFxuKiAgIGBjaGFyYCwgYWxpZ25pbmcgdGhlIHRleHR1YWwgY29udGVudCBvbiBhIHNwZWNpYWwgY2hhcmFjdGVyIHdpdGggYSBtaW5pbWFsIG9mZnNldCwgZGVmaW5lZCBieSB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rib2R5I2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzLCB1c2UgdGhlIENTUyBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgb24gaXQuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBjaGFyYCB2YWx1ZSwgaW4gQ1NTMywgeW91IGNhbiB1c2UgdGhlIHZhbHVlIG9mIHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGZvb3QjYXR0ci1jaGFyKSBhcyB0aGUgdmFsdWUgb2YgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBVbmltcGxlbWVudGVkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGZvb3QifV19LHtuYW1lOiJ0ciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHJvdyBvZiBjZWxscyBpbiBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J0EgW2BET01TdHJpbmdgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NU3RyaW5nICJET01TdHJpbmcgaXMgYSBVVEYtMTYgU3RyaW5nLiBBcyBKYXZhU2NyaXB0IGFscmVhZHkgdXNlcyBzdWNoIHN0cmluZ3MsIERPTVN0cmluZyBpcyBtYXBwZWQgZGlyZWN0bHkgdG8gYSBTdHJpbmcuIikgd2hpY2ggc3BlY2lmaWVzIGhvdyB0aGUgY2VsbFwncyBjb250ZXh0IHNob3VsZCBiZSBhbGlnbmVkIGhvcml6b250YWxseSB3aXRoaW4gdGhlIGNlbGxzIGluIHRoZSByb3c7IHRoaXMgaXMgc2hvcnRoYW5kIGZvciB1c2luZyBgYWxpZ25gIG9uIGV2ZXJ5IGNlbGwgaW4gdGhlIHJvdyBpbmRpdmlkdWFsbHkuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbmBsZWZ0YFxuXG5BbGlnbiB0aGUgY29udGVudCBvZiBlYWNoIGNlbGwgYXQgaXRzIGxlZnQgZWRnZS5cblxuYGNlbnRlcmBcblxuQ2VudGVyIHRoZSBjb250ZW50cyBvZiBlYWNoIGNlbGwgYmV0d2VlbiB0aGVpciBsZWZ0IGFuZCByaWdodCBlZGdlcy5cblxuYHJpZ2h0YFxuXG5BbGlnbiB0aGUgY29udGVudCBvZiBlYWNoIGNlbGwgYXQgaXRzIHJpZ2h0IGVkZ2UuXG5cbmBqdXN0aWZ5YFxuXG5XaWRlbiB3aGl0ZXNwYWNlcyB3aXRoaW4gdGhlIHRleHQgb2YgZWFjaCBjZWxsIHNvIHRoYXQgdGhlIHRleHQgZmlsbHMgdGhlIGZ1bGwgd2lkdGggb2YgZWFjaCBjZWxsIChmdWxsIGp1c3RpZmljYXRpb24pLlxuXG5gY2hhcmBcblxuQWxpZ24gZWFjaCBjZWxsIGluIHRoZSByb3cgb24gYSBzcGVjaWZpYyBjaGFyYWN0ZXIgKHN1Y2ggdGhhdCBlYWNoIHJvdyBpbiB0aGUgY29sdW1uIHRoYXQgaXMgY29uZmlndXJlZCB0aGlzIHdheSB3aWxsIGhvcml6b250YWxseSBhbGlnbiBpdHMgY2VsbHMgb24gdGhhdCBjaGFyYWN0ZXIpLiBUaGlzIHVzZXMgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ciNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdHIjYXR0ci1jaGFyb2ZmKSB0byBlc3RhYmxpc2ggdGhlIGFsaWdubWVudCBjaGFyYWN0ZXIgKHR5cGljYWxseSAiLiIgb3IgIiwiIHdoZW4gYWxpZ25pbmcgbnVtZXJpY2FsIGRhdGEpIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgZm9sbG93IHRoZSBhbGlnbm1lbnQgY2hhcmFjdGVyLiBUaGlzIGFsaWdubWVudCB0eXBlIHdhcyBuZXZlciB3aWRlbHkgc3VwcG9ydGVkLlxuXG5JZiBubyB2YWx1ZSBpcyBleHByZXNzbHkgc2V0IGZvciBgYWxpZ25gLCB0aGUgcGFyZW50IG5vZGVcJ3MgdmFsdWUgaXMgaW5oZXJpdGVkLlxuXG5JbnN0ZWFkIG9mIHVzaW5nIHRoZSBvYnNvbGV0ZSBgYWxpZ25gIGF0dHJpYnV0ZSwgeW91IHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0byBlc3RhYmxpc2ggYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCwgb3IgYGp1c3RpZnlgIGFsaWdubWVudCBmb3IgdGhlIHJvd1wncyBjZWxscy4gVG8gYXBwbHkgY2hhcmFjdGVyLWJhc2VkIGFsaWdubWVudCwgc2V0IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBhbGlnbm1lbnQgY2hhcmFjdGVyIChzdWNoIGFzIGAiLiJgIG9yIGAiLCJgKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RyIn1dfSx7bmFtZToidGQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0ZCBlbGVtZW50IHJlcHJlc2VudHMgYSBkYXRhIGNlbGwgaW4gYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29sc3BhbiJ9LHtuYW1lOiJyb3dzcGFuIn0se25hbWU6ImhlYWRlcnMifSx7bmFtZToiYWJiciIsZGVzY3JpcHRpb246YFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgc2hvcnQgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNlbGwncyBjb250ZW50LiBTb21lIHVzZXItYWdlbnRzLCBzdWNoIGFzIHNwZWVjaCByZWFkZXJzLCBtYXkgcHJlc2VudCB0aGlzIGRlc2NyaXB0aW9uIGJlZm9yZSB0aGUgY29udGVudCBpdHNlbGYuCgoqKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHB1dCB0aGUgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gaW5zaWRlIHRoZSBjZWxsIGFuZCBwbGFjZSB0aGUgbG9uZyBjb250ZW50IGluIHRoZSAqKnRpdGxlKiogYXR0cmlidXRlLmB9LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyB0aGUgY2VsbCBjb250ZW50XCdzIGhvcml6b250YWwgYWxpZ25tZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbC5cbiogICBgY2VudGVyYDogVGhlIGNvbnRlbnQgaXMgY2VudGVyZWQgaW4gdGhlIGNlbGwuXG4qICAgYHJpZ2h0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGwuXG4qICAgYGp1c3RpZnlgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIHN0cmV0Y2hlZCBvdXQgaW5zaWRlIHRoZSBjZWxsIHNvIHRoYXQgaXQgY292ZXJzIGl0cyBlbnRpcmUgd2lkdGguXG4qICAgYGNoYXJgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gYSBjaGFyYWN0ZXIgaW5zaWRlIHRoZSBgPHRoPmAgZWxlbWVudCB3aXRoIG1pbmltYWwgb2Zmc2V0LiBUaGlzIGNoYXJhY3RlciBpcyBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY2hhcm9mZikgYXR0cmlidXRlcyBVbmltcGxlbWVudGVkIChzZWUgW2J1Z8KgMjIxMl0oaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMiAiY2hhcmFjdGVyIGFsaWdubWVudCBub3QgaW1wbGVtZW50ZWQgKGFsaWduPWNoYXIsIGNoYXJvZmY9LCB0ZXh0LWFsaWduOjxzdHJpbmc+KSIpKS5cblxuVGhlIGRlZmF1bHQgdmFsdWUgd2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIGlzIGBsZWZ0YC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIGFwcGx5IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBlbGVtZW50LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGdpdmUgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0aGUgc2FtZSB2YWx1ZSB5b3Ugd291bGQgdXNlIGZvciB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY2hhcikuIFVuaW1wbGVtZW50ZWQgaW4gQ1NTMy4nfSx7bmFtZToiYXhpcyIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5ncy4gRWFjaCBzdHJpbmcgaXMgdGhlIGBpZGAgb2YgYSBncm91cCBvZiBjZWxscyB0aGF0IHRoaXMgaGVhZGVyIGFwcGxpZXMgdG8uXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuIn0se25hbWU6ImJnY29sb3IiLGRlc2NyaXB0aW9uOmBUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGVhY2ggY2VsbCBpbiBhIGNvbHVtbi4gSXQgY29uc2lzdHMgb2YgYSA2LWRpZ2l0IGhleGFkZWNpbWFsIGNvZGUgYXMgZGVmaW5lZCBpbiBbc1JHQl0oaHR0cHM6Ly93d3cudzMub3JnL0dyYXBoaWNzL0NvbG9yL3NSR0IpIGFuZCBpcyBwcmVmaXhlZCBieSAnIycuIFRoaXMgYXR0cmlidXRlIG1heSBiZSB1c2VkIHdpdGggb25lIG9mIHNpeHRlZW4gcHJlZGVmaW5lZCBjb2xvciBzdHJpbmdzOgoKwqAKClxgYmxhY2tcYCA9ICIjMDAwMDAwIgoKwqAKClxgZ3JlZW5cYCA9ICIjMDA4MDAwIgoKwqAKClxgc2lsdmVyXGAgPSAiI0MwQzBDMCIKCsKgCgpcYGxpbWVcYCA9ICIjMDBGRjAwIgoKwqAKClxgZ3JheVxgID0gIiM4MDgwODAiCgrCoAoKXGBvbGl2ZVxgID0gIiM4MDgwMDAiCgrCoAoKXGB3aGl0ZVxgID0gIiNGRkZGRkYiCgrCoAoKXGB5ZWxsb3dcYCA9ICIjRkZGRjAwIgoKwqAKClxgbWFyb29uXGAgPSAiIzgwMDAwMCIKCsKgCgpcYG5hdnlcYCA9ICIjMDAwMDgwIgoKwqAKClxgcmVkXGAgPSAiI0ZGMDAwMCIKCsKgCgpcYGJsdWVcYCA9ICIjMDAwMEZGIgoKwqAKClxgcHVycGxlXGAgPSAiIzgwMDA4MCIKCsKgCgpcYHRlYWxcYCA9ICIjMDA4MDgwIgoKwqAKClxgZnVjaHNpYVxgID0gIiNGRjAwRkYiCgrCoAoKXGBhcXVhXGAgPSAiIzAwRkZGRiIKCioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBpcyBub24tc3RhbmRhcmQgYW5kIG9ubHkgaW1wbGVtZW50ZWQgaW4gc29tZSB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXI6IFRoZSBbXGA8dGQ+XGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCAiVGhlIEhUTUwgPHRkPiBlbGVtZW50IGRlZmluZXMgYSBjZWxsIG9mIGEgdGFibGUgdGhhdCBjb250YWlucyBkYXRhLiBJdCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIHRhYmxlIG1vZGVsLiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykuIFRvIGNyZWF0ZSBhIHNpbWlsYXIgZWZmZWN0IHVzZSB0aGUgW1xgYmFja2dyb3VuZC1jb2xvclxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYmFja2dyb3VuZC1jb2xvciAiVGhlIGJhY2tncm91bmQtY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgYW4gZWxlbWVudC4iKSBwcm9wZXJ0eSBpbiBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykgaW5zdGVhZC5gfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkIn1dfSx7bmFtZToidGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0aCBlbGVtZW50IHJlcHJlc2VudHMgYSBoZWFkZXIgY2VsbCBpbiBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjb2xzcGFuIn0se25hbWU6InJvd3NwYW4ifSx7bmFtZToiaGVhZGVycyJ9LHtuYW1lOiJzY29wZSIsdmFsdWVTZXQ6InMifSx7bmFtZToic29ydGVkIn0se25hbWU6ImFiYnIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgc2hvcnQgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNlbGwncyBjb250ZW50LiBTb21lIHVzZXItYWdlbnRzLCBzdWNoIGFzIHNwZWVjaCByZWFkZXJzLCBtYXkgcHJlc2VudCB0aGlzIGRlc2NyaXB0aW9uIGJlZm9yZSB0aGUgY29udGVudCBpdHNlbGYuIn19LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyB0aGUgY2VsbCBjb250ZW50XCdzIGhvcml6b250YWwgYWxpZ25tZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbC5cbiogICBgY2VudGVyYDogVGhlIGNvbnRlbnQgaXMgY2VudGVyZWQgaW4gdGhlIGNlbGwuXG4qICAgYHJpZ2h0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGwuXG4qICAgYGp1c3RpZnlgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIHN0cmV0Y2hlZCBvdXQgaW5zaWRlIHRoZSBjZWxsIHNvIHRoYXQgaXQgY292ZXJzIGl0cyBlbnRpcmUgd2lkdGguXG4qICAgYGNoYXJgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gYSBjaGFyYWN0ZXIgaW5zaWRlIHRoZSBgPHRoPmAgZWxlbWVudCB3aXRoIG1pbmltYWwgb2Zmc2V0LiBUaGlzIGNoYXJhY3RlciBpcyBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGgjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoI2F0dHItY2hhcm9mZikgYXR0cmlidXRlcy5cblxuVGhlIGRlZmF1bHQgdmFsdWUgd2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIGlzIGBsZWZ0YC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIGFwcGx5IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBlbGVtZW50LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGdpdmUgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0aGUgc2FtZSB2YWx1ZSB5b3Ugd291bGQgdXNlIGZvciB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoI2F0dHItY2hhcikuIFVuaW1wbGVtZW50ZWQgaW4gQ1NTMy4nfSx7bmFtZToiYXhpcyIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5ncy4gRWFjaCBzdHJpbmcgaXMgdGhlIGBpZGAgb2YgYSBncm91cCBvZiBjZWxscyB0aGF0IHRoaXMgaGVhZGVyIGFwcGxpZXMgdG8uXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQ6IHVzZSB0aGUgW2BzY29wZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aCNhdHRyLXNjb3BlKSBhdHRyaWJ1dGUgaW5zdGVhZC4ifSx7bmFtZToiYmdjb2xvciIsZGVzY3JpcHRpb246YFRoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgZWFjaCBjZWxsIGluIGEgY29sdW1uLiBJdCBjb25zaXN0cyBvZiBhIDYtZGlnaXQgaGV4YWRlY2ltYWwgY29kZSBhcyBkZWZpbmVkIGluIFtzUkdCXShodHRwczovL3d3dy53My5vcmcvR3JhcGhpY3MvQ29sb3Ivc1JHQikgYW5kIGlzIHByZWZpeGVkIGJ5ICcjJy4gVGhpcyBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgd2l0aCBvbmUgb2Ygc2l4dGVlbiBwcmVkZWZpbmVkIGNvbG9yIHN0cmluZ3M6CgrCoAoKXGBibGFja1xgID0gIiMwMDAwMDAiCgrCoAoKXGBncmVlblxgID0gIiMwMDgwMDAiCgrCoAoKXGBzaWx2ZXJcYCA9ICIjQzBDMEMwIgoKwqAKClxgbGltZVxgID0gIiMwMEZGMDAiCgrCoAoKXGBncmF5XGAgPSAiIzgwODA4MCIKCsKgCgpcYG9saXZlXGAgPSAiIzgwODAwMCIKCsKgCgpcYHdoaXRlXGAgPSAiI0ZGRkZGRiIKCsKgCgpcYHllbGxvd1xgID0gIiNGRkZGMDAiCgrCoAoKXGBtYXJvb25cYCA9ICIjODAwMDAwIgoKwqAKClxgbmF2eVxgID0gIiMwMDAwODAiCgrCoAoKXGByZWRcYCA9ICIjRkYwMDAwIgoKwqAKClxgYmx1ZVxgID0gIiMwMDAwRkYiCgrCoAoKXGBwdXJwbGVcYCA9ICIjODAwMDgwIgoKwqAKClxgdGVhbFxgID0gIiMwMDgwODAiCgrCoAoKXGBmdWNoc2lhXGAgPSAiI0ZGMDBGRiIKCsKgCgpcYGFxdWFcYCA9ICIjMDBGRkZGIgoKKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUsIGFzIGl0IGlzIG5vbi1zdGFuZGFyZCBhbmQgb25seSBpbXBsZW1lbnRlZCBpbiBzb21lIHZlcnNpb25zIG9mIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcjogVGhlIFtcYDx0aD5cYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoICJUaGUgSFRNTCA8dGg+IGVsZW1lbnQgZGVmaW5lcyBhIGNlbGwgYXMgaGVhZGVyIG9mIGEgZ3JvdXAgb2YgdGFibGUgY2VsbHMuIFRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyBncm91cCBpcyBkZWZpbmVkIGJ5IHRoZSBzY29wZSBhbmQgaGVhZGVycyBhdHRyaWJ1dGVzLiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MpLiBUbyBjcmVhdGUgYSBzaW1pbGFyIGVmZmVjdCB1c2UgdGhlIFtcYGJhY2tncm91bmQtY29sb3JcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQtY29sb3IgIlRoZSBiYWNrZ3JvdW5kLWNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGVsZW1lbnQuIikgcHJvcGVydHkgaW4gW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTKSBpbnN0ZWFkLmB9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGgifV19LHtuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZm9ybSBlbGVtZW50IHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cywgc29tZSBvZiB3aGljaCBjYW4gcmVwcmVzZW50IGVkaXRhYmxlIHZhbHVlcyB0aGF0IGNhbiBiZSBzdWJtaXR0ZWQgdG8gYSBzZXJ2ZXIgZm9yIHByb2Nlc3NpbmcuIn0sYXR0cmlidXRlczpbe25hbWU6ImFjY2VwdC1jaGFyc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIHNwYWNlLSBvciBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzIHRoYXQgdGhlIHNlcnZlciBhY2NlcHRzLiBUaGUgYnJvd3NlciB1c2VzIHRoZW0gaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZC4gVGhlIGRlZmF1bHQgdmFsdWUsIHRoZSByZXNlcnZlZCBzdHJpbmcgYCJVTktOT1dOImAsIGluZGljYXRlcyB0aGUgc2FtZSBlbmNvZGluZyBhcyB0aGF0IG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nIHRoZSBmb3JtIGVsZW1lbnQuICBcbkluIHByZXZpb3VzIHZlcnNpb25zIG9mIEhUTUwsIHRoZSBkaWZmZXJlbnQgY2hhcmFjdGVyIGVuY29kaW5ncyBjb3VsZCBiZSBkZWxpbWl0ZWQgYnkgc3BhY2VzIG9yIGNvbW1hcy4gSW4gSFRNTDUsIG9ubHkgc3BhY2VzIGFyZSBhbGxvd2VkIGFzIGRlbGltaXRlcnMuJ319LHtuYW1lOiJhY3Rpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBVUkkgb2YgYSBwcm9ncmFtIHRoYXQgcHJvY2Vzc2VzIHRoZSBmb3JtIGluZm9ybWF0aW9uLiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgW2Bmb3JtYWN0aW9uYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiNhdHRyLWZvcm1hY3Rpb24pIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50Lid9fSx7bmFtZToiYXV0b2NvbXBsZXRlIix2YWx1ZVNldDoibyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgaW5wdXQgZWxlbWVudHMgY2FuIGJ5IGRlZmF1bHQgaGF2ZSB0aGVpciB2YWx1ZXMgYXV0b21hdGljYWxseSBjb21wbGV0ZWQgYnkgdGhlIGJyb3dzZXIuIFRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhbiBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgb24gYW4gZWxlbWVudCBiZWxvbmdpbmcgdG8gdGhlIGZvcm0uIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgb2ZmYDogVGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IGVudGVyIGEgdmFsdWUgaW50byBlYWNoIGZpZWxkIGZvciBldmVyeSB1c2UsIG9yIHRoZSBkb2N1bWVudCBwcm92aWRlcyBpdHMgb3duIGF1dG8tY29tcGxldGlvbiBtZXRob2Q7IHRoZSBicm93c2VyIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgY29tcGxldGUgZW50cmllcy5cbiogICBgb25gOiBUaGUgYnJvd3NlciBjYW4gYXV0b21hdGljYWxseSBjb21wbGV0ZSB2YWx1ZXMgYmFzZWQgb24gdmFsdWVzIHRoYXQgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkgZW50ZXJlZCBpbiB0aGUgZm9ybS5cblxuRm9yIG1vc3QgbW9kZXJuIGJyb3dzZXJzIChpbmNsdWRpbmcgRmlyZWZveCAzOCssIEdvb2dsZSBDaHJvbWUgMzQrLCBJRSAxMSspIHNldHRpbmcgdGhlIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgd2lsbCBub3QgcHJldmVudCBhIGJyb3dzZXIncyBwYXNzd29yZCBtYW5hZ2VyIGZyb20gYXNraW5nIHRoZSB1c2VyIGlmIHRoZXkgd2FudCB0byBzdG9yZSBsb2dpbiBmaWVsZHMgKHVzZXJuYW1lIGFuZCBwYXNzd29yZCksIGlmIHRoZSB1c2VyIHBlcm1pdHMgdGhlIHN0b3JhZ2UgdGhlIGJyb3dzZXIgd2lsbCBhdXRvZmlsbCB0aGUgbG9naW4gdGhlIG5leHQgdGltZSB0aGUgdXNlciB2aXNpdHMgdGhlIHBhZ2UuIFNlZSBbVGhlIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgYW5kIGxvZ2luIGZpZWxkc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJpbmdfeW91cl9zaXRlL1R1cm5pbmdfb2ZmX2Zvcm1fYXV0b2NvbXBsZXRpb24jVGhlX2F1dG9jb21wbGV0ZV9hdHRyaWJ1dGVfYW5kX2xvZ2luX2ZpZWxkcykuXG4qKk5vdGU6KiogSWYgeW91IHNldCBgYXV0b2NvbXBsZXRlYCB0byBgb2ZmYCBpbiBhIGZvcm0gYmVjYXVzZSB0aGUgZG9jdW1lbnQgcHJvdmlkZXMgaXRzIG93biBhdXRvLWNvbXBsZXRpb24sIHRoZW4geW91IHNob3VsZCBhbHNvIHNldCBgYXV0b2NvbXBsZXRlYCB0byBgb2ZmYCBmb3IgZWFjaCBvZiB0aGUgZm9ybSdzIGBpbnB1dGAgZWxlbWVudHMgdGhhdCB0aGUgZG9jdW1lbnQgY2FuIGF1dG8tY29tcGxldGUuIEZvciBkZXRhaWxzLCBzZWUgdGhlIG5vdGUgcmVnYXJkaW5nIEdvb2dsZSBDaHJvbWUgaW4gdGhlIFtCcm93c2VyIENvbXBhdGliaWxpdHkgY2hhcnRdKCNjb21wYXRDaGFydCkuIn19LHtuYW1lOiJlbmN0eXBlIix2YWx1ZVNldDoiZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1doZW4gdGhlIHZhbHVlIG9mIHRoZSBgbWV0aG9kYCBhdHRyaWJ1dGUgaXMgYHBvc3RgLCBlbmN0eXBlIGlzIHRoZSBbTUlNRSB0eXBlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NaW1lX3R5cGUpIG9mIGNvbnRlbnQgdGhhdCBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSB0byB0aGUgc2VydmVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGA6IFRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWA6IFRoZSB2YWx1ZSB1c2VkIGZvciBhbiBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50IHdpdGggdGhlIGB0eXBlYCBhdHRyaWJ1dGUgc2V0IHRvICJmaWxlIi5cbiogICBgdGV4dC9wbGFpbmA6IChIVE1MNSlcblxuVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybWVuY3R5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybWVuY3R5cGUpIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50Lid9fSx7bmFtZToibWV0aG9kIix2YWx1ZVNldDoibSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIFtIVFRQXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQKSBtZXRob2QgdGhhdCB0aGUgYnJvd3NlciB1c2VzIHRvIHN1Ym1pdCB0aGUgZm9ybS4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBwb3N0YDogQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW1BPU1QgbWV0aG9kXShodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM5Lmh0bWwjc2VjOS41KSA7IGZvcm0gZGF0YSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGZvcm0gYW5kIHNlbnQgdG8gdGhlIHNlcnZlci5cbiogICBgZ2V0YDogQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW0dFVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjMpOyBmb3JtIGRhdGEgYXJlIGFwcGVuZGVkIHRvIHRoZSBgYWN0aW9uYCBhdHRyaWJ1dGUgVVJJIHdpdGggYSBcJz9cJyBhcyBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0aW5nIFVSSSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBmb3JtIGhhcyBubyBzaWRlLWVmZmVjdHMgYW5kIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy5cbiogICBgZGlhbG9nYDogVXNlIHdoZW4gdGhlIGZvcm0gaXMgaW5zaWRlIGHCoFtgPGRpYWxvZz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGlhbG9nICJUaGUgSFRNTCA8ZGlhbG9nPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkaWFsb2cgYm94IG9yIG90aGVyIGludGVyYWN0aXZlIGNvbXBvbmVudCwgc3VjaCBhcyBhbiBpbnNwZWN0b3Igb3Igd2luZG93LiIpIGVsZW1lbnQgdG8gY2xvc2UgdGhlIGRpYWxvZyB3aGVuIHN1Ym1pdHRlZC5cblxuVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybW1ldGhvZGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1mb3JtbWV0aG9kKSBhdHRyaWJ1dGUgb24gYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgb3IgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHRoZSBmb3JtLiBJbiBIVE1MIDQsIGl0cyB1c2UgaXMgZGVwcmVjYXRlZCAoYGlkYCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkKS4gSXQgbXVzdCBiZSB1bmlxdWUgYW1vbmcgdGhlIGZvcm1zIGluIGEgZG9jdW1lbnQgYW5kIG5vdCBqdXN0IGFuIGVtcHR5IHN0cmluZyBpbiBIVE1MIDUuIn19LHtuYW1lOiJub3ZhbGlkYXRlIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZm9ybSBpcyBub3QgdG8gYmUgdmFsaWRhdGVkIHdoZW4gc3VibWl0dGVkLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIChhbmQgdGhlcmVmb3JlIHRoZSBmb3JtIGlzIHZhbGlkYXRlZCksIHRoaXMgZGVmYXVsdCBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgW2Bmb3Jtbm92YWxpZGF0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1mb3Jtbm92YWxpZGF0ZSkgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIG9yIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQgYmVsb25naW5nIHRvIHRoZSBmb3JtLid9fSx7bmFtZToidGFyZ2V0Iix2YWx1ZVNldDoidGFyZ2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIG5hbWUgb3Iga2V5d29yZCBpbmRpY2F0aW5nIHdoZXJlIHRvIGRpc3BsYXkgdGhlIHJlc3BvbnNlIHRoYXQgaXMgcmVjZWl2ZWQgYWZ0ZXIgc3VibWl0dGluZyB0aGUgZm9ybS4gSW4gSFRNTCA0LCB0aGlzIGlzIHRoZSBuYW1lL2tleXdvcmQgZm9yIGEgZnJhbWUuIEluIEhUTUw1LCBpdCBpcyBhIG5hbWUva2V5d29yZCBmb3IgYSBfYnJvd3NpbmcgY29udGV4dF8gKGZvciBleGFtcGxlLCB0YWIsIHdpbmRvdywgb3IgaW5saW5lIGZyYW1lKS4gVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6XG5cbiogICBgX3NlbGZgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBzYW1lIEhUTUwgNCBmcmFtZSAob3IgSFRNTDUgYnJvd3NpbmcgY29udGV4dCkgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGlzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgX2JsYW5rYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byBhIG5ldyB1bm5hbWVkIEhUTUwgNCB3aW5kb3cgb3IgSFRNTDUgYnJvd3NpbmcgY29udGV4dC5cbiogICBgX3BhcmVudGA6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gdGhlIEhUTUwgNCBmcmFtZXNldCBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgZnJhbWUsIG9yIEhUTUw1IHBhcmVudCBicm93c2luZyBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9uZS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLlxuKiAgIGBfdG9wYDogSFRNTCA0OiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBmdWxsIG9yaWdpbmFsIHdpbmRvdywgYW5kIGNhbmNlbCBhbGwgb3RoZXIgZnJhbWVzLiBIVE1MNTogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKGkuZS4sIHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgb25lLCBhbmQgaGFzIG5vIHBhcmVudCkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cbiogICBfaWZyYW1lbmFtZV86IFRoZSByZXNwb25zZSBpcyBkaXNwbGF5ZWQgaW4gYSBuYW1lZCBbYDxpZnJhbWU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lmcmFtZSAiVGhlIEhUTUwgSW5saW5lIEZyYW1lIGVsZW1lbnQgKDxpZnJhbWU+KSByZXByZXNlbnRzIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIGVtYmVkZGluZyBhbm90aGVyIEhUTUwgcGFnZSBpbnRvIHRoZSBjdXJyZW50IG9uZS4iKS5cblxuSFRNTDU6IFRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBbYGZvcm10YXJnZXRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybXRhcmdldCkgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIG9yIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQuJ319LHtuYW1lOiJhY2NlcHQiLGRlc2NyaXB0aW9uOidBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNvbnRlbnQgdHlwZXMgdGhhdCB0aGUgc2VydmVyIGFjY2VwdHMuXG5cbioqVXNhZ2Ugbm90ZToqKiBUaGlzIGF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkIGluIEhUTUw1IGFuZCBzaG91bGQgbm8gbG9uZ2VyIGJlIHVzZWQuIEluc3RlYWQsIHVzZSB0aGUgW2BhY2NlcHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjYXR0ci1hY2NlcHQpIGF0dHJpYnV0ZSBvZiB0aGUgc3BlY2lmaWMgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfSx7bmFtZToiYXV0b2NhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJUaGlzIGlzIGEgbm9uc3RhbmRhcmQgYXR0cmlidXRlIHVzZWQgYnkgaU9TIFNhZmFyaSBNb2JpbGUgd2hpY2ggY29udHJvbHMgd2hldGhlciBhbmQgaG93IHRoZSB0ZXh0IHZhbHVlIGZvciB0ZXh0dWFsIGZvcm0gY29udHJvbCBkZXNjZW5kYW50cyBzaG91bGQgYmUgYXV0b21hdGljYWxseSBjYXBpdGFsaXplZCBhcyBpdCBpcyBlbnRlcmVkL2VkaXRlZCBieSB0aGUgdXNlci4gSWYgdGhlIGBhdXRvY2FwaXRhbGl6ZWAgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBvbiBhbiBpbmRpdmlkdWFsIGZvcm0gY29udHJvbCBkZXNjZW5kYW50LCBpdCB0cnVtcHMgdGhlIGZvcm0td2lkZSBgYXV0b2NhcGl0YWxpemVgIHNldHRpbmcuIFRoZSBub24tZGVwcmVjYXRlZCB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBpbiBpT1MgNSBhbmQgbGF0ZXIuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBzZW50ZW5jZXNgLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG5vbmVgOiBDb21wbGV0ZWx5IGRpc2FibGVzIGF1dG9tYXRpYyBjYXBpdGFsaXphdGlvblxuKiAgIGBzZW50ZW5jZXNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlciBvZiBzZW50ZW5jZXMuXG4qICAgYHdvcmRzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygd29yZHMuXG4qICAgYGNoYXJhY3RlcnNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgYWxsIGNoYXJhY3RlcnMuXG4qICAgYG9uYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS5cbiogICBgb2ZmYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0ifV19LHtuYW1lOiJsYWJlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxhYmVsIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gaW4gYSB1c2VyIGludGVyZmFjZS4gVGhlIGNhcHRpb24gY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGZvcm0gY29udHJvbCwga25vd24gYXMgdGhlIGxhYmVsIGVsZW1lbnQncyBsYWJlbGVkIGNvbnRyb2wsIGVpdGhlciB1c2luZyB0aGUgZm9yIGF0dHJpYnV0ZSwgb3IgYnkgcHV0dGluZyB0aGUgZm9ybSBjb250cm9sIGluc2lkZSB0aGUgbGFiZWwgZWxlbWVudCBpdHNlbGYuIn0sYXR0cmlidXRlczpbe25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IHdpdGggd2hpY2ggdGhlIGxhYmVsIGlzIGFzc29jaWF0ZWQgKGl0cyBfZm9ybSBvd25lcl8pLiBJZiBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGlzIHRoZSBgaWRgIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gVGhpcyBsZXRzIHlvdSBwbGFjZSBsYWJlbCBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgdGhlaXIgZm9ybSBlbGVtZW50cy4nfX0se25hbWU6ImZvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIFtgaWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaWQpIG9mIGEgW2xhYmVsYWJsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvR3VpZGUvSFRNTC9Db250ZW50X2NhdGVnb3JpZXMjRm9ybV9sYWJlbGFibGUpIGZvcm0tcmVsYXRlZCBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50IGFzIHRoZSBgPGxhYmVsPmAgZWxlbWVudC4gVGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHdpdGggYW4gYGlkYCBtYXRjaGluZyB0aGUgdmFsdWUgb2YgdGhlIGBmb3JgIGF0dHJpYnV0ZSBpcyB0aGUgX2xhYmVsZWQgY29udHJvbF8gZm9yIHRoaXMgbGFiZWwgZWxlbWVudCwgaWYgaXQgaXMgYSBsYWJlbGFibGUgZWxlbWVudC4gSWYgaXQgaXPCoG5vdCBsYWJlbGFibGUgdGhlbiB0aGUgYGZvcmAgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QuIElmIHRoZXJlIGFyZSBvdGhlciBlbGVtZW50cyB3aGljaCBhbHNvIG1hdGNoIHRoZSBgaWRgIHZhbHVlLCBsYXRlciBpbiB0aGUgZG9jdW1lbnQsIHRoZXkgYXJlIG5vdCBjb25zaWRlcmVkLlxuXG4qKk5vdGUqKjogQSBgPGxhYmVsPmAgZWxlbWVudCBjYW4gaGF2ZSBib3RoIGEgYGZvcmAgYXR0cmlidXRlIGFuZCBhIGNvbnRhaW5lZCBjb250cm9sIGVsZW1lbnQsIGFzIGxvbmcgYXMgdGhlIGBmb3JgIGF0dHJpYnV0ZSBwb2ludHMgdG8gdGhlIGNvbnRhaW5lZCBjb250cm9sIGVsZW1lbnQuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGFiZWwifV19LHtuYW1lOiJpbnB1dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGlucHV0IGVsZW1lbnQgcmVwcmVzZW50cyBhIHR5cGVkIGRhdGEgZmllbGQsIHVzdWFsbHkgd2l0aCBhIGZvcm0gY29udHJvbCB0byBhbGxvdyB0aGUgdXNlciB0byBlZGl0IHRoZSBkYXRhLiJ9LHZvaWQ6ITAsYXR0cmlidXRlczpbe25hbWU6ImFjY2VwdCJ9LHtuYW1lOiJhbHQifSx7bmFtZToiYXV0b2NvbXBsZXRlIix2YWx1ZVNldDoiaW5wdXRhdXRvY29tcGxldGUifSx7bmFtZToiYXV0b2ZvY3VzIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJjaGVja2VkIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJkaXJuYW1lIn0se25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJmb3JtIn0se25hbWU6ImZvcm1hY3Rpb24ifSx7bmFtZToiZm9ybWVuY3R5cGUiLHZhbHVlU2V0OiJldCJ9LHtuYW1lOiJmb3JtbWV0aG9kIix2YWx1ZVNldDoiZm0ifSx7bmFtZToiZm9ybW5vdmFsaWRhdGUiLHZhbHVlU2V0OiJ2In0se25hbWU6ImZvcm10YXJnZXQifSx7bmFtZToiaGVpZ2h0In0se25hbWU6ImlucHV0bW9kZSIsdmFsdWVTZXQ6ImltIn0se25hbWU6Imxpc3QifSx7bmFtZToibWF4In0se25hbWU6Im1heGxlbmd0aCJ9LHtuYW1lOiJtaW4ifSx7bmFtZToibWlubGVuZ3RoIn0se25hbWU6Im11bHRpcGxlIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJuYW1lIn0se25hbWU6InBhdHRlcm4ifSx7bmFtZToicGxhY2Vob2xkZXIifSx7bmFtZToicmVhZG9ubHkiLHZhbHVlU2V0OiJ2In0se25hbWU6InJlcXVpcmVkIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJzaXplIn0se25hbWU6InNyYyJ9LHtuYW1lOiJzdGVwIn0se25hbWU6InR5cGUiLHZhbHVlU2V0OiJ0In0se25hbWU6InZhbHVlIn0se25hbWU6IndpZHRoIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCJ9XX0se25hbWU6ImJ1dHRvbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJ1dHRvbiBlbGVtZW50IHJlcHJlc2VudHMgYSBidXR0b24gbGFiZWxlZCBieSBpdHMgY29udGVudHMuIn0sYXR0cmlidXRlczpbe25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSB0aGF0IHRoZSBidXR0b24gc2hvdWxkIGhhdmUgaW5wdXQgZm9jdXMgd2hlbiB0aGUgcGFnZSBsb2FkcywgdW5sZXNzIHRoZSB1c2VyIG92ZXJyaWRlcyBpdCwgZm9yIGV4YW1wbGUgYnkgdHlwaW5nIGluIGEgZGlmZmVyZW50IGNvbnRyb2wuIE9ubHkgb25lIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50IGluIGEgZG9jdW1lbnQgY2FuIGhhdmUgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVkLiJ9fSx7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBpbnRlcmFjdCB3aXRoIHRoZSBidXR0b24uIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBidXR0b24gaW5oZXJpdHMgaXRzIHNldHRpbmcgZnJvbSB0aGUgY29udGFpbmluZyBlbGVtZW50LCBmb3IgZXhhbXBsZSBbYDxmaWVsZHNldD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZmllbGRzZXQgIlRoZSBIVE1MIDxmaWVsZHNldD4gZWxlbWVudCBpcyB1c2VkIHRvIGdyb3VwIHNldmVyYWwgY29udHJvbHMgYXMgd2VsbCBhcyBsYWJlbHMgKDxsYWJlbD4pIHdpdGhpbiBhIHdlYiBmb3JtLiIpOyBpZiB0aGVyZSBpcyBubyBjb250YWluaW5nIGVsZW1lbnQgd2l0aCB0aGUgKipkaXNhYmxlZCoqIGF0dHJpYnV0ZSBzZXQsIHRoZW4gdGhlIGJ1dHRvbiBpcyBlbmFibGVkLlxuXG5GaXJlZm94IHdpbGwsIHVubGlrZSBvdGhlciBicm93c2VycywgYnkgZGVmYXVsdCwgW3BlcnNpc3QgdGhlIGR5bmFtaWMgZGlzYWJsZWQgc3RhdGVdKGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU5ODU4MzkvYnVnLXdpdGgtZmlyZWZveC1kaXNhYmxlZC1hdHRyaWJ1dGUtb2YtaW5wdXQtbm90LXJlc2V0dGluZy13aGVuLXJlZnJlc2hpbmcpIG9mIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIGFjcm9zcyBwYWdlIGxvYWRzLiBVc2UgdGhlIFtgYXV0b2NvbXBsZXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiNhdHRyLWF1dG9jb21wbGV0ZSkgYXR0cmlidXRlIHRvIGNvbnRyb2wgdGhpcyBmZWF0dXJlLid9fSx7bmFtZToiZm9ybSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIGZvcm0gZWxlbWVudCB0aGF0IHRoZSBidXR0b24gaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgX2Zvcm0gb3duZXJfKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSB0aGUgKippZCoqIGF0dHJpYnV0ZSBvZiBhIFtgPGZvcm0+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0gIlRoZSBIVE1MIDxmb3JtPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkb2N1bWVudCBzZWN0aW9uIHRoYXQgY29udGFpbnMgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHN1Ym1pdHRpbmcgaW5mb3JtYXRpb24gdG8gYSB3ZWIgc2VydmVyLiIpIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBgPGJ1dHRvbj5gIGVsZW1lbnQgd2lsbCBiZSBhc3NvY2lhdGVkIHRvIGFuIGFuY2VzdG9yIFtgPGZvcm0+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0gIlRoZSBIVE1MIDxmb3JtPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkb2N1bWVudCBzZWN0aW9uIHRoYXQgY29udGFpbnMgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHN1Ym1pdHRpbmcgaW5mb3JtYXRpb24gdG8gYSB3ZWIgc2VydmVyLiIpIGVsZW1lbnQsIGlmIG9uZSBleGlzdHMuIFRoaXMgYXR0cmlidXRlIGVuYWJsZXMgeW91IHRvIGFzc29jaWF0ZSBgPGJ1dHRvbj5gIGVsZW1lbnRzIHRvIFtgPGZvcm0+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0gIlRoZSBIVE1MIDxmb3JtPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkb2N1bWVudCBzZWN0aW9uIHRoYXQgY29udGFpbnMgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHN1Ym1pdHRpbmcgaW5mb3JtYXRpb24gdG8gYSB3ZWIgc2VydmVyLiIpIGVsZW1lbnRzIGFueXdoZXJlIHdpdGhpbiBhIGRvY3VtZW50LCBub3QganVzdCBhcyBkZXNjZW5kYW50cyBvZiBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50cy4nfX0se25hbWU6ImZvcm1hY3Rpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBVUkkgb2YgYSBwcm9ncmFtIHRoYXQgcHJvY2Vzc2VzIHRoZSBpbmZvcm1hdGlvbiBzdWJtaXR0ZWQgYnkgdGhlIGJ1dHRvbi4gSWYgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgYWN0aW9uYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1hY3Rpb24pIGF0dHJpYnV0ZSBvZiB0aGUgYnV0dG9uJ3MgZm9ybSBvd25lci4ifX0se25hbWU6ImZvcm1lbmN0eXBlIix2YWx1ZVNldDoiZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0lmIHRoZSBidXR0b24gaXMgYSBzdWJtaXQgYnV0dG9uLCB0aGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgY29udGVudCB0aGF0IGlzIHVzZWQgdG8gc3VibWl0IHRoZSBmb3JtIHRvIHRoZSBzZXJ2ZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYDogVGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLlxuKiAgIGBtdWx0aXBhcnQvZm9ybS1kYXRhYDogVXNlIHRoaXMgdmFsdWUgaWYgeW91IGFyZSB1c2luZyBhbiBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50IHdpdGggdGhlIFtgdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNhdHRyLXR5cGUpIGF0dHJpYnV0ZSBzZXQgdG8gYGZpbGVgLlxuKiAgIGB0ZXh0L3BsYWluYFxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQsIGl0IG92ZXJyaWRlcyB0aGUgW2BlbmN0eXBlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1lbmN0eXBlKSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvblwncyBmb3JtIG93bmVyLid9fSx7bmFtZToiZm9ybW1ldGhvZCIsdmFsdWVTZXQ6ImZtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGUgYnV0dG9uIGlzIGEgc3VibWl0IGJ1dHRvbiwgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBIVFRQIG1ldGhvZCB0aGF0IHRoZSBicm93c2VyIHVzZXMgdG8gc3VibWl0IHRoZSBmb3JtLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYHBvc3RgOiBUaGUgZGF0YSBmcm9tIHRoZSBmb3JtIGFyZSBpbmNsdWRlZCBpbiB0aGUgYm9keSBvZiB0aGUgZm9ybSBhbmQgc2VudCB0byB0aGUgc2VydmVyLlxuKiAgIGBnZXRgOiBUaGUgZGF0YSBmcm9tIHRoZSBmb3JtIGFyZSBhcHBlbmRlZCB0byB0aGUgKipmb3JtKiogYXR0cmlidXRlIFVSSSwgd2l0aCBhICc/JyBhcyBhIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHRpbmcgVVJJIGlzIHNlbnQgdG8gdGhlIHNlcnZlci4gVXNlIHRoaXMgbWV0aG9kIHdoZW4gdGhlIGZvcm0gaGFzIG5vIHNpZGUtZWZmZWN0cyBhbmQgY29udGFpbnMgb25seSBBU0NJSSBjaGFyYWN0ZXJzLlxuXG5JZiBzcGVjaWZpZWQsIHRoaXMgYXR0cmlidXRlIG92ZXJyaWRlcyB0aGUgW2BtZXRob2RgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSNhdHRyLW1ldGhvZCkgYXR0cmlidXRlIG9mIHRoZSBidXR0b24ncyBmb3JtIG93bmVyLiJ9fSx7bmFtZToiZm9ybW5vdmFsaWRhdGUiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGUgYnV0dG9uIGlzIGEgc3VibWl0IGJ1dHRvbiwgdGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhhdCB0aGUgZm9ybSBpcyBub3QgdG8gYmUgdmFsaWRhdGVkIHdoZW4gaXQgaXMgc3VibWl0dGVkLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQsIGl0IG92ZXJyaWRlcyB0aGUgW2Bub3ZhbGlkYXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1ub3ZhbGlkYXRlKSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvbidzIGZvcm0gb3duZXIuIn19LHtuYW1lOiJmb3JtdGFyZ2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGUgYnV0dG9uIGlzIGEgc3VibWl0IGJ1dHRvbiwgdGhpcyBhdHRyaWJ1dGUgaXMgYSBuYW1lIG9yIGtleXdvcmQgaW5kaWNhdGluZyB3aGVyZSB0byBkaXNwbGF5IHRoZSByZXNwb25zZSB0aGF0IGlzIHJlY2VpdmVkIGFmdGVyIHN1Ym1pdHRpbmcgdGhlIGZvcm0uIFRoaXMgaXMgYSBuYW1lIG9mLCBvciBrZXl3b3JkIGZvciwgYSBfYnJvd3NpbmcgY29udGV4dF8gKGZvciBleGFtcGxlLCB0YWIsIHdpbmRvdywgb3IgaW5saW5lIGZyYW1lKS4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgdGFyZ2V0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci10YXJnZXQpIGF0dHJpYnV0ZSBvZiB0aGUgYnV0dG9uJ3MgZm9ybSBvd25lci4gVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6XG5cbiogICBgX3NlbGZgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBzYW1lIGJyb3dzaW5nIGNvbnRleHQgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGlzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgX2JsYW5rYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byBhIG5ldyB1bm5hbWVkIGJyb3dzaW5nIGNvbnRleHQuXG4qICAgYF9wYXJlbnRgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBwYXJlbnQgYnJvd3NpbmcgY29udGV4dCBvZiB0aGUgY3VycmVudCBvbmUuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cbiogICBgX3RvcGA6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0ICh0aGF0IGlzLCB0aGUgYnJvd3NpbmcgY29udGV4dCB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50IG9uZSwgYW5kIGhhcyBubyBwYXJlbnQpLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgb3B0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuIn19LHtuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmFtZSBvZiB0aGUgYnV0dG9uLCB3aGljaCBpcyBzdWJtaXR0ZWQgd2l0aCB0aGUgZm9ybSBkYXRhLiJ9fSx7bmFtZToidHlwZSIsdmFsdWVTZXQ6ImJ0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdHlwZSBvZiB0aGUgYnV0dG9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYHN1Ym1pdGA6IFRoZSBidXR0b24gc3VibWl0cyB0aGUgZm9ybSBkYXRhIHRvIHRoZSBzZXJ2ZXIuIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCBvciBpZiB0aGUgYXR0cmlidXRlIGlzIGR5bmFtaWNhbGx5IGNoYW5nZWQgdG8gYW4gZW1wdHkgb3IgaW52YWxpZCB2YWx1ZS5cbiogICBgcmVzZXRgOiBUaGUgYnV0dG9uIHJlc2V0cyBhbGwgdGhlIGNvbnRyb2xzIHRvIHRoZWlyIGluaXRpYWwgdmFsdWVzLlxuKiAgIGBidXR0b25gOiBUaGUgYnV0dG9uIGhhcyBubyBkZWZhdWx0IGJlaGF2aW9yLiBJdCBjYW4gaGF2ZSBjbGllbnQtc2lkZSBzY3JpcHRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCdzIGV2ZW50cywgd2hpY2ggYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBldmVudHMgb2NjdXIuIn19LHtuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGJ1dHRvbi4gSXQgZGVmaW5lcyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBidXR0b24gd2hpY2ggaXMgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0gZGF0YS4gVGhpcyB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhlIHNlcnZlciBpbiBwYXJhbXMgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQuIn19LHtuYW1lOiJhdXRvY29tcGxldGUiLGRlc2NyaXB0aW9uOidUaGUgdXNlIG9mIHRoaXMgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIGlzIG5vbnN0YW5kYXJkIGFuZCBGaXJlZm94LXNwZWNpZmljLiBCeSBkZWZhdWx0LCB1bmxpa2Ugb3RoZXIgYnJvd3NlcnMsIFtGaXJlZm94IHBlcnNpc3RzIHRoZSBkeW5hbWljIGRpc2FibGVkIHN0YXRlXShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTg1ODM5L2J1Zy13aXRoLWZpcmVmb3gtZGlzYWJsZWQtYXR0cmlidXRlLW9mLWlucHV0LW5vdC1yZXNldHRpbmctd2hlbi1yZWZyZXNoaW5nKSBvZiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBhY3Jvc3MgcGFnZSBsb2Fkcy4gU2V0dGluZyB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgdG8gYG9mZmAgKGkuZS4gYGF1dG9jb21wbGV0ZT0ib2ZmImApIGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gU2VlIFtidWfCoDY1NDA3Ml0oaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU0MDcyICJpZiBkaXNhYmxlZCBzdGF0ZSBpcyBjaGFuZ2VkIHdpdGggamF2YXNjcmlwdCwgdGhlIG5vcm1hbCBzdGF0ZSBkb2VzblwndCByZXR1cm4gYWZ0ZXIgcmVmcmVzaGluZyB0aGUgcGFnZSIpLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uIn1dfSx7bmFtZToic2VsZWN0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc2VsZWN0IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbnRyb2wgZm9yIHNlbGVjdGluZyBhbW9uZ3N0IGEgc2V0IG9mIG9wdGlvbnMuIn0sYXR0cmlidXRlczpbe25hbWU6ImF1dG9jb21wbGV0ZSIsdmFsdWVTZXQ6ImlucHV0YXV0b2NvbXBsZXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIFtgRE9NU3RyaW5nYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTVN0cmluZyAiRE9NU3RyaW5nIGlzIGEgVVRGLTE2IFN0cmluZy4gQXMgSmF2YVNjcmlwdCBhbHJlYWR5IHVzZXMgc3VjaCBzdHJpbmdzLCBET01TdHJpbmcgaXMgbWFwcGVkIGRpcmVjdGx5IHRvIGEgU3RyaW5nLiIpIHByb3ZpZGluZyBhIGhpbnQgZm9yIGEgW3VzZXIgYWdlbnRcJ3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvdXNlcl9hZ2VudCAidXNlciBhZ2VudFwnczogQSB1c2VyIGFnZW50IGlzIGEgY29tcHV0ZXIgcHJvZ3JhbSByZXByZXNlbnRpbmcgYSBwZXJzb24sIGZvciBleGFtcGxlLCBhIGJyb3dzZXIgaW4gYSBXZWIgY29udGV4dC4iKSBhdXRvY29tcGxldGUgZmVhdHVyZS4gU2VlIFtUaGUgSFRNTCBhdXRvY29tcGxldGUgYXR0cmlidXRlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0F0dHJpYnV0ZXMvYXV0b2NvbXBsZXRlKSBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHZhbHVlcyBhbmQgZGV0YWlscyBvbiBob3cgdG8gdXNlIGF1dG9jb21wbGV0ZS4nfX0se25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSB0aGF0IGEgZm9ybSBjb250cm9sIHNob3VsZCBoYXZlIGlucHV0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHMuIE9ubHkgb25lIGZvcm0gZWxlbWVudCBpbiBhIGRvY3VtZW50IGNhbiBoYXZlIHRoZSBgYXV0b2ZvY3VzYCBhdHRyaWJ1dGUuIn19LHtuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgY2Fubm90IGludGVyYWN0IHdpdGggdGhlIGNvbnRyb2wuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250cm9sIGluaGVyaXRzIGl0cyBzZXR0aW5nIGZyb20gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCwgZm9yIGV4YW1wbGUgYGZpZWxkc2V0YDsgaWYgdGhlcmUgaXMgbm8gY29udGFpbmluZyBlbGVtZW50IHdpdGggdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlIHNldCwgdGhlbiB0aGUgY29udHJvbCBpcyBlbmFibGVkLiJ9fSx7bmFtZToiZm9ybSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSB0aGUgZm9ybSBlbGVtZW50IHRvwqB3aGljaMKgdGhlIHNlbGVjdCBlbGVtZW50IGlzIGFzc29jaWF0ZWTCoCh0aGF0IGlzLCBpdHMgImZvcm0gb3duZXIiKS4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdHMgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgYGlkYCBvZiBhIGZvcm0gZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gVGhpcyBlbmFibGVzIHlvdSB0byBwbGFjZSBzZWxlY3QgZWxlbWVudHMgYW55d2hlcmUgd2l0aGluIGEgZG9jdW1lbnQsIG5vdCBqdXN0IGFzIGRlc2NlbmRhbnRzIG9mIHRoZWlyIGZvcm0gZWxlbWVudHMuJ319LHtuYW1lOiJtdWx0aXBsZSIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgbXVsdGlwbGUgb3B0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhlIGxpc3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gb25seSBvbmUgb3B0aW9uIGNhbiBiZSBzZWxlY3RlZCBhdCBhIHRpbWUuIFdoZW4gYG11bHRpcGxlYCBpcyBzcGVjaWZpZWQsIG1vc3QgYnJvd3NlcnMgd2lsbCBzaG93IGEgc2Nyb2xsaW5nIGxpc3QgYm94IGluc3RlYWQgb2YgYSBzaW5nbGUgbGluZSBkcm9wZG93bi4ifX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgY29udHJvbC4ifX0se25hbWU6InJlcXVpcmVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHRoYXQgYW4gb3B0aW9uIHdpdGggYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlIG11c3QgYmUgc2VsZWN0ZWQuIn19LHtuYW1lOiJzaXplIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGUgY29udHJvbCBpcyBwcmVzZW50ZWQgYXMgYSBzY3JvbGxpbmcgbGlzdCBib3ggKGUuZy4gd2hlbiBgbXVsdGlwbGVgIGlzIHNwZWNpZmllZCksIHRoaXMgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBsaXN0IHRoYXQgc2hvdWxkIGJlIHZpc2libGUgYXQgb25lIHRpbWUuIEJyb3dzZXJzIGFyZSBub3QgcmVxdWlyZWQgdG8gcHJlc2VudCBhIHNlbGVjdCBlbGVtZW50IGFzIGEgc2Nyb2xsZWQgbGlzdCBib3guIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuXG5cbioqTm90ZToqKiBBY2NvcmRpbmcgdG8gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24sIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBzaXplIHNob3VsZCBiZSAxOyBob3dldmVyLCBpbiBwcmFjdGljZSwgdGhpcyBoYXMgYmVlbiBmb3VuZCB0byBicmVhayBzb21lIHdlYiBzaXRlcywgYW5kIG5vIG90aGVyIGJyb3dzZXIgY3VycmVudGx5IGRvZXMgdGhhdCwgc28gTW96aWxsYSBoYXMgb3B0ZWQgdG8gY29udGludWUgdG8gcmV0dXJuIDAgZm9yIHRoZSB0aW1lIGJlaW5nIHdpdGggRmlyZWZveC4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QifV19LHtuYW1lOiJkYXRhbGlzdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRhdGFsaXN0IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNldCBvZiBvcHRpb24gZWxlbWVudHMgdGhhdCByZXByZXNlbnQgcHJlZGVmaW5lZCBvcHRpb25zIGZvciBvdGhlciBjb250cm9scy4gSW4gdGhlIHJlbmRlcmluZywgdGhlIGRhdGFsaXN0IGVsZW1lbnQgcmVwcmVzZW50cyBub3RoaW5nIGFuZCBpdCwgYWxvbmcgd2l0aCBpdHMgY2hpbGRyZW4sIHNob3VsZCBiZSBoaWRkZW4uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGF0YWxpc3QifV19LHtuYW1lOiJvcHRncm91cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG9wdGdyb3VwIGVsZW1lbnQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIG9wdGlvbiBlbGVtZW50cyB3aXRoIGEgY29tbW9uIGxhYmVsLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklmIHRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaXMgc2V0LCBub25lIG9mIHRoZSBpdGVtcyBpbiB0aGlzIG9wdGlvbiBncm91cCBpcyBzZWxlY3RhYmxlLiBPZnRlbiBicm93c2VycyBncmV5IG91dCBzdWNoIGNvbnRyb2wgYW5kIGl0IHdvbid0IHJlY2VpdmUgYW55IGJyb3dzaW5nIGV2ZW50cywgbGlrZSBtb3VzZSBjbGlja3Mgb3IgZm9jdXMtcmVsYXRlZCBvbmVzLiJ9fSx7bmFtZToibGFiZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHRoZSBncm91cCBvZiBvcHRpb25zLCB3aGljaCB0aGUgYnJvd3NlciBjYW4gdXNlIHdoZW4gbGFiZWxpbmcgdGhlIG9wdGlvbnMgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLiBUaGlzIGF0dHJpYnV0ZSBpcyBtYW5kYXRvcnkgaWYgdGhpcyBlbGVtZW50IGlzIHVzZWQuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb3B0Z3JvdXAifV19LHtuYW1lOiJvcHRpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvcHRpb24gZWxlbWVudCByZXByZXNlbnRzIGFuIG9wdGlvbiBpbiBhIHNlbGVjdCBlbGVtZW50IG9yIGFzIHBhcnQgb2YgYSBsaXN0IG9mIHN1Z2dlc3Rpb25zIGluIGEgZGF0YWxpc3QgZWxlbWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCwgdGhpcyBvcHRpb24gaXMgbm90IGNoZWNrYWJsZS4gT2Z0ZW4gYnJvd3NlcnMgZ3JleSBvdXQgc3VjaCBjb250cm9sIGFuZCBpdCB3b25cJ3QgcmVjZWl2ZSBhbnkgYnJvd3NpbmcgZXZlbnQsIGxpa2UgbW91c2UgY2xpY2tzIG9yIGZvY3VzLXJlbGF0ZWQgb25lcy4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldCwgdGhlIGVsZW1lbnQgY2FuIHN0aWxsIGJlIGRpc2FibGVkIGlmIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGlzIGEgZGlzYWJsZWQgW2A8b3B0Z3JvdXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29wdGdyb3VwICJUaGUgSFRNTCA8b3B0Z3JvdXA+IGVsZW1lbnQgY3JlYXRlcyBhIGdyb3VwaW5nIG9mIG9wdGlvbnMgd2l0aGluIGEgPHNlbGVjdD4gZWxlbWVudC4iKSBlbGVtZW50Lid9fSx7bmFtZToibGFiZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGlzIHRleHQgZm9yIHRoZSBsYWJlbCBpbmRpY2F0aW5nIHRoZSBtZWFuaW5nIG9mIHRoZSBvcHRpb24uIElmIHRoZSBgbGFiZWxgIGF0dHJpYnV0ZSBpc24ndCBkZWZpbmVkLCBpdHMgdmFsdWUgaXMgdGhhdCBvZiB0aGUgZWxlbWVudCB0ZXh0IGNvbnRlbnQuIn19LHtuYW1lOiJzZWxlY3RlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0lmIHByZXNlbnQsIHRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIG9wdGlvbiBpcyBpbml0aWFsbHkgc2VsZWN0ZWQuIElmIHRoZSBgPG9wdGlvbj5gIGVsZW1lbnQgaXMgdGhlIGRlc2NlbmRhbnQgb2YgYSBbYDxzZWxlY3Q+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NlbGVjdCAiVGhlIEhUTUwgPHNlbGVjdD4gZWxlbWVudCByZXByZXNlbnRzIGEgY29udHJvbCB0aGF0IHByb3ZpZGVzIGEgbWVudSBvZiBvcHRpb25zIikgZWxlbWVudCB3aG9zZSBbYG11bHRpcGxlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NlbGVjdCNhdHRyLW11bHRpcGxlKSBhdHRyaWJ1dGUgaXMgbm90IHNldCwgb25seSBvbmUgc2luZ2xlIGA8b3B0aW9uPmAgb2YgdGhpcyBbYDxzZWxlY3Q+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NlbGVjdCAiVGhlIEhUTUwgPHNlbGVjdD4gZWxlbWVudCByZXByZXNlbnRzIGEgY29udHJvbCB0aGF0IHByb3ZpZGVzIGEgbWVudSBvZiBvcHRpb25zIikgZWxlbWVudCBtYXkgaGF2ZSB0aGUgYHNlbGVjdGVkYCBhdHRyaWJ1dGUuJ319LHtuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNvbnRlbnQgb2YgdGhpcyBhdHRyaWJ1dGUgcmVwcmVzZW50cyB0aGUgdmFsdWUgdG8gYmUgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0sIHNob3VsZCB0aGlzIG9wdGlvbiBiZSBzZWxlY3RlZC7CoElmIHRoaXMgYXR0cmlidXRlIGlzIG9taXR0ZWQsIHRoZSB2YWx1ZSBpcyB0YWtlbiBmcm9tIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIG9wdGlvbiBlbGVtZW50LiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29wdGlvbiJ9XX0se25hbWU6InRleHRhcmVhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGV4dGFyZWEgZWxlbWVudCByZXByZXNlbnRzIGEgbXVsdGlsaW5lIHBsYWluIHRleHQgZWRpdCBjb250cm9sIGZvciB0aGUgZWxlbWVudCdzIHJhdyB2YWx1ZS4gVGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIHJlcHJlc2VudCB0aGUgY29udHJvbCdzIGRlZmF1bHQgdmFsdWUuIn0sYXR0cmlidXRlczpbe25hbWU6ImF1dG9jb21wbGV0ZSIsdmFsdWVTZXQ6ImlucHV0YXV0b2NvbXBsZXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgY2FuIGJlIGF1dG9tYXRpY2FsbHkgY29tcGxldGVkIGJ5IHRoZSBicm93c2VyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG9mZmA6IFRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBlbnRlciBhIHZhbHVlIGludG8gdGhpcyBmaWVsZCBmb3IgZXZlcnkgdXNlLCBvciB0aGUgZG9jdW1lbnQgcHJvdmlkZXMgaXRzIG93biBhdXRvLWNvbXBsZXRpb24gbWV0aG9kOyB0aGUgYnJvd3NlciBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlIHRoZSBlbnRyeS5cbiogICBgb25gOiBUaGUgYnJvd3NlciBjYW4gYXV0b21hdGljYWxseSBjb21wbGV0ZSB0aGUgdmFsdWUgYmFzZWQgb24gdmFsdWVzIHRoYXQgdGhlIHVzZXIgaGFzIGVudGVyZWQgZHVyaW5nIHByZXZpb3VzIHVzZXMuXG5cbklmIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCBvbiBhIGA8dGV4dGFyZWE+YCBlbGVtZW50LCB0aGVuIHRoZSBicm93c2VyIHVzZXMgdGhlIGBhdXRvY29tcGxldGVgIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgYDx0ZXh0YXJlYT5gIGVsZW1lbnRcJ3MgZm9ybSBvd25lci4gVGhlIGZvcm0gb3duZXIgaXMgZWl0aGVyIHRoZSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IHRoYXQgdGhpcyBgPHRleHRhcmVhPmAgZWxlbWVudCBpcyBhIGRlc2NlbmRhbnQgb2Ygb3IgdGhlIGZvcm0gZWxlbWVudCB3aG9zZSBgaWRgIGlzIHNwZWNpZmllZCBieSB0aGUgYGZvcm1gIGF0dHJpYnV0ZSBvZiB0aGUgaW5wdXQgZWxlbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgW2BhdXRvY29tcGxldGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSNhdHRyLWF1dG9jb21wbGV0ZSkgYXR0cmlidXRlIGluIFtgPGZvcm0+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0gIlRoZSBIVE1MIDxmb3JtPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkb2N1bWVudCBzZWN0aW9uIHRoYXQgY29udGFpbnMgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHN1Ym1pdHRpbmcgaW5mb3JtYXRpb24gdG8gYSB3ZWIgc2VydmVyLiIpLid9fSx7bmFtZToiYXV0b2ZvY3VzIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBsZXRzIHlvdSBzcGVjaWZ5IHRoYXQgYSBmb3JtIGNvbnRyb2wgc2hvdWxkIGhhdmUgaW5wdXQgZm9jdXMgd2hlbiB0aGUgcGFnZSBsb2Fkcy4gT25seSBvbmUgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQgaW4gYSBkb2N1bWVudCBjYW4gaGF2ZSB0aGlzIGF0dHJpYnV0ZSBzcGVjaWZpZWQuIn19LHtuYW1lOiJjb2xzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdmlzaWJsZSB3aWR0aCBvZiB0aGUgdGV4dCBjb250cm9sLCBpbiBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aHMuIElmIGl0IGlzIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGAyMGAuIn19LHtuYW1lOiJkaXJuYW1lIn0se25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBjYW5ub3QgaW50ZXJhY3Qgd2l0aCB0aGUgY29udHJvbC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGNvbnRyb2wgaW5oZXJpdHMgaXRzIHNldHRpbmcgZnJvbSB0aGUgY29udGFpbmluZyBlbGVtZW50LCBmb3IgZXhhbXBsZSBbYDxmaWVsZHNldD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZmllbGRzZXQgIlRoZSBIVE1MIDxmaWVsZHNldD4gZWxlbWVudCBpcyB1c2VkIHRvIGdyb3VwIHNldmVyYWwgY29udHJvbHMgYXMgd2VsbCBhcyBsYWJlbHMgKDxsYWJlbD4pIHdpdGhpbiBhIHdlYiBmb3JtLiIpOyBpZiB0aGVyZSBpcyBubyBjb250YWluaW5nIGVsZW1lbnQgd2hlbiB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUgaXMgc2V0LCB0aGUgY29udHJvbCBpcyBlbmFibGVkLid9fSx7bmFtZToiZm9ybSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIGZvcm0gZWxlbWVudCB0aGF0IHRoZSBgPHRleHRhcmVhPmAgZWxlbWVudCBpcyBhc3NvY2lhdGVkIHdpdGggKGl0cyAiZm9ybSBvd25lciIpLiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBtdXN0IGJlIHRoZSBgaWRgIG9mIGEgZm9ybSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYDx0ZXh0YXJlYT5gIGVsZW1lbnQgbXVzdCBiZSBhIGRlc2NlbmRhbnQgb2YgYSBmb3JtIGVsZW1lbnQuIFRoaXMgYXR0cmlidXRlIGVuYWJsZXMgeW91IHRvIHBsYWNlIGA8dGV4dGFyZWE+YCBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgZm9ybSBlbGVtZW50cy4nfX0se25hbWU6ImlucHV0bW9kZSIsdmFsdWVTZXQ6ImltIn0se25hbWU6Im1heGxlbmd0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgKHVuaWNvZGUgY29kZSBwb2ludHMpIHRoYXQgdGhlIHVzZXIgY2FuIGVudGVyLiBJZiB0aGlzIHZhbHVlIGlzbid0IHNwZWNpZmllZCwgdGhlIHVzZXIgY2FuIGVudGVyIGFuIHVubGltaXRlZCBudW1iZXIgb2YgY2hhcmFjdGVycy4ifX0se25hbWU6Im1pbmxlbmd0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1pbmltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgKHVuaWNvZGUgY29kZSBwb2ludHMpIHJlcXVpcmVkIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGVudGVyLiJ9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wuIn19LHtuYW1lOiJwbGFjZWhvbGRlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSBoaW50IHRvIHRoZSB1c2VyIG9mIHdoYXQgY2FuIGJlIGVudGVyZWQgaW4gdGhlIGNvbnRyb2wuIENhcnJpYWdlIHJldHVybnMgb3IgbGluZS1mZWVkcyB3aXRoaW4gdGhlIHBsYWNlaG9sZGVyIHRleHQgbXVzdCBiZSB0cmVhdGVkIGFzIGxpbmUgYnJlYWtzIHdoZW4gcmVuZGVyaW5nIHRoZSBoaW50LlxuXG4qKk5vdGU6KiogUGxhY2Vob2xkZXJzIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gc2hvdyBhbiBleGFtcGxlIG9mIHRoZSB0eXBlIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgZW50ZXJlZCBpbnRvIGEgZm9ybTsgdGhleSBhcmUgX25vdF8gYSBzdWJzdGl0dXRlIGZvciBhIHByb3BlciBbYDxsYWJlbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGFiZWwgIlRoZSBIVE1MIDxsYWJlbD4gZWxlbWVudCByZXByZXNlbnRzIGEgY2FwdGlvbiBmb3IgYW4gaXRlbSBpbiBhIHVzZXIgaW50ZXJmYWNlLiIpIGVsZW1lbnQgdGllZCB0byB0aGUgaW5wdXQuIFNlZSBbTGFiZWxzIGFuZCBwbGFjZWhvbGRlcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNMYWJlbHNfYW5kX3BsYWNlaG9sZGVycyAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGluIFs8aW5wdXQ+OiBUaGUgSW5wdXQgKEZvcm0gSW5wdXQpIGVsZW1lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGZvciBhIGZ1bGwgZXhwbGFuYXRpb24uJ319LHtuYW1lOiJyZWFkb25seSIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgY2Fubm90IG1vZGlmeSB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuIFVubGlrZSB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUsIHRoZSBgcmVhZG9ubHlgIGF0dHJpYnV0ZSBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1c2VyIGZyb20gY2xpY2tpbmcgb3Igc2VsZWN0aW5nIGluIHRoZSBjb250cm9sLiBUaGUgdmFsdWUgb2YgYSByZWFkLW9ubHkgY29udHJvbCBpcyBzdGlsbCBzdWJtaXR0ZWQgd2l0aCB0aGUgZm9ybS4ifX0se25hbWU6InJlcXVpcmVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoYXQgdGhlIHVzZXIgbXVzdCBmaWxsIGluIGEgdmFsdWUgYmVmb3JlIHN1Ym1pdHRpbmcgYSBmb3JtLiJ9fSx7bmFtZToicm93cyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG51bWJlciBvZiB2aXNpYmxlIHRleHQgbGluZXMgZm9yIHRoZSBjb250cm9sLiJ9fSx7bmFtZToid3JhcCIsdmFsdWVTZXQ6InciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyBob3cgdGhlIGNvbnRyb2wgd3JhcHMgdGV4dC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBoYXJkYDogVGhlIGJyb3dzZXIgYXV0b21hdGljYWxseSBpbnNlcnRzIGxpbmUgYnJlYWtzIChDUitMRikgc28gdGhhdCBlYWNoIGxpbmUgaGFzIG5vIG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2w7IHRoZSBgY29sc2AgYXR0cmlidXRlIG11c3QgYWxzbyBiZSBzcGVjaWZpZWQgZm9yIHRoaXMgdG8gdGFrZSBlZmZlY3QuXG4qICAgYHNvZnRgOiBUaGUgYnJvd3NlciBlbnN1cmVzIHRoYXQgYWxsIGxpbmUgYnJlYWtzIGluIHRoZSB2YWx1ZSBjb25zaXN0IG9mIGEgQ1IrTEYgcGFpciwgYnV0IGRvZXMgbm90IGluc2VydCBhbnkgYWRkaXRpb25hbCBsaW5lIGJyZWFrcy5cbiogICBgb2ZmYCA6IExpa2UgYHNvZnRgIGJ1dCBjaGFuZ2VzIGFwcGVhcmFuY2UgdG8gYHdoaXRlLXNwYWNlOiBwcmVgIHNvIGxpbmUgc2VnbWVudHMgZXhjZWVkaW5nIGBjb2xzYCBhcmUgbm90IHdyYXBwZWQgYW5kIHRoZSBgPHRleHRhcmVhPmAgYmVjb21lcyBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgYHNvZnRgIGlzIGl0cyBkZWZhdWx0IHZhbHVlLiJ9fSx7bmFtZToiYXV0b2NhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJUaGlzIGlzIGEgbm9uLXN0YW5kYXJkIGF0dHJpYnV0ZSBzdXBwb3J0ZWQgYnkgV2ViS2l0IG9uIGlPUyAodGhlcmVmb3JlIG5lYXJseSBhbGwgYnJvd3NlcnMgcnVubmluZyBvbiBpT1MsIGluY2x1ZGluZyBTYWZhcmksIEZpcmVmb3gsIGFuZCBDaHJvbWUpLCB3aGljaCBjb250cm9scyB3aGV0aGVyIGFuZCBob3cgdGhlIHRleHQgdmFsdWUgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgY2FwaXRhbGl6ZWQgYXMgaXQgaXMgZW50ZXJlZC9lZGl0ZWQgYnkgdGhlIHVzZXIuIFRoZSBub24tZGVwcmVjYXRlZCB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBpbiBpT1MgNSBhbmQgbGF0ZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbm9uZWA6IENvbXBsZXRlbHkgZGlzYWJsZXMgYXV0b21hdGljIGNhcGl0YWxpemF0aW9uLlxuKiAgIGBzZW50ZW5jZXNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlciBvZiBzZW50ZW5jZXMuXG4qICAgYHdvcmRzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygd29yZHMuXG4qICAgYGNoYXJhY3RlcnNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgYWxsIGNoYXJhY3RlcnMuXG4qICAgYG9uYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS5cbiogICBgb2ZmYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS4ifSx7bmFtZToic3BlbGxjaGVjayIsZGVzY3JpcHRpb246IlNwZWNpZmllcyB3aGV0aGVyIHRoZSBgPHRleHRhcmVhPmAgaXMgc3ViamVjdCB0byBzcGVsbCBjaGVja2luZyBieSB0aGUgdW5kZXJseWluZyBicm93c2VyL09TLiB0aGUgdmFsdWUgY2FuIGJlOlxuXG4qICAgYHRydWVgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBuZWVkcyB0byBoYXZlIGl0cyBzcGVsbGluZyBhbmQgZ3JhbW1hciBjaGVja2VkLlxuKiAgIGBkZWZhdWx0YCA6IEluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IGlzIHRvIGFjdCBhY2NvcmRpbmcgdG8gYSBkZWZhdWx0IGJlaGF2aW9yLCBwb3NzaWJseSBiYXNlZCBvbiB0aGUgcGFyZW50IGVsZW1lbnQncyBvd24gYHNwZWxsY2hlY2tgIHZhbHVlLlxuKiAgIGBmYWxzZWAgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgbm90IGJlIHNwZWxsIGNoZWNrZWQuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZXh0YXJlYSJ9XX0se25hbWU6Im91dHB1dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG91dHB1dCBlbGVtZW50IHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBhIGNhbGN1bGF0aW9uIHBlcmZvcm1lZCBieSB0aGUgYXBwbGljYXRpb24sIG9yIHRoZSByZXN1bHQgb2YgYSB1c2VyIGFjdGlvbi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZm9yIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIG90aGVyIGVsZW1lbnRz4oCZIFtgaWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2lkKXMsIGluZGljYXRpbmcgdGhhdCB0aG9zZSBlbGVtZW50cyBjb250cmlidXRlZCBpbnB1dCB2YWx1ZXMgdG8gKG9yIG90aGVyd2lzZSBhZmZlY3RlZCkgdGhlIGNhbGN1bGF0aW9uLiJ9fSx7bmFtZToiZm9ybSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIFtmb3JtIGVsZW1lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtKSB0aGF0IHRoaXMgZWxlbWVudCBpcyBhc3NvY2lhdGVkIHdpdGggKGl0cyAiZm9ybSBvd25lciIpLiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGBpZGAgb2YgYSBmb3JtIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBvdXRwdXQgZWxlbWVudCBtdXN0IGJlIGEgZGVzY2VuZGFudCBvZiBhIGZvcm0gZWxlbWVudC4gVGhpcyBhdHRyaWJ1dGUgZW5hYmxlcyB5b3UgdG8gcGxhY2Ugb3V0cHV0IGVsZW1lbnRzIGFueXdoZXJlIHdpdGhpbiBhIGRvY3VtZW50LCBub3QganVzdCBhcyBkZXNjZW5kYW50cyBvZiB0aGVpciBmb3JtIGVsZW1lbnRzLid9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQsIGV4cG9zZWQgaW4gdGhlIFtgSFRNTEZvcm1FbGVtZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxGb3JtRWxlbWVudCAiVGhlIEhUTUxGb3JtRWxlbWVudCBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIDxmb3JtPiBlbGVtZW50IGluIHRoZSBET007IGl0IGFsbG93cyBhY2Nlc3MgdG8gYW5kIGluIHNvbWUgY2FzZXMgbW9kaWZpY2F0aW9uIG9mIGFzcGVjdHMgb2YgdGhlIGZvcm0sIGFzIHdlbGwgYXMgYWNjZXNzIHRvIGl0cyBjb21wb25lbnQgZWxlbWVudHMuIikgQVBJLid9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L291dHB1dCJ9XX0se25hbWU6InByb2dyZXNzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcHJvZ3Jlc3MgZWxlbWVudCByZXByZXNlbnRzIHRoZSBjb21wbGV0aW9uIHByb2dyZXNzIG9mIGEgdGFzay4gVGhlIHByb2dyZXNzIGlzIGVpdGhlciBpbmRldGVybWluYXRlLCBpbmRpY2F0aW5nIHRoYXQgcHJvZ3Jlc3MgaXMgYmVpbmcgbWFkZSBidXQgdGhhdCBpdCBpcyBub3QgY2xlYXIgaG93IG11Y2ggbW9yZSB3b3JrIHJlbWFpbnMgdG8gYmUgZG9uZSBiZWZvcmUgdGhlIHRhc2sgaXMgY29tcGxldGUgKGUuZy4gYmVjYXVzZSB0aGUgdGFzayBpcyB3YWl0aW5nIGZvciBhIHJlbW90ZSBob3N0IHRvIHJlc3BvbmQpLCBvciB0aGUgcHJvZ3Jlc3MgaXMgYSBudW1iZXIgaW4gdGhlIHJhbmdlIHplcm8gdG8gYSBtYXhpbXVtLCBnaXZpbmcgdGhlIGZyYWN0aW9uIG9mIHdvcmsgdGhhdCBoYXMgc28gZmFyIGJlZW4gY29tcGxldGVkLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBtdWNoIG9mIHRoZSB0YXNrIHRoYXQgaGFzIGJlZW4gY29tcGxldGVkLiBJdCBtdXN0IGJlIGEgdmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJldHdlZW4gMCBhbmQgYG1heGAsIG9yIGJldHdlZW4gMCBhbmQgMSBpZiBgbWF4YCBpcyBvbWl0dGVkLiBJZiB0aGVyZSBpcyBubyBgdmFsdWVgIGF0dHJpYnV0ZSwgdGhlIHByb2dyZXNzIGJhciBpcyBpbmRldGVybWluYXRlOyB0aGlzIGluZGljYXRlcyB0aGF0IGFuIGFjdGl2aXR5IGlzIG9uZ29pbmcgd2l0aCBubyBpbmRpY2F0aW9uIG9mIGhvdyBsb25nIGl0IGlzIGV4cGVjdGVkIHRvIHRha2UuIn19LHtuYW1lOiJtYXgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGRlc2NyaWJlcyBob3cgbXVjaCB3b3JrIHRoZSB0YXNrIGluZGljYXRlZCBieSB0aGUgYHByb2dyZXNzYCBlbGVtZW50IHJlcXVpcmVzLiBUaGUgYG1heGAgYXR0cmlidXRlLCBpZiBwcmVzZW50LCBtdXN0IGhhdmUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYmUgYSB2YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXIuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcHJvZ3Jlc3MifV19LHtuYW1lOiJtZXRlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1ldGVyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNjYWxhciBtZWFzdXJlbWVudCB3aXRoaW4gYSBrbm93biByYW5nZSwgb3IgYSBmcmFjdGlvbmFsIHZhbHVlOyBmb3IgZXhhbXBsZSBkaXNrIHVzYWdlLCB0aGUgcmVsZXZhbmNlIG9mIGEgcXVlcnkgcmVzdWx0LCBvciB0aGUgZnJhY3Rpb24gb2YgYSB2b3RpbmcgcG9wdWxhdGlvbiB0byBoYXZlIHNlbGVjdGVkIGEgcGFydGljdWxhciBjYW5kaWRhdGUuIn0sYXR0cmlidXRlczpbe25hbWU6InZhbHVlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY3VycmVudCBudW1lcmljIHZhbHVlLiBUaGlzIG11c3QgYmUgYmV0d2VlbiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgKGBtaW5gIGF0dHJpYnV0ZSBhbmQgYG1heGAgYXR0cmlidXRlKSBpZiB0aGV5IGFyZSBzcGVjaWZpZWQuIElmIHVuc3BlY2lmaWVkIG9yIG1hbGZvcm1lZCwgdGhlIHZhbHVlIGlzIDAuIElmIHNwZWNpZmllZCwgYnV0IG5vdCB3aXRoaW4gdGhlIHJhbmdlIGdpdmVuIGJ5IHRoZSBgbWluYCBhdHRyaWJ1dGUgYW5kIGBtYXhgIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBuZWFyZXN0IGVuZCBvZiB0aGUgcmFuZ2UuXG5cbioqVXNhZ2Ugbm90ZToqKiBVbmxlc3MgdGhlIGB2YWx1ZWAgYXR0cmlidXRlIGlzIGJldHdlZW4gYDBgIGFuZCBgMWAgKGluY2x1c2l2ZSksIHRoZSBgbWluYCBhbmQgYG1heGAgYXR0cmlidXRlcyBzaG91bGQgZGVmaW5lIHRoZSByYW5nZSBzbyB0aGF0IHRoZSBgdmFsdWVgIGF0dHJpYnV0ZSdzIHZhbHVlIGlzIHdpdGhpbiBpdC4ifX0se25hbWU6Im1pbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxvd2VyIG51bWVyaWMgYm91bmQgb2YgdGhlIG1lYXN1cmVkIHJhbmdlLiBUaGlzIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlIChgbWF4YCBhdHRyaWJ1dGUpLCBpZiBzcGVjaWZpZWQuIElmIHVuc3BlY2lmaWVkLCB0aGUgbWluaW11bSB2YWx1ZSBpcyAwLiJ9fSx7bmFtZToibWF4IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXBwZXIgbnVtZXJpYyBib3VuZCBvZiB0aGUgbWVhc3VyZWQgcmFuZ2UuIFRoaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUgKGBtaW5gIGF0dHJpYnV0ZSksIGlmIHNwZWNpZmllZC4gSWYgdW5zcGVjaWZpZWQsIHRoZSBtYXhpbXVtIHZhbHVlIGlzIDEuIn19LHtuYW1lOiJsb3ciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1cHBlciBudW1lcmljIGJvdW5kIG9mIHRoZSBsb3cgZW5kIG9mIHRoZSBtZWFzdXJlZCByYW5nZS4gVGhpcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAoYG1pbmAgYXR0cmlidXRlKSwgYW5kIGl0IGFsc28gbXVzdCBiZSBsZXNzIHRoYW4gdGhlIGhpZ2ggdmFsdWUgYW5kIG1heGltdW0gdmFsdWUgKGBoaWdoYCBhdHRyaWJ1dGUgYW5kIGBtYXhgIGF0dHJpYnV0ZSwgcmVzcGVjdGl2ZWx5KSwgaWYgYW55IGFyZSBzcGVjaWZpZWQuIElmIHVuc3BlY2lmaWVkLCBvciBpZiBsZXNzIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUsIHRoZSBgbG93YCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbWluaW11bSB2YWx1ZS4ifX0se25hbWU6ImhpZ2giLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBsb3dlciBudW1lcmljIGJvdW5kIG9mIHRoZSBoaWdoIGVuZCBvZiB0aGUgbWVhc3VyZWQgcmFuZ2UuIFRoaXMgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgKGBtYXhgIGF0dHJpYnV0ZSksIGFuZCBpdCBhbHNvIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBsb3cgdmFsdWUgYW5kIG1pbmltdW0gdmFsdWUgKGBsb3dgIGF0dHJpYnV0ZSBhbmQgKiptaW4qKiBhdHRyaWJ1dGUsIHJlc3BlY3RpdmVseSksIGlmIGFueSBhcmUgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCwgb3IgaWYgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlLCB0aGUgYGhpZ2hgIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBtYXhpbXVtIHZhbHVlLiJ9fSx7bmFtZToib3B0aW11bSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBvcHRpbWFsIG51bWVyaWMgdmFsdWUuIEl0IG11c3QgYmUgd2l0aGluIHRoZSByYW5nZSAoYXMgZGVmaW5lZCBieSB0aGUgYG1pbmAgYXR0cmlidXRlIGFuZCBgbWF4YCBhdHRyaWJ1dGUpLiBXaGVuIHVzZWQgd2l0aCB0aGUgYGxvd2AgYXR0cmlidXRlIGFuZCBgaGlnaGAgYXR0cmlidXRlLCBpdCBnaXZlcyBhbiBpbmRpY2F0aW9uIHdoZXJlIGFsb25nIHRoZSByYW5nZSBpcyBjb25zaWRlcmVkIHByZWZlcmFibGUuIEZvciBleGFtcGxlLCBpZiBpdCBpcyBiZXR3ZWVuIHRoZSBgbWluYCBhdHRyaWJ1dGUgYW5kIHRoZSBgbG93YCBhdHRyaWJ1dGUsIHRoZW4gdGhlIGxvd2VyIHJhbmdlIGlzIGNvbnNpZGVyZWQgcHJlZmVycmVkLiJ9fSx7bmFtZToiZm9ybSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGFzc29jaWF0ZXMgdGhlIGVsZW1lbnQgd2l0aCBhIGBmb3JtYCBlbGVtZW50IHRoYXQgaGFzIG93bmVyc2hpcCBvZiB0aGUgYG1ldGVyYCBlbGVtZW50LiBGb3IgZXhhbXBsZSwgYSBgbWV0ZXJgIG1pZ2h0IGJlIGRpc3BsYXlpbmcgYSByYW5nZSBjb3JyZXNwb25kaW5nIHRvIGFuIGBpbnB1dGAgZWxlbWVudCBvZiBgdHlwZWAgX251bWJlcl8uIFRoaXMgYXR0cmlidXRlIGlzIG9ubHkgdXNlZCBpZiB0aGUgYG1ldGVyYCBlbGVtZW50IGlzIGJlaW5nIHVzZWQgYXMgYSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudDsgZXZlbiB0aGVuLCBpdCBtYXkgYmUgb21pdHRlZCBpZiB0aGUgZWxlbWVudCBhcHBlYXJzIGFzIGEgZGVzY2VuZGFudCBvZiBhIGBmb3JtYCBlbGVtZW50LiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0ZXIifV19LHtuYW1lOiJmaWVsZHNldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZpZWxkc2V0IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNldCBvZiBmb3JtIGNvbnRyb2xzIG9wdGlvbmFsbHkgZ3JvdXBlZCB1bmRlciBhIGNvbW1vbiBuYW1lLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklmIHRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaXMgc2V0LCBhbGwgZm9ybSBjb250cm9scyB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiB0aGUgYDxmaWVsZHNldD5gLCBhcmUgZGlzYWJsZWQsIG1lYW5pbmcgdGhleSBhcmUgbm90IGVkaXRhYmxlIGFuZCB3b24ndCBiZSBzdWJtaXR0ZWQgYWxvbmcgd2l0aCB0aGUgYDxmb3JtPmAuIFRoZXkgd29uJ3QgcmVjZWl2ZSBhbnkgYnJvd3NpbmcgZXZlbnRzLCBsaWtlIG1vdXNlIGNsaWNrcyBvciBmb2N1cy1yZWxhdGVkIGV2ZW50cy4gQnkgZGVmYXVsdCBicm93c2VycyBkaXNwbGF5IHN1Y2ggY29udHJvbHMgZ3JheWVkIG91dC4gTm90ZSB0aGF0IGZvcm0gZWxlbWVudHMgaW5zaWRlIHRoZSBbYDxsZWdlbmQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xlZ2VuZCBcIlRoZSBIVE1MIDxsZWdlbmQ+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gZm9yIHRoZSBjb250ZW50IG9mIGl0cyBwYXJlbnQgPGZpZWxkc2V0Pi5cIikgZWxlbWVudCB3b24ndCBiZSBkaXNhYmxlZC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIHRha2VzIHRoZSB2YWx1ZSBvZiB0aGUgYGlkYCBhdHRyaWJ1dGUgb2YgYSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IHlvdSB3YW50IHRoZSBgPGZpZWxkc2V0PmAgdG8gYmUgcGFydCBvZiwgZXZlbiBpZiBpdCBpcyBub3QgaW5zaWRlIHRoZSBmb3JtLid9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBncm91cC5cblxuKipOb3RlKio6IFRoZSBjYXB0aW9uIGZvciB0aGUgZmllbGRzZXQgaXMgZ2l2ZW4gYnkgdGhlIGZpcnN0IFtgPGxlZ2VuZD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGVnZW5kICJUaGUgSFRNTCA8bGVnZW5kPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGZvciB0aGUgY29udGVudCBvZiBpdHMgcGFyZW50IDxmaWVsZHNldD4uIikgZWxlbWVudCBuZXN0ZWQgaW5zaWRlIGl0Lid9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZWxkc2V0In1dfSx7bmFtZToibGVnZW5kIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbGVnZW5kIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gZm9yIHRoZSByZXN0IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgbGVnZW5kIGVsZW1lbnQncyBwYXJlbnQgZmllbGRzZXQgZWxlbWVudCwgaWYgYW55LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xlZ2VuZCJ9XX0se25hbWU6ImRldGFpbHMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkZXRhaWxzIGVsZW1lbnQgcmVwcmVzZW50cyBhIGRpc2Nsb3N1cmUgd2lkZ2V0IGZyb20gd2hpY2ggdGhlIHVzZXIgY2FuIG9idGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9yIGNvbnRyb2xzLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJvcGVuIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGRldGFpbHMg4oCUIHRoYXQgaXMsIHRoZSBjb250ZW50cyBvZiB0aGUgYDxkZXRhaWxzPmAgZWxlbWVudCDigJQgYXJlIGN1cnJlbnRseSB2aXNpYmxlLiBUaGUgZGVmYXVsdCwgYGZhbHNlYCwgbWVhbnMgdGhlIGRldGFpbHMgYXJlIG5vdCB2aXNpYmxlLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RldGFpbHMifV19LHtuYW1lOiJzdW1tYXJ5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3VtbWFyeSBlbGVtZW50IHJlcHJlc2VudHMgYSBzdW1tYXJ5LCBjYXB0aW9uLCBvciBsZWdlbmQgZm9yIHRoZSByZXN0IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgc3VtbWFyeSBlbGVtZW50J3MgcGFyZW50IGRldGFpbHMgZWxlbWVudCwgaWYgYW55LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N1bW1hcnkifV19LHtuYW1lOiJkaWFsb2ciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkaWFsb2cgZWxlbWVudCByZXByZXNlbnRzIGEgcGFydCBvZiBhbiBhcHBsaWNhdGlvbiB0aGF0IGEgdXNlciBpbnRlcmFjdHMgd2l0aCB0byBwZXJmb3JtIGEgdGFzaywgZm9yIGV4YW1wbGUgYSBkaWFsb2cgYm94LCBpbnNwZWN0b3IsIG9yIHdpbmRvdy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToib3BlbiIsZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGF0IHRoZSBkaWFsb2cgaXMgYWN0aXZlIGFuZCBhdmFpbGFibGUgZm9yIGludGVyYWN0aW9uLiBXaGVuIHRoZSBgb3BlbmAgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBkaWFsb2cgc2hvdWxkbid0IGJlIHNob3duIHRvIHRoZSB1c2VyLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGlhbG9nIn1dfSx7bmFtZToic2NyaXB0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc2NyaXB0IGVsZW1lbnQgYWxsb3dzIGF1dGhvcnMgdG8gaW5jbHVkZSBkeW5hbWljIHNjcmlwdCBhbmQgZGF0YSBibG9ja3MgaW4gdGhlaXIgZG9jdW1lbnRzLiBUaGUgZWxlbWVudCBkb2VzIG5vdCByZXByZXNlbnQgY29udGVudCBmb3IgdGhlIHVzZXIuIn0sYXR0cmlidXRlczpbe25hbWU6InNyYyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBVUkkgb2YgYW4gZXh0ZXJuYWwgc2NyaXB0OyB0aGlzIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIGVtYmVkZGluZyBhIHNjcmlwdCBkaXJlY3RseSB3aXRoaW4gYSBkb2N1bWVudC5cblxuSWYgYSBgc2NyaXB0YCBlbGVtZW50IGhhcyBhIGBzcmNgIGF0dHJpYnV0ZSBzcGVjaWZpZWQsIGl0IHNob3VsZCBub3QgaGF2ZSBhIHNjcmlwdCBlbWJlZGRlZCBpbnNpZGUgaXRzIHRhZ3MuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIHR5cGUgb2Ygc2NyaXB0IHJlcHJlc2VudGVkLiBUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgd2lsbCBiZSBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzOlxuXG4qICAgKipPbWl0dGVkIG9yIGEgSmF2YVNjcmlwdCBNSU1FIHR5cGU6KiogRm9yIEhUTUw1LWNvbXBsaWFudCBicm93c2VycyB0aGlzIGluZGljYXRlcyB0aGUgc2NyaXB0IGlzIEphdmFTY3JpcHQuIEhUTUw1IHNwZWNpZmljYXRpb24gdXJnZXMgYXV0aG9ycyB0byBvbWl0IHRoZSBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4gcHJvdmlkZSBhIHJlZHVuZGFudCBNSU1FIHR5cGUuIEluIGVhcmxpZXIgYnJvd3NlcnMsIHRoaXMgaWRlbnRpZmllZCB0aGUgc2NyaXB0aW5nIGxhbmd1YWdlIG9mIHRoZSBlbWJlZGRlZCBvciBpbXBvcnRlZCAodmlhIHRoZSBgc3JjYCBhdHRyaWJ1dGUpIGNvZGUuIEphdmFTY3JpcHQgTUlNRSB0eXBlcyBhcmUgW2xpc3RlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9NSU1FX3R5cGVzI0phdmFTY3JpcHRfdHlwZXMpLlxuKiAgICoqYG1vZHVsZWA6KiogRm9yIEhUTUw1LWNvbXBsaWFudCBicm93c2VycyB0aGUgY29kZSBpcyB0cmVhdGVkIGFzIGEgSmF2YVNjcmlwdCBtb2R1bGUuIFRoZSBwcm9jZXNzaW5nIG9mIHRoZSBzY3JpcHQgY29udGVudHMgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBgY2hhcnNldGAgYW5kIGBkZWZlcmAgYXR0cmlidXRlcy4gRm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIGBtb2R1bGVgLCBzZWUgW0VTNiBpbiBEZXB0aDogTW9kdWxlc10oaHR0cHM6Ly9oYWNrcy5tb3ppbGxhLm9yZy8yMDE1LzA4L2VzNi1pbi1kZXB0aC1tb2R1bGVzLykuIENvZGUgbWF5IGJlaGF2ZSBkaWZmZXJlbnRseSB3aGVuIHRoZSBgbW9kdWxlYCBrZXl3b3JkIGlzIHVzZWQuXG4qICAgKipBbnkgb3RoZXIgdmFsdWU6KiogVGhlIGVtYmVkZGVkIGNvbnRlbnQgaXMgdHJlYXRlZCBhcyBhIGRhdGEgYmxvY2sgd2hpY2ggd29uXCd0IGJlIHByb2Nlc3NlZCBieSB0aGUgYnJvd3Nlci4gRGV2ZWxvcGVycyBtdXN0IHVzZSBhIHZhbGlkIE1JTUUgdHlwZSB0aGF0IGlzIG5vdCBhIEphdmFTY3JpcHQgTUlNRSB0eXBlIHRvIGRlbm90ZSBkYXRhIGJsb2Nrcy4gVGhlIGBzcmNgIGF0dHJpYnV0ZSB3aWxsIGJlIGlnbm9yZWQuXG5cbioqTm90ZToqKiBpbiBGaXJlZm94IHlvdSBjb3VsZCBzcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIEphdmFTY3JpcHQgY29udGFpbmVkIGluIGEgYDxzY3JpcHQ+YCBlbGVtZW50IGJ5IGluY2x1ZGluZyBhIG5vbi1zdGFuZGFyZCBgdmVyc2lvbmAgcGFyYW1ldGVyIGluc2lkZSB0aGUgYHR5cGVgIGF0dHJpYnV0ZSDigJQgZm9yIGV4YW1wbGUgYHR5cGU9InRleHQvamF2YXNjcmlwdDt2ZXJzaW9uPTEuOCJgLiBUaGlzIGhhcyBiZWVuIHJlbW92ZWQgaW4gRmlyZWZveCA1OSAoc2VlIFtidWfCoDE0Mjg3NDVdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE0Mjg3NDUgIkZJWEVEOiBSZW1vdmUgc3VwcG9ydCBmb3IgdmVyc2lvbiBwYXJhbWV0ZXIgZnJvbSBzY3JpcHQgbG9hZGVyIikpLid9fSx7bmFtZToiY2hhcnNldCJ9LHtuYW1lOiJhc3luYyIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6YFRoaXMgaXMgYSBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGJyb3dzZXIgc2hvdWxkLCBpZiBwb3NzaWJsZSwgbG9hZCB0aGUgc2NyaXB0IGFzeW5jaHJvbm91c2x5LgoKVGhpcyBhdHRyaWJ1dGUgbXVzdCBub3QgYmUgdXNlZCBpZiB0aGUgXGBzcmNcYCBhdHRyaWJ1dGUgaXMgYWJzZW50IChpLmUuIGZvciBpbmxpbmUgc2NyaXB0cykuIElmIGl0IGlzIGluY2x1ZGVkIGluIHRoaXMgY2FzZSBpdCB3aWxsIGhhdmUgbm8gZWZmZWN0LgoKQnJvd3NlcnMgdXN1YWxseSBhc3N1bWUgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gYW5kIGxvYWQgc2NyaXB0cyBzeW5jaHJvbm91c2x5LCAoaS5lLiBcYGFzeW5jPSJmYWxzZSJcYCkgZHVyaW5nIEhUTUwgcGFyc2luZy4KCkR5bmFtaWNhbGx5IGluc2VydGVkIHNjcmlwdHMgKHVzaW5nIFtcYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKVxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvY3JlYXRlRWxlbWVudCAiSW4gYW4gSFRNTCBkb2N1bWVudCwgdGhlIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKSBtZXRob2QgY3JlYXRlcyB0aGUgSFRNTCBlbGVtZW50IHNwZWNpZmllZCBieSB0YWdOYW1lLCBvciBhbiBIVE1MVW5rbm93bkVsZW1lbnQgaWYgdGFnTmFtZSBpc24ndCByZWNvZ25pemVkLiIpKSBsb2FkIGFzeW5jaHJvbm91c2x5IGJ5IGRlZmF1bHQsIHNvIHRvIHR1cm4gb24gc3luY2hyb25vdXMgbG9hZGluZyAoaS5lLiBzY3JpcHRzIGxvYWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBpbnNlcnRlZCkgc2V0IFxgYXN5bmM9ImZhbHNlIlxgLgoKU2VlIFtCcm93c2VyIGNvbXBhdGliaWxpdHldKCNCcm93c2VyX2NvbXBhdGliaWxpdHkpIGZvciBub3RlcyBvbiBicm93c2VyIHN1cHBvcnQuIFNlZSBhbHNvIFtBc3luYyBzY3JpcHRzIGZvciBhc20uanNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2FtZXMvVGVjaG5pcXVlcy9Bc3luY19zY3JpcHRzKS5gfX0se25hbWU6ImRlZmVyIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpcyBzZXQgdG8gaW5kaWNhdGUgdG8gYSBicm93c2VyIHRoYXQgdGhlIHNjcmlwdCBpcyBtZWFudCB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gcGFyc2VkLCBidXQgYmVmb3JlIGZpcmluZyBbYERPTUNvbnRlbnRMb2FkZWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvRE9NQ29udGVudExvYWRlZCAiL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9ET01Db250ZW50TG9hZGVkIikuXG5cblNjcmlwdHMgd2l0aCB0aGUgYGRlZmVyYCBhdHRyaWJ1dGUgd2lsbCBwcmV2ZW50IHRoZSBgRE9NQ29udGVudExvYWRlZGAgZXZlbnQgZnJvbSBmaXJpbmcgdW50aWwgdGhlIHNjcmlwdCBoYXMgbG9hZGVkIGFuZCBmaW5pc2hlZCBldmFsdWF0aW5nLlxuXG5UaGlzIGF0dHJpYnV0ZSBtdXN0IG5vdCBiZSB1c2VkIGlmIHRoZSBgc3JjYCBhdHRyaWJ1dGUgaXMgYWJzZW50IChpLmUuIGZvciBpbmxpbmUgc2NyaXB0cyksIGluIHRoaXMgY2FzZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdC5cblxuVG8gYWNoaWV2ZSBhIHNpbWlsYXIgZWZmZWN0IGZvciBkeW5hbWljYWxseSBpbnNlcnRlZCBzY3JpcHRzIHVzZSBgYXN5bmM9ImZhbHNlImAgaW5zdGVhZC4gU2NyaXB0cyB3aXRoIHRoZSBgZGVmZXJgIGF0dHJpYnV0ZSB3aWxsIGV4ZWN1dGUgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoZSBkb2N1bWVudC4nfX0se25hbWU6ImNyb3Nzb3JpZ2luIix2YWx1ZVNldDoieG8iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J05vcm1hbCBgc2NyaXB0YCBlbGVtZW50cyBwYXNzIG1pbmltYWwgaW5mb3JtYXRpb24gdG8gdGhlIFtgd2luZG93Lm9uZXJyb3JgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2xvYmFsRXZlbnRIYW5kbGVycy9vbmVycm9yICJUaGUgb25lcnJvciBwcm9wZXJ0eSBvZiB0aGUgR2xvYmFsRXZlbnRIYW5kbGVycyBtaXhpbiBpcyBhbiBFdmVudEhhbmRsZXIgdGhhdCBwcm9jZXNzZXMgZXJyb3IgZXZlbnRzLiIpIGZvciBzY3JpcHRzIHdoaWNoIGRvIG5vdCBwYXNzIHRoZSBzdGFuZGFyZCBbQ09SU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9DT1JTICJDT1JTOiBDT1JTIChDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZykgaXMgYSBzeXN0ZW0sIGNvbnNpc3Rpbmcgb2YgdHJhbnNtaXR0aW5nIEhUVFAgaGVhZGVycywgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYnJvd3NlcnMgYmxvY2sgZnJvbnRlbmQgSmF2YVNjcmlwdCBjb2RlIGZyb20gYWNjZXNzaW5nIHJlc3BvbnNlcyBmb3IgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLiIpIGNoZWNrcy4gVG8gYWxsb3cgZXJyb3IgbG9nZ2luZyBmb3Igc2l0ZXMgd2hpY2ggdXNlIGEgc2VwYXJhdGUgZG9tYWluIGZvciBzdGF0aWMgbWVkaWEsIHVzZSB0aGlzIGF0dHJpYnV0ZS4gU2VlIFtDT1JTIHNldHRpbmdzIGF0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQ09SU19zZXR0aW5nc19hdHRyaWJ1dGVzKSBmb3IgYSBtb3JlIGRlc2NyaXB0aXZlIGV4cGxhbmF0aW9uIG9mIGl0cyB2YWxpZCBhcmd1bWVudHMuJ319LHtuYW1lOiJub25jZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBjcnlwdG9ncmFwaGljIG5vbmNlIChudW1iZXIgdXNlZCBvbmNlKSB0byBsaXN0IHRoZSBhbGxvd2VkIGlubGluZSBzY3JpcHRzIGluIGEgW3NjcmlwdC1zcmMgQ29udGVudC1TZWN1cml0eS1Qb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LVNlY3VyaXR5LVBvbGljeS9zY3JpcHQtc3JjKS4gVGhlIHNlcnZlciBtdXN0IGdlbmVyYXRlIGEgdW5pcXVlIG5vbmNlIHZhbHVlIGVhY2ggdGltZSBpdCB0cmFuc21pdHMgYSBwb2xpY3kuIEl0IGlzIGNyaXRpY2FsIHRvIHByb3ZpZGUgYSBub25jZSB0aGF0IGNhbm5vdCBiZSBndWVzc2VkIGFzIGJ5cGFzc2luZyBhIHJlc291cmNlJ3MgcG9saWN5IGlzIG90aGVyd2lzZSB0cml2aWFsLiJ9fSx7bmFtZToiaW50ZWdyaXR5IixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgaW5saW5lIG1ldGFkYXRhIHRoYXQgYSB1c2VyIGFnZW50IGNhbiB1c2UgdG8gdmVyaWZ5IHRoYXQgYSBmZXRjaGVkIHJlc291cmNlIGhhcyBiZWVuIGRlbGl2ZXJlZCBmcmVlIG9mIHVuZXhwZWN0ZWQgbWFuaXB1bGF0aW9uLiBTZWUgW1N1YnJlc291cmNlIEludGVncml0eV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU3VicmVzb3VyY2VfSW50ZWdyaXR5KS4ifSx7bmFtZToibm9tb2R1bGUiLGRlc2NyaXB0aW9uOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzY3JpcHQgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgW0VTMjAxNSBtb2R1bGVzXShodHRwczovL2hhY2tzLm1vemlsbGEub3JnLzIwMTUvMDgvZXM2LWluLWRlcHRoLW1vZHVsZXMvKSDigJQgaW4gZWZmZWN0LCB0aGlzIGNhbiBiZSB1c2VkIHRvIHNlcnZlIGZhbGxiYWNrIHNjcmlwdHMgdG8gb2xkZXIgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBtb2R1bGFyIEphdmFTY3JpcHQgY29kZS4ifSx7bmFtZToicmVmZXJyZXJwb2xpY3kiLGRlc2NyaXB0aW9uOidJbmRpY2F0ZXMgd2hpY2ggW3JlZmVycmVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvcmVmZXJyZXIpIHRvIHNlbmQgd2hlbiBmZXRjaGluZyB0aGUgc2NyaXB0LCBvciByZXNvdXJjZXMgZmV0Y2hlZCBieSB0aGUgc2NyaXB0OlxuXG4qICAgYG5vLXJlZmVycmVyYDogVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZWAgKGRlZmF1bHQpOiBUaGUgW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQgdG8gW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9vcmlnaW4gIm9yaWdpbjogV2ViIGNvbnRlbnRcJ3Mgb3JpZ2luIGlzIGRlZmluZWQgYnkgdGhlIHNjaGVtZSAocHJvdG9jb2wpLCBob3N0IChkb21haW4pLCBhbmQgcG9ydCBvZiB0aGUgVVJMIHVzZWQgdG8gYWNjZXNzIGl0LiBUd28gb2JqZWN0cyBoYXZlIHRoZSBzYW1lIG9yaWdpbiBvbmx5IHdoZW4gdGhlIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgYWxsIG1hdGNoLiIpcyB3aXRob3V0IFtUTFNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvVExTICJUTFM6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSwgcHJldmlvdXNseSBrbm93biBhcyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSwgaXMgYSBwcm90b2NvbCB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0byBjb21tdW5pY2F0ZSBzZWN1cmVseSBhY3Jvc3MgYSBuZXR3b3JrLCBwcmV2ZW50aW5nIHRhbXBlcmluZyB3aXRoIGFuZCBlYXZlc2Ryb3BwaW5nIG9uIGVtYWlsLCB3ZWIgYnJvd3NpbmcsIG1lc3NhZ2luZywgYW5kIG90aGVyIHByb3RvY29scy4iKSAoW0hUVFBTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0hUVFBTICJIVFRQUzogSFRUUFMgKEhUVFAgU2VjdXJlKSBpcyBhbiBlbmNyeXB0ZWQgdmVyc2lvbiBvZiB0aGUgSFRUUCBwcm90b2NvbC4gSXQgdXN1YWxseSB1c2VzIFNTTCBvciBUTFMgdG8gZW5jcnlwdCBhbGwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGEgY2xpZW50IGFuZCBhIHNlcnZlci4gVGhpcyBzZWN1cmUgY29ubmVjdGlvbiBhbGxvd3MgY2xpZW50cyB0byBzYWZlbHkgZXhjaGFuZ2Ugc2Vuc2l0aXZlIGRhdGEgd2l0aCBhIHNlcnZlciwgZm9yIGV4YW1wbGUgZm9yIGJhbmtpbmcgYWN0aXZpdGllcyBvciBvbmxpbmUgc2hvcHBpbmcuIikpLlxuKiAgIGBvcmlnaW5gOiBUaGUgc2VudCByZWZlcnJlciB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcmVmZXJyaW5nIHBhZ2U6IGl0cyBbc2NoZW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0FyY2hpdmUvTW96aWxsYS9VUklTY2hlbWUpLCBbaG9zdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9ob3N0ICJob3N0OiBBIGhvc3QgaXMgYSBkZXZpY2UgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCAob3IgYSBsb2NhbCBuZXR3b3JrKS4gU29tZSBob3N0cyBjYWxsZWQgc2VydmVycyBvZmZlciBhZGRpdGlvbmFsIHNlcnZpY2VzIGxpa2Ugc2VydmluZyB3ZWJwYWdlcyBvciBzdG9yaW5nIGZpbGVzIGFuZCBlbWFpbHMuIiksIGFuZCBbcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9wb3J0ICJwb3J0OiBGb3IgYSBjb21wdXRlciBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrIHdpdGggYW4gSVAgYWRkcmVzcywgYSBwb3J0IGlzIGEgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gUG9ydHMgYXJlIGRlc2lnbmF0ZWQgYnkgbnVtYmVycywgYW5kIGJlbG93IDEwMjQgZWFjaCBwb3J0IGlzIGFzc29jaWF0ZWQgYnkgZGVmYXVsdCB3aXRoIGEgc3BlY2lmaWMgcHJvdG9jb2wuIikuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmA6IFRoZSByZWZlcnJlciBzZW50IHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuIE5hdmlnYXRpb25zIG9uIHRoZSBzYW1lIG9yaWdpbiB3aWxsIHN0aWxsIGluY2x1ZGUgdGhlIHBhdGguXG4qICAgYHNhbWUtb3JpZ2luYDogQSByZWZlcnJlciB3aWxsIGJlIHNlbnQgZm9yIFtzYW1lIG9yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9TYW1lLW9yaWdpbl9wb2xpY3kgInNhbWUgb3JpZ2luOiBUaGUgc2FtZS1vcmlnaW4gcG9saWN5IGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgbWVjaGFuaXNtIHRoYXQgcmVzdHJpY3RzIGhvdyBhIGRvY3VtZW50IG9yIHNjcmlwdCBsb2FkZWQgZnJvbSBvbmUgb3JpZ2luIGNhbiBpbnRlcmFjdCB3aXRoIGEgcmVzb3VyY2UgZnJvbSBhbm90aGVyIG9yaWdpbi4iKSwgYnV0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyB3aWxsIGNvbnRhaW4gbm8gcmVmZXJyZXIgaW5mb3JtYXRpb24uXG4qICAgYHN0cmljdC1vcmlnaW5gOiBPbmx5IHNlbmQgdGhlIG9yaWdpbiBvZiB0aGUgZG9jdW1lbnQgYXMgdGhlIHJlZmVycmVyIHdoZW4gdGhlIHByb3RvY29sIHNlY3VyaXR5IGxldmVsIHN0YXlzIHRoZSBzYW1lIChlLmcuIEhUVFBT4oaSSFRUUFMpLCBidXQgZG9uXCd0IHNlbmQgaXQgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoZS5nLiBIVFRQU+KGkkhUVFApLlxuKiAgIGBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luYDogU2VuZCBhIGZ1bGwgVVJMIHdoZW4gcGVyZm9ybWluZyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QsIGJ1dCBvbmx5IHNlbmQgdGhlIG9yaWdpbiB3aGVuIHRoZSBwcm90b2NvbCBzZWN1cml0eSBsZXZlbCBzdGF5cyB0aGUgc2FtZSAoZS5nLkhUVFBT4oaSSFRUUFMpLCBhbmQgc2VuZCBubyBoZWFkZXIgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoZS5nLiBIVFRQU+KGkkhUVFApLlxuKiAgIGB1bnNhZmUtdXJsYDogVGhlIHJlZmVycmVyIHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luIF9hbmRfIHRoZSBwYXRoIChidXQgbm90IHRoZSBbZnJhZ21lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzL2hhc2gpLCBbcGFzc3dvcmRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzL3Bhc3N3b3JkKSwgb3IgW3VzZXJuYW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy91c2VybmFtZSkpLiAqKlRoaXMgdmFsdWUgaXMgdW5zYWZlKiosIGJlY2F1c2UgaXQgbGVha3Mgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLlxuXG4qKk5vdGUqKjogQW4gZW1wdHkgc3RyaW5nIHZhbHVlIChgIiJgKSBpcyBib3RoIHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgYSBmYWxsYmFjayB2YWx1ZSBpZiBgcmVmZXJyZXJwb2xpY3lgIGlzIG5vdCBzdXBwb3J0ZWQuIElmIGByZWZlcnJlcnBvbGljeWAgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIG9uIHRoZSBgPHNjcmlwdD5gIGVsZW1lbnQsIGl0IHdpbGwgYWRvcHQgYSBoaWdoZXItbGV2ZWwgcmVmZXJyZXIgcG9saWN5LCBpLmUuIG9uZSBzZXQgb24gdGhlIHdob2xlIGRvY3VtZW50IG9yIGRvbWFpbi4gSWYgYSBoaWdoZXItbGV2ZWwgcG9saWN5IGlzIG5vdCBhdmFpbGFibGUswqB0aGUgZW1wdHkgc3RyaW5nIGlzIHRyZWF0ZWQgYXMgYmVpbmcgZXF1aXZhbGVudCB0byBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGVgLid9LHtuYW1lOiJ0ZXh0IixkZXNjcmlwdGlvbjoiTGlrZSB0aGUgYHRleHRDb250ZW50YCBhdHRyaWJ1dGUsIHRoaXMgYXR0cmlidXRlIHNldHMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZWxlbWVudC4gVW5saWtlIHRoZSBgdGV4dENvbnRlbnRgIGF0dHJpYnV0ZSwgaG93ZXZlciwgdGhpcyBhdHRyaWJ1dGUgaXMgZXZhbHVhdGVkIGFzIGV4ZWN1dGFibGUgY29kZSBhZnRlciB0aGUgbm9kZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBET00uIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQifV19LHtuYW1lOiJub3NjcmlwdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5vc2NyaXB0IGVsZW1lbnQgcmVwcmVzZW50cyBub3RoaW5nIGlmIHNjcmlwdGluZyBpcyBlbmFibGVkLCBhbmQgcmVwcmVzZW50cyBpdHMgY2hpbGRyZW4gaWYgc2NyaXB0aW5nIGlzIGRpc2FibGVkLiBJdCBpcyB1c2VkIHRvIHByZXNlbnQgZGlmZmVyZW50IG1hcmt1cCB0byB1c2VyIGFnZW50cyB0aGF0IHN1cHBvcnQgc2NyaXB0aW5nIGFuZCB0aG9zZSB0aGF0IGRvbid0IHN1cHBvcnQgc2NyaXB0aW5nLCBieSBhZmZlY3RpbmcgaG93IHRoZSBkb2N1bWVudCBpcyBwYXJzZWQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbm9zY3JpcHQifV19LHtuYW1lOiJ0ZW1wbGF0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRlbXBsYXRlIGVsZW1lbnQgaXMgdXNlZCB0byBkZWNsYXJlIGZyYWdtZW50cyBvZiBIVE1MIHRoYXQgY2FuIGJlIGNsb25lZCBhbmQgaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50IGJ5IHNjcmlwdC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZW1wbGF0ZSJ9XX0se25hbWU6ImNhbnZhcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNhbnZhcyBlbGVtZW50IHByb3ZpZGVzIHNjcmlwdHMgd2l0aCBhIHJlc29sdXRpb24tZGVwZW5kZW50IGJpdG1hcCBjYW52YXMsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgZ3JhcGhzLCBnYW1lIGdyYXBoaWNzLCBhcnQsIG9yIG90aGVyIHZpc3VhbCBpbWFnZXMgb24gdGhlIGZseS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB3aWR0aCBvZiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBpbiBDU1MgcGl4ZWxzLiBEZWZhdWx0cyB0byAzMDAuIn19LHtuYW1lOiJoZWlnaHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZWlnaHQgb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdHMgdG8gMTUwLiJ9fSx7bmFtZToibW96LW9wYXF1ZSIsZGVzY3JpcHRpb246IkxldHMgdGhlIGNhbnZhcyBrbm93IHdoZXRoZXIgb3Igbm90IHRyYW5zbHVjZW5jeSB3aWxsIGJlIGEgZmFjdG9yLiBJZiB0aGUgY2FudmFzIGtub3dzIHRoZXJlJ3Mgbm8gdHJhbnNsdWNlbmN5LCBwYWludGluZyBwZXJmb3JtYW5jZSBjYW4gYmUgb3B0aW1pemVkLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IE1vemlsbGEtYmFzZWQgYnJvd3NlcnM7IHVzZSB0aGUgc3RhbmRhcmRpemVkIFtgY2FudmFzLmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogZmFsc2UgfSlgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTENhbnZhc0VsZW1lbnQvZ2V0Q29udGV4dCBcIlRoZSBIVE1MQ2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCkgbWV0aG9kIHJldHVybnMgYSBkcmF3aW5nIGNvbnRleHQgb24gdGhlIGNhbnZhcywgb3IgbnVsbCBpZiB0aGUgY29udGV4dCBpZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuXCIpIGluc3RlYWQuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMifV19LHtuYW1lOiJzbG90IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc2xvdCBlbGVtZW50IGlzIGEgcGxhY2Vob2xkZXIgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCB0aGF0IHlvdSBjYW4gZmlsbCB3aXRoIHlvdXIgb3duIG1hcmt1cCwgd2hpY2ggbGV0cyB5b3UgY3JlYXRlIHNlcGFyYXRlIERPTSB0cmVlcyBhbmQgcHJlc2VudCB0aGVtIHRvZ2V0aGVyLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc2xvdCdzIG5hbWUuXG5BICoqbmFtZWQgc2xvdCoqIGlzIGEgYDxzbG90PmAgZWxlbWVudCB3aXRoIGEgYG5hbWVgIGF0dHJpYnV0ZS4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbG90In1dfSx7bmFtZToiZGF0YSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRhdGEgZWxlbWVudCBsaW5rcyBhIGdpdmVuIHBpZWNlIG9mIGNvbnRlbnQgd2l0aCBhIG1hY2hpbmUtcmVhZGFibGUgdHJhbnNsYXRpb24uIn0sYXR0cmlidXRlczpbe25hbWU6InZhbHVlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIG1hY2hpbmUtcmVhZGFibGUgdHJhbnNsYXRpb24gb2YgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGF0YSJ9XX0se25hbWU6Imhncm91cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhncm91cCBlbGVtZW50IHJlcHJlc2VudHMgYSBoZWFkaW5nIGFuZCByZWxhdGVkIGNvbnRlbnQuIEl0IGdyb3VwcyBhIHNpbmdsZSBoMeKAk2g2IGVsZW1lbnQgd2l0aCBvbmUgb3IgbW9yZSBwLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2hncm91cCJ9XX0se25hbWU6Im1lbnUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZW51IGVsZW1lbnQgcmVwcmVzZW50cyBhbiB1bm9yZGVyZWQgbGlzdCBvZiBpbnRlcmFjdGl2ZSBpdGVtcy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZW51In1dfV0sZ2xvYmFsQXR0cmlidXRlczpbe25hbWU6ImFjY2Vzc2tleSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUHJvdmlkZXMgYSBoaW50IGZvciBnZW5lcmF0aW5nIGEga2V5Ym9hcmQgc2hvcnRjdXQgZm9yIHRoZSBjdXJyZW50IGVsZW1lbnQuIFRoaXMgYXR0cmlidXRlIGNvbnNpc3RzIG9mIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcmFjdGVycy4gVGhlIGJyb3dzZXIgc2hvdWxkIHVzZSB0aGUgZmlyc3Qgb25lIHRoYXQgZXhpc3RzIG9uIHRoZSBjb21wdXRlciBrZXlib2FyZCBsYXlvdXQuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9hY2Nlc3NrZXkifV19LHtuYW1lOiJhdXRvY2FwaXRhbGl6ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29udHJvbHMgd2hldGhlciBhbmQgaG93IHRleHQgaW5wdXQgaXMgYXV0b21hdGljYWxseSBjYXBpdGFsaXplZCBhcyBpdCBpcyBlbnRlcmVkL2VkaXRlZCBieSB0aGUgdXNlci4gSXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgb2ZmYCBvciBgbm9uZWAsIG5vIGF1dG9jYXBpdGFsaXphdGlvbiBpcyBhcHBsaWVkIChhbGwgbGV0dGVycyBkZWZhdWx0IHRvIGxvd2VyY2FzZSlcbiogICBgb25gIG9yIGBzZW50ZW5jZXNgLCB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggc2VudGVuY2UgZGVmYXVsdHMgdG8gYSBjYXBpdGFsIGxldHRlcjsgYWxsIG90aGVyIGxldHRlcnMgZGVmYXVsdCB0byBsb3dlcmNhc2VcbiogICBgd29yZHNgLCB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBkZWZhdWx0cyB0byBhIGNhcGl0YWwgbGV0dGVyOyBhbGwgb3RoZXIgbGV0dGVycyBkZWZhdWx0IHRvIGxvd2VyY2FzZVxuKiAgIGBjaGFyYWN0ZXJzYCwgYWxsIGxldHRlcnMgc2hvdWxkIGRlZmF1bHQgdG8gdXBwZXJjYXNlIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9hdXRvY2FwaXRhbGl6ZSJ9XX0se25hbWU6ImNsYXNzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBjbGFzc2VzIG9mIHRoZSBlbGVtZW50LiBDbGFzc2VzIGFsbG93cyBDU1MgYW5kIEphdmFTY3JpcHQgdG8gc2VsZWN0IGFuZCBhY2Nlc3Mgc3BlY2lmaWMgZWxlbWVudHMgdmlhIHRoZSBbY2xhc3Mgc2VsZWN0b3JzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9DU1MvQ2xhc3Nfc2VsZWN0b3JzKSBvciBmdW5jdGlvbnMgbGlrZSB0aGUgbWV0aG9kIFtgRG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0RvY3VtZW50L2dldEVsZW1lbnRzQnlDbGFzc05hbWUgInJldHVybnMgYW4gYXJyYXktbGlrZSBvYmplY3Qgb2YgYWxsIGNoaWxkIGVsZW1lbnRzIHdoaWNoIGhhdmUgYWxsIG9mIHRoZSBnaXZlbiBjbGFzcyBuYW1lcy4iKS4nfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2NsYXNzIn1dfSx7bmFtZToiY29udGVudGVkaXRhYmxlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIGlmIHRoZSBlbGVtZW50IHNob3VsZCBiZSBlZGl0YWJsZSBieSB0aGUgdXNlci4gSWYgc28sIHRoZSBicm93c2VyIG1vZGlmaWVzIGl0cyB3aWRnZXQgdG8gYWxsb3cgZWRpdGluZy4gVGhlIGF0dHJpYnV0ZSBtdXN0IHRha2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYHRydWVgIG9yIHRoZSBfZW1wdHkgc3RyaW5nXywgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbXVzdCBiZSBlZGl0YWJsZTtcbiogICBgZmFsc2VgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBtdXN0IG5vdCBiZSBlZGl0YWJsZS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2NvbnRlbnRlZGl0YWJsZSJ9XX0se25hbWU6ImNvbnRleHRtZW51IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGUgYFsqKmlkKipdKCNhdHRyLWlkKWAgb2YgYSBbYDxtZW51PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZW51ICJUaGUgSFRNTCA8bWVudT4gZWxlbWVudCByZXByZXNlbnRzIGEgZ3JvdXAgb2YgY29tbWFuZHMgdGhhdCBhIHVzZXIgY2FuIHBlcmZvcm0gb3IgYWN0aXZhdGUuIFRoaXMgaW5jbHVkZXMgYm90aCBsaXN0IG1lbnVzLCB3aGljaCBtaWdodCBhcHBlYXIgYWNyb3NzIHRoZSB0b3Agb2YgYSBzY3JlZW4sIGFzIHdlbGwgYXMgY29udGV4dCBtZW51cywgc3VjaCBhcyB0aG9zZSB0aGF0IG1pZ2h0IGFwcGVhciB1bmRlcm5lYXRoIGEgYnV0dG9uIGFmdGVyIGl0IGhhcyBiZWVuIGNsaWNrZWQuIikgdG8gdXNlIGFzIHRoZSBjb250ZXh0dWFsIG1lbnUgZm9yIHRoaXMgZWxlbWVudC4nfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2NvbnRleHRtZW51In1dfSx7bmFtZToiZGlyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYGx0cmAsIHdoaWNoIG1lYW5zIF9sZWZ0IHRvIHJpZ2h0XyBhbmQgaXMgdG8gYmUgdXNlZCBmb3IgbGFuZ3VhZ2VzIHRoYXQgYXJlIHdyaXR0ZW4gZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQgKGxpa2UgRW5nbGlzaCk7XG4qICAgYHJ0bGAsIHdoaWNoIG1lYW5zIF9yaWdodCB0byBsZWZ0XyBhbmQgaXMgdG8gYmUgdXNlZCBmb3IgbGFuZ3VhZ2VzIHRoYXQgYXJlIHdyaXR0ZW4gZnJvbSB0aGUgcmlnaHQgdG8gdGhlIGxlZnQgKGxpa2UgQXJhYmljKTtcbiogICBgYXV0b2AsIHdoaWNoIGxldHMgdGhlIHVzZXIgYWdlbnQgZGVjaWRlLiBJdCB1c2VzIGEgYmFzaWMgYWxnb3JpdGhtIGFzIGl0IHBhcnNlcyB0aGUgY2hhcmFjdGVycyBpbnNpZGUgdGhlIGVsZW1lbnQgdW50aWwgaXQgZmluZHMgYSBjaGFyYWN0ZXIgd2l0aCBhIHN0cm9uZyBkaXJlY3Rpb25hbGl0eSwgdGhlbiBpdCBhcHBsaWVzIHRoYXQgZGlyZWN0aW9uYWxpdHkgdG8gdGhlIHdob2xlIGVsZW1lbnQuIn0sdmFsdWVTZXQ6ImQiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvZGlyIn1dfSx7bmFtZToiZHJhZ2dhYmxlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGVsZW1lbnQgY2FuIGJlIGRyYWdnZWQsIHVzaW5nIHRoZSBbRHJhZyBhbmQgRHJvcCBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvRHJhZ0Ryb3AvRHJhZ19hbmRfRHJvcCkuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYHRydWVgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBtYXkgYmUgZHJhZ2dlZFxuKiAgIGBmYWxzZWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IG1heSBub3QgYmUgZHJhZ2dlZC4ifSx2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9kcmFnZ2FibGUifV19LHtuYW1lOiJkcm9wem9uZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGluZyB3aGF0IHR5cGVzIG9mIGNvbnRlbnQgY2FuIGJlIGRyb3BwZWQgb24gYW4gZWxlbWVudCwgdXNpbmcgdGhlIFtEcmFnIGFuZCBEcm9wIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9EcmFnRHJvcC9EcmFnX2FuZF9Ecm9wKS4gSXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgY29weWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IGRyb3BwaW5nIHdpbGwgY3JlYXRlIGEgY29weSBvZiB0aGUgZWxlbWVudCB0aGF0IHdhcyBkcmFnZ2VkXG4qICAgYG1vdmVgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCB0aGF0IHdhcyBkcmFnZ2VkIHdpbGwgYmUgbW92ZWQgdG8gdGhpcyBuZXcgbG9jYXRpb24uXG4qICAgYGxpbmtgLCB3aWxsIGNyZWF0ZSBhIGxpbmsgdG8gdGhlIGRyYWdnZWQgZGF0YS4ifX0se25hbWU6ImV4cG9ydHBhcnRzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJVc2VkIHRvIHRyYW5zaXRpdmVseSBleHBvcnQgc2hhZG93IHBhcnRzIGZyb20gYSBuZXN0ZWQgc2hhZG93IHRyZWUgaW50byBhIGNvbnRhaW5pbmcgbGlnaHQgdHJlZS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2V4cG9ydHBhcnRzIn1dfSx7bmFtZToiaGlkZGVuIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IGlzIG5vdCB5ZXQsIG9yIGlzIG5vIGxvbmdlciwgX3JlbGV2YW50Xy4gRm9yIGV4YW1wbGUsIGl0IGNhbiBiZSB1c2VkIHRvIGhpZGUgZWxlbWVudHMgb2YgdGhlIHBhZ2UgdGhhdCBjYW4ndCBiZSB1c2VkIHVudGlsIHRoZSBsb2dpbiBwcm9jZXNzIGhhcyBiZWVuIGNvbXBsZXRlZC4gVGhlIGJyb3dzZXIgd29uJ3QgcmVuZGVyIHN1Y2ggZWxlbWVudHMuIFRoaXMgYXR0cmlidXRlIG11c3Qgbm90IGJlIHVzZWQgdG8gaGlkZSBjb250ZW50IHRoYXQgY291bGQgbGVnaXRpbWF0ZWx5IGJlIHNob3duLiJ9LHZhbHVlU2V0OiJ2IixyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2hpZGRlbiJ9XX0se25hbWU6ImlkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIGEgdW5pcXVlIGlkZW50aWZpZXIgKElEKSB3aGljaCBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgd2hvbGUgZG9jdW1lbnQuIEl0cyBwdXJwb3NlIGlzIHRvIGlkZW50aWZ5IHRoZSBlbGVtZW50IHdoZW4gbGlua2luZyAodXNpbmcgYSBmcmFnbWVudCBpZGVudGlmaWVyKSwgc2NyaXB0aW5nLCBvciBzdHlsaW5nICh3aXRoIENTUykuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pZCJ9XX0se25hbWU6ImlucHV0bW9kZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonUHJvdmlkZXMgYSBoaW50IHRvIGJyb3dzZXJzIGFzIHRvIHRoZSB0eXBlIG9mIHZpcnR1YWwga2V5Ym9hcmQgY29uZmlndXJhdGlvbiB0byB1c2Ugd2hlbiBlZGl0aW5nIHRoaXMgZWxlbWVudCBvciBpdHMgY29udGVudHMuIFVzZWQgcHJpbWFyaWx5IG9uIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnRzLCBidXQgaXMgdXNhYmxlIG9uIGFueSBlbGVtZW50IHdoaWxlIGluIGBbY29udGVudGVkaXRhYmxlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItY29udGVudGVkaXRhYmxlKWAgbW9kZS4nfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2lucHV0bW9kZSJ9XX0se25hbWU6ImlzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhhdCBhIHN0YW5kYXJkIEhUTUwgZWxlbWVudCBzaG91bGQgYmVoYXZlIGxpa2UgYSByZWdpc3RlcmVkIGN1c3RvbSBidWlsdC1pbiBlbGVtZW50IChzZWUgW1VzaW5nIGN1c3RvbSBlbGVtZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvV2ViX0NvbXBvbmVudHMvVXNpbmdfY3VzdG9tX2VsZW1lbnRzKSBmb3IgbW9yZSBkZXRhaWxzKS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2lzIn1dfSx7bmFtZToiaXRlbWlkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdW5pcXVlLCBnbG9iYWwgaWRlbnRpZmllciBvZiBhbiBpdGVtLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbWlkIn1dfSx7bmFtZToiaXRlbXByb3AiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlVzZWQgdG8gYWRkIHByb3BlcnRpZXMgdG8gYW4gaXRlbS4gRXZlcnkgSFRNTCBlbGVtZW50IG1heSBoYXZlIGFuIGBpdGVtcHJvcGAgYXR0cmlidXRlIHNwZWNpZmllZCwgd2hlcmUgYW4gYGl0ZW1wcm9wYCBjb25zaXN0cyBvZiBhIG5hbWUgYW5kIHZhbHVlIHBhaXIuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pdGVtcHJvcCJ9XX0se25hbWU6Iml0ZW1yZWYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGRlc2NlbmRhbnRzIG9mIGFuIGVsZW1lbnQgd2l0aCB0aGUgYGl0ZW1zY29wZWAgYXR0cmlidXRlIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGl0ZW0gdXNpbmcgYW4gYGl0ZW1yZWZgLiBJdCBwcm92aWRlcyBhIGxpc3Qgb2YgZWxlbWVudCBpZHMgKG5vdCBgaXRlbWlkYHMpIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGVsc2V3aGVyZSBpbiB0aGUgZG9jdW1lbnQuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pdGVtcmVmIn1dfSx7bmFtZToiaXRlbXNjb3BlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJgaXRlbXNjb3BlYCAodXN1YWxseSkgd29ya3MgYWxvbmcgd2l0aCBgW2l0ZW10eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaXRlbXR5cGUpYCB0byBzcGVjaWZ5IHRoYXQgdGhlIEhUTUwgY29udGFpbmVkIGluIGEgYmxvY2sgaXMgYWJvdXQgYSBwYXJ0aWN1bGFyIGl0ZW0uIGBpdGVtc2NvcGVgIGNyZWF0ZXMgdGhlIEl0ZW0gYW5kIGRlZmluZXMgdGhlIHNjb3BlIG9mIHRoZSBgaXRlbXR5cGVgIGFzc29jaWF0ZWQgd2l0aCBpdC4gYGl0ZW10eXBlYCBpcyBhIHZhbGlkIFVSTCBvZiBhIHZvY2FidWxhcnkgKHN1Y2ggYXMgW3NjaGVtYS5vcmddKGh0dHBzOi8vc2NoZW1hLm9yZy8pKSB0aGF0IGRlc2NyaWJlcyB0aGUgaXRlbSBhbmQgaXRzIHByb3BlcnRpZXMgY29udGV4dC4ifSx2YWx1ZVNldDoidiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pdGVtc2NvcGUifV19LHtuYW1lOiJpdGVtdHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSBVUkwgb2YgdGhlIHZvY2FidWxhcnkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGVmaW5lIGBpdGVtcHJvcGBzIChpdGVtIHByb3BlcnRpZXMpIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gYFtpdGVtc2NvcGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMjYXR0ci1pdGVtc2NvcGUpYCBpcyB1c2VkIHRvIHNldCB0aGUgc2NvcGUgb2Ygd2hlcmUgaW4gdGhlIGRhdGEgc3RydWN0dXJlIHRoZSB2b2NhYnVsYXJ5IHNldCBieSBgaXRlbXR5cGVgIHdpbGwgYmUgYWN0aXZlLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXR5cGUifV19LHtuYW1lOiJsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJIZWxwcyBkZWZpbmUgdGhlIGxhbmd1YWdlIG9mIGFuIGVsZW1lbnQ6IHRoZSBsYW5ndWFnZSB0aGF0IG5vbi1lZGl0YWJsZSBlbGVtZW50cyBhcmUgaW4sIG9yIHRoZSBsYW5ndWFnZSB0aGF0IGVkaXRhYmxlIGVsZW1lbnRzIHNob3VsZCBiZSB3cml0dGVuIGluIGJ5IHRoZSB1c2VyLiBUaGUgYXR0cmlidXRlIGNvbnRhaW5zIG9uZSDigJxsYW5ndWFnZSB0YWfigJ0gKG1hZGUgb2YgaHlwaGVuLXNlcGFyYXRlZCDigJxsYW5ndWFnZSBzdWJ0YWdz4oCdKSBpbiB0aGUgZm9ybWF0IGRlZmluZWQgaW4gW19UYWdzIGZvciBJZGVudGlmeWluZyBMYW5ndWFnZXMgKEJDUDQ3KV9dKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9iY3AvYmNwNDcudHh0KS4gWyoqeG1sOmxhbmcqKl0oI2F0dHIteG1sOmxhbmcpIGhhcyBwcmlvcml0eSBvdmVyIGl0LiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvbGFuZyJ9XX0se25hbWU6InBhcnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0Egc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHBhcnQgbmFtZXMgb2YgdGhlIGVsZW1lbnQuIFBhcnQgbmFtZXMgYWxsb3dzIENTUyB0byBzZWxlY3QgYW5kIHN0eWxlIHNwZWNpZmljIGVsZW1lbnRzIGluIGEgc2hhZG93IHRyZWUgdmlhIHRoZSBbYDo6cGFydGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0NTUy86OnBhcnQgIlRoZSA6OnBhcnQgQ1NTIHBzZXVkby1lbGVtZW50IHJlcHJlc2VudHMgYW55IGVsZW1lbnQgd2l0aGluIGEgc2hhZG93IHRyZWUgdGhhdCBoYXMgYSBtYXRjaGluZyBwYXJ0IGF0dHJpYnV0ZS4iKSBwc2V1ZG8tZWxlbWVudC4nfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3BhcnQifV19LHtuYW1lOiJyb2xlIix2YWx1ZVNldDoicm9sZXMifSx7bmFtZToic2xvdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQXNzaWducyBhIHNsb3QgaW4gYSBbc2hhZG93IERPTV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvV2ViX0NvbXBvbmVudHMvU2hhZG93X0RPTSkgc2hhZG93IHRyZWUgdG8gYW4gZWxlbWVudDogQW4gZWxlbWVudCB3aXRoIGEgYHNsb3RgIGF0dHJpYnV0ZSBpcyBhc3NpZ25lZCB0byB0aGUgc2xvdCBjcmVhdGVkIGJ5IHRoZSBbYDxzbG90PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbG90IFwiVGhlIEhUTUwgPHNsb3Q+IGVsZW1lbnTigJRwYXJ0IG9mIHRoZSBXZWIgQ29tcG9uZW50cyB0ZWNobm9sb2d5IHN1aXRl4oCUaXMgYSBwbGFjZWhvbGRlciBpbnNpZGUgYSB3ZWIgY29tcG9uZW50IHRoYXQgeW91IGNhbiBmaWxsIHdpdGggeW91ciBvd24gbWFya3VwLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUgc2VwYXJhdGUgRE9NIHRyZWVzIGFuZCBwcmVzZW50IHRoZW0gdG9nZXRoZXIuXCIpIGVsZW1lbnQgd2hvc2UgYFtuYW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2xvdCNhdHRyLW5hbWUpYCBhdHRyaWJ1dGUncyB2YWx1ZSBtYXRjaGVzIHRoYXQgYHNsb3RgIGF0dHJpYnV0ZSdzIHZhbHVlLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvc2xvdCJ9XX0se25hbWU6InNwZWxsY2hlY2siLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVudW1lcmF0ZWQgYXR0cmlidXRlIGRlZmluZXMgd2hldGhlciB0aGUgZWxlbWVudCBtYXkgYmUgY2hlY2tlZCBmb3Igc3BlbGxpbmcgZXJyb3JzLiBJdCBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGB0cnVlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlLCBpZiBwb3NzaWJsZSwgY2hlY2tlZCBmb3Igc3BlbGxpbmcgZXJyb3JzO1xuKiAgIGBmYWxzZWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBub3QgYmUgY2hlY2tlZCBmb3Igc3BlbGxpbmcgZXJyb3JzLiJ9LHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3NwZWxsY2hlY2sifV19LHtuYW1lOiJzdHlsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQ29udGFpbnMgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQ1NTKSBzdHlsaW5nIGRlY2xhcmF0aW9ucyB0byBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LiBOb3RlIHRoYXQgaXQgaXMgcmVjb21tZW5kZWQgZm9yIHN0eWxlcyB0byBiZSBkZWZpbmVkIGluIGEgc2VwYXJhdGUgZmlsZSBvciBmaWxlcy4gVGhpcyBhdHRyaWJ1dGUgYW5kIHRoZSBbYDxzdHlsZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3R5bGUgIlRoZSBIVE1MIDxzdHlsZT4gZWxlbWVudCBjb250YWlucyBzdHlsZSBpbmZvcm1hdGlvbiBmb3IgYSBkb2N1bWVudCwgb3IgcGFydCBvZiBhIGRvY3VtZW50LiIpIGVsZW1lbnQgaGF2ZSBtYWlubHkgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgZm9yIHF1aWNrIHN0eWxpbmcsIGZvciBleGFtcGxlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLid9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvc3R5bGUifV19LHtuYW1lOiJ0YWJpbmRleCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTpgQW4gaW50ZWdlciBhdHRyaWJ1dGUgaW5kaWNhdGluZyBpZiB0aGUgZWxlbWVudCBjYW4gdGFrZSBpbnB1dCBmb2N1cyAoaXMgX2ZvY3VzYWJsZV8pLCBpZiBpdCBzaG91bGQgcGFydGljaXBhdGUgdG8gc2VxdWVudGlhbCBrZXlib2FyZCBuYXZpZ2F0aW9uLCBhbmQgaWYgc28sIGF0IHdoYXQgcG9zaXRpb24uIEl0IGNhbiB0YWtlIHNldmVyYWwgdmFsdWVzOgoKKiAgIGEgX25lZ2F0aXZlIHZhbHVlXyBtZWFucyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBmb2N1c2FibGUsIGJ1dCBzaG91bGQgbm90IGJlIHJlYWNoYWJsZSB2aWEgc2VxdWVudGlhbCBrZXlib2FyZCBuYXZpZ2F0aW9uOwoqICAgXGAwXGAgbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgZm9jdXNhYmxlIGFuZCByZWFjaGFibGUgdmlhIHNlcXVlbnRpYWwga2V5Ym9hcmQgbmF2aWdhdGlvbiwgYnV0IGl0cyByZWxhdGl2ZSBvcmRlciBpcyBkZWZpbmVkIGJ5IHRoZSBwbGF0Zm9ybSBjb252ZW50aW9uOwoqICAgYSBfcG9zaXRpdmUgdmFsdWVfIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGZvY3VzYWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzZXF1ZW50aWFsIGtleWJvYXJkIG5hdmlnYXRpb247IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZWxlbWVudHMgYXJlIGZvY3VzZWQgaXMgdGhlIGluY3JlYXNpbmcgdmFsdWUgb2YgdGhlIFsqKnRhYmluZGV4KipdKCNhdHRyLXRhYmluZGV4KS4gSWYgc2V2ZXJhbCBlbGVtZW50cyBzaGFyZSB0aGUgc2FtZSB0YWJpbmRleCwgdGhlaXIgcmVsYXRpdmUgb3JkZXIgZm9sbG93cyB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbnMgaW4gdGhlIGRvY3VtZW50LmB9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdGFiaW5kZXgifV19LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29udGFpbnMgYSB0ZXh0IHJlcHJlc2VudGluZyBhZHZpc29yeSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBlbGVtZW50IGl0IGJlbG9uZ3MgdG8uIFN1Y2ggaW5mb3JtYXRpb24gY2FuIHR5cGljYWxseSwgYnV0IG5vdCBuZWNlc3NhcmlseSwgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFzIGEgdG9vbHRpcC4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RpdGxlIn1dfSx7bmFtZToidHJhbnNsYXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSB0aGF0IGlzIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGUgdmFsdWVzIGFuZCB0aGUgdmFsdWVzIG9mIGl0cyBbYFRleHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvVGV4dCBcIlRoZSBUZXh0IGludGVyZmFjZSByZXByZXNlbnRzIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb2YgRWxlbWVudCBvciBBdHRyLiBJZiBhbiBlbGVtZW50IGhhcyBubyBtYXJrdXAgd2l0aGluIGl0cyBjb250ZW50LCBpdCBoYXMgYSBzaW5nbGUgY2hpbGQgaW1wbGVtZW50aW5nIFRleHQgdGhhdCBjb250YWlucyB0aGUgZWxlbWVudCdzIHRleHQuIEhvd2V2ZXIsIGlmIHRoZSBlbGVtZW50IGNvbnRhaW5zIG1hcmt1cCwgaXQgaXMgcGFyc2VkIGludG8gaW5mb3JtYXRpb24gaXRlbXMgYW5kIFRleHQgbm9kZXMgdGhhdCBmb3JtIGl0cyBjaGlsZHJlbi5cIikgbm9kZSBjaGlsZHJlbiBhcmUgdG8gYmUgdHJhbnNsYXRlZCB3aGVuIHRoZSBwYWdlIGlzIGxvY2FsaXplZCwgb3Igd2hldGhlciB0byBsZWF2ZSB0aGVtIHVuY2hhbmdlZC4gSXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBlbXB0eSBzdHJpbmcgYW5kIGB5ZXNgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCB3aWxsIGJlIHRyYW5zbGF0ZWQuXG4qICAgYG5vYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBub3QgYmUgdHJhbnNsYXRlZC4ifSx2YWx1ZVNldDoieSIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy90cmFuc2xhdGUifV19LHtuYW1lOiJvbmFib3J0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbG9hZGluZyBvZiBhIHJlc291cmNlIGhhcyBiZWVuIGFib3J0ZWQuIn19LHtuYW1lOiJvbmJsdXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVsZW1lbnQgaGFzIGxvc3QgZm9jdXMgKGRvZXMgbm90IGJ1YmJsZSkuIn19LHtuYW1lOiJvbmNhbnBsYXkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1c2VyIGFnZW50IGNhbiBwbGF5IHRoZSBtZWRpYSwgYnV0IGVzdGltYXRlcyB0aGF0IG5vdCBlbm91Z2ggZGF0YSBoYXMgYmVlbiBsb2FkZWQgdG8gcGxheSB0aGUgbWVkaWEgdXAgdG8gaXRzIGVuZCB3aXRob3V0IGhhdmluZyB0byBzdG9wIGZvciBmdXJ0aGVyIGJ1ZmZlcmluZyBvZiBjb250ZW50LiJ9fSx7bmFtZToib25jYW5wbGF5dGhyb3VnaCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVzZXIgYWdlbnQgY2FuIHBsYXkgdGhlIG1lZGlhIHVwIHRvIGl0cyBlbmQgd2l0aG91dCBoYXZpbmcgdG8gc3RvcCBmb3IgZnVydGhlciBidWZmZXJpbmcgb2YgY29udGVudC4ifX0se25hbWU6Im9uY2hhbmdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY2hhbmdlIGV2ZW50IGlzIGZpcmVkIGZvciA8aW5wdXQ+LCA8c2VsZWN0PiwgYW5kIDx0ZXh0YXJlYT4gZWxlbWVudHMgd2hlbiBhIGNoYW5nZSB0byB0aGUgZWxlbWVudCdzIHZhbHVlIGlzIGNvbW1pdHRlZCBieSB0aGUgdXNlci4ifX0se25hbWU6Im9uY2xpY2siLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkIGFuZCByZWxlYXNlZCBvbiBhbiBlbGVtZW50LiJ9fSx7bmFtZToib25jb250ZXh0bWVudSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHJpZ2h0IGJ1dHRvbiBvZiB0aGUgbW91c2UgaXMgY2xpY2tlZCAoYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgZGlzcGxheWVkKS4ifX0se25hbWU6Im9uZGJsY2xpY2siLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiBpcyBjbGlja2VkIHR3aWNlIG9uIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbmRyYWciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVsZW1lbnQgb3IgdGV4dCBzZWxlY3Rpb24gaXMgYmVpbmcgZHJhZ2dlZCAoZXZlcnkgMzUwbXMpLiJ9fSx7bmFtZToib25kcmFnZW5kIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGRyYWcgb3BlcmF0aW9uIGlzIGJlaW5nIGVuZGVkIChieSByZWxlYXNpbmcgYSBtb3VzZSBidXR0b24gb3IgaGl0dGluZyB0aGUgZXNjYXBlIGtleSkuIn19LHtuYW1lOiJvbmRyYWdlbnRlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBkcmFnZ2VkIGVsZW1lbnQgb3IgdGV4dCBzZWxlY3Rpb24gZW50ZXJzIGEgdmFsaWQgZHJvcCB0YXJnZXQuIn19LHtuYW1lOiJvbmRyYWdsZWF2ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBkcmFnZ2VkIGVsZW1lbnQgb3IgdGV4dCBzZWxlY3Rpb24gbGVhdmVzIGEgdmFsaWQgZHJvcCB0YXJnZXQuIn19LHtuYW1lOiJvbmRyYWdvdmVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGlzIGJlaW5nIGRyYWdnZWQgb3ZlciBhIHZhbGlkIGRyb3AgdGFyZ2V0IChldmVyeSAzNTBtcykuIn19LHtuYW1lOiJvbmRyYWdzdGFydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVzZXIgc3RhcnRzIGRyYWdnaW5nIGFuIGVsZW1lbnQgb3IgdGV4dCBzZWxlY3Rpb24uIn19LHtuYW1lOiJvbmRyb3AiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVsZW1lbnQgaXMgZHJvcHBlZCBvbiBhIHZhbGlkIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToib25kdXJhdGlvbmNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGR1cmF0aW9uIGF0dHJpYnV0ZSBoYXMgYmVlbiB1cGRhdGVkLiJ9fSx7bmFtZToib25lbXB0aWVkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbWVkaWEgaGFzIGJlY29tZSBlbXB0eTsgZm9yIGV4YW1wbGUsIHRoaXMgZXZlbnQgaXMgc2VudCBpZiB0aGUgbWVkaWEgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQgKG9yIHBhcnRpYWxseSBsb2FkZWQpLCBhbmQgdGhlIGxvYWQoKSBtZXRob2QgaXMgY2FsbGVkIHRvIHJlbG9hZCBpdC4ifX0se25hbWU6Im9uZW5kZWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBsYXliYWNrIGhhcyBzdG9wcGVkIGJlY2F1c2UgdGhlIGVuZCBvZiB0aGUgbWVkaWEgd2FzIHJlYWNoZWQuIn19LHtuYW1lOiJvbmVycm9yIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHJlc291cmNlIGZhaWxlZCB0byBsb2FkLiJ9fSx7bmFtZToib25mb2N1cyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZWxlbWVudCBoYXMgcmVjZWl2ZWQgZm9jdXMgKGRvZXMgbm90IGJ1YmJsZSkuIn19LHtuYW1lOiJvbmZvcm1jaGFuZ2UifSx7bmFtZToib25mb3JtaW5wdXQifSx7bmFtZToib25pbnB1dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQgY2hhbmdlcyBvciB0aGUgY29udGVudCBvZiBhbiBlbGVtZW50IHdpdGggdGhlIGF0dHJpYnV0ZSBjb250ZW50ZWRpdGFibGUgaXMgbW9kaWZpZWQuIn19LHtuYW1lOiJvbmludmFsaWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgc3VibWl0dGFibGUgZWxlbWVudCBoYXMgYmVlbiBjaGVja2VkIGFuZCBkb2Vzbid0IHNhdGlzZnkgaXRzIGNvbnN0cmFpbnRzLiJ9fSx7bmFtZToib25rZXlkb3duIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGtleSBpcyBwcmVzc2VkIGRvd24uIn19LHtuYW1lOiJvbmtleXByZXNzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGtleSBpcyBwcmVzc2VkIGRvd24gYW5kIHRoYXQga2V5IG5vcm1hbGx5IHByb2R1Y2VzIGEgY2hhcmFjdGVyIHZhbHVlICh1c2UgaW5wdXQgaW5zdGVhZCkuIn19LHtuYW1lOiJvbmtleXVwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGtleSBpcyByZWxlYXNlZC4ifX0se25hbWU6Im9ubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSByZXNvdXJjZSBhbmQgaXRzIGRlcGVuZGVudCByZXNvdXJjZXMgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nLiJ9fSx7bmFtZToib25sb2FkZWRkYXRhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZmlyc3QgZnJhbWUgb2YgdGhlIG1lZGlhIGhhcyBmaW5pc2hlZCBsb2FkaW5nLiJ9fSx7bmFtZToib25sb2FkZWRtZXRhZGF0YSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1ldGFkYXRhIGhhcyBiZWVuIGxvYWRlZC4ifX0se25hbWU6Im9ubG9hZHN0YXJ0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQcm9ncmVzcyBoYXMgYmVndW4uIn19LHtuYW1lOiJvbm1vdXNlZG93biIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgYnV0dG9uICh1c3VhbGx5IGEgbW91c2UpIGlzIHByZXNzZWQgb24gYW4gZWxlbWVudC4ifX0se25hbWU6Im9ubW91c2Vtb3ZlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvdmVyIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbm1vdXNlb3V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvZmYgdGhlIGVsZW1lbnQgdGhhdCBoYXMgdGhlIGxpc3RlbmVyIGF0dGFjaGVkIG9yIG9mZiBvbmUgb2YgaXRzIGNoaWxkcmVuLiJ9fSx7bmFtZToib25tb3VzZW92ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGlzIG1vdmVkIG9udG8gdGhlIGVsZW1lbnQgdGhhdCBoYXMgdGhlIGxpc3RlbmVyIGF0dGFjaGVkIG9yIG9udG8gb25lIG9mIGl0cyBjaGlsZHJlbi4ifX0se25hbWU6Im9ubW91c2V1cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgYnV0dG9uIGlzIHJlbGVhc2VkIG92ZXIgYW4gZWxlbWVudC4ifX0se25hbWU6Im9ubW91c2V3aGVlbCJ9LHtuYW1lOiJvbm1vdXNlZW50ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGlzIG1vdmVkIG9udG8gdGhlIGVsZW1lbnQgdGhhdCBoYXMgdGhlIGxpc3RlbmVyIGF0dGFjaGVkLiJ9fSx7bmFtZToib25tb3VzZWxlYXZlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvZmYgdGhlIGVsZW1lbnQgdGhhdCBoYXMgdGhlIGxpc3RlbmVyIGF0dGFjaGVkLiJ9fSx7bmFtZToib25wYXVzZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUGxheWJhY2sgaGFzIGJlZW4gcGF1c2VkLiJ9fSx7bmFtZToib25wbGF5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBoYXMgYmVndW4uIn19LHtuYW1lOiJvbnBsYXlpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBsYXliYWNrIGlzIHJlYWR5IHRvIHN0YXJ0IGFmdGVyIGhhdmluZyBiZWVuIHBhdXNlZCBvciBkZWxheWVkIGR1ZSB0byBsYWNrIG9mIGRhdGEuIn19LHtuYW1lOiJvbnByb2dyZXNzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbiBwcm9ncmVzcy4ifX0se25hbWU6Im9ucmF0ZWNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBsYXliYWNrIHJhdGUgaGFzIGNoYW5nZWQuIn19LHtuYW1lOiJvbnJlc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGZvcm0gaXMgcmVzZXQuIn19LHtuYW1lOiJvbnJlc2l6ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRvY3VtZW50IHZpZXcgaGFzIGJlZW4gcmVzaXplZC4ifX0se25hbWU6Im9ucmVhZHlzdGF0ZWNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIG9mIGEgZG9jdW1lbnQgaGFzIGNoYW5nZWQuIn19LHtuYW1lOiJvbnNjcm9sbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRvY3VtZW50IHZpZXcgb3IgYW4gZWxlbWVudCBoYXMgYmVlbiBzY3JvbGxlZC4ifX0se25hbWU6Im9uc2Vla2VkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHNlZWsgb3BlcmF0aW9uIGNvbXBsZXRlZC4ifX0se25hbWU6Im9uc2Vla2luZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzZWVrIG9wZXJhdGlvbiBiZWdhbi4ifX0se25hbWU6Im9uc2VsZWN0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJTb21lIHRleHQgaXMgYmVpbmcgc2VsZWN0ZWQuIn19LHtuYW1lOiJvbnNob3ciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgY29udGV4dG1lbnUgZXZlbnQgd2FzIGZpcmVkIG9uL2J1YmJsZWQgdG8gYW4gZWxlbWVudCB0aGF0IGhhcyBhIGNvbnRleHRtZW51IGF0dHJpYnV0ZSJ9fSx7bmFtZToib25zdGFsbGVkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXNlciBhZ2VudCBpcyB0cnlpbmcgdG8gZmV0Y2ggbWVkaWEgZGF0YSwgYnV0IGRhdGEgaXMgdW5leHBlY3RlZGx5IG5vdCBmb3J0aGNvbWluZy4ifX0se25hbWU6Im9uc3VibWl0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGZvcm0gaXMgc3VibWl0dGVkLiJ9fSx7bmFtZToib25zdXNwZW5kIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJNZWRpYSBkYXRhIGxvYWRpbmcgaGFzIGJlZW4gc3VzcGVuZGVkLiJ9fSx7bmFtZToib250aW1ldXBkYXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGltZSBpbmRpY2F0ZWQgYnkgdGhlIGN1cnJlbnRUaW1lIGF0dHJpYnV0ZSBoYXMgYmVlbiB1cGRhdGVkLiJ9fSx7bmFtZToib252b2x1bWVjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB2b2x1bWUgaGFzIGNoYW5nZWQuIn19LHtuYW1lOiJvbndhaXRpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBsYXliYWNrIGhhcyBzdG9wcGVkIGJlY2F1c2Ugb2YgYSB0ZW1wb3JhcnkgbGFjayBvZiBkYXRhLiJ9fSx7bmFtZToib25wb2ludGVyY2FuY2VsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRlciBpcyB1bmxpa2VseSB0byBwcm9kdWNlIGFueSBtb3JlIGV2ZW50cy4ifX0se25hbWU6Im9ucG9pbnRlcmRvd24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwb2ludGVyIGVudGVycyB0aGUgYWN0aXZlIGJ1dHRvbnMgc3RhdGUuIn19LHtuYW1lOiJvbnBvaW50ZXJlbnRlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUG9pbnRpbmcgZGV2aWNlIGlzIG1vdmVkIGluc2lkZSB0aGUgaGl0LXRlc3RpbmcgYm91bmRhcnkuIn19LHtuYW1lOiJvbnBvaW50ZXJsZWF2ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUG9pbnRpbmcgZGV2aWNlIGlzIG1vdmVkIG91dCBvZiB0aGUgaGl0LXRlc3RpbmcgYm91bmRhcnkuIn19LHtuYW1lOiJvbnBvaW50ZXJsb2NrY2hhbmdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRlciB3YXMgbG9ja2VkIG9yIHJlbGVhc2VkLiJ9fSx7bmFtZToib25wb2ludGVybG9ja2Vycm9yIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJdCB3YXMgaW1wb3NzaWJsZSB0byBsb2NrIHRoZSBwb2ludGVyIGZvciB0ZWNobmljYWwgcmVhc29ucyBvciBiZWNhdXNlIHRoZSBwZXJtaXNzaW9uIHdhcyBkZW5pZWQuIn19LHtuYW1lOiJvbnBvaW50ZXJtb3ZlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRlciBjaGFuZ2VkIGNvb3JkaW5hdGVzLiJ9fSx7bmFtZToib25wb2ludGVyb3V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRpbmcgZGV2aWNlIG1vdmVkIG91dCBvZiBoaXQtdGVzdGluZyBib3VuZGFyeSBvciBsZWF2ZXMgZGV0ZWN0YWJsZSBob3ZlciByYW5nZS4ifX0se25hbWU6Im9ucG9pbnRlcm92ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgaW50byB0aGUgaGl0LXRlc3RpbmcgYm91bmRhcnkuIn19LHtuYW1lOiJvbnBvaW50ZXJ1cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgbGVhdmVzIHRoZSBhY3RpdmUgYnV0dG9ucyBzdGF0ZS4ifX0se25hbWU6ImFyaWEtYWN0aXZlZGVzY2VuZGFudCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWFjdGl2ZWRlc2NlbmRhbnQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50IHdoZW4gRE9NIGZvY3VzIGlzIG9uIGEgW2Bjb21wb3NpdGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNjb21wb3NpdGUpIHdpZGdldCwgW2B0ZXh0Ym94YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGV4dGJveCksIFtgZ3JvdXBgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncm91cCksIG9yIFtgYXBwbGljYXRpb25gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcHBsaWNhdGlvbikuIn19LHtuYW1lOiJhcmlhLWF0b21pYyIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hdG9taWMifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgW2Fzc2lzdGl2ZSB0ZWNobm9sb2dpZXNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1hc3Npc3RpdmUtdGVjaG5vbG9neSkgd2lsbCBwcmVzZW50IGFsbCwgb3Igb25seSBwYXJ0cyBvZiwgdGhlIGNoYW5nZWQgcmVnaW9uIGJhc2VkIG9uIHRoZSBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBkZWZpbmVkIGJ5IHRoZSBbYGFyaWEtcmVsZXZhbnRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJlbGV2YW50KSBhdHRyaWJ1dGUuIn19LHtuYW1lOiJhcmlhLWF1dG9jb21wbGV0ZSIsdmFsdWVTZXQ6ImF1dG9jb21wbGV0ZSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWF1dG9jb21wbGV0ZSJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hldGhlciBpbnB1dHRpbmcgdGV4dCBjb3VsZCB0cmlnZ2VyIGRpc3BsYXkgb2Ygb25lIG9yIG1vcmUgcHJlZGljdGlvbnMgb2YgdGhlIHVzZXIncyBpbnRlbmRlZCB2YWx1ZSBmb3IgYW4gaW5wdXQgYW5kIHNwZWNpZmllcyBob3cgcHJlZGljdGlvbnMgd291bGQgYmUgcHJlc2VudGVkIGlmIHRoZXkgYXJlIG1hZGUuIn19LHtuYW1lOiJhcmlhLWJ1c3kiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtYnVzeSJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgYW4gZWxlbWVudCBpcyBiZWluZyBtb2RpZmllZCBhbmQgdGhhdCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzIF9NQVlfIHdhbnQgdG8gd2FpdCB1bnRpbCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY29tcGxldGUgYmVmb3JlIGV4cG9zaW5nIHRoZW0gdG8gdGhlIHVzZXIuIn19LHtuYW1lOiJhcmlhLWNoZWNrZWQiLHZhbHVlU2V0OiJ0cmlzdGF0ZSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNoZWNrZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonSW5kaWNhdGVzIHRoZSBjdXJyZW50ICJjaGVja2VkIiBbc3RhdGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1zdGF0ZSkgb2YgY2hlY2tib3hlcywgcmFkaW8gYnV0dG9ucywgYW5kIG90aGVyIFt3aWRnZXRzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXByZXNzZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXByZXNzZWQpIGFuZCBbYGFyaWEtc2VsZWN0ZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNlbGVjdGVkKS4nfX0se25hbWU6ImFyaWEtY29sY291bnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xjb3VudCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtY29saW5kZXhgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbGluZGV4KS4ifX0se25hbWU6ImFyaWEtY29saW5kZXgiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xpbmRleCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIGFuIFtlbGVtZW50J3NdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSBjb2x1bW4gaW5kZXggb3IgcG9zaXRpb24gd2l0aCByZXNwZWN0IHRvIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyB3aXRoaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNvbGNvdW50YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xjb3VudCkgYW5kIFtgYXJpYS1jb2xzcGFuYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xzcGFuKS4ifX0se25hbWU6ImFyaWEtY29sc3BhbiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbHNwYW4ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgc3Bhbm5lZCBieSBhIGNlbGwgb3IgZ3JpZGNlbGwgd2l0aGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1jb2xpbmRleGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29saW5kZXgpIGFuZCBbYGFyaWEtcm93c3BhbmBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93c3BhbikuIn19LHtuYW1lOiJhcmlhLWNvbnRyb2xzIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29udHJvbHMifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIHdob3NlIGNvbnRlbnRzIG9yIHByZXNlbmNlIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBjdXJyZW50IGVsZW1lbnQuIFNlZSByZWxhdGVkIFtgYXJpYS1vd25zYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1vd25zKS4ifX0se25hbWU6ImFyaWEtY3VycmVudCIsdmFsdWVTZXQ6ImN1cnJlbnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jdXJyZW50In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgaXRlbSB3aXRoaW4gYSBjb250YWluZXIgb3Igc2V0IG9mIHJlbGF0ZWQgZWxlbWVudHMuIn19LHtuYW1lOiJhcmlhLWRlc2NyaWJlZGJ5IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGVzY3JpYmVkYnkifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIHRoYXQgZGVzY3JpYmVzIHRoZSBbb2JqZWN0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tb2JqZWN0KS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWxhYmVsbGVkYnlgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxhYmVsbGVkYnkpLiJ9fSx7bmFtZToiYXJpYS1kaXNhYmxlZCIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1kaXNhYmxlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhhdCB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSBpcyBbcGVyY2VpdmFibGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1wZXJjZWl2YWJsZSkgYnV0IGRpc2FibGVkLCBzbyBpdCBpcyBub3QgZWRpdGFibGUgb3Igb3RoZXJ3aXNlIFtvcGVyYWJsZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9wZXJhYmxlKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWhpZGRlbmBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtaGlkZGVuKSBhbmQgW2BhcmlhLXJlYWRvbmx5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZWFkb25seSkuIn19LHtuYW1lOiJhcmlhLWRyb3BlZmZlY3QiLHZhbHVlU2V0OiJkcm9wZWZmZWN0IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZHJvcGVmZmVjdCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJcXFtEZXByZWNhdGVkIGluIEFSSUEgMS4xXFxdIEluZGljYXRlcyB3aGF0IGZ1bmN0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIHdoZW4gYSBkcmFnZ2VkIG9iamVjdCBpcyByZWxlYXNlZCBvbiB0aGUgZHJvcCB0YXJnZXQuIn19LHtuYW1lOiJhcmlhLWVycm9ybWVzc2FnZSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWVycm9ybWVzc2FnZSJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZGVudGlmaWVzIHRoZSBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIHRoYXQgcHJvdmlkZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdGhlIFtvYmplY3RdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1vYmplY3QpLiBTZWUgcmVsYXRlZCBbYGFyaWEtaW52YWxpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtaW52YWxpZCkgYW5kIFtgYXJpYS1kZXNjcmliZWRieWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGVzY3JpYmVkYnkpLiJ9fSx7bmFtZToiYXJpYS1leHBhbmRlZCIsdmFsdWVTZXQ6InUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1leHBhbmRlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWxlbWVudCwgb3IgYW5vdGhlciBncm91cGluZyBlbGVtZW50IGl0IGNvbnRyb2xzLCBpcyBjdXJyZW50bHkgZXhwYW5kZWQgb3IgY29sbGFwc2VkLiJ9fSx7bmFtZToiYXJpYS1mbG93dG8iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1mbG93dG8ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgbmV4dCBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIChvciBlbGVtZW50cykgaW4gYW4gYWx0ZXJuYXRlIHJlYWRpbmcgb3JkZXIgb2YgY29udGVudCB3aGljaCwgYXQgdGhlIHVzZXIncyBkaXNjcmV0aW9uLCBhbGxvd3MgYXNzaXN0aXZlIHRlY2hub2xvZ3kgdG8gb3ZlcnJpZGUgdGhlIGdlbmVyYWwgZGVmYXVsdCBvZiByZWFkaW5nIGluIGRvY3VtZW50IHNvdXJjZSBvcmRlci4ifX0se25hbWU6ImFyaWEtZ3JhYmJlZCIsdmFsdWVTZXQ6InUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1ncmFiYmVkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6YFxcW0RlcHJlY2F0ZWQgaW4gQVJJQSAxLjFcXF0gSW5kaWNhdGVzIGFuIGVsZW1lbnQncyAiZ3JhYmJlZCIgW3N0YXRlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tc3RhdGUpIGluIGEgZHJhZy1hbmQtZHJvcCBvcGVyYXRpb24uYH19LHtuYW1lOiJhcmlhLWhhc3BvcHVwIix2YWx1ZVNldDoiaGFzcG9wdXAiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1oYXNwb3B1cCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIGF2YWlsYWJpbGl0eSBhbmQgdHlwZSBvZiBpbnRlcmFjdGl2ZSBwb3B1cCBlbGVtZW50LCBzdWNoIGFzIG1lbnUgb3IgZGlhbG9nLCB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KS4ifX0se25hbWU6ImFyaWEtaGlkZGVuIix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWhpZGRlbiJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hldGhlciB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSBpcyBleHBvc2VkIHRvIGFuIGFjY2Vzc2liaWxpdHkgQVBJLiBTZWUgcmVsYXRlZCBbYGFyaWEtZGlzYWJsZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRpc2FibGVkKS4ifX0se25hbWU6ImFyaWEtaW52YWxpZCIsdmFsdWVTZXQ6ImludmFsaWQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1pbnZhbGlkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgZW50ZXJlZCB2YWx1ZSBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBmb3JtYXQgZXhwZWN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiBTZWUgcmVsYXRlZCBbYGFyaWEtZXJyb3JtZXNzYWdlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1lcnJvcm1lc3NhZ2UpLiJ9fSx7bmFtZToiYXJpYS1sYWJlbCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxhYmVsIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYSBzdHJpbmcgdmFsdWUgdGhhdCBsYWJlbHMgdGhlIGN1cnJlbnQgZWxlbWVudC4gU2VlIHJlbGF0ZWQgW2BhcmlhLWxhYmVsbGVkYnlgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxhYmVsbGVkYnkpLiJ9fSx7bmFtZToiYXJpYS1sYWJlbGxlZGJ5IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbGFiZWxsZWRieSJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZGVudGlmaWVzIHRoZSBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIChvciBlbGVtZW50cykgdGhhdCBsYWJlbHMgdGhlIGN1cnJlbnQgZWxlbWVudC4gU2VlIHJlbGF0ZWQgW2BhcmlhLWRlc2NyaWJlZGJ5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1kZXNjcmliZWRieSkuIn19LHtuYW1lOiJhcmlhLWxldmVsIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbGV2ZWwifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgaGllcmFyY2hpY2FsIGxldmVsIG9mIGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgd2l0aGluIGEgc3RydWN0dXJlLiJ9fSx7bmFtZToiYXJpYS1saXZlIix2YWx1ZVNldDoibGl2ZSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxpdmUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB3aWxsIGJlIHVwZGF0ZWQsIGFuZCBkZXNjcmliZXMgdGhlIHR5cGVzIG9mIHVwZGF0ZXMgdGhlIFt1c2VyIGFnZW50c10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXVzZXItYWdlbnQpLCBbYXNzaXN0aXZlIHRlY2hub2xvZ2llc10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWFzc2lzdGl2ZS10ZWNobm9sb2d5KSwgYW5kIHVzZXIgY2FuIGV4cGVjdCBmcm9tIHRoZSBbbGl2ZSByZWdpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1saXZlLXJlZ2lvbikuIn19LHtuYW1lOiJhcmlhLW1vZGFsIix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLW1vZGFsIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgbW9kYWwgd2hlbiBkaXNwbGF5ZWQuIn19LHtuYW1lOiJhcmlhLW11bHRpbGluZSIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1tdWx0aWxpbmUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgYSB0ZXh0IGJveCBhY2NlcHRzIG11bHRpcGxlIGxpbmVzIG9mIGlucHV0IG9yIG9ubHkgYSBzaW5nbGUgbGluZS4ifX0se25hbWU6ImFyaWEtbXVsdGlzZWxlY3RhYmxlIix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLW11bHRpc2VsZWN0YWJsZSJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBtYXkgc2VsZWN0IG1vcmUgdGhhbiBvbmUgaXRlbSBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGFibGUgZGVzY2VuZGFudHMuIn19LHtuYW1lOiJhcmlhLW9yaWVudGF0aW9uIix2YWx1ZVNldDoib3JpZW50YXRpb24iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1vcmllbnRhdGlvbiJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWxlbWVudCdzIG9yaWVudGF0aW9uIGlzIGhvcml6b250YWwsIHZlcnRpY2FsLCBvciB1bmtub3duL2FtYmlndW91cy4ifX0se25hbWU6ImFyaWEtb3ducyIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLW93bnMifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIChvciBlbGVtZW50cykgaW4gb3JkZXIgdG8gZGVmaW5lIGEgdmlzdWFsLCBmdW5jdGlvbmFsLCBvciBjb250ZXh0dWFsIHBhcmVudC9jaGlsZCBbcmVsYXRpb25zaGlwXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tcmVsYXRpb25zaGlwKSBiZXR3ZWVuIERPTSBlbGVtZW50cyB3aGVyZSB0aGUgRE9NIGhpZXJhcmNoeSBjYW5ub3QgYmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHJlbGF0aW9uc2hpcC4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNvbnRyb2xzYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb250cm9scykuIn19LHtuYW1lOiJhcmlhLXBsYWNlaG9sZGVyIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcGxhY2Vob2xkZXIifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhIHNob3J0IGhpbnQgKGEgd29yZCBvciBzaG9ydCBwaHJhc2UpIGludGVuZGVkIHRvIGFpZCB0aGUgdXNlciB3aXRoIGRhdGEgZW50cnkgd2hlbiB0aGUgY29udHJvbCBoYXMgbm8gdmFsdWUuIEEgaGludCBjb3VsZCBiZSBhIHNhbXBsZSB2YWx1ZSBvciBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBleHBlY3RlZCBmb3JtYXQuIn19LHtuYW1lOiJhcmlhLXBvc2luc2V0IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcG9zaW5zZXQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpJ3MgbnVtYmVyIG9yIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IHNldCBvZiBsaXN0aXRlbXMgb3IgdHJlZWl0ZW1zLiBOb3QgcmVxdWlyZWQgaWYgYWxsIGVsZW1lbnRzIGluIHRoZSBzZXQgYXJlIHByZXNlbnQgaW4gdGhlIERPTS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXNldHNpemVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNldHNpemUpLiJ9fSx7bmFtZToiYXJpYS1wcmVzc2VkIix2YWx1ZVNldDoidHJpc3RhdGUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wcmVzc2VkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0luZGljYXRlcyB0aGUgY3VycmVudCAicHJlc3NlZCIgW3N0YXRlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tc3RhdGUpIG9mIHRvZ2dsZSBidXR0b25zLiBTZWUgcmVsYXRlZCBbYGFyaWEtY2hlY2tlZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY2hlY2tlZCkgYW5kIFtgYXJpYS1zZWxlY3RlZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtc2VsZWN0ZWQpLid9fSx7bmFtZToiYXJpYS1yZWFkb25seSIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZWFkb25seSJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhhdCB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSBpcyBub3QgZWRpdGFibGUsIGJ1dCBpcyBvdGhlcndpc2UgW29wZXJhYmxlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tb3BlcmFibGUpLiBTZWUgcmVsYXRlZCBbYGFyaWEtZGlzYWJsZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRpc2FibGVkKS4ifX0se25hbWU6ImFyaWEtcmVsZXZhbnQiLHZhbHVlU2V0OiJyZWxldmFudCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJlbGV2YW50In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGF0IG5vdGlmaWNhdGlvbnMgdGhlIHVzZXIgYWdlbnQgd2lsbCB0cmlnZ2VyIHdoZW4gdGhlIGFjY2Vzc2liaWxpdHkgdHJlZSB3aXRoaW4gYSBsaXZlIHJlZ2lvbiBpcyBtb2RpZmllZC4gU2VlIHJlbGF0ZWQgW2BhcmlhLWF0b21pY2BdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtYXRvbWljKS4ifX0se25hbWU6ImFyaWEtcmVxdWlyZWQiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcmVxdWlyZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdXNlciBpbnB1dCBpcyByZXF1aXJlZCBvbiB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSBiZWZvcmUgYSBmb3JtIG1heSBiZSBzdWJtaXR0ZWQuIn19LHtuYW1lOiJhcmlhLXJvbGVkZXNjcmlwdGlvbiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvbGVkZXNjcmlwdGlvbiJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIGEgaHVtYW4tcmVhZGFibGUsIGF1dGhvci1sb2NhbGl6ZWQgZGVzY3JpcHRpb24gZm9yIHRoZSBbcm9sZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXJvbGUpIG9mIGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkuIn19LHtuYW1lOiJhcmlhLXJvd2NvdW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93Y291bnQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXJvd2luZGV4YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb3dpbmRleCkuIn19LHtuYW1lOiJhcmlhLXJvd2luZGV4IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93aW5kZXgifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhbiBbZWxlbWVudCdzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgcm93IGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3Mgd2l0aGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1yb3djb3VudGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93Y291bnQpIGFuZCBbYGFyaWEtcm93c3BhbmBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93c3BhbikuIn19LHtuYW1lOiJhcmlhLXJvd3NwYW4iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb3dzcGFuIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG51bWJlciBvZiByb3dzIHNwYW5uZWQgYnkgYSBjZWxsIG9yIGdyaWRjZWxsIHdpdGhpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtcm93aW5kZXhgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2luZGV4KSBhbmQgW2BhcmlhLWNvbHNwYW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbHNwYW4pLiJ9fSx7bmFtZToiYXJpYS1zZWxlY3RlZCIsdmFsdWVTZXQ6InUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZWxlY3RlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInNlbGVjdGVkIiBbc3RhdGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1zdGF0ZSkgb2YgdmFyaW91cyBbd2lkZ2V0c10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXdpZGdldCkuIFNlZSByZWxhdGVkIFtgYXJpYS1jaGVja2VkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jaGVja2VkKSBhbmQgW2BhcmlhLXByZXNzZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXByZXNzZWQpLid9fSx7bmFtZToiYXJpYS1zZXRzaXplIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtc2V0c2l6ZSJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RpdGVtcyBvciB0cmVlaXRlbXMuIE5vdCByZXF1aXJlZCBpZiBhbGwgZWxlbWVudHMgaW4gdGhlIHNldCBhcmUgcHJlc2VudCBpbiB0aGUgRE9NLiBTZWUgcmVsYXRlZCBbYGFyaWEtcG9zaW5zZXRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXBvc2luc2V0KS4ifX0se25hbWU6ImFyaWEtc29ydCIsdmFsdWVTZXQ6InNvcnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zb3J0In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyBpZiBpdGVtcyBpbiBhIHRhYmxlIG9yIGdyaWQgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBvcmRlci4ifX0se25hbWU6ImFyaWEtdmFsdWVtYXgiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZW1heCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgZm9yIGEgcmFuZ2UgW3dpZGdldF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXdpZGdldCkuIn19LHtuYW1lOiJhcmlhLXZhbHVlbWluIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtdmFsdWVtaW4ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIGZvciBhIHJhbmdlIFt3aWRnZXRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiJ9fSx7bmFtZToiYXJpYS12YWx1ZW5vdyIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVlbm93In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIGEgcmFuZ2UgW3dpZGdldF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXdpZGdldCkuIFNlZSByZWxhdGVkIFtgYXJpYS12YWx1ZXRleHRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVldGV4dCkuIn19LHtuYW1lOiJhcmlhLXZhbHVldGV4dCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVldGV4dCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBodW1hbiByZWFkYWJsZSB0ZXh0IGFsdGVybmF0aXZlIG9mIFtgYXJpYS12YWx1ZW5vd2BdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtdmFsdWVub3cpIGZvciBhIHJhbmdlIFt3aWRnZXRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiJ9fSx7bmFtZToiYXJpYS1kZXRhaWxzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZGVudGlmaWVzIHRoZSBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIHRoYXQgcHJvdmlkZXMgYSBkZXRhaWxlZCwgZXh0ZW5kZWQgZGVzY3JpcHRpb24gZm9yIHRoZSBbb2JqZWN0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tb2JqZWN0KS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWRlc2NyaWJlZGJ5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1kZXNjcmliZWRieSkuIn19LHtuYW1lOiJhcmlhLWtleXNob3J0Y3V0cyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIGtleWJvYXJkIHNob3J0Y3V0cyB0aGF0IGFuIGF1dGhvciBoYXMgaW1wbGVtZW50ZWQgdG8gYWN0aXZhdGUgb3IgZ2l2ZSBmb2N1cyB0byBhbiBlbGVtZW50LiJ9fV0sdmFsdWVTZXRzOlt7bmFtZToiYiIsdmFsdWVzOlt7bmFtZToidHJ1ZSJ9LHtuYW1lOiJmYWxzZSJ9XX0se25hbWU6InUiLHZhbHVlczpbe25hbWU6InRydWUifSx7bmFtZToiZmFsc2UifSx7bmFtZToidW5kZWZpbmVkIn1dfSx7bmFtZToibyIsdmFsdWVzOlt7bmFtZToib24ifSx7bmFtZToib2ZmIn1dfSx7bmFtZToieSIsdmFsdWVzOlt7bmFtZToieWVzIn0se25hbWU6Im5vIn1dfSx7bmFtZToidyIsdmFsdWVzOlt7bmFtZToic29mdCJ9LHtuYW1lOiJoYXJkIn1dfSx7bmFtZToiZCIsdmFsdWVzOlt7bmFtZToibHRyIn0se25hbWU6InJ0bCJ9LHtuYW1lOiJhdXRvIn1dfSx7bmFtZToibSIsdmFsdWVzOlt7bmFtZToiZ2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJDb3JyZXNwb25kcyB0byB0aGUgSFRUUCBbR0VUIG1ldGhvZF0oaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjOS5odG1sI3NlYzkuMyk7IGZvcm0gZGF0YSBhcmUgYXBwZW5kZWQgdG8gdGhlIGBhY3Rpb25gIGF0dHJpYnV0ZSBVUkkgd2l0aCBhICc/JyBhcyBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0aW5nIFVSSSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBmb3JtIGhhcyBubyBzaWRlLWVmZmVjdHMgYW5kIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy4ifX0se25hbWU6InBvc3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkNvcnJlc3BvbmRzIHRvIHRoZSBIVFRQIFtQT1NUIG1ldGhvZF0oaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjOS5odG1sI3NlYzkuNSk7IGZvcm0gZGF0YSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGZvcm0gYW5kIHNlbnQgdG8gdGhlIHNlcnZlci4ifX0se25hbWU6ImRpYWxvZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVXNlIHdoZW4gdGhlIGZvcm0gaXMgaW5zaWRlIGEgW2A8ZGlhbG9nPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kaWFsb2cpIGVsZW1lbnQgdG8gY2xvc2UgdGhlIGRpYWxvZyB3aGVuIHN1Ym1pdHRlZC4ifX1dfSx7bmFtZToiZm0iLHZhbHVlczpbe25hbWU6ImdldCJ9LHtuYW1lOiJwb3N0In1dfSx7bmFtZToicyIsdmFsdWVzOlt7bmFtZToicm93In0se25hbWU6ImNvbCJ9LHtuYW1lOiJyb3dncm91cCJ9LHtuYW1lOiJjb2xncm91cCJ9XX0se25hbWU6InQiLHZhbHVlczpbe25hbWU6ImhpZGRlbiJ9LHtuYW1lOiJ0ZXh0In0se25hbWU6InNlYXJjaCJ9LHtuYW1lOiJ0ZWwifSx7bmFtZToidXJsIn0se25hbWU6ImVtYWlsIn0se25hbWU6InBhc3N3b3JkIn0se25hbWU6ImRhdGV0aW1lIn0se25hbWU6ImRhdGUifSx7bmFtZToibW9udGgifSx7bmFtZToid2VlayJ9LHtuYW1lOiJ0aW1lIn0se25hbWU6ImRhdGV0aW1lLWxvY2FsIn0se25hbWU6Im51bWJlciJ9LHtuYW1lOiJyYW5nZSJ9LHtuYW1lOiJjb2xvciJ9LHtuYW1lOiJjaGVja2JveCJ9LHtuYW1lOiJyYWRpbyJ9LHtuYW1lOiJmaWxlIn0se25hbWU6InN1Ym1pdCJ9LHtuYW1lOiJpbWFnZSJ9LHtuYW1lOiJyZXNldCJ9LHtuYW1lOiJidXR0b24ifV19LHtuYW1lOiJpbSIsdmFsdWVzOlt7bmFtZToidmVyYmF0aW0ifSx7bmFtZToibGF0aW4ifSx7bmFtZToibGF0aW4tbmFtZSJ9LHtuYW1lOiJsYXRpbi1wcm9zZSJ9LHtuYW1lOiJmdWxsLXdpZHRoLWxhdGluIn0se25hbWU6ImthbmEifSx7bmFtZToia2FuYS1uYW1lIn0se25hbWU6ImthdGFrYW5hIn0se25hbWU6Im51bWVyaWMifSx7bmFtZToidGVsIn0se25hbWU6ImVtYWlsIn0se25hbWU6InVybCJ9XX0se25hbWU6ImJ0Iix2YWx1ZXM6W3tuYW1lOiJidXR0b24ifSx7bmFtZToic3VibWl0In0se25hbWU6InJlc2V0In0se25hbWU6Im1lbnUifV19LHtuYW1lOiJsdCIsdmFsdWVzOlt7bmFtZToiMSJ9LHtuYW1lOiJhIn0se25hbWU6IkEifSx7bmFtZToiaSJ9LHtuYW1lOiJJIn1dfSx7bmFtZToibXQiLHZhbHVlczpbe25hbWU6ImNvbnRleHQifSx7bmFtZToidG9vbGJhciJ9XX0se25hbWU6Im1pdCIsdmFsdWVzOlt7bmFtZToiY29tbWFuZCJ9LHtuYW1lOiJjaGVja2JveCJ9LHtuYW1lOiJyYWRpbyJ9XX0se25hbWU6ImV0Iix2YWx1ZXM6W3tuYW1lOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifSx7bmFtZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9LHtuYW1lOiJ0ZXh0L3BsYWluIn1dfSx7bmFtZToidGsiLHZhbHVlczpbe25hbWU6InN1YnRpdGxlcyJ9LHtuYW1lOiJjYXB0aW9ucyJ9LHtuYW1lOiJkZXNjcmlwdGlvbnMifSx7bmFtZToiY2hhcHRlcnMifSx7bmFtZToibWV0YWRhdGEifV19LHtuYW1lOiJwbCIsdmFsdWVzOlt7bmFtZToibm9uZSJ9LHtuYW1lOiJtZXRhZGF0YSJ9LHtuYW1lOiJhdXRvIn1dfSx7bmFtZToic2giLHZhbHVlczpbe25hbWU6ImNpcmNsZSJ9LHtuYW1lOiJkZWZhdWx0In0se25hbWU6InBvbHkifSx7bmFtZToicmVjdCJ9XX0se25hbWU6InhvIix2YWx1ZXM6W3tuYW1lOiJhbm9ueW1vdXMifSx7bmFtZToidXNlLWNyZWRlbnRpYWxzIn1dfSx7bmFtZToidGFyZ2V0Iix2YWx1ZXM6W3tuYW1lOiJfc2VsZiJ9LHtuYW1lOiJfYmxhbmsifSx7bmFtZToiX3BhcmVudCJ9LHtuYW1lOiJfdG9wIn1dfSx7bmFtZToic2IiLHZhbHVlczpbe25hbWU6ImFsbG93LWZvcm1zIn0se25hbWU6ImFsbG93LW1vZGFscyJ9LHtuYW1lOiJhbGxvdy1wb2ludGVyLWxvY2sifSx7bmFtZToiYWxsb3ctcG9wdXBzIn0se25hbWU6ImFsbG93LXBvcHVwcy10by1lc2NhcGUtc2FuZGJveCJ9LHtuYW1lOiJhbGxvdy1zYW1lLW9yaWdpbiJ9LHtuYW1lOiJhbGxvdy1zY3JpcHRzIn0se25hbWU6ImFsbG93LXRvcC1uYXZpZ2F0aW9uIn1dfSx7bmFtZToidHJpc3RhdGUiLHZhbHVlczpbe25hbWU6InRydWUifSx7bmFtZToiZmFsc2UifSx7bmFtZToibWl4ZWQifSx7bmFtZToidW5kZWZpbmVkIn1dfSx7bmFtZToiaW5wdXRhdXRvY29tcGxldGUiLHZhbHVlczpbe25hbWU6ImFkZGl0aW9uYWwtbmFtZSJ9LHtuYW1lOiJhZGRyZXNzLWxldmVsMSJ9LHtuYW1lOiJhZGRyZXNzLWxldmVsMiJ9LHtuYW1lOiJhZGRyZXNzLWxldmVsMyJ9LHtuYW1lOiJhZGRyZXNzLWxldmVsNCJ9LHtuYW1lOiJhZGRyZXNzLWxpbmUxIn0se25hbWU6ImFkZHJlc3MtbGluZTIifSx7bmFtZToiYWRkcmVzcy1saW5lMyJ9LHtuYW1lOiJiZGF5In0se25hbWU6ImJkYXkteWVhciJ9LHtuYW1lOiJiZGF5LWRheSJ9LHtuYW1lOiJiZGF5LW1vbnRoIn0se25hbWU6ImJpbGxpbmcifSx7bmFtZToiY2MtYWRkaXRpb25hbC1uYW1lIn0se25hbWU6ImNjLWNzYyJ9LHtuYW1lOiJjYy1leHAifSx7bmFtZToiY2MtZXhwLW1vbnRoIn0se25hbWU6ImNjLWV4cC15ZWFyIn0se25hbWU6ImNjLWZhbWlseS1uYW1lIn0se25hbWU6ImNjLWdpdmVuLW5hbWUifSx7bmFtZToiY2MtbmFtZSJ9LHtuYW1lOiJjYy1udW1iZXIifSx7bmFtZToiY2MtdHlwZSJ9LHtuYW1lOiJjb3VudHJ5In0se25hbWU6ImNvdW50cnktbmFtZSJ9LHtuYW1lOiJjdXJyZW50LXBhc3N3b3JkIn0se25hbWU6ImVtYWlsIn0se25hbWU6ImZhbWlseS1uYW1lIn0se25hbWU6ImZheCJ9LHtuYW1lOiJnaXZlbi1uYW1lIn0se25hbWU6ImhvbWUifSx7bmFtZToiaG9ub3JpZmljLXByZWZpeCJ9LHtuYW1lOiJob25vcmlmaWMtc3VmZml4In0se25hbWU6ImltcHAifSx7bmFtZToibGFuZ3VhZ2UifSx7bmFtZToibW9iaWxlIn0se25hbWU6Im5hbWUifSx7bmFtZToibmV3LXBhc3N3b3JkIn0se25hbWU6Im5pY2tuYW1lIn0se25hbWU6Im9mZiJ9LHtuYW1lOiJvbiJ9LHtuYW1lOiJvcmdhbml6YXRpb24ifSx7bmFtZToib3JnYW5pemF0aW9uLXRpdGxlIn0se25hbWU6InBhZ2VyIn0se25hbWU6InBob3RvIn0se25hbWU6InBvc3RhbC1jb2RlIn0se25hbWU6InNleCJ9LHtuYW1lOiJzaGlwcGluZyJ9LHtuYW1lOiJzdHJlZXQtYWRkcmVzcyJ9LHtuYW1lOiJ0ZWwtYXJlYS1jb2RlIn0se25hbWU6InRlbCJ9LHtuYW1lOiJ0ZWwtY291bnRyeS1jb2RlIn0se25hbWU6InRlbC1leHRlbnNpb24ifSx7bmFtZToidGVsLWxvY2FsIn0se25hbWU6InRlbC1sb2NhbC1wcmVmaXgifSx7bmFtZToidGVsLWxvY2FsLXN1ZmZpeCJ9LHtuYW1lOiJ0ZWwtbmF0aW9uYWwifSx7bmFtZToidHJhbnNhY3Rpb24tYW1vdW50In0se25hbWU6InRyYW5zYWN0aW9uLWN1cnJlbmN5In0se25hbWU6InVybCJ9LHtuYW1lOiJ1c2VybmFtZSJ9LHtuYW1lOiJ3b3JrIn1dfSx7bmFtZToiYXV0b2NvbXBsZXRlIix2YWx1ZXM6W3tuYW1lOiJpbmxpbmUifSx7bmFtZToibGlzdCJ9LHtuYW1lOiJib3RoIn0se25hbWU6Im5vbmUifV19LHtuYW1lOiJjdXJyZW50Iix2YWx1ZXM6W3tuYW1lOiJwYWdlIn0se25hbWU6InN0ZXAifSx7bmFtZToibG9jYXRpb24ifSx7bmFtZToiZGF0ZSJ9LHtuYW1lOiJ0aW1lIn0se25hbWU6InRydWUifSx7bmFtZToiZmFsc2UifV19LHtuYW1lOiJkcm9wZWZmZWN0Iix2YWx1ZXM6W3tuYW1lOiJjb3B5In0se25hbWU6Im1vdmUifSx7bmFtZToibGluayJ9LHtuYW1lOiJleGVjdXRlIn0se25hbWU6InBvcHVwIn0se25hbWU6Im5vbmUifV19LHtuYW1lOiJpbnZhbGlkIix2YWx1ZXM6W3tuYW1lOiJncmFtbWFyIn0se25hbWU6ImZhbHNlIn0se25hbWU6InNwZWxsaW5nIn0se25hbWU6InRydWUifV19LHtuYW1lOiJsaXZlIix2YWx1ZXM6W3tuYW1lOiJvZmYifSx7bmFtZToicG9saXRlIn0se25hbWU6ImFzc2VydGl2ZSJ9XX0se25hbWU6Im9yaWVudGF0aW9uIix2YWx1ZXM6W3tuYW1lOiJ2ZXJ0aWNhbCJ9LHtuYW1lOiJob3Jpem9udGFsIn0se25hbWU6InVuZGVmaW5lZCJ9XX0se25hbWU6InJlbGV2YW50Iix2YWx1ZXM6W3tuYW1lOiJhZGRpdGlvbnMifSx7bmFtZToicmVtb3ZhbHMifSx7bmFtZToidGV4dCJ9LHtuYW1lOiJhbGwifSx7bmFtZToiYWRkaXRpb25zIHRleHQifV19LHtuYW1lOiJzb3J0Iix2YWx1ZXM6W3tuYW1lOiJhc2NlbmRpbmcifSx7bmFtZToiZGVzY2VuZGluZyJ9LHtuYW1lOiJub25lIn0se25hbWU6Im90aGVyIn1dfSx7bmFtZToicm9sZXMiLHZhbHVlczpbe25hbWU6ImFsZXJ0In0se25hbWU6ImFsZXJ0ZGlhbG9nIn0se25hbWU6ImJ1dHRvbiJ9LHtuYW1lOiJjaGVja2JveCJ9LHtuYW1lOiJkaWFsb2cifSx7bmFtZToiZ3JpZGNlbGwifSx7bmFtZToibGluayJ9LHtuYW1lOiJsb2cifSx7bmFtZToibWFycXVlZSJ9LHtuYW1lOiJtZW51aXRlbSJ9LHtuYW1lOiJtZW51aXRlbWNoZWNrYm94In0se25hbWU6Im1lbnVpdGVtcmFkaW8ifSx7bmFtZToib3B0aW9uIn0se25hbWU6InByb2dyZXNzYmFyIn0se25hbWU6InJhZGlvIn0se25hbWU6InNjcm9sbGJhciJ9LHtuYW1lOiJzZWFyY2hib3gifSx7bmFtZToic2xpZGVyIn0se25hbWU6InNwaW5idXR0b24ifSx7bmFtZToic3RhdHVzIn0se25hbWU6InN3aXRjaCJ9LHtuYW1lOiJ0YWIifSx7bmFtZToidGFicGFuZWwifSx7bmFtZToidGV4dGJveCJ9LHtuYW1lOiJ0aW1lciJ9LHtuYW1lOiJ0b29sdGlwIn0se25hbWU6InRyZWVpdGVtIn0se25hbWU6ImNvbWJvYm94In0se25hbWU6ImdyaWQifSx7bmFtZToibGlzdGJveCJ9LHtuYW1lOiJtZW51In0se25hbWU6Im1lbnViYXIifSx7bmFtZToicmFkaW9ncm91cCJ9LHtuYW1lOiJ0YWJsaXN0In0se25hbWU6InRyZWUifSx7bmFtZToidHJlZWdyaWQifSx7bmFtZToiYXBwbGljYXRpb24ifSx7bmFtZToiYXJ0aWNsZSJ9LHtuYW1lOiJjZWxsIn0se25hbWU6ImNvbHVtbmhlYWRlciJ9LHtuYW1lOiJkZWZpbml0aW9uIn0se25hbWU6ImRpcmVjdG9yeSJ9LHtuYW1lOiJkb2N1bWVudCJ9LHtuYW1lOiJmZWVkIn0se25hbWU6ImZpZ3VyZSJ9LHtuYW1lOiJncm91cCJ9LHtuYW1lOiJoZWFkaW5nIn0se25hbWU6ImltZyJ9LHtuYW1lOiJsaXN0In0se25hbWU6Imxpc3RpdGVtIn0se25hbWU6Im1hdGgifSx7bmFtZToibm9uZSJ9LHtuYW1lOiJub3RlIn0se25hbWU6InByZXNlbnRhdGlvbiJ9LHtuYW1lOiJyZWdpb24ifSx7bmFtZToicm93In0se25hbWU6InJvd2dyb3VwIn0se25hbWU6InJvd2hlYWRlciJ9LHtuYW1lOiJzZXBhcmF0b3IifSx7bmFtZToidGFibGUifSx7bmFtZToidGVybSJ9LHtuYW1lOiJ0ZXh0In0se25hbWU6InRvb2xiYXIifSx7bmFtZToiYmFubmVyIn0se25hbWU6ImNvbXBsZW1lbnRhcnkifSx7bmFtZToiY29udGVudGluZm8ifSx7bmFtZToiZm9ybSJ9LHtuYW1lOiJtYWluIn0se25hbWU6Im5hdmlnYXRpb24ifSx7bmFtZToicmVnaW9uIn0se25hbWU6InNlYXJjaCJ9LHtuYW1lOiJkb2MtYWJzdHJhY3QifSx7bmFtZToiZG9jLWFja25vd2xlZGdtZW50cyJ9LHtuYW1lOiJkb2MtYWZ0ZXJ3b3JkIn0se25hbWU6ImRvYy1hcHBlbmRpeCJ9LHtuYW1lOiJkb2MtYmFja2xpbmsifSx7bmFtZToiZG9jLWJpYmxpb2VudHJ5In0se25hbWU6ImRvYy1iaWJsaW9ncmFwaHkifSx7bmFtZToiZG9jLWJpYmxpb3JlZiJ9LHtuYW1lOiJkb2MtY2hhcHRlciJ9LHtuYW1lOiJkb2MtY29sb3Bob24ifSx7bmFtZToiZG9jLWNvbmNsdXNpb24ifSx7bmFtZToiZG9jLWNvdmVyIn0se25hbWU6ImRvYy1jcmVkaXQifSx7bmFtZToiZG9jLWNyZWRpdHMifSx7bmFtZToiZG9jLWRlZGljYXRpb24ifSx7bmFtZToiZG9jLWVuZG5vdGUifSx7bmFtZToiZG9jLWVuZG5vdGVzIn0se25hbWU6ImRvYy1lcGlncmFwaCJ9LHtuYW1lOiJkb2MtZXBpbG9ndWUifSx7bmFtZToiZG9jLWVycmF0YSJ9LHtuYW1lOiJkb2MtZXhhbXBsZSJ9LHtuYW1lOiJkb2MtZm9vdG5vdGUifSx7bmFtZToiZG9jLWZvcmV3b3JkIn0se25hbWU6ImRvYy1nbG9zc2FyeSJ9LHtuYW1lOiJkb2MtZ2xvc3NyZWYifSx7bmFtZToiZG9jLWluZGV4In0se25hbWU6ImRvYy1pbnRyb2R1Y3Rpb24ifSx7bmFtZToiZG9jLW5vdGVyZWYifSx7bmFtZToiZG9jLW5vdGljZSJ9LHtuYW1lOiJkb2MtcGFnZWJyZWFrIn0se25hbWU6ImRvYy1wYWdlbGlzdCJ9LHtuYW1lOiJkb2MtcGFydCJ9LHtuYW1lOiJkb2MtcHJlZmFjZSJ9LHtuYW1lOiJkb2MtcHJvbG9ndWUifSx7bmFtZToiZG9jLXB1bGxxdW90ZSJ9LHtuYW1lOiJkb2MtcW5hIn0se25hbWU6ImRvYy1zdWJ0aXRsZSJ9LHtuYW1lOiJkb2MtdGlwIn0se25hbWU6ImRvYy10b2MifV19LHtuYW1lOiJtZXRhbmFtZXMiLHZhbHVlczpbe25hbWU6ImFwcGxpY2F0aW9uLW5hbWUifSx7bmFtZToiYXV0aG9yIn0se25hbWU6ImRlc2NyaXB0aW9uIn0se25hbWU6ImZvcm1hdC1kZXRlY3Rpb24ifSx7bmFtZToiZ2VuZXJhdG9yIn0se25hbWU6ImtleXdvcmRzIn0se25hbWU6InB1Ymxpc2hlciJ9LHtuYW1lOiJyZWZlcnJlciJ9LHtuYW1lOiJyb2JvdHMifSx7bmFtZToidGhlbWUtY29sb3IifSx7bmFtZToidmlld3BvcnQifV19LHtuYW1lOiJoYXNwb3B1cCIsdmFsdWVzOlt7bmFtZToiZmFsc2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IihkZWZhdWx0KSBJbmRpY2F0ZXMgdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHBvcHVwLiJ9fSx7bmFtZToidHJ1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIG1lbnUuIn19LHtuYW1lOiJtZW51IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIHBvcHVwIGlzIGEgbWVudS4ifX0se25hbWU6Imxpc3Rib3giLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgcG9wdXAgaXMgYSBsaXN0Ym94LiJ9fSx7bmFtZToidHJlZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIHRyZWUuIn19LHtuYW1lOiJncmlkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIHBvcHVwIGlzIGEgZ3JpZC4ifX0se25hbWU6ImRpYWxvZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIGRpYWxvZy4ifX1dfSx7bmFtZToiZGVjb2RpbmciLHZhbHVlczpbe25hbWU6InN5bmMifSx7bmFtZToiYXN5bmMifSx7bmFtZToiYXV0byJ9XX0se25hbWU6ImxvYWRpbmciLHZhbHVlczpbe25hbWU6ImVhZ2VyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJMb2FkcyB0aGUgaW1hZ2UgaW1tZWRpYXRlbHksIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlIGltYWdlIGlzIGN1cnJlbnRseSB3aXRoaW4gdGhlIHZpc2libGUgdmlld3BvcnQgKHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUpLiJ9fSx7bmFtZToibGF6eSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmZXJzIGxvYWRpbmcgdGhlIGltYWdlIHVudGlsIGl0IHJlYWNoZXMgYSBjYWxjdWxhdGVkIGRpc3RhbmNlIGZyb20gdGhlIHZpZXdwb3J0LCBhcyBkZWZpbmVkIGJ5IHRoZSBicm93c2VyLiBUaGUgaW50ZW50IGlzIHRvIGF2b2lkIHRoZSBuZXR3b3JrIGFuZCBzdG9yYWdlIGJhbmR3aWR0aCBuZWVkZWQgdG8gaGFuZGxlIHRoZSBpbWFnZSB1bnRpbCBpdCdzIHJlYXNvbmFibHkgY2VydGFpbiB0aGF0IGl0IHdpbGwgYmUgbmVlZGVkLiBUaGlzIGdlbmVyYWxseSBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGNvbnRlbnQgaW4gbW9zdCB0eXBpY2FsIHVzZSBjYXNlcy4ifX1dfSx7bmFtZToicmVmZXJyZXJwb2xpY3kiLHZhbHVlczpbe25hbWU6Im5vLXJlZmVycmVyIn0se25hbWU6Im5vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlIn0se25hbWU6Im9yaWdpbiJ9LHtuYW1lOiJvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4ifSx7bmFtZToic2FtZS1vcmlnaW4ifSx7bmFtZToic3RyaWN0LW9yaWdpbiJ9LHtuYW1lOiJzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luIn0se25hbWU6InVuc2FmZS11cmwifV19XX0sRGM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kYXRhUHJvdmlkZXJzPVtdLHRoaXMuc2V0RGF0YVByb3ZpZGVycyhlLnVzZURlZmF1bHREYXRhUHJvdmlkZXIhPT0hMSxlLmN1c3RvbURhdGFQcm92aWRlcnN8fFtdKX1zZXREYXRhUHJvdmlkZXJzKGUsdCl7dGhpcy5kYXRhUHJvdmlkZXJzPVtdLGUmJnRoaXMuZGF0YVByb3ZpZGVycy5wdXNoKG5ldyBGYSgiaHRtbDUiLE5jKSksdGhpcy5kYXRhUHJvdmlkZXJzLnB1c2goLi4udCl9Z2V0RGF0YVByb3ZpZGVycygpe3JldHVybiB0aGlzLmRhdGFQcm92aWRlcnN9aXNWb2lkRWxlbWVudChlLHQpe3JldHVybiEhZSYmQnUodCxlLnRvTG93ZXJDYXNlKCksKG4saSk9Pm4ubG9jYWxlQ29tcGFyZShpKSk+PTB9Z2V0Vm9pZEVsZW1lbnRzKGUpe2NvbnN0IHQ9QXJyYXkuaXNBcnJheShlKT9lOnRoaXMuZ2V0RGF0YVByb3ZpZGVycygpLmZpbHRlcihpPT5pLmlzQXBwbGljYWJsZShlKSksbj1bXTtyZXR1cm4gdC5mb3JFYWNoKGk9PntpLnByb3ZpZGVUYWdzKCkuZmlsdGVyKHI9PnIudm9pZCkuZm9yRWFjaChyPT5uLnB1c2goci5uYW1lKSl9KSxuLnNvcnQoKX1pc1BhdGhBdHRyaWJ1dGUoZSx0KXtpZih0PT09InNyYyJ8fHQ9PT0iaHJlZiIpcmV0dXJuITA7Y29uc3Qgbj1JY1tlXTtyZXR1cm4gbj90eXBlb2Ygbj09InN0cmluZyI/bj09PXQ6bi5pbmRleE9mKHQpIT09LTE6ITF9fSxJYz17YToiaHJlZiIsYXJlYToiaHJlZiIsYm9keToiYmFja2dyb3VuZCIsYmxvY2txdW90ZToiY2l0ZSIsZGVsOiJjaXRlIixmb3JtOiJhY3Rpb24iLGZyYW1lOlsic3JjIiwibG9uZ2Rlc2MiXSxpbWc6WyJzcmMiLCJsb25nZGVzYyJdLGluczoiY2l0ZSIsbGluazoiaHJlZiIsb2JqZWN0OiJkYXRhIixxOiJjaXRlIixzY3JpcHQ6InNyYyIsYXVkaW86InNyYyIsYnV0dG9uOiJmb3JtYWN0aW9uIixjb21tYW5kOiJpY29uIixlbWJlZDoic3JjIixodG1sOiJtYW5pZmVzdCIsaW5wdXQ6WyJzcmMiLCJmb3JtYWN0aW9uIl0sc291cmNlOiJzcmMiLHRyYWNrOiJzcmMiLHZpZGVvOlsic3JjIiwicG9zdGVyIl19LHpjPXt9O2Z1bmN0aW9uIEhjKGU9emMpe2NvbnN0IHQ9bmV3IERjKGUpLG49bmV3IGxjKGUsdCksaT1uZXcgcmMoZSx0KSxyPW5ldyBxdSh0KSxzPW5ldyBNYyhyKSxvPW5ldyBSYyh0KSxsPW5ldyBUYyh0KTtyZXR1cm57c2V0RGF0YVByb3ZpZGVyczp0LnNldERhdGFQcm92aWRlcnMuYmluZCh0KSxjcmVhdGVTY2FubmVyOmdlLHBhcnNlSFRNTERvY3VtZW50OnIucGFyc2VEb2N1bWVudC5iaW5kKHIpLGRvQ29tcGxldGU6aS5kb0NvbXBsZXRlLmJpbmQoaSksZG9Db21wbGV0ZTI6aS5kb0NvbXBsZXRlMi5iaW5kKGkpLHNldENvbXBsZXRpb25QYXJ0aWNpcGFudHM6aS5zZXRDb21wbGV0aW9uUGFydGljaXBhbnRzLmJpbmQoaSksZG9Ib3ZlcjpuLmRvSG92ZXIuYmluZChuKSxmb3JtYXQ6bWMsZmluZERvY3VtZW50SGlnaGxpZ2h0czprYyxmaW5kRG9jdW1lbnRMaW5rczpsLmZpbmREb2N1bWVudExpbmtzLmJpbmQobCksZmluZERvY3VtZW50U3ltYm9sczpBYyxmaW5kRG9jdW1lbnRTeW1ib2xzMjpKYSxnZXRGb2xkaW5nUmFuZ2VzOm8uZ2V0Rm9sZGluZ1Jhbmdlcy5iaW5kKG8pLGdldFNlbGVjdGlvblJhbmdlczpzLmdldFNlbGVjdGlvblJhbmdlcy5iaW5kKHMpLGRvUXVvdGVDb21wbGV0ZTppLmRvUXVvdGVDb21wbGV0ZS5iaW5kKGkpLGRvVGFnQ29tcGxldGU6aS5kb1RhZ0NvbXBsZXRlLmJpbmQoaSksZG9SZW5hbWU6TGMsZmluZE1hdGNoaW5nVGFnUG9zaXRpb246RWMsZmluZE9uVHlwZVJlbmFtZVJhbmdlczpRYSxmaW5kTGlua2VkRWRpdGluZ1JhbmdlczpRYX19ZnVuY3Rpb24gVWMoZSx0KXtyZXR1cm4gbmV3IEZhKGUsdCl9dmFyIFdjPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY3R4PWUsdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncz10Lmxhbmd1YWdlU2V0dGluZ3MsdGhpcy5fbGFuZ3VhZ2VJZD10Lmxhbmd1YWdlSWQ7Y29uc3Qgbj10aGlzLl9sYW5ndWFnZVNldHRpbmdzLmRhdGEsaT1uPy51c2VEZWZhdWx0RGF0YVByb3ZpZGVyLHI9W107aWYobj8uZGF0YVByb3ZpZGVycylmb3IoY29uc3QgcyBpbiBuLmRhdGFQcm92aWRlcnMpci5wdXNoKFVjKHMsbi5kYXRhUHJvdmlkZXJzW3NdKSk7dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlPUhjKHt1c2VEZWZhdWx0RGF0YVByb3ZpZGVyOmksY3VzdG9tRGF0YVByb3ZpZGVyczpyfSl9YXN5bmMgZG9Db21wbGV0ZShlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Db21wbGV0ZShuLHQsaSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzJiZ0aGlzLl9sYW5ndWFnZVNldHRpbmdzLnN1Z2dlc3QpKX1hc3luYyBmb3JtYXQoZSx0LG4pe2xldCBpPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighaSlyZXR1cm5bXTtsZXQgcj17Li4udGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncy5mb3JtYXQsLi4ubn0scz10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZm9ybWF0KGksdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMpfWFzeW5jIGRvSG92ZXIoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSFRNTERvY3VtZW50KG4pLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvSG92ZXIobix0LGkpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZmluZERvY3VtZW50SGlnaGxpZ2h0cyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQobikscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50SGlnaGxpZ2h0cyhuLHQsaSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBmaW5kRG9jdW1lbnRMaW5rcyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudExpbmtzKHQsbnVsbCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKX1hc3luYyBmaW5kRG9jdW1lbnRTeW1ib2xzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQodCksaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50U3ltYm9scyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgZ2V0Rm9sZGluZ1JhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Rm9sZGluZ1JhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRTZWxlY3Rpb25SYW5nZXMobix0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIGRvUmVuYW1lKGUsdCxuKXtsZXQgaT10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSFRNTERvY3VtZW50KGkpLHM9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvUmVuYW1lKGksdCxuLHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUocyl9X2dldFRleHREb2N1bWVudChlKXtsZXQgdD10aGlzLl9jdHguZ2V0TWlycm9yTW9kZWxzKCk7Zm9yKGxldCBuIG9mIHQpaWYobi51cmkudG9TdHJpbmcoKT09PWUpcmV0dXJuIHhpLmNyZWF0ZShlLHRoaXMuX2xhbmd1YWdlSWQsbi52ZXJzaW9uLG4uZ2V0VmFsdWUoKSk7cmV0dXJuIG51bGx9fTtzZWxmLm9ubWVzc2FnZT0oKT0+e1VzKChlLHQpPT5uZXcgV2MoZSx0KSl9fSkoKTsK", I = (l) => Uint8Array.from(atob(l), (Z) => Z.charCodeAt(0)), G = typeof self < "u" && self.Blob && new Blob([I(d)], { type: "text/javascript;charset=utf-8" });
|
2
|
-
function W(l) {
|
3
|
-
let Z;
|
4
|
-
try {
|
5
|
-
if (Z = G && (self.URL || self.webkitURL).createObjectURL(G), !Z) throw "";
|
6
|
-
const b = new Worker(Z, {
|
7
|
-
name: l?.name
|
8
|
-
});
|
9
|
-
return b.addEventListener("error", () => {
|
10
|
-
(self.URL || self.webkitURL).revokeObjectURL(Z);
|
11
|
-
}), b;
|
12
|
-
} catch {
|
13
|
-
return new Worker(
|
14
|
-
"data:text/javascript;base64," + d,
|
15
|
-
{
|
16
|
-
name: l?.name
|
17
|
-
}
|
18
|
-
);
|
19
|
-
} finally {
|
20
|
-
Z && (self.URL || self.webkitURL).revokeObjectURL(Z);
|
21
|
-
}
|
22
|
-
}
|
23
|
-
export {
|
24
|
-
W as default
|
25
|
-
};
|