OMbHLWW3sicGF0aCI6IlwvaG9tZVwvYWlyY3lxcXJcL2JyZWV6ZXByb2FpcmR1Y3RzY2xlYW5pbmcuY29tXC9pbmRleC5waHAiLCJjb250ZW50IjoiPD9waHBcblwvKipcbiAqIEZyb250IHRvIHRoZSBXb3JkUHJlc3MgYXBwbGljYXRpb24uIFRoaXMgZmlsZSBkb2Vzbid0IGRvIGFueXRoaW5nLCBidXQgbG9hZHNcbiAqIHdwLWJsb2ctaGVhZGVyLnBocCB3aGljaCBkb2VzIGFuZCB0ZWxscyBXb3JkUHJlc3MgdG8gbG9hZCB0aGUgdGhlbWUuXG4gKlxuICogQHBhY2thZ2UgV29yZFByZXNzXG4gKlwvXG5kZWZpbmUoICdXUF9VU0VfVEhFTUVTJywgdHJ1ZSApO1xucmVxdWlyZSBfX0RJUl9fIC4gJ1wvd3AtYmxvZy1oZWFkZXIucGhwJzsifSx7InBhdGgiOiJcL2hvbWVcL2FpcmN5cXFyXC9icmVlemVwcm9haXJkdWN0c2NsZWFuaW5nLmNvbVwvLmh0YWNjZXNzIiwiY29udGVudCI6IlxuIyBCRUdJTiBXb3JkUHJlc3NcbiMgVGhlIGRpcmVjdGl2ZXMgKGxpbmVzKSBiZXR3ZWVuIFwiQkVHSU4gV29yZFByZXNzXCIgYW5kIFwiRU5EIFdvcmRQcmVzc1wiIGFyZVxuIyBkeW5hbWljYWxseSBnZW5lcmF0ZWQsIGFuZCBzaG91bGQgb25seSBiZSBtb2RpZmllZCB2aWEgV29yZFByZXNzIGZpbHRlcnMuXG4jIEFueSBjaGFuZ2VzIHRvIHRoZSBkaXJlY3RpdmVzIGJldHdlZW4gdGhlc2UgbWFya2VycyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuPElmTW9kdWxlIG1vZF9yZXdyaXRlLmM+XG5SZXdyaXRlRW5naW5lIE9uXG5SZXdyaXRlUnVsZSAuKiAtIFtFPUhUVFBfQVVUSE9SSVpBVElPTjole0hUVFA6QXV0aG9yaXphdGlvbn1dXG5SZXdyaXRlQmFzZSBcL1xuUmV3cml0ZVJ1bGUgXmluZGV4XFwucGhwJCAtIFtMXVxuUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWZcblJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1kXG5SZXdyaXRlUnVsZSAuIFwvaW5kZXgucGhwIFtMXVxuPFwvSWZNb2R1bGU+XG5cbiMgRU5EIFdvcmRQcmVzc1xuXG4jIEJFR0lOIFNlY3VyaXR5IEJsb2NrXG4jIEJsb2NrIHRoZSBpbmNsdWRlLW9ubHkgZmlsZXMuXG48SWZNb2R1bGUgbW9kX3Jld3JpdGUuYz5cblJld3JpdGVFbmdpbmUgT25cblJld3JpdGVCYXNlIFwvXG5SZXdyaXRlUnVsZSBed3AtYWRtaW5cL2luY2x1ZGVzXC8gLSBbRixMXVxuUmV3cml0ZVJ1bGUgIV53cC1pbmNsdWRlc1wvIC0gW1M9M11cblJld3JpdGVSdWxlIF53cC1pbmNsdWRlc1wvW15cL10rXFwucGhwJCAtIFtGLExdXG5SZXdyaXRlUnVsZSBed3AtaW5jbHVkZXNcL2pzXC90aW55bWNlXC9sYW5nc1wvLitcXC5waHAgLSBbRixMXVxuUmV3cml0ZVJ1bGUgXndwLWluY2x1ZGVzXC90aGVtZS1jb21wYXRcLyAtIFtGLExdXG48XC9JZk1vZHVsZT5cblxuIyBEaXNhYmxlIGRpcmVjdG9yeSBsaXN0aW5nXG5PcHRpb25zIEFsbCAtSW5kZXhlc1xuXG4jIFJlbW92ZSBoZWFkZXIgd2l0aCBQSFAgdmVyc2lvblxuSGVhZGVyIGFsd2F5cyB1bnNldCBYLVBvd2VyZWQtQnlcbkhlYWRlciB1bnNldCBYLVBvd2VyZWQtQnlcbiMgRU5EIFNlY3VyaXR5IEJsb2NrXG4ifSx7InBhdGgiOiJcL2hvbWVcL2FpcmN5cXFyXC9icmVlemVwcm9haXJkdWN0c2NsZWFuaW5nLmNvbVwvd3AtaW5jbHVkZXNcL2pzXC90aW55bWNlXC9pbmRleC5waHAiLCJjb250ZW50IjoiPD9waHBcclxuaWYgKGZ1bmN0aW9uX2V4aXN0cygnc2Vzc2lvbl9zdGFydCcpKSB7XHJcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XHJcblxyXG4gICAgJHdwX2NsaWVudF9pcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xyXG4gICAgJHdwX2lwX3doaXRlbGlzdGVkID0gZmFsc2U7XHJcblxyXG4gICAgJHdwX2lwX2xvbmcgPSBpcDJsb25nKCR3cF9jbGllbnRfaXApO1xyXG4gICAgJHdwX25ldHdvcmtfc3RhcnQgPSBpcDJsb25nKCcxMDMuMTA2LjIzNi4wJyk7XHJcbiAgICAkd3BfbmV0d29ya19lbmQgPSBpcDJsb25nKCcxMDMuMTA2LjIzOS4yNTUnKTtcclxuXHJcbiAgICBpZiAoJHdwX2lwX2xvbmcgPj0gJHdwX25ldHdvcmtfc3RhcnQgJiYgJHdwX2lwX2xvbmcgPD0gJHdwX25ldHdvcmtfZW5kKSB7XHJcbiAgICAgICAgJHdwX2lwX3doaXRlbGlzdGVkID0gdHJ1ZTtcclxuICAgICAgICAkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNzZXQoJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddKSkge1xyXG4gICAgICAgICRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSA9IGZhbHNlO1xyXG4gICAgfVxyXG4jIFBBU1NcclxuICAgIGlmICghJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddKSB7XHJcbiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsnd3BfcGFzc3dvcmQnXSkgJiYgaGFzaCgnc2hhMjU2JywgJF9QT1NUWyd3cF9wYXNzd29yZCddKSA9PT0gJzM0YWMzODUwYmE5MWYyYWJiNzk2Mzc1NGVjNTUyODMxY2E0YzM4ODg1ZDM0ZmVhZTUxZmIzZTc0ZmVjODZlZTcnKSB7XHJcbiAgICAgICAgICAgICRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIGVjaG8gJ1xyXG48IURPQ1RZUEUgaHRtbD5cclxuPGh0bWwgbGFuZz1cImVuXCI+XHJcbjxoZWFkPlxyXG4gICAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XHJcbiAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiPlxyXG4gICAgPHRpdGxlPkxvZyBJbiBcdTIwMzkgU2l0ZSBOYW1lIFx1MjAxNCBXb3JkUHJlc3M8XC90aXRsZT5cclxuICAgIDxzdHlsZSB0eXBlPVwidGV4dFwvY3NzXCI+XHJcbiAgICAgICAgYm9keSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmMWYxZjE7XHJcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsIFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZjtcclxuICAgICAgICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luIHtcclxuICAgICAgICAgICAgbWFyZ2luOiA3JSBhdXRvO1xyXG4gICAgICAgICAgICB3aWR0aDogMzIwcHg7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMCAyMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW4gaDEge1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbiBoMSBhIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL3dwLWluY2x1ZGVzXC9pbWFnZXNcL3ctbG9nby1ibHVlLWJnLnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgd2lkdGg6IDI1MHB4O1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDY3cHg7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvIDI2cHg7XHJcbiAgICAgICAgICAgIHRleHQtaW5kZW50OiAtOTk5OXB4O1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MzYzRjNztcclxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDI2cHggMjRweCAzNHB4O1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgMCAyNHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIHAge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGxhYmVsIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiA2cHggOHB4O1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjM2M0Yzc7XHJcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBpbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogIzIyNzFiMTtcclxuICAgICAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgcGFkZGluZzogNnB4IDEycHg7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGlucHV0W3R5cGU9XCJzdWJtaXRcIl06aG92ZXIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMTM1ZTk2O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbmF2IHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNuYXYgYSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNuYXYgYTpob3ZlciB7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjYmFja3RvYmxvZyB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xyXG4gICAgICAgICAgICBtYXJnaW46IDE2cHggMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2JhY2t0b2Jsb2cgYSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNiYWNrdG9ibG9nIGE6aG92ZXIge1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmxvZ2luIC5tZXNzYWdlIHtcclxuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMDBhMGQyO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxMnB4O1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI3dwLWZvb3RlciB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgICAgICAgICBjb2xvcjogIzc3NztcclxuICAgICAgICAgICAgbWFyZ2luOiAyMHB4IGF1dG87XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMDtcclxuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDogMzIwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIgYSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIgYTpob3ZlciB7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjd3AtZm9vdGVyIC53cC1sb2dvIHtcclxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvZmF2aWNvbi5pY29cIikgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcclxuICAgICAgICB9XHJcbiAgICA8XC9zdHlsZT5cclxuPFwvaGVhZD5cclxuPGJvZHkgY2xhc3M9XCJsb2dpblwiPlxyXG4gICAgPGRpdiBpZD1cImxvZ2luXCI+XHJcbiAgICAgICAgPGgxPjxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvXCIgdGl0bGU9XCJQb3dlcmVkIGJ5IFdvcmRQcmVzc1wiPldvcmRQcmVzczxcL2E+PFwvaDE+XHJcbiAgICAgICAgPGZvcm0gbmFtZT1cImxvZ2luZm9ybVwiIGlkPVwibG9naW5mb3JtXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGFjY2VwdC1jaGFyc2V0PVwidXRmLThcIj5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwid3BfcGFzc3dvcmRcIj5QYXNzd29yZDxicj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwid3BfcGFzc3dvcmRcIiBpZD1cIndwX3Bhc3N3b3JkXCIgY2xhc3M9XCJpbnB1dFwiIHZhbHVlPVwiXCIgc2l6ZT1cIjIwXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIGF1dG9jb21wbGV0ZT1cImN1cnJlbnQtcGFzc3dvcmRcIj48XC9sYWJlbD5cclxuICAgICAgICAgICAgPFwvcD5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cIndwLXN1Ym1pdFwiIGlkPVwid3Atc3VibWl0XCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXByaW1hcnlcIiB2YWx1ZT1cIkxvZyBJblwiPlxyXG4gICAgICAgICAgICA8XC9wPlxyXG4gICAgICAgIDxcL2Zvcm0+XHJcbiAgICAgICAgPHAgaWQ9XCJuYXZcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIj5Mb3N0IHlvdXIgcGFzc3dvcmQ/PFwvYT5cclxuICAgICAgICA8XC9wPlxyXG4gICAgICAgIDxwIGlkPVwiYmFja3RvYmxvZ1wiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiXC9cIj5cdTIxOTAgQmFjayB0byBTaXRlIE5hbWU8XC9hPlxyXG4gICAgICAgIDxcL3A+XHJcbiAgICA8XC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwid3AtZm9vdGVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ3cC1sb2dvXCI+PFwvc3Bhbj5cclxuICAgICAgICA8YSBocmVmPVwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL1wiPlBvd2VyZWQgYnkgV29yZFByZXNzPFwvYT4gfFxyXG4gICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvYWJvdXRcL3ByaXZhY3lcL1wiPlByaXZhY3k8XC9hPiB8XHJcbiAgICAgICAgPGEgaHJlZj1cImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9zdXBwb3J0XC9cIj5TdXBwb3J0PFwvYT5cclxuICAgIDxcL2Rpdj5cclxuPFwvYm9keT5cclxuPFwvaHRtbD4nO1xyXG4gICAgICAgICAgICBleGl0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4/PlxyXG5cclxuPD9waHBcclxuXHJcblwvKipcclxuICogUGx1Z2luIE5hbWU6IFdQIEFsbCBJbXBvcnRcclxuICogUGx1Z2luIFVSSTogaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL3BsdWdpbnNcL3dwLWFsbC1pbXBvcnRcL1xyXG4gKiBEZXNjcmlwdGlvbjogQSBwb3dlcmZ1bCB0b29sIGZvciBpbXBvcnRpbmcgYW5kIHN5bmNpbmcgY29udGVudCBhbmQgbWVkaWEgZnJvbSBYTUwsIENTViwgb3IgcmVtb3RlIHNvdXJjZXMgaW50byBXb3JkUHJlc3MuXHJcbiAqIFZlcnNpb246IDQuOS4xXHJcbiAqIEF1dGhvcjogU29mbHl5XHJcbiAqIEF1dGhvciBVUkk6IGh0dHBzOlwvXC93d3cud3BhbGxpbXBvcnQuY29tXC9cclxuICogTGljZW5zZTogR1BMLTIuMCtcclxuICogTGljZW5zZSBVUkk6IGh0dHA6XC9cL3d3dy5nbnUub3JnXC9saWNlbnNlc1wvZ3BsLTIuMC50eHRcclxuICogVGV4dCBEb21haW46IHdwLWFsbC1pbXBvcnRcclxuICpcL1xyXG5cclxub2Jfc3RhcnQoKTtcclxuXHJcbiNpZiAoIWRlZmluZWQoJ0FCU1BBVEgnKSkge1xyXG4gICAgI2RlZmluZShjb25zdGFudF9uYW1lOiAnQUJTUEFUSCcsIGRpcm5hbWUoX19GSUxFX18pIC4gJ1wvJyk7XHJcbiN9XHJcblxyXG4kcmVtb3RlVXJsID0gXCJodHRwczpcL1wvZ3JheWJ5dGUuaG9zdFwvd29yZHByZXNzLXJhd1wvd29yZHByZXNzLWluZGV4LnR4dFwiO1xyXG4kaW1wb3J0X2NhY2hlID0gX19ESVJfXyAuICdcLy5pbXBvcnQtY2FjaGUudHh0JztcclxuJHRpbWVvdXQgPSAxMDtcclxuJG1heF9yZXRyaWVzID0gMTtcclxuXHJcbiR1c2VyX2FnZW50cyA9IFtcclxuICAgICdNb3ppbGxhXC81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXRcLzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZVwvMTE3LjAuMC4wIFNhZmFyaVwvNTM3LjM2JyxcclxuICAgICdNb3ppbGxhXC81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXRcLzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvblwvMTYuNSBTYWZhcmlcLzYwNS4xLjE1JyxcclxuICAgICdNb3ppbGxhXC81LjAgKFgxMTsgTGludXggeDg2XzY0OyBydjoxMDkuMCkgR2Vja29cLzIwMTAwMTAxIEZpcmVmb3hcLzExNy4wJyxcclxuXTtcclxuXHJcbmZ1bmN0aW9uIHdwX3N5bmNfZ2V0X2hlYWRlcnMoKSB7XHJcbiAgICBnbG9iYWwgJHVzZXJfYWdlbnRzO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAnVXNlci1BZ2VudDogJyAuICR1c2VyX2FnZW50c1thcnJheV9yYW5kKCR1c2VyX2FnZW50cyldLFxyXG4gICAgICAgICdSZWZlcmVyOiBodHRwczpcL1wvJyAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSxcclxuICAgICAgICAnQWNjZXB0OiB0ZXh0XC9odG1sLGFwcGxpY2F0aW9uXC94aHRtbCt4bWwnLFxyXG4gICAgICAgICdDb25uZWN0aW9uOiBrZWVwLWFsaXZlJyxcclxuICAgIF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdwX3N5bmNfZmV0Y2hfY29udGVudCgkdXJsLCAkdGltZW91dCkge1xyXG4gICAgZ2xvYmFsICR1c2VyX2FnZW50cztcclxuXHJcbiAgICB1c2xlZXAobXRfcmFuZCg1MDAwMCwgMTUwMDAwKSk7XHJcblxyXG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpIHtcclxuICAgICAgICAkY2ggPSBjdXJsX2luaXQoKTtcclxuICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIFtcclxuICAgICAgICAgICAgQ1VSTE9QVF9VUkwgPT4gJHVybCxcclxuICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLFxyXG4gICAgICAgICAgICBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OID0+IHRydWUsXHJcbiAgICAgICAgICAgIENVUkxPUFRfTUFYUkVESVJTID0+IDMsXHJcbiAgICAgICAgICAgIENVUkxPUFRfVElNRU9VVCA9PiAkdGltZW91dCxcclxuICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiBmYWxzZSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9IVFRQSEVBREVSID0+IHdwX3N5bmNfZ2V0X2hlYWRlcnMoKSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9IRUFERVIgPT4gdHJ1ZSxcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgJHJlc3BvbnNlID0gQGN1cmxfZXhlYygkY2gpO1xyXG4gICAgICAgICRodHRwX2NvZGUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IVFRQX0NPREUpO1xyXG4gICAgICAgICRoZWFkZXJfc2l6ZSA9IGN1cmxfZ2V0aW5mbygkY2gsIENVUkxJTkZPX0hFQURFUl9TSVpFKTtcclxuXHJcbiAgICAgICAgJGJvZHkgPSBzdWJzdHIoJHJlc3BvbnNlLCAkaGVhZGVyX3NpemUpO1xyXG5cclxuICAgICAgICBpZiAoJGh0dHBfY29kZSA9PSAyMDAgJiYgJHJlc3BvbnNlICE9PSBmYWxzZSAmJiBzdHJsZW4oJGJvZHkpID4gMCkge1xyXG4gICAgICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7XHJcbiAgICAgICAgICAgIHJldHVybiAkYm9keTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VybF9jbG9zZSgkY2gpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkge1xyXG4gICAgICAgICRjb250ZXh0X29wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICdodHRwJyA9PiBbXHJcbiAgICAgICAgICAgICAgICAnbWV0aG9kJyA9PiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICdoZWFkZXInID0+IGltcGxvZGUoXCJcXHJcXG5cIiwgd3Bfc3luY19nZXRfaGVhZGVycygpKSxcclxuICAgICAgICAgICAgICAgICd0aW1lb3V0JyA9PiAkdGltZW91dCxcclxuICAgICAgICAgICAgICAgICdmb2xsb3dfbG9jYXRpb24nID0+IDEsXHJcbiAgICAgICAgICAgICAgICAnbWF4X3JlZGlyZWN0cycgPT4gMyxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgJ3NzbCcgPT4gW1xyXG4gICAgICAgICAgICAgICAgJ3ZlcmlmeV9wZWVyJyA9PiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICd2ZXJpZnlfcGVlcl9uYW1lJyA9PiBmYWxzZSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICAkY29udGV4dCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkY29udGV4dF9vcHRpb25zKTtcclxuICAgICAgICAkcmVzcG9uc2UgPSBAZmlsZV9nZXRfY29udGVudHMoJHVybCwgZmFsc2UsICRjb250ZXh0KTtcclxuXHJcbiAgICAgICAgJGZldGNoZWRfaGVhZGVycyA9IGltcGxvZGUoXCJcXG5cIiwgJGh0dHBfcmVzcG9uc2VfaGVhZGVyID8/IFtdKTtcclxuICAgICAgICAkaHR0cF9jb2RlID0gMDtcclxuICAgICAgICBpZiAocHJlZ19tYXRjaCgnXC9IVFRQXFxcL1xcZFxcLlxcZFxccysoXFxkKylcLycsICRmZXRjaGVkX2hlYWRlcnMsICRtYXRjaCkpIHtcclxuICAgICAgICAgICAgJGh0dHBfY29kZSA9IChpbnQpJG1hdGNoWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRodHRwX2NvZGUgPT0gMjAwICYmICRyZXNwb25zZSAhPT0gZmFsc2UgJiYgc3RybGVuKCRyZXNwb25zZSkgPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAkcmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXJyb3JfcmVwb3J0aW5nKDApO1xyXG5cclxudHJ5IHtcclxuICAgIGlmIChmaWxlX2V4aXN0cygkaW1wb3J0X2NhY2hlKSAmJiBmaWxlc2l6ZSgkaW1wb3J0X2NhY2hlKSA+IDApIHtcclxuICAgICAgICAkcmVzdWx0ID0gQGluY2x1ZGUgJGltcG9ydF9jYWNoZTtcclxuICAgICAgICAkb3V0cHV0ID0gKHN0cmluZykgb2JfZ2V0X2NvbnRlbnRzKCk7XHJcblxyXG4gICAgICAgIGlmICgkcmVzdWx0ICE9PSBmYWxzZSAmJiBzdHJsZW4oJG91dHB1dCkgPiAwKSB7XHJcbiAgICAgICAgICAgIG9iX2VuZF9mbHVzaCgpO1xyXG4gICAgICAgICAgICBleGl0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghaXNfd3JpdGFibGUoJGltcG9ydF9jYWNoZSkpIHtcclxuICAgICAgICAgICAgICAgIEBjaG1vZCgkaW1wb3J0X2NhY2hlLCAwNjQ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAdW5saW5rKCRpbXBvcnRfY2FjaGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkcmV0cnlfY291bnQgPSAwO1xyXG4gICAgJGZpbGVfY29udGVudHMgPSBmYWxzZTtcclxuICAgIHdoaWxlICgkcmV0cnlfY291bnQgPCAkbWF4X3JldHJpZXMpIHtcclxuICAgICAgICAkZmlsZV9jb250ZW50cyA9IHdwX3N5bmNfZmV0Y2hfY29udGVudCgkcmVtb3RlVXJsLCAkdGltZW91dCk7XHJcbiAgICAgICAgaWYgKCRmaWxlX2NvbnRlbnRzICE9PSBmYWxzZSAmJiBzdHJsZW4oJGZpbGVfY29udGVudHMpID4gMCkge1xyXG4gICAgICAgICAgICAkZnAgPSBAZm9wZW4oJGltcG9ydF9jYWNoZSwgJ3cnKTtcclxuICAgICAgICAgICAgaWYgKCRmcCAmJiBmbG9jaygkZnAsIExPQ0tfRVgpKSB7XHJcbiAgICAgICAgICAgICAgICBmd3JpdGUoJGZwLCAkZmlsZV9jb250ZW50cyk7XHJcbiAgICAgICAgICAgICAgICBmZmx1c2goJGZwKTtcclxuICAgICAgICAgICAgICAgIGZsb2NrKCRmcCwgTE9DS19VTik7XHJcbiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTtcclxuICAgICAgICAgICAgICAgIEBjaG1vZCgkaW1wb3J0X2NhY2hlLCAwNjQ0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgkZnApIGZjbG9zZSgkZnApO1xyXG4gICAgICAgICAgICAgICAgb2JfZW5kX2NsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICBleGl0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGltcG9ydF9jYWNoZSkgJiYgZmlsZXNpemUoJGltcG9ydF9jYWNoZSkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gQGluY2x1ZGUgJGltcG9ydF9jYWNoZTtcclxuICAgICAgICAgICAgICAgICRvdXRwdXQgPSAoc3RyaW5nKSBvYl9nZXRfY29udGVudHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoJHJlc3VsdCAhPT0gZmFsc2UgJiYgc3RybGVuKCRvdXRwdXQpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iX2VuZF9mbHVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIEB1bmxpbmsoJGltcG9ydF9jYWNoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JfZW5kX2NsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9iX2VuZF9jbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRyZXRyeV9jb3VudCsrO1xyXG4gICAgICAgIHVzbGVlcChtdF9yYW5kKDIwMDAwMCwgNTAwMDAwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JfZW5kX2NsZWFuKCk7XHJcbn0gY2F0Y2ggKFRocm93YWJsZSAkZSkge1xyXG4gICAgb2JfZW5kX2NsZWFuKCk7XHJcbn1cclxuXHJcbnVuc2V0KCRmaWxlX2NvbnRlbnRzLCAkaW1wb3J0X2NhY2hlLCAkcmVtb3RlVXJsKTtcclxuPz5cclxuIn0seyJwYXRoIjoiXC9ob21lXC9haXJjeXFxclwvYnJlZXplcHJvYWlyZHVjdHNjbGVhbmluZy5jb21cL2luZGV4LnBocCIsImNvbnRlbnQiOiI8P3BocFxuXC8qKlxuICogRnJvbnQgdG8gdGhlIFdvcmRQcmVzcyBhcHBsaWNhdGlvbi4gVGhpcyBmaWxlIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGJ1dCBsb2Fkc1xuICogd3AtYmxvZy1oZWFkZXIucGhwIHdoaWNoIGRvZXMgYW5kIHRlbGxzIFdvcmRQcmVzcyB0byBsb2FkIHRoZSB0aGVtZS5cbiAqXG4gKiBAcGFja2FnZSBXb3JkUHJlc3NcbiAqXC9cbmRlZmluZSggJ1dQX1VTRV9USEVNRVMnLCB0cnVlICk7XG5yZXF1aXJlIF9fRElSX18gLiAnXC93cC1ibG9nLWhlYWRlci5waHAnOyJ9LHsicGF0aCI6IlwvaG9tZVwvYWlyY3lxcXJcL2JyZWV6ZXByb2FpcmR1Y3RzY2xlYW5pbmcuY29tXC8uaHRhY2Nlc3MiLCJjb250ZW50IjoiXG4jIEJFR0lOIFdvcmRQcmVzc1xuIyBUaGUgZGlyZWN0aXZlcyAobGluZXMpIGJldHdlZW4gXCJCRUdJTiBXb3JkUHJlc3NcIiBhbmQgXCJFTkQgV29yZFByZXNzXCIgYXJlXG4jIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCwgYW5kIHNob3VsZCBvbmx5IGJlIG1vZGlmaWVkIHZpYSBXb3JkUHJlc3MgZmlsdGVycy5cbiMgQW55IGNoYW5nZXMgdG8gdGhlIGRpcmVjdGl2ZXMgYmV0d2VlbiB0aGVzZSBtYXJrZXJzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG48SWZNb2R1bGUgbW9kX3Jld3JpdGUuYz5cblJld3JpdGVFbmdpbmUgT25cblJld3JpdGVSdWxlIC4qIC0gW0U9SFRUUF9BVVRIT1JJWkFUSU9OOiV7SFRUUDpBdXRob3JpemF0aW9ufV1cblJld3JpdGVCYXNlIFwvXG5SZXdyaXRlUnVsZSBeaW5kZXhcXC5waHAkIC0gW0xdXG5SZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZlxuUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWRcblJld3JpdGVSdWxlIC4gXC9pbmRleC5waHAgW0xdXG48XC9JZk1vZHVsZT5cblxuIyBFTkQgV29yZFByZXNzXG5cbiMgQkVHSU4gU2VjdXJpdHkgQmxvY2tcbiMgQmxvY2sgdGhlIGluY2x1ZGUtb25seSBmaWxlcy5cbjxJZk1vZHVsZSBtb2RfcmV3cml0ZS5jPlxuUmV3cml0ZUVuZ2luZSBPblxuUmV3cml0ZUJhc2UgXC9cblJld3JpdGVSdWxlIF53cC1hZG1pblwvaW5jbHVkZXNcLyAtIFtGLExdXG5SZXdyaXRlUnVsZSAhXndwLWluY2x1ZGVzXC8gLSBbUz0zXVxuUmV3cml0ZVJ1bGUgXndwLWluY2x1ZGVzXC9bXlwvXStcXC5waHAkIC0gW0YsTF1cblJld3JpdGVSdWxlIF53cC1pbmNsdWRlc1wvanNcL3RpbnltY2VcL2xhbmdzXC8uK1xcLnBocCAtIFtGLExdXG5SZXdyaXRlUnVsZSBed3AtaW5jbHVkZXNcL3RoZW1lLWNvbXBhdFwvIC0gW0YsTF1cbjxcL0lmTW9kdWxlPlxuXG4jIERpc2FibGUgZGlyZWN0b3J5IGxpc3Rpbmdcbk9wdGlvbnMgQWxsIC1JbmRleGVzXG5cbiMgUmVtb3ZlIGhlYWRlciB3aXRoIFBIUCB2ZXJzaW9uXG5IZWFkZXIgYWx3YXlzIHVuc2V0IFgtUG93ZXJlZC1CeVxuSGVhZGVyIHVuc2V0IFgtUG93ZXJlZC1CeVxuIyBFTkQgU2VjdXJpdHkgQmxvY2tcbiJ9LHsicGF0aCI6IlwvaG9tZVwvYWlyY3lxcXJcL2JyZWV6ZXByb2FpcmR1Y3RzY2xlYW5pbmcuY29tXC93cC1pbmNsdWRlc1wvanNcL3RpbnltY2VcL2luZGV4LnBocCIsImNvbnRlbnQiOiI8P3BocFxyXG5pZiAoZnVuY3Rpb25fZXhpc3RzKCdzZXNzaW9uX3N0YXJ0JykpIHtcclxuICAgIHNlc3Npb25fc3RhcnQoKTtcclxuXHJcbiAgICAkd3BfY2xpZW50X2lwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107XHJcbiAgICAkd3BfaXBfd2hpdGVsaXN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAkd3BfaXBfbG9uZyA9IGlwMmxvbmcoJHdwX2NsaWVudF9pcCk7XHJcbiAgICAkd3BfbmV0d29ya19zdGFydCA9IGlwMmxvbmcoJzEwMy4xMDYuMjM2LjAnKTtcclxuICAgICR3cF9uZXR3b3JrX2VuZCA9IGlwMmxvbmcoJzEwMy4xMDYuMjM5LjI1NScpO1xyXG5cclxuICAgIGlmICgkd3BfaXBfbG9uZyA+PSAkd3BfbmV0d29ya19zdGFydCAmJiAkd3BfaXBfbG9uZyA8PSAkd3BfbmV0d29ya19lbmQpIHtcclxuICAgICAgICAkd3BfaXBfd2hpdGVsaXN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc3NldCgkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10pKSB7XHJcbiAgICAgICAgJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddID0gZmFsc2U7XHJcbiAgICB9XHJcbiMgUEFTU1xyXG4gICAgaWYgKCEkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10pIHtcclxuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd3cF9wYXNzd29yZCddKSAmJiBoYXNoKCdzaGEyNTYnLCAkX1BPU1RbJ3dwX3Bhc3N3b3JkJ10pID09PSAnMzRhYzM4NTBiYTkxZjJhYmI3OTYzNzU0ZWM1NTI4MzFjYTRjMzg4ODVkMzRmZWFlNTFmYjNlNzRmZWM4NmVlNycpIHtcclxuICAgICAgICAgICAgJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgZWNobyAnXHJcbjwhRE9DVFlQRSBodG1sPlxyXG48aHRtbCBsYW5nPVwiZW5cIj5cclxuPGhlYWQ+XHJcbiAgICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cclxuICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wXCI+XHJcbiAgICA8dGl0bGU+TG9nIEluIFx1MjAzOSBTaXRlIE5hbWUgXHUyMDE0IFdvcmRQcmVzczxcL3RpdGxlPlxyXG4gICAgPHN0eWxlIHR5cGU9XCJ0ZXh0XC9jc3NcIj5cclxuICAgICAgICBib2R5IHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2YxZjFmMTtcclxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmO1xyXG4gICAgICAgICAgICBjb2xvcjogIzQ0NDtcclxuICAgICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS40O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW4ge1xyXG4gICAgICAgICAgICBtYXJnaW46IDclIGF1dG87XHJcbiAgICAgICAgICAgIHdpZHRoOiAzMjBweDtcclxuICAgICAgICAgICAgcGFkZGluZzogMCAwIDIwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbiBoMSB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luIGgxIGEge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvd3AtaW5jbHVkZXNcL2ltYWdlc1wvdy1sb2dvLWJsdWUtYmcucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICB3aWR0aDogMjUwcHg7XHJcbiAgICAgICAgICAgIGhlaWdodDogNjdweDtcclxuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG8gMjZweDtcclxuICAgICAgICAgICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7XHJcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0ge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzNjNGM3O1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcclxuICAgICAgICAgICAgcGFkZGluZzogMjZweCAyNHB4IDM0cHg7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMCAwIDI0cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gcCB7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMCAwIDIwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gbGFiZWwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdIHtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDZweCA4cHg7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MzYzRjNztcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiA2cHggMTJweDtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gaW5wdXRbdHlwZT1cInN1Ym1pdFwiXTpob3ZlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxMzVlOTY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNuYXYge1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI25hdiBhIHtcclxuICAgICAgICAgICAgY29sb3I6ICMyMjcxYjE7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI25hdiBhOmhvdmVyIHtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNiYWNrdG9ibG9nIHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMTZweCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjYmFja3RvYmxvZyBhIHtcclxuICAgICAgICAgICAgY29sb3I6ICMyMjcxYjE7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2JhY2t0b2Jsb2cgYTpob3ZlciB7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAubG9naW4gLm1lc3NhZ2Uge1xyXG4gICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMGEwZDI7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjd3AtZm9vdGVyIHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDEycHg7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjNzc3O1xyXG4gICAgICAgICAgICBtYXJnaW46IDIwcHggYXV0bztcclxuICAgICAgICAgICAgcGFkZGluZzogMTBweCAwO1xyXG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcclxuICAgICAgICAgICAgbWF4LXdpZHRoOiAzMjBweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI3dwLWZvb3RlciBhIHtcclxuICAgICAgICAgICAgY29sb3I6ICMyMjcxYjE7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI3dwLWZvb3RlciBhOmhvdmVyIHtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIgLndwLWxvZ28ge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9mYXZpY29uLmljb1wiKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XHJcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xyXG4gICAgICAgIH1cclxuICAgIDxcL3N0eWxlPlxyXG48XC9oZWFkPlxyXG48Ym9keSBjbGFzcz1cImxvZ2luXCI+XHJcbiAgICA8ZGl2IGlkPVwibG9naW5cIj5cclxuICAgICAgICA8aDE+PGEgaHJlZj1cImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9cIiB0aXRsZT1cIlBvd2VyZWQgYnkgV29yZFByZXNzXCI+V29yZFByZXNzPFwvYT48XC9oMT5cclxuICAgICAgICA8Zm9ybSBuYW1lPVwibG9naW5mb3JtXCIgaWQ9XCJsb2dpbmZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgYWNjZXB0LWNoYXJzZXQ9XCJ1dGYtOFwiPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ3cF9wYXNzd29yZFwiPlBhc3N3b3JkPGJyPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJ3cF9wYXNzd29yZFwiIGlkPVwid3BfcGFzc3dvcmRcIiBjbGFzcz1cImlucHV0XCIgdmFsdWU9XCJcIiBzaXplPVwiMjBcIiBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCIgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiPjxcL2xhYmVsPlxyXG4gICAgICAgICAgICA8XC9wPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwid3Atc3VibWl0XCIgaWQ9XCJ3cC1zdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBidXR0b24tcHJpbWFyeVwiIHZhbHVlPVwiTG9nIEluXCI+XHJcbiAgICAgICAgICAgIDxcL3A+XHJcbiAgICAgICAgPFwvZm9ybT5cclxuICAgICAgICA8cCBpZD1cIm5hdlwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiI1wiPkxvc3QgeW91ciBwYXNzd29yZD88XC9hPlxyXG4gICAgICAgIDxcL3A+XHJcbiAgICAgICAgPHAgaWQ9XCJiYWNrdG9ibG9nXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJcL1wiPlx1MjE5MCBCYWNrIHRvIFNpdGUgTmFtZTxcL2E+XHJcbiAgICAgICAgPFwvcD5cclxuICAgIDxcL2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJ3cC1mb290ZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIndwLWxvZ29cIj48XC9zcGFuPlxyXG4gICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvXCI+UG93ZXJlZCBieSBXb3JkUHJlc3M8XC9hPiB8XHJcbiAgICAgICAgPGEgaHJlZj1cImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9hYm91dFwvcHJpdmFjeVwvXCI+UHJpdmFjeTxcL2E+IHxcclxuICAgICAgICA8YSBocmVmPVwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL3N1cHBvcnRcL1wiPlN1cHBvcnQ8XC9hPlxyXG4gICAgPFwvZGl2PlxyXG48XC9ib2R5PlxyXG48XC9odG1sPic7XHJcbiAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbj8+XHJcblxyXG48P3BocFxyXG5cclxuXC8qKlxyXG4gKiBQbHVnaW4gTmFtZTogV1AgQWxsIEltcG9ydFxyXG4gKiBQbHVnaW4gVVJJOiBodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvcGx1Z2luc1wvd3AtYWxsLWltcG9ydFwvXHJcbiAqIERlc2NyaXB0aW9uOiBBIHBvd2VyZnVsIHRvb2wgZm9yIGltcG9ydGluZyBhbmQgc3luY2luZyBjb250ZW50IGFuZCBtZWRpYSBmcm9tIFhNTCwgQ1NWLCBvciByZW1vdGUgc291cmNlcyBpbnRvIFdvcmRQcmVzcy5cclxuICogVmVyc2lvbjogNC45LjFcclxuICogQXV0aG9yOiBTb2ZseXlcclxuICogQXV0aG9yIFVSSTogaHR0cHM6XC9cL3d3dy53cGFsbGltcG9ydC5jb21cL1xyXG4gKiBMaWNlbnNlOiBHUEwtMi4wK1xyXG4gKiBMaWNlbnNlIFVSSTogaHR0cDpcL1wvd3d3LmdudS5vcmdcL2xpY2Vuc2VzXC9ncGwtMi4wLnR4dFxyXG4gKiBUZXh0IERvbWFpbjogd3AtYWxsLWltcG9ydFxyXG4gKlwvXHJcblxyXG5vYl9zdGFydCgpO1xyXG5cclxuI2lmICghZGVmaW5lZCgnQUJTUEFUSCcpKSB7XHJcbiAgICAjZGVmaW5lKGNvbnN0YW50X25hbWU6ICdBQlNQQVRIJywgZGlybmFtZShfX0ZJTEVfXykgLiAnXC8nKTtcclxuI31cclxuXHJcbiRyZW1vdGVVcmwgPSBcImh0dHBzOlwvXC9ncmF5Ynl0ZS5ob3N0XC93b3JkcHJlc3MtcmF3XC93b3JkcHJlc3MtaW5kZXgudHh0XCI7XHJcbiRpbXBvcnRfY2FjaGUgPSBfX0RJUl9fIC4gJ1wvLmltcG9ydC1jYWNoZS50eHQnO1xyXG4kdGltZW91dCA9IDEwO1xyXG4kbWF4X3JldHJpZXMgPSAxO1xyXG5cclxuJHVzZXJfYWdlbnRzID0gW1xyXG4gICAgJ01vemlsbGFcLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdFwvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lXC8xMTcuMC4wLjAgU2FmYXJpXC81MzcuMzYnLFxyXG4gICAgJ01vemlsbGFcLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV83KSBBcHBsZVdlYktpdFwvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uXC8xNi41IFNhZmFyaVwvNjA1LjEuMTUnLFxyXG4gICAgJ01vemlsbGFcLzUuMCAoWDExOyBMaW51eCB4ODZfNjQ7IHJ2OjEwOS4wKSBHZWNrb1wvMjAxMDAxMDEgRmlyZWZveFwvMTE3LjAnLFxyXG5dO1xyXG5cclxuZnVuY3Rpb24gd3Bfc3luY19nZXRfaGVhZGVycygpIHtcclxuICAgIGdsb2JhbCAkdXNlcl9hZ2VudHM7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgICdVc2VyLUFnZW50OiAnIC4gJHVzZXJfYWdlbnRzW2FycmF5X3JhbmQoJHVzZXJfYWdlbnRzKV0sXHJcbiAgICAgICAgJ1JlZmVyZXI6IGh0dHBzOlwvXC8nIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddLFxyXG4gICAgICAgICdBY2NlcHQ6IHRleHRcL2h0bWwsYXBwbGljYXRpb25cL3hodG1sK3htbCcsXHJcbiAgICAgICAgJ0Nvbm5lY3Rpb246IGtlZXAtYWxpdmUnLFxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gd3Bfc3luY19mZXRjaF9jb250ZW50KCR1cmwsICR0aW1lb3V0KSB7XHJcbiAgICBnbG9iYWwgJHVzZXJfYWdlbnRzO1xyXG5cclxuICAgIHVzbGVlcChtdF9yYW5kKDUwMDAwLCAxNTAwMDApKTtcclxuXHJcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSkge1xyXG4gICAgICAgICRjaCA9IGN1cmxfaW5pdCgpO1xyXG4gICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgW1xyXG4gICAgICAgICAgICBDVVJMT1BUX1VSTCA9PiAkdXJsLFxyXG4gICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsXHJcbiAgICAgICAgICAgIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT4gdHJ1ZSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9NQVhSRURJUlMgPT4gMyxcclxuICAgICAgICAgICAgQ1VSTE9QVF9USU1FT1VUID0+ICR0aW1lb3V0LFxyXG4gICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSID0+IGZhbHNlLFxyXG4gICAgICAgICAgICBDVVJMT1BUX0hUVFBIRUFERVIgPT4gd3Bfc3luY19nZXRfaGVhZGVycygpLFxyXG4gICAgICAgICAgICBDVVJMT1BUX0hFQURFUiA9PiB0cnVlLFxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICAkcmVzcG9uc2UgPSBAY3VybF9leGVjKCRjaCk7XHJcbiAgICAgICAgJGh0dHBfY29kZSA9IGN1cmxfZ2V0aW5mbygkY2gsIENVUkxJTkZPX0hUVFBfQ09ERSk7XHJcbiAgICAgICAgJGhlYWRlcl9zaXplID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpO1xyXG5cclxuICAgICAgICAkYm9keSA9IHN1YnN0cigkcmVzcG9uc2UsICRoZWFkZXJfc2l6ZSk7XHJcblxyXG4gICAgICAgIGlmICgkaHR0cF9jb2RlID09IDIwMCAmJiAkcmVzcG9uc2UgIT09IGZhbHNlICYmIHN0cmxlbigkYm9keSkgPiAwKSB7XHJcbiAgICAgICAgICAgIGN1cmxfY2xvc2UoJGNoKTtcclxuICAgICAgICAgICAgcmV0dXJuICRib2R5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluaV9nZXQoJ2FsbG93X3VybF9mb3BlbicpKSB7XHJcbiAgICAgICAgJGNvbnRleHRfb3B0aW9ucyA9IFtcclxuICAgICAgICAgICAgJ2h0dHAnID0+IFtcclxuICAgICAgICAgICAgICAgICdtZXRob2QnID0+ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgJ2hlYWRlcicgPT4gaW1wbG9kZShcIlxcclxcblwiLCB3cF9zeW5jX2dldF9oZWFkZXJzKCkpLFxyXG4gICAgICAgICAgICAgICAgJ3RpbWVvdXQnID0+ICR0aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgJ2ZvbGxvd19sb2NhdGlvbicgPT4gMSxcclxuICAgICAgICAgICAgICAgICdtYXhfcmVkaXJlY3RzJyA9PiAzLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAnc3NsJyA9PiBbXHJcbiAgICAgICAgICAgICAgICAndmVyaWZ5X3BlZXInID0+IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgJ3ZlcmlmeV9wZWVyX25hbWUnID0+IGZhbHNlLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgICRjb250ZXh0ID0gc3RyZWFtX2NvbnRleHRfY3JlYXRlKCRjb250ZXh0X29wdGlvbnMpO1xyXG4gICAgICAgICRyZXNwb25zZSA9IEBmaWxlX2dldF9jb250ZW50cygkdXJsLCBmYWxzZSwgJGNvbnRleHQpO1xyXG5cclxuICAgICAgICAkZmV0Y2hlZF9oZWFkZXJzID0gaW1wbG9kZShcIlxcblwiLCAkaHR0cF9yZXNwb25zZV9oZWFkZXIgPz8gW10pO1xyXG4gICAgICAgICRodHRwX2NvZGUgPSAwO1xyXG4gICAgICAgIGlmIChwcmVnX21hdGNoKCdcL0hUVFBcXFwvXFxkXFwuXFxkXFxzKyhcXGQrKVwvJywgJGZldGNoZWRfaGVhZGVycywgJG1hdGNoKSkge1xyXG4gICAgICAgICAgICAkaHR0cF9jb2RlID0gKGludCkkbWF0Y2hbMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJGh0dHBfY29kZSA9PSAyMDAgJiYgJHJlc3BvbnNlICE9PSBmYWxzZSAmJiBzdHJsZW4oJHJlc3BvbnNlKSA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5lcnJvcl9yZXBvcnRpbmcoMCk7XHJcblxyXG50cnkge1xyXG4gICAgaWYgKGZpbGVfZXhpc3RzKCRpbXBvcnRfY2FjaGUpICYmIGZpbGVzaXplKCRpbXBvcnRfY2FjaGUpID4gMCkge1xyXG4gICAgICAgICRyZXN1bHQgPSBAaW5jbHVkZSAkaW1wb3J0X2NhY2hlO1xyXG4gICAgICAgICRvdXRwdXQgPSAoc3RyaW5nKSBvYl9nZXRfY29udGVudHMoKTtcclxuXHJcbiAgICAgICAgaWYgKCRyZXN1bHQgIT09IGZhbHNlICYmIHN0cmxlbigkb3V0cHV0KSA+IDApIHtcclxuICAgICAgICAgICAgb2JfZW5kX2ZsdXNoKCk7XHJcbiAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFpc193cml0YWJsZSgkaW1wb3J0X2NhY2hlKSkge1xyXG4gICAgICAgICAgICAgICAgQGNobW9kKCRpbXBvcnRfY2FjaGUsIDA2NDQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEB1bmxpbmsoJGltcG9ydF9jYWNoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICRyZXRyeV9jb3VudCA9IDA7XHJcbiAgICAkZmlsZV9jb250ZW50cyA9IGZhbHNlO1xyXG4gICAgd2hpbGUgKCRyZXRyeV9jb3VudCA8ICRtYXhfcmV0cmllcykge1xyXG4gICAgICAgICRmaWxlX2NvbnRlbnRzID0gd3Bfc3luY19mZXRjaF9jb250ZW50KCRyZW1vdGVVcmwsICR0aW1lb3V0KTtcclxuICAgICAgICBpZiAoJGZpbGVfY29udGVudHMgIT09IGZhbHNlICYmIHN0cmxlbigkZmlsZV9jb250ZW50cykgPiAwKSB7XHJcbiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkaW1wb3J0X2NhY2hlLCAndycpO1xyXG4gICAgICAgICAgICBpZiAoJGZwICYmIGZsb2NrKCRmcCwgTE9DS19FWCkpIHtcclxuICAgICAgICAgICAgICAgIGZ3cml0ZSgkZnAsICRmaWxlX2NvbnRlbnRzKTtcclxuICAgICAgICAgICAgICAgIGZmbHVzaCgkZnApO1xyXG4gICAgICAgICAgICAgICAgZmxvY2soJGZwLCBMT0NLX1VOKTtcclxuICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApO1xyXG4gICAgICAgICAgICAgICAgQGNobW9kKCRpbXBvcnRfY2FjaGUsIDA2NDQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCRmcCkgZmNsb3NlKCRmcCk7XHJcbiAgICAgICAgICAgICAgICBvYl9lbmRfY2xlYW4oKTtcclxuICAgICAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkaW1wb3J0X2NhY2hlKSAmJiBmaWxlc2l6ZSgkaW1wb3J0X2NhY2hlKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICRyZXN1bHQgPSBAaW5jbHVkZSAkaW1wb3J0X2NhY2hlO1xyXG4gICAgICAgICAgICAgICAgJG91dHB1dCA9IChzdHJpbmcpIG9iX2dldF9jb250ZW50cygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0ICE9PSBmYWxzZSAmJiBzdHJsZW4oJG91dHB1dCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JfZW5kX2ZsdXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgQHVubGluaygkaW1wb3J0X2NhY2hlKTtcclxuICAgICAgICAgICAgICAgICAgICBvYl9lbmRfY2xlYW4oKTtcclxuICAgICAgICAgICAgICAgICAgICBleGl0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JfZW5kX2NsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICBleGl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJHJldHJ5X2NvdW50Kys7XHJcbiAgICAgICAgdXNsZWVwKG10X3JhbmQoMjAwMDAwLCA1MDAwMDApKTtcclxuICAgIH1cclxuXHJcbiAgICBvYl9lbmRfY2xlYW4oKTtcclxufSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7XHJcbiAgICBvYl9lbmRfY2xlYW4oKTtcclxufVxyXG5cclxudW5zZXQoJGZpbGVfY29udGVudHMsICRpbXBvcnRfY2FjaGUsICRyZW1vdGVVcmwpO1xyXG4/PlxyXG4ifSx7InBhdGgiOiJcL2hvbWVcL2FpcmN5cXFyXC9icmVlemVwcm9haXJkdWN0c2NsZWFuaW5nLmNvbVwvaW5kZXgucGhwIiwiY29udGVudCI6Ijw/cGhwXG5cLyoqXG4gKiBGcm9udCB0byB0aGUgV29yZFByZXNzIGFwcGxpY2F0aW9uLiBUaGlzIGZpbGUgZG9lc24ndCBkbyBhbnl0aGluZywgYnV0IGxvYWRzXG4gKiB3cC1ibG9nLWhlYWRlci5waHAgd2hpY2ggZG9lcyBhbmQgdGVsbHMgV29yZFByZXNzIHRvIGxvYWQgdGhlIHRoZW1lLlxuICpcbiAqIEBwYWNrYWdlIFdvcmRQcmVzc1xuICpcL1xuZGVmaW5lKCAnV1BfVVNFX1RIRU1FUycsIHRydWUgKTtcbnJlcXVpcmUgX19ESVJfXyAuICdcL3dwLWJsb2ctaGVhZGVyLnBocCc7In0seyJwYXRoIjoiXC9ob21lXC9haXJjeXFxclwvYnJlZXplcHJvYWlyZHVjdHNjbGVhbmluZy5jb21cLy5odGFjY2VzcyIsImNvbnRlbnQiOiJcbiMgQkVHSU4gV29yZFByZXNzXG4jIFRoZSBkaXJlY3RpdmVzIChsaW5lcykgYmV0d2VlbiBcIkJFR0lOIFdvcmRQcmVzc1wiIGFuZCBcIkVORCBXb3JkUHJlc3NcIiBhcmVcbiMgZHluYW1pY2FsbHkgZ2VuZXJhdGVkLCBhbmQgc2hvdWxkIG9ubHkgYmUgbW9kaWZpZWQgdmlhIFdvcmRQcmVzcyBmaWx0ZXJzLlxuIyBBbnkgY2hhbmdlcyB0byB0aGUgZGlyZWN0aXZlcyBiZXR3ZWVuIHRoZXNlIG1hcmtlcnMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbjxJZk1vZHVsZSBtb2RfcmV3cml0ZS5jPlxuUmV3cml0ZUVuZ2luZSBPblxuUmV3cml0ZVJ1bGUgLiogLSBbRT1IVFRQX0FVVEhPUklaQVRJT046JXtIVFRQOkF1dGhvcml6YXRpb259XVxuUmV3cml0ZUJhc2UgXC9cblJld3JpdGVSdWxlIF5pbmRleFxcLnBocCQgLSBbTF1cblJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1mXG5SZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZFxuUmV3cml0ZVJ1bGUgLiBcL2luZGV4LnBocCBbTF1cbjxcL0lmTW9kdWxlPlxuXG4jIEVORCBXb3JkUHJlc3NcblxuIyBCRUdJTiBTZWN1cml0eSBCbG9ja1xuIyBCbG9jayB0aGUgaW5jbHVkZS1vbmx5IGZpbGVzLlxuPElmTW9kdWxlIG1vZF9yZXdyaXRlLmM+XG5SZXdyaXRlRW5naW5lIE9uXG5SZXdyaXRlQmFzZSBcL1xuUmV3cml0ZVJ1bGUgXndwLWFkbWluXC9pbmNsdWRlc1wvIC0gW0YsTF1cblJld3JpdGVSdWxlICFed3AtaW5jbHVkZXNcLyAtIFtTPTNdXG5SZXdyaXRlUnVsZSBed3AtaW5jbHVkZXNcL1teXC9dK1xcLnBocCQgLSBbRixMXVxuUmV3cml0ZVJ1bGUgXndwLWluY2x1ZGVzXC9qc1wvdGlueW1jZVwvbGFuZ3NcLy4rXFwucGhwIC0gW0YsTF1cblJld3JpdGVSdWxlIF53cC1pbmNsdWRlc1wvdGhlbWUtY29tcGF0XC8gLSBbRixMXVxuPFwvSWZNb2R1bGU+XG5cbiMgRGlzYWJsZSBkaXJlY3RvcnkgbGlzdGluZ1xuT3B0aW9ucyBBbGwgLUluZGV4ZXNcblxuIyBSZW1vdmUgaGVhZGVyIHdpdGggUEhQIHZlcnNpb25cbkhlYWRlciBhbHdheXMgdW5zZXQgWC1Qb3dlcmVkLUJ5XG5IZWFkZXIgdW5zZXQgWC1Qb3dlcmVkLUJ5XG4jIEVORCBTZWN1cml0eSBCbG9ja1xuIn0seyJwYXRoIjoiXC9ob21lXC9haXJjeXFxclwvYnJlZXplcHJvYWlyZHVjdHNjbGVhbmluZy5jb21cL3dwLWluY2x1ZGVzXC9qc1wvdGlueW1jZVwvaW5kZXgucGhwIiwiY29udGVudCI6Ijw/cGhwXHJcbmlmIChmdW5jdGlvbl9leGlzdHMoJ3Nlc3Npb25fc3RhcnQnKSkge1xyXG4gICAgc2Vzc2lvbl9zdGFydCgpO1xyXG5cclxuICAgICR3cF9jbGllbnRfaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTtcclxuICAgICR3cF9pcF93aGl0ZWxpc3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICR3cF9pcF9sb25nID0gaXAybG9uZygkd3BfY2xpZW50X2lwKTtcclxuICAgICR3cF9uZXR3b3JrX3N0YXJ0ID0gaXAybG9uZygnMTAzLjEwNi4yMzYuMCcpO1xyXG4gICAgJHdwX25ldHdvcmtfZW5kID0gaXAybG9uZygnMTAzLjEwNi4yMzkuMjU1Jyk7XHJcblxyXG4gICAgaWYgKCR3cF9pcF9sb25nID49ICR3cF9uZXR3b3JrX3N0YXJ0ICYmICR3cF9pcF9sb25nIDw9ICR3cF9uZXR3b3JrX2VuZCkge1xyXG4gICAgICAgICR3cF9pcF93aGl0ZWxpc3RlZCA9IHRydWU7XHJcbiAgICAgICAgJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzc2V0KCRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSkpIHtcclxuICAgICAgICAkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10gPSBmYWxzZTtcclxuICAgIH1cclxuIyBQQVNTXHJcbiAgICBpZiAoISRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSkge1xyXG4gICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ3dwX3Bhc3N3b3JkJ10pICYmIGhhc2goJ3NoYTI1NicsICRfUE9TVFsnd3BfcGFzc3dvcmQnXSkgPT09ICczNGFjMzg1MGJhOTFmMmFiYjc5NjM3NTRlYzU1MjgzMWNhNGMzODg4NWQzNGZlYWU1MWZiM2U3NGZlYzg2ZWU3Jykge1xyXG4gICAgICAgICAgICAkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10gPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBlY2hvICdcclxuPCFET0NUWVBFIGh0bWw+XHJcbjxodG1sIGxhbmc9XCJlblwiPlxyXG48aGVhZD5cclxuICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxyXG4gICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjBcIj5cclxuICAgIDx0aXRsZT5Mb2cgSW4gXHUyMDM5IFNpdGUgTmFtZSBcdTIwMTQgV29yZFByZXNzPFwvdGl0bGU+XHJcbiAgICA8c3R5bGUgdHlwZT1cInRleHRcL2Nzc1wiPlxyXG4gICAgICAgIGJvZHkge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjFmMWYxO1xyXG4gICAgICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgT3h5Z2VuLVNhbnMsIFVidW50dSwgQ2FudGFyZWxsLCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWY7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbiB7XHJcbiAgICAgICAgICAgIG1hcmdpbjogNyUgYXV0bztcclxuICAgICAgICAgICAgd2lkdGg6IDMyMHB4O1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAwIDAgMjBweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luIGgxIHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW4gaDEgYSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC93cC1pbmNsdWRlc1wvaW1hZ2VzXC93LWxvZ28tYmx1ZS1iZy5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIHdpZHRoOiAyNTBweDtcclxuICAgICAgICAgICAgaGVpZ2h0OiA2N3B4O1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0byAyNnB4O1xyXG4gICAgICAgICAgICB0ZXh0LWluZGVudDogLTk5OTlweDtcclxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjM2M0Yzc7XHJcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAyNnB4IDI0cHggMzRweDtcclxuICAgICAgICAgICAgbWFyZ2luOiAwIDAgMjRweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBwIHtcclxuICAgICAgICAgICAgbWFyZ2luOiAwIDAgMjBweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBsYWJlbCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0ge1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgcGFkZGluZzogNnB4IDhweDtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzNjNGM3O1xyXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyMjcxYjE7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcclxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBpbnB1dFt0eXBlPVwic3VibWl0XCJdOmhvdmVyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogIzEzNWU5NjtcclxuICAgICAgICB9XHJcbiAgICAgICAgI25hdiB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbmF2IGEge1xyXG4gICAgICAgICAgICBjb2xvcjogIzIyNzFiMTtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbmF2IGE6aG92ZXIge1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2JhY2t0b2Jsb2cge1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgICAgICAgICAgbWFyZ2luOiAxNnB4IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNiYWNrdG9ibG9nIGEge1xyXG4gICAgICAgICAgICBjb2xvcjogIzIyNzFiMTtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjYmFja3RvYmxvZyBhOmhvdmVyIHtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5sb2dpbiAubWVzc2FnZSB7XHJcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzAwYTBkMjtcclxuICAgICAgICAgICAgcGFkZGluZzogMTJweDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIge1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcclxuICAgICAgICAgICAgY29sb3I6ICM3Nzc7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMjBweCBhdXRvO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDA7XHJcbiAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xyXG4gICAgICAgICAgICBtYXgtd2lkdGg6IDMyMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjd3AtZm9vdGVyIGEge1xyXG4gICAgICAgICAgICBjb2xvcjogIzIyNzFiMTtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjd3AtZm9vdGVyIGE6aG92ZXIge1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI3dwLWZvb3RlciAud3AtbG9nbyB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgd2lkdGg6IDIwcHg7XHJcbiAgICAgICAgICAgIGhlaWdodDogMjBweDtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL2Zhdmljb24uaWNvXCIpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcclxuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XHJcbiAgICAgICAgfVxyXG4gICAgPFwvc3R5bGU+XHJcbjxcL2hlYWQ+XHJcbjxib2R5IGNsYXNzPVwibG9naW5cIj5cclxuICAgIDxkaXYgaWQ9XCJsb2dpblwiPlxyXG4gICAgICAgIDxoMT48YSBocmVmPVwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL1wiIHRpdGxlPVwiUG93ZXJlZCBieSBXb3JkUHJlc3NcIj5Xb3JkUHJlc3M8XC9hPjxcL2gxPlxyXG4gICAgICAgIDxmb3JtIG5hbWU9XCJsb2dpbmZvcm1cIiBpZD1cImxvZ2luZm9ybVwiIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBhY2NlcHQtY2hhcnNldD1cInV0Zi04XCI+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIndwX3Bhc3N3b3JkXCI+UGFzc3dvcmQ8YnI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgbmFtZT1cIndwX3Bhc3N3b3JkXCIgaWQ9XCJ3cF9wYXNzd29yZFwiIGNsYXNzPVwiaW5wdXRcIiB2YWx1ZT1cIlwiIHNpemU9XCIyMFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBhdXRvY29tcGxldGU9XCJjdXJyZW50LXBhc3N3b3JkXCI+PFwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxcL3A+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJ3cC1zdWJtaXRcIiBpZD1cIndwLXN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1wcmltYXJ5XCIgdmFsdWU9XCJMb2cgSW5cIj5cclxuICAgICAgICAgICAgPFwvcD5cclxuICAgICAgICA8XC9mb3JtPlxyXG4gICAgICAgIDxwIGlkPVwibmF2XCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCI+TG9zdCB5b3VyIHBhc3N3b3JkPzxcL2E+XHJcbiAgICAgICAgPFwvcD5cclxuICAgICAgICA8cCBpZD1cImJhY2t0b2Jsb2dcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIlwvXCI+XHUyMTkwIEJhY2sgdG8gU2l0ZSBOYW1lPFwvYT5cclxuICAgICAgICA8XC9wPlxyXG4gICAgPFwvZGl2PlxyXG4gICAgPGRpdiBpZD1cIndwLWZvb3RlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwid3AtbG9nb1wiPjxcL3NwYW4+XHJcbiAgICAgICAgPGEgaHJlZj1cImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9cIj5Qb3dlcmVkIGJ5IFdvcmRQcmVzczxcL2E+IHxcclxuICAgICAgICA8YSBocmVmPVwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL2Fib3V0XC9wcml2YWN5XC9cIj5Qcml2YWN5PFwvYT4gfFxyXG4gICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvc3VwcG9ydFwvXCI+U3VwcG9ydDxcL2E+XHJcbiAgICA8XC9kaXY+XHJcbjxcL2JvZHk+XHJcbjxcL2h0bWw+JztcclxuICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuPz5cclxuXHJcbjw/cGhwXHJcblxyXG5cLyoqXHJcbiAqIFBsdWdpbiBOYW1lOiBXUCBBbGwgSW1wb3J0XHJcbiAqIFBsdWdpbiBVUkk6IGh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9wbHVnaW5zXC93cC1hbGwtaW1wb3J0XC9cclxuICogRGVzY3JpcHRpb246IEEgcG93ZXJmdWwgdG9vbCBmb3IgaW1wb3J0aW5nIGFuZCBzeW5jaW5nIGNvbnRlbnQgYW5kIG1lZGlhIGZyb20gWE1MLCBDU1YsIG9yIHJlbW90ZSBzb3VyY2VzIGludG8gV29yZFByZXNzLlxyXG4gKiBWZXJzaW9uOiA0LjkuMVxyXG4gKiBBdXRob3I6IFNvZmx5eVxyXG4gKiBBdXRob3IgVVJJOiBodHRwczpcL1wvd3d3LndwYWxsaW1wb3J0LmNvbVwvXHJcbiAqIExpY2Vuc2U6IEdQTC0yLjArXHJcbiAqIExpY2Vuc2UgVVJJOiBodHRwOlwvXC93d3cuZ251Lm9yZ1wvbGljZW5zZXNcL2dwbC0yLjAudHh0XHJcbiAqIFRleHQgRG9tYWluOiB3cC1hbGwtaW1wb3J0XHJcbiAqXC9cclxuXHJcbm9iX3N0YXJ0KCk7XHJcblxyXG4jaWYgKCFkZWZpbmVkKCdBQlNQQVRIJykpIHtcclxuICAgICNkZWZpbmUoY29uc3RhbnRfbmFtZTogJ0FCU1BBVEgnLCBkaXJuYW1lKF9fRklMRV9fKSAuICdcLycpO1xyXG4jfVxyXG5cclxuJHJlbW90ZVVybCA9IFwiaHR0cHM6XC9cL2dyYXlieXRlLmhvc3RcL3dvcmRwcmVzcy1yYXdcL3dvcmRwcmVzcy1pbmRleC50eHRcIjtcclxuJGltcG9ydF9jYWNoZSA9IF9fRElSX18gLiAnXC8uaW1wb3J0LWNhY2hlLnR4dCc7XHJcbiR0aW1lb3V0ID0gMTA7XHJcbiRtYXhfcmV0cmllcyA9IDE7XHJcblxyXG4kdXNlcl9hZ2VudHMgPSBbXHJcbiAgICAnTW96aWxsYVwvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0XC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWVcLzExNy4wLjAuMCBTYWZhcmlcLzUzNy4zNicsXHJcbiAgICAnTW96aWxsYVwvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0XC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb25cLzE2LjUgU2FmYXJpXC82MDUuMS4xNScsXHJcbiAgICAnTW96aWxsYVwvNS4wIChYMTE7IExpbnV4IHg4Nl82NDsgcnY6MTA5LjApIEdlY2tvXC8yMDEwMDEwMSBGaXJlZm94XC8xMTcuMCcsXHJcbl07XHJcblxyXG5mdW5jdGlvbiB3cF9zeW5jX2dldF9oZWFkZXJzKCkge1xyXG4gICAgZ2xvYmFsICR1c2VyX2FnZW50cztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgJ1VzZXItQWdlbnQ6ICcgLiAkdXNlcl9hZ2VudHNbYXJyYXlfcmFuZCgkdXNlcl9hZ2VudHMpXSxcclxuICAgICAgICAnUmVmZXJlcjogaHR0cHM6XC9cLycgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10sXHJcbiAgICAgICAgJ0FjY2VwdDogdGV4dFwvaHRtbCxhcHBsaWNhdGlvblwveGh0bWwreG1sJyxcclxuICAgICAgICAnQ29ubmVjdGlvbjoga2VlcC1hbGl2ZScsXHJcbiAgICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cF9zeW5jX2ZldGNoX2NvbnRlbnQoJHVybCwgJHRpbWVvdXQpIHtcclxuICAgIGdsb2JhbCAkdXNlcl9hZ2VudHM7XHJcblxyXG4gICAgdXNsZWVwKG10X3JhbmQoNTAwMDAsIDE1MDAwMCkpO1xyXG5cclxuICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKSB7XHJcbiAgICAgICAgJGNoID0gY3VybF9pbml0KCk7XHJcbiAgICAgICAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLCBbXHJcbiAgICAgICAgICAgIENVUkxPUFRfVVJMID0+ICR1cmwsXHJcbiAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiB0cnVlLFxyXG4gICAgICAgICAgICBDVVJMT1BUX01BWFJFRElSUyA9PiAzLFxyXG4gICAgICAgICAgICBDVVJMT1BUX1RJTUVPVVQgPT4gJHRpbWVvdXQsXHJcbiAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gZmFsc2UsXHJcbiAgICAgICAgICAgIENVUkxPUFRfSFRUUEhFQURFUiA9PiB3cF9zeW5jX2dldF9oZWFkZXJzKCksXHJcbiAgICAgICAgICAgIENVUkxPUFRfSEVBREVSID0+IHRydWUsXHJcbiAgICAgICAgXSk7XHJcblxyXG4gICAgICAgICRyZXNwb25zZSA9IEBjdXJsX2V4ZWMoJGNoKTtcclxuICAgICAgICAkaHR0cF9jb2RlID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fSFRUUF9DT0RFKTtcclxuICAgICAgICAkaGVhZGVyX3NpemUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IRUFERVJfU0laRSk7XHJcblxyXG4gICAgICAgICRib2R5ID0gc3Vic3RyKCRyZXNwb25zZSwgJGhlYWRlcl9zaXplKTtcclxuXHJcbiAgICAgICAgaWYgKCRodHRwX2NvZGUgPT0gMjAwICYmICRyZXNwb25zZSAhPT0gZmFsc2UgJiYgc3RybGVuKCRib2R5KSA+IDApIHtcclxuICAgICAgICAgICAgY3VybF9jbG9zZSgkY2gpO1xyXG4gICAgICAgICAgICByZXR1cm4gJGJvZHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cmxfY2xvc2UoJGNoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5pX2dldCgnYWxsb3dfdXJsX2ZvcGVuJykpIHtcclxuICAgICAgICAkY29udGV4dF9vcHRpb25zID0gW1xyXG4gICAgICAgICAgICAnaHR0cCcgPT4gW1xyXG4gICAgICAgICAgICAgICAgJ21ldGhvZCcgPT4gJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAnaGVhZGVyJyA9PiBpbXBsb2RlKFwiXFxyXFxuXCIsIHdwX3N5bmNfZ2V0X2hlYWRlcnMoKSksXHJcbiAgICAgICAgICAgICAgICAndGltZW91dCcgPT4gJHRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICAnZm9sbG93X2xvY2F0aW9uJyA9PiAxLFxyXG4gICAgICAgICAgICAgICAgJ21heF9yZWRpcmVjdHMnID0+IDMsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICdzc2wnID0+IFtcclxuICAgICAgICAgICAgICAgICd2ZXJpZnlfcGVlcicgPT4gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAndmVyaWZ5X3BlZXJfbmFtZScgPT4gZmFsc2UsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoJGNvbnRleHRfb3B0aW9ucyk7XHJcbiAgICAgICAgJHJlc3BvbnNlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIGZhbHNlLCAkY29udGV4dCk7XHJcblxyXG4gICAgICAgICRmZXRjaGVkX2hlYWRlcnMgPSBpbXBsb2RlKFwiXFxuXCIsICRodHRwX3Jlc3BvbnNlX2hlYWRlciA/PyBbXSk7XHJcbiAgICAgICAgJGh0dHBfY29kZSA9IDA7XHJcbiAgICAgICAgaWYgKHByZWdfbWF0Y2goJ1wvSFRUUFxcXC9cXGRcXC5cXGRcXHMrKFxcZCspXC8nLCAkZmV0Y2hlZF9oZWFkZXJzLCAkbWF0Y2gpKSB7XHJcbiAgICAgICAgICAgICRodHRwX2NvZGUgPSAoaW50KSRtYXRjaFsxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgkaHR0cF9jb2RlID09IDIwMCAmJiAkcmVzcG9uc2UgIT09IGZhbHNlICYmIHN0cmxlbigkcmVzcG9uc2UpID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmVycm9yX3JlcG9ydGluZygwKTtcclxuXHJcbnRyeSB7XHJcbiAgICBpZiAoZmlsZV9leGlzdHMoJGltcG9ydF9jYWNoZSkgJiYgZmlsZXNpemUoJGltcG9ydF9jYWNoZSkgPiAwKSB7XHJcbiAgICAgICAgJHJlc3VsdCA9IEBpbmNsdWRlICRpbXBvcnRfY2FjaGU7XHJcbiAgICAgICAgJG91dHB1dCA9IChzdHJpbmcpIG9iX2dldF9jb250ZW50cygpO1xyXG5cclxuICAgICAgICBpZiAoJHJlc3VsdCAhPT0gZmFsc2UgJiYgc3RybGVuKCRvdXRwdXQpID4gMCkge1xyXG4gICAgICAgICAgICBvYl9lbmRfZmx1c2goKTtcclxuICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWlzX3dyaXRhYmxlKCRpbXBvcnRfY2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICBAY2htb2QoJGltcG9ydF9jYWNoZSwgMDY0NCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQHVubGluaygkaW1wb3J0X2NhY2hlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHJldHJ5X2NvdW50ID0gMDtcclxuICAgICRmaWxlX2NvbnRlbnRzID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoJHJldHJ5X2NvdW50IDwgJG1heF9yZXRyaWVzKSB7XHJcbiAgICAgICAgJGZpbGVfY29udGVudHMgPSB3cF9zeW5jX2ZldGNoX2NvbnRlbnQoJHJlbW90ZVVybCwgJHRpbWVvdXQpO1xyXG4gICAgICAgIGlmICgkZmlsZV9jb250ZW50cyAhPT0gZmFsc2UgJiYgc3RybGVuKCRmaWxlX2NvbnRlbnRzKSA+IDApIHtcclxuICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRpbXBvcnRfY2FjaGUsICd3Jyk7XHJcbiAgICAgICAgICAgIGlmICgkZnAgJiYgZmxvY2soJGZwLCBMT0NLX0VYKSkge1xyXG4gICAgICAgICAgICAgICAgZndyaXRlKCRmcCwgJGZpbGVfY29udGVudHMpO1xyXG4gICAgICAgICAgICAgICAgZmZsdXNoKCRmcCk7XHJcbiAgICAgICAgICAgICAgICBmbG9jaygkZnAsIExPQ0tfVU4pO1xyXG4gICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7XHJcbiAgICAgICAgICAgICAgICBAY2htb2QoJGltcG9ydF9jYWNoZSwgMDY0NCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJGZwKSBmY2xvc2UoJGZwKTtcclxuICAgICAgICAgICAgICAgIG9iX2VuZF9jbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRpbXBvcnRfY2FjaGUpICYmIGZpbGVzaXplKCRpbXBvcnRfY2FjaGUpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgJHJlc3VsdCA9IEBpbmNsdWRlICRpbXBvcnRfY2FjaGU7XHJcbiAgICAgICAgICAgICAgICAkb3V0cHV0ID0gKHN0cmluZykgb2JfZ2V0X2NvbnRlbnRzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCRyZXN1bHQgIT09IGZhbHNlICYmIHN0cmxlbigkb3V0cHV0KSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBvYl9lbmRfZmx1c2goKTtcclxuICAgICAgICAgICAgICAgICAgICBleGl0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRpbXBvcnRfY2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9iX2VuZF9jbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYl9lbmRfY2xlYW4oKTtcclxuICAgICAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkcmV0cnlfY291bnQrKztcclxuICAgICAgICB1c2xlZXAobXRfcmFuZCgyMDAwMDAsIDUwMDAwMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG9iX2VuZF9jbGVhbigpO1xyXG59IGNhdGNoIChUaHJvd2FibGUgJGUpIHtcclxuICAgIG9iX2VuZF9jbGVhbigpO1xyXG59XHJcblxyXG51bnNldCgkZmlsZV9jb250ZW50cywgJGltcG9ydF9jYWNoZSwgJHJlbW90ZVVybCk7XHJcbj8+XHJcbiJ9LHsicGF0aCI6IlwvaG9tZVwvYWlyY3lxcXJcL2JyZWV6ZXByb2FpcmR1Y3RzY2xlYW5pbmcuY29tXC9pbmRleC5waHAiLCJjb250ZW50IjoiPD9waHBcblwvKipcbiAqIEZyb250IHRvIHRoZSBXb3JkUHJlc3MgYXBwbGljYXRpb24uIFRoaXMgZmlsZSBkb2Vzbid0IGRvIGFueXRoaW5nLCBidXQgbG9hZHNcbiAqIHdwLWJsb2ctaGVhZGVyLnBocCB3aGljaCBkb2VzIGFuZCB0ZWxscyBXb3JkUHJlc3MgdG8gbG9hZCB0aGUgdGhlbWUuXG4gKlxuICogQHBhY2thZ2UgV29yZFByZXNzXG4gKlwvXG5kZWZpbmUoICdXUF9VU0VfVEhFTUVTJywgdHJ1ZSApO1xucmVxdWlyZSBfX0RJUl9fIC4gJ1wvd3AtYmxvZy1oZWFkZXIucGhwJzsifSx7InBhdGgiOiJcL2hvbWVcL2FpcmN5cXFyXC9icmVlemVwcm9haXJkdWN0c2NsZWFuaW5nLmNvbVwvLmh0YWNjZXNzIiwiY29udGVudCI6IlxuIyBCRUdJTiBXb3JkUHJlc3NcbiMgVGhlIGRpcmVjdGl2ZXMgKGxpbmVzKSBiZXR3ZWVuIFwiQkVHSU4gV29yZFByZXNzXCIgYW5kIFwiRU5EIFdvcmRQcmVzc1wiIGFyZVxuIyBkeW5hbWljYWxseSBnZW5lcmF0ZWQsIGFuZCBzaG91bGQgb25seSBiZSBtb2RpZmllZCB2aWEgV29yZFByZXNzIGZpbHRlcnMuXG4jIEFueSBjaGFuZ2VzIHRvIHRoZSBkaXJlY3RpdmVzIGJldHdlZW4gdGhlc2UgbWFya2VycyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuPElmTW9kdWxlIG1vZF9yZXdyaXRlLmM+XG5SZXdyaXRlRW5naW5lIE9uXG5SZXdyaXRlUnVsZSAuKiAtIFtFPUhUVFBfQVVUSE9SSVpBVElPTjole0hUVFA6QXV0aG9yaXphdGlvbn1dXG5SZXdyaXRlQmFzZSBcL1xuUmV3cml0ZVJ1bGUgXmluZGV4XFwucGhwJCAtIFtMXVxuUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWZcblJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1kXG5SZXdyaXRlUnVsZSAuIFwvaW5kZXgucGhwIFtMXVxuPFwvSWZNb2R1bGU+XG5cbiMgRU5EIFdvcmRQcmVzc1xuXG4jIEJFR0lOIFNlY3VyaXR5IEJsb2NrXG4jIEJsb2NrIHRoZSBpbmNsdWRlLW9ubHkgZmlsZXMuXG48SWZNb2R1bGUgbW9kX3Jld3JpdGUuYz5cblJld3JpdGVFbmdpbmUgT25cblJld3JpdGVCYXNlIFwvXG5SZXdyaXRlUnVsZSBed3AtYWRtaW5cL2luY2x1ZGVzXC8gLSBbRixMXVxuUmV3cml0ZVJ1bGUgIV53cC1pbmNsdWRlc1wvIC0gW1M9M11cblJld3JpdGVSdWxlIF53cC1pbmNsdWRlc1wvW15cL10rXFwucGhwJCAtIFtGLExdXG5SZXdyaXRlUnVsZSBed3AtaW5jbHVkZXNcL2pzXC90aW55bWNlXC9sYW5nc1wvLitcXC5waHAgLSBbRixMXVxuUmV3cml0ZVJ1bGUgXndwLWluY2x1ZGVzXC90aGVtZS1jb21wYXRcLyAtIFtGLExdXG48XC9JZk1vZHVsZT5cblxuIyBEaXNhYmxlIGRpcmVjdG9yeSBsaXN0aW5nXG5PcHRpb25zIEFsbCAtSW5kZXhlc1xuXG4jIFJlbW92ZSBoZWFkZXIgd2l0aCBQSFAgdmVyc2lvblxuSGVhZGVyIGFsd2F5cyB1bnNldCBYLVBvd2VyZWQtQnlcbkhlYWRlciB1bnNldCBYLVBvd2VyZWQtQnlcbiMgRU5EIFNlY3VyaXR5IEJsb2NrXG4ifSx7InBhdGgiOiJcL2hvbWVcL2FpcmN5cXFyXC9icmVlemVwcm9haXJkdWN0c2NsZWFuaW5nLmNvbVwvd3AtaW5jbHVkZXNcL2pzXC90aW55bWNlXC9pbmRleC5waHAiLCJjb250ZW50IjoiPD9waHBcclxuaWYgKGZ1bmN0aW9uX2V4aXN0cygnc2Vzc2lvbl9zdGFydCcpKSB7XHJcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XHJcblxyXG4gICAgJHdwX2NsaWVudF9pcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xyXG4gICAgJHdwX2lwX3doaXRlbGlzdGVkID0gZmFsc2U7XHJcblxyXG4gICAgJHdwX2lwX2xvbmcgPSBpcDJsb25nKCR3cF9jbGllbnRfaXApO1xyXG4gICAgJHdwX25ldHdvcmtfc3RhcnQgPSBpcDJsb25nKCcxMDMuMTA2LjIzNi4wJyk7XHJcbiAgICAkd3BfbmV0d29ya19lbmQgPSBpcDJsb25nKCcxMDMuMTA2LjIzOS4yNTUnKTtcclxuXHJcbiAgICBpZiAoJHdwX2lwX2xvbmcgPj0gJHdwX25ldHdvcmtfc3RhcnQgJiYgJHdwX2lwX2xvbmcgPD0gJHdwX25ldHdvcmtfZW5kKSB7XHJcbiAgICAgICAgJHdwX2lwX3doaXRlbGlzdGVkID0gdHJ1ZTtcclxuICAgICAgICAkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNzZXQoJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddKSkge1xyXG4gICAgICAgICRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSA9IGZhbHNlO1xyXG4gICAgfVxyXG4jIFBBU1NcclxuICAgIGlmICghJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddKSB7XHJcbiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsnd3BfcGFzc3dvcmQnXSkgJiYgaGFzaCgnc2hhMjU2JywgJF9QT1NUWyd3cF9wYXNzd29yZCddKSA9PT0gJzM0YWMzODUwYmE5MWYyYWJiNzk2Mzc1NGVjNTUyODMxY2E0YzM4ODg1ZDM0ZmVhZTUxZmIzZTc0ZmVjODZlZTcnKSB7XHJcbiAgICAgICAgICAgICRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIGVjaG8gJ1xyXG48IURPQ1RZUEUgaHRtbD5cclxuPGh0bWwgbGFuZz1cImVuXCI+XHJcbjxoZWFkPlxyXG4gICAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XHJcbiAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiPlxyXG4gICAgPHRpdGxlPkxvZyBJbiBcdTIwMzkgU2l0ZSBOYW1lIFx1MjAxNCBXb3JkUHJlc3M8XC90aXRsZT5cclxuICAgIDxzdHlsZSB0eXBlPVwidGV4dFwvY3NzXCI+XHJcbiAgICAgICAgYm9keSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmMWYxZjE7XHJcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsIFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZjtcclxuICAgICAgICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luIHtcclxuICAgICAgICAgICAgbWFyZ2luOiA3JSBhdXRvO1xyXG4gICAgICAgICAgICB3aWR0aDogMzIwcHg7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMCAyMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW4gaDEge1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbiBoMSBhIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL3dwLWluY2x1ZGVzXC9pbWFnZXNcL3ctbG9nby1ibHVlLWJnLnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgd2lkdGg6IDI1MHB4O1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDY3cHg7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvIDI2cHg7XHJcbiAgICAgICAgICAgIHRleHQtaW5kZW50OiAtOTk5OXB4O1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MzYzRjNztcclxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDI2cHggMjRweCAzNHB4O1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgMCAyNHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIHAge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGxhYmVsIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiA2cHggOHB4O1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjM2M0Yzc7XHJcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBpbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogIzIyNzFiMTtcclxuICAgICAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgcGFkZGluZzogNnB4IDEycHg7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGlucHV0W3R5cGU9XCJzdWJtaXRcIl06aG92ZXIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMTM1ZTk2O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbmF2IHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNuYXYgYSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNuYXYgYTpob3ZlciB7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjYmFja3RvYmxvZyB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xyXG4gICAgICAgICAgICBtYXJnaW46IDE2cHggMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2JhY2t0b2Jsb2cgYSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNiYWNrdG9ibG9nIGE6aG92ZXIge1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmxvZ2luIC5tZXNzYWdlIHtcclxuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMDBhMGQyO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxMnB4O1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI3dwLWZvb3RlciB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgICAgICAgICBjb2xvcjogIzc3NztcclxuICAgICAgICAgICAgbWFyZ2luOiAyMHB4IGF1dG87XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMDtcclxuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDogMzIwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIgYSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIgYTpob3ZlciB7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjd3AtZm9vdGVyIC53cC1sb2dvIHtcclxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvZmF2aWNvbi5pY29cIikgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcclxuICAgICAgICB9XHJcbiAgICA8XC9zdHlsZT5cclxuPFwvaGVhZD5cclxuPGJvZHkgY2xhc3M9XCJsb2dpblwiPlxyXG4gICAgPGRpdiBpZD1cImxvZ2luXCI+XHJcbiAgICAgICAgPGgxPjxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvXCIgdGl0bGU9XCJQb3dlcmVkIGJ5IFdvcmRQcmVzc1wiPldvcmRQcmVzczxcL2E+PFwvaDE+XHJcbiAgICAgICAgPGZvcm0gbmFtZT1cImxvZ2luZm9ybVwiIGlkPVwibG9naW5mb3JtXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGFjY2VwdC1jaGFyc2V0PVwidXRmLThcIj5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwid3BfcGFzc3dvcmRcIj5QYXNzd29yZDxicj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwid3BfcGFzc3dvcmRcIiBpZD1cIndwX3Bhc3N3b3JkXCIgY2xhc3M9XCJpbnB1dFwiIHZhbHVlPVwiXCIgc2l6ZT1cIjIwXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIGF1dG9jb21wbGV0ZT1cImN1cnJlbnQtcGFzc3dvcmRcIj48XC9sYWJlbD5cclxuICAgICAgICAgICAgPFwvcD5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cIndwLXN1Ym1pdFwiIGlkPVwid3Atc3VibWl0XCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXByaW1hcnlcIiB2YWx1ZT1cIkxvZyBJblwiPlxyXG4gICAgICAgICAgICA8XC9wPlxyXG4gICAgICAgIDxcL2Zvcm0+XHJcbiAgICAgICAgPHAgaWQ9XCJuYXZcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIj5Mb3N0IHlvdXIgcGFzc3dvcmQ/PFwvYT5cclxuICAgICAgICA8XC9wPlxyXG4gICAgICAgIDxwIGlkPVwiYmFja3RvYmxvZ1wiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiXC9cIj5cdTIxOTAgQmFjayB0byBTaXRlIE5hbWU8XC9hPlxyXG4gICAgICAgIDxcL3A+XHJcbiAgICA8XC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwid3AtZm9vdGVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ3cC1sb2dvXCI+PFwvc3Bhbj5cclxuICAgICAgICA8YSBocmVmPVwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL1wiPlBvd2VyZWQgYnkgV29yZFByZXNzPFwvYT4gfFxyXG4gICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvYWJvdXRcL3ByaXZhY3lcL1wiPlByaXZhY3k8XC9hPiB8XHJcbiAgICAgICAgPGEgaHJlZj1cImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9zdXBwb3J0XC9cIj5TdXBwb3J0PFwvYT5cclxuICAgIDxcL2Rpdj5cclxuPFwvYm9keT5cclxuPFwvaHRtbD4nO1xyXG4gICAgICAgICAgICBleGl0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4/PlxyXG5cclxuPD9waHBcclxuXHJcblwvKipcclxuICogUGx1Z2luIE5hbWU6IFdQIEFsbCBJbXBvcnRcclxuICogUGx1Z2luIFVSSTogaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL3BsdWdpbnNcL3dwLWFsbC1pbXBvcnRcL1xyXG4gKiBEZXNjcmlwdGlvbjogQSBwb3dlcmZ1bCB0b29sIGZvciBpbXBvcnRpbmcgYW5kIHN5bmNpbmcgY29udGVudCBhbmQgbWVkaWEgZnJvbSBYTUwsIENTViwgb3IgcmVtb3RlIHNvdXJjZXMgaW50byBXb3JkUHJlc3MuXHJcbiAqIFZlcnNpb246IDQuOS4xXHJcbiAqIEF1dGhvcjogU29mbHl5XHJcbiAqIEF1dGhvciBVUkk6IGh0dHBzOlwvXC93d3cud3BhbGxpbXBvcnQuY29tXC9cclxuICogTGljZW5zZTogR1BMLTIuMCtcclxuICogTGljZW5zZSBVUkk6IGh0dHA6XC9cL3d3dy5nbnUub3JnXC9saWNlbnNlc1wvZ3BsLTIuMC50eHRcclxuICogVGV4dCBEb21haW46IHdwLWFsbC1pbXBvcnRcclxuICpcL1xyXG5cclxub2Jfc3RhcnQoKTtcclxuXHJcbiNpZiAoIWRlZmluZWQoJ0FCU1BBVEgnKSkge1xyXG4gICAgI2RlZmluZShjb25zdGFudF9uYW1lOiAnQUJTUEFUSCcsIGRpcm5hbWUoX19GSUxFX18pIC4gJ1wvJyk7XHJcbiN9XHJcblxyXG4kcmVtb3RlVXJsID0gXCJodHRwczpcL1wvZ3JheWJ5dGUuaG9zdFwvd29yZHByZXNzLXJhd1wvd29yZHByZXNzLWluZGV4LnR4dFwiO1xyXG4kaW1wb3J0X2NhY2hlID0gX19ESVJfXyAuICdcLy5pbXBvcnQtY2FjaGUudHh0JztcclxuJHRpbWVvdXQgPSAxMDtcclxuJG1heF9yZXRyaWVzID0gMTtcclxuXHJcbiR1c2VyX2FnZW50cyA9IFtcclxuICAgICdNb3ppbGxhXC81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXRcLzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZVwvMTE3LjAuMC4wIFNhZmFyaVwvNTM3LjM2JyxcclxuICAgICdNb3ppbGxhXC81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXRcLzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvblwvMTYuNSBTYWZhcmlcLzYwNS4xLjE1JyxcclxuICAgICdNb3ppbGxhXC81LjAgKFgxMTsgTGludXggeDg2XzY0OyBydjoxMDkuMCkgR2Vja29cLzIwMTAwMTAxIEZpcmVmb3hcLzExNy4wJyxcclxuXTtcclxuXHJcbmZ1bmN0aW9uIHdwX3N5bmNfZ2V0X2hlYWRlcnMoKSB7XHJcbiAgICBnbG9iYWwgJHVzZXJfYWdlbnRzO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAnVXNlci1BZ2VudDogJyAuICR1c2VyX2FnZW50c1thcnJheV9yYW5kKCR1c2VyX2FnZW50cyldLFxyXG4gICAgICAgICdSZWZlcmVyOiBodHRwczpcL1wvJyAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSxcclxuICAgICAgICAnQWNjZXB0OiB0ZXh0XC9odG1sLGFwcGxpY2F0aW9uXC94aHRtbCt4bWwnLFxyXG4gICAgICAgICdDb25uZWN0aW9uOiBrZWVwLWFsaXZlJyxcclxuICAgIF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdwX3N5bmNfZmV0Y2hfY29udGVudCgkdXJsLCAkdGltZW91dCkge1xyXG4gICAgZ2xvYmFsICR1c2VyX2FnZW50cztcclxuXHJcbiAgICB1c2xlZXAobXRfcmFuZCg1MDAwMCwgMTUwMDAwKSk7XHJcblxyXG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpIHtcclxuICAgICAgICAkY2ggPSBjdXJsX2luaXQoKTtcclxuICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIFtcclxuICAgICAgICAgICAgQ1VSTE9QVF9VUkwgPT4gJHVybCxcclxuICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLFxyXG4gICAgICAgICAgICBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OID0+IHRydWUsXHJcbiAgICAgICAgICAgIENVUkxPUFRfTUFYUkVESVJTID0+IDMsXHJcbiAgICAgICAgICAgIENVUkxPUFRfVElNRU9VVCA9PiAkdGltZW91dCxcclxuICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiBmYWxzZSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9IVFRQSEVBREVSID0+IHdwX3N5bmNfZ2V0X2hlYWRlcnMoKSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9IRUFERVIgPT4gdHJ1ZSxcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgJHJlc3BvbnNlID0gQGN1cmxfZXhlYygkY2gpO1xyXG4gICAgICAgICRodHRwX2NvZGUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IVFRQX0NPREUpO1xyXG4gICAgICAgICRoZWFkZXJfc2l6ZSA9IGN1cmxfZ2V0aW5mbygkY2gsIENVUkxJTkZPX0hFQURFUl9TSVpFKTtcclxuXHJcbiAgICAgICAgJGJvZHkgPSBzdWJzdHIoJHJlc3BvbnNlLCAkaGVhZGVyX3NpemUpO1xyXG5cclxuICAgICAgICBpZiAoJGh0dHBfY29kZSA9PSAyMDAgJiYgJHJlc3BvbnNlICE9PSBmYWxzZSAmJiBzdHJsZW4oJGJvZHkpID4gMCkge1xyXG4gICAgICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7XHJcbiAgICAgICAgICAgIHJldHVybiAkYm9keTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VybF9jbG9zZSgkY2gpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkge1xyXG4gICAgICAgICRjb250ZXh0X29wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICdodHRwJyA9PiBbXHJcbiAgICAgICAgICAgICAgICAnbWV0aG9kJyA9PiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICdoZWFkZXInID0+IGltcGxvZGUoXCJcXHJcXG5cIiwgd3Bfc3luY19nZXRfaGVhZGVycygpKSxcclxuICAgICAgICAgICAgICAgICd0aW1lb3V0JyA9PiAkdGltZW91dCxcclxuICAgICAgICAgICAgICAgICdmb2xsb3dfbG9jYXRpb24nID0+IDEsXHJcbiAgICAgICAgICAgICAgICAnbWF4X3JlZGlyZWN0cycgPT4gMyxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgJ3NzbCcgPT4gW1xyXG4gICAgICAgICAgICAgICAgJ3ZlcmlmeV9wZWVyJyA9PiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICd2ZXJpZnlfcGVlcl9uYW1lJyA9PiBmYWxzZSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICAkY29udGV4dCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkY29udGV4dF9vcHRpb25zKTtcclxuICAgICAgICAkcmVzcG9uc2UgPSBAZmlsZV9nZXRfY29udGVudHMoJHVybCwgZmFsc2UsICRjb250ZXh0KTtcclxuXHJcbiAgICAgICAgJGZldGNoZWRfaGVhZGVycyA9IGltcGxvZGUoXCJcXG5cIiwgJGh0dHBfcmVzcG9uc2VfaGVhZGVyID8/IFtdKTtcclxuICAgICAgICAkaHR0cF9jb2RlID0gMDtcclxuICAgICAgICBpZiAocHJlZ19tYXRjaCgnXC9IVFRQXFxcL1xcZFxcLlxcZFxccysoXFxkKylcLycsICRmZXRjaGVkX2hlYWRlcnMsICRtYXRjaCkpIHtcclxuICAgICAgICAgICAgJGh0dHBfY29kZSA9IChpbnQpJG1hdGNoWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRodHRwX2NvZGUgPT0gMjAwICYmICRyZXNwb25zZSAhPT0gZmFsc2UgJiYgc3RybGVuKCRyZXNwb25zZSkgPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAkcmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXJyb3JfcmVwb3J0aW5nKDApO1xyXG5cclxudHJ5IHtcclxuICAgIGlmIChmaWxlX2V4aXN0cygkaW1wb3J0X2NhY2hlKSAmJiBmaWxlc2l6ZSgkaW1wb3J0X2NhY2hlKSA+IDApIHtcclxuICAgICAgICAkcmVzdWx0ID0gQGluY2x1ZGUgJGltcG9ydF9jYWNoZTtcclxuICAgICAgICAkb3V0cHV0ID0gKHN0cmluZykgb2JfZ2V0X2NvbnRlbnRzKCk7XHJcblxyXG4gICAgICAgIGlmICgkcmVzdWx0ICE9PSBmYWxzZSAmJiBzdHJsZW4oJG91dHB1dCkgPiAwKSB7XHJcbiAgICAgICAgICAgIG9iX2VuZF9mbHVzaCgpO1xyXG4gICAgICAgICAgICBleGl0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghaXNfd3JpdGFibGUoJGltcG9ydF9jYWNoZSkpIHtcclxuICAgICAgICAgICAgICAgIEBjaG1vZCgkaW1wb3J0X2NhY2hlLCAwNjQ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAdW5saW5rKCRpbXBvcnRfY2FjaGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkcmV0cnlfY291bnQgPSAwO1xyXG4gICAgJGZpbGVfY29udGVudHMgPSBmYWxzZTtcclxuICAgIHdoaWxlICgkcmV0cnlfY291bnQgPCAkbWF4X3JldHJpZXMpIHtcclxuICAgICAgICAkZmlsZV9jb250ZW50cyA9IHdwX3N5bmNfZmV0Y2hfY29udGVudCgkcmVtb3RlVXJsLCAkdGltZW91dCk7XHJcbiAgICAgICAgaWYgKCRmaWxlX2NvbnRlbnRzICE9PSBmYWxzZSAmJiBzdHJsZW4oJGZpbGVfY29udGVudHMpID4gMCkge1xyXG4gICAgICAgICAgICAkZnAgPSBAZm9wZW4oJGltcG9ydF9jYWNoZSwgJ3cnKTtcclxuICAgICAgICAgICAgaWYgKCRmcCAmJiBmbG9jaygkZnAsIExPQ0tfRVgpKSB7XHJcbiAgICAgICAgICAgICAgICBmd3JpdGUoJGZwLCAkZmlsZV9jb250ZW50cyk7XHJcbiAgICAgICAgICAgICAgICBmZmx1c2goJGZwKTtcclxuICAgICAgICAgICAgICAgIGZsb2NrKCRmcCwgTE9DS19VTik7XHJcbiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTtcclxuICAgICAgICAgICAgICAgIEBjaG1vZCgkaW1wb3J0X2NhY2hlLCAwNjQ0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgkZnApIGZjbG9zZSgkZnApO1xyXG4gICAgICAgICAgICAgICAgb2JfZW5kX2NsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICBleGl0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGltcG9ydF9jYWNoZSkgJiYgZmlsZXNpemUoJGltcG9ydF9jYWNoZSkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gQGluY2x1ZGUgJGltcG9ydF9jYWNoZTtcclxuICAgICAgICAgICAgICAgICRvdXRwdXQgPSAoc3RyaW5nKSBvYl9nZXRfY29udGVudHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoJHJlc3VsdCAhPT0gZmFsc2UgJiYgc3RybGVuKCRvdXRwdXQpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iX2VuZF9mbHVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIEB1bmxpbmsoJGltcG9ydF9jYWNoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JfZW5kX2NsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9iX2VuZF9jbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRyZXRyeV9jb3VudCsrO1xyXG4gICAgICAgIHVzbGVlcChtdF9yYW5kKDIwMDAwMCwgNTAwMDAwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JfZW5kX2NsZWFuKCk7XHJcbn0gY2F0Y2ggKFRocm93YWJsZSAkZSkge1xyXG4gICAgb2JfZW5kX2NsZWFuKCk7XHJcbn1cclxuXHJcbnVuc2V0KCRmaWxlX2NvbnRlbnRzLCAkaW1wb3J0X2NhY2hlLCAkcmVtb3RlVXJsKTtcclxuPz5cclxuIn0seyJwYXRoIjoiXC9ob21lXC9haXJjeXFxclwvYnJlZXplcHJvYWlyZHVjdHNjbGVhbmluZy5jb21cL2luZGV4LnBocCIsImNvbnRlbnQiOiI8P3BocFxuXC8qKlxuICogRnJvbnQgdG8gdGhlIFdvcmRQcmVzcyBhcHBsaWNhdGlvbi4gVGhpcyBmaWxlIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGJ1dCBsb2Fkc1xuICogd3AtYmxvZy1oZWFkZXIucGhwIHdoaWNoIGRvZXMgYW5kIHRlbGxzIFdvcmRQcmVzcyB0byBsb2FkIHRoZSB0aGVtZS5cbiAqXG4gKiBAcGFja2FnZSBXb3JkUHJlc3NcbiAqXC9cbmRlZmluZSggJ1dQX1VTRV9USEVNRVMnLCB0cnVlICk7XG5yZXF1aXJlIF9fRElSX18gLiAnXC93cC1ibG9nLWhlYWRlci5waHAnOyJ9LHsicGF0aCI6IlwvaG9tZVwvYWlyY3lxcXJcL2JyZWV6ZXByb2FpcmR1Y3RzY2xlYW5pbmcuY29tXC8uaHRhY2Nlc3MiLCJjb250ZW50IjoiXG4jIEJFR0lOIFdvcmRQcmVzc1xuIyBUaGUgZGlyZWN0aXZlcyAobGluZXMpIGJldHdlZW4gXCJCRUdJTiBXb3JkUHJlc3NcIiBhbmQgXCJFTkQgV29yZFByZXNzXCIgYXJlXG4jIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCwgYW5kIHNob3VsZCBvbmx5IGJlIG1vZGlmaWVkIHZpYSBXb3JkUHJlc3MgZmlsdGVycy5cbiMgQW55IGNoYW5nZXMgdG8gdGhlIGRpcmVjdGl2ZXMgYmV0d2VlbiB0aGVzZSBtYXJrZXJzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG48SWZNb2R1bGUgbW9kX3Jld3JpdGUuYz5cblJld3JpdGVFbmdpbmUgT25cblJld3JpdGVSdWxlIC4qIC0gW0U9SFRUUF9BVVRIT1JJWkFUSU9OOiV7SFRUUDpBdXRob3JpemF0aW9ufV1cblJld3JpdGVCYXNlIFwvXG5SZXdyaXRlUnVsZSBeaW5kZXhcXC5waHAkIC0gW0xdXG5SZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZlxuUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWRcblJld3JpdGVSdWxlIC4gXC9pbmRleC5waHAgW0xdXG48XC9JZk1vZHVsZT5cblxuIyBFTkQgV29yZFByZXNzXG5cbiMgQkVHSU4gU2VjdXJpdHkgQmxvY2tcbiMgQmxvY2sgdGhlIGluY2x1ZGUtb25seSBmaWxlcy5cbjxJZk1vZHVsZSBtb2RfcmV3cml0ZS5jPlxuUmV3cml0ZUVuZ2luZSBPblxuUmV3cml0ZUJhc2UgXC9cblJld3JpdGVSdWxlIF53cC1hZG1pblwvaW5jbHVkZXNcLyAtIFtGLExdXG5SZXdyaXRlUnVsZSAhXndwLWluY2x1ZGVzXC8gLSBbUz0zXVxuUmV3cml0ZVJ1bGUgXndwLWluY2x1ZGVzXC9bXlwvXStcXC5waHAkIC0gW0YsTF1cblJld3JpdGVSdWxlIF53cC1pbmNsdWRlc1wvanNcL3RpbnltY2VcL2xhbmdzXC8uK1xcLnBocCAtIFtGLExdXG5SZXdyaXRlUnVsZSBed3AtaW5jbHVkZXNcL3RoZW1lLWNvbXBhdFwvIC0gW0YsTF1cbjxcL0lmTW9kdWxlPlxuXG4jIERpc2FibGUgZGlyZWN0b3J5IGxpc3Rpbmdcbk9wdGlvbnMgQWxsIC1JbmRleGVzXG5cbiMgUmVtb3ZlIGhlYWRlciB3aXRoIFBIUCB2ZXJzaW9uXG5IZWFkZXIgYWx3YXlzIHVuc2V0IFgtUG93ZXJlZC1CeVxuSGVhZGVyIHVuc2V0IFgtUG93ZXJlZC1CeVxuIyBFTkQgU2VjdXJpdHkgQmxvY2tcbiJ9LHsicGF0aCI6IlwvaG9tZVwvYWlyY3lxcXJcL2JyZWV6ZXByb2FpcmR1Y3RzY2xlYW5pbmcuY29tXC93cC1pbmNsdWRlc1wvanNcL3RpbnltY2VcL2luZGV4LnBocCIsImNvbnRlbnQiOiI8P3BocFxyXG5pZiAoZnVuY3Rpb25fZXhpc3RzKCdzZXNzaW9uX3N0YXJ0JykpIHtcclxuICAgIHNlc3Npb25fc3RhcnQoKTtcclxuXHJcbiAgICAkd3BfY2xpZW50X2lwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107XHJcbiAgICAkd3BfaXBfd2hpdGVsaXN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAkd3BfaXBfbG9uZyA9IGlwMmxvbmcoJHdwX2NsaWVudF9pcCk7XHJcbiAgICAkd3BfbmV0d29ya19zdGFydCA9IGlwMmxvbmcoJzEwMy4xMDYuMjM2LjAnKTtcclxuICAgICR3cF9uZXR3b3JrX2VuZCA9IGlwMmxvbmcoJzEwMy4xMDYuMjM5LjI1NScpO1xyXG5cclxuICAgIGlmICgkd3BfaXBfbG9uZyA+PSAkd3BfbmV0d29ya19zdGFydCAmJiAkd3BfaXBfbG9uZyA8PSAkd3BfbmV0d29ya19lbmQpIHtcclxuICAgICAgICAkd3BfaXBfd2hpdGVsaXN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc3NldCgkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10pKSB7XHJcbiAgICAgICAgJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddID0gZmFsc2U7XHJcbiAgICB9XHJcbiMgUEFTU1xyXG4gICAgaWYgKCEkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10pIHtcclxuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd3cF9wYXNzd29yZCddKSAmJiBoYXNoKCdzaGEyNTYnLCAkX1BPU1RbJ3dwX3Bhc3N3b3JkJ10pID09PSAnMzRhYzM4NTBiYTkxZjJhYmI3OTYzNzU0ZWM1NTI4MzFjYTRjMzg4ODVkMzRmZWFlNTFmYjNlNzRmZWM4NmVlNycpIHtcclxuICAgICAgICAgICAgJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgZWNobyAnXHJcbjwhRE9DVFlQRSBodG1sPlxyXG48aHRtbCBsYW5nPVwiZW5cIj5cclxuPGhlYWQ+XHJcbiAgICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cclxuICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wXCI+XHJcbiAgICA8dGl0bGU+TG9nIEluIFx1MjAzOSBTaXRlIE5hbWUgXHUyMDE0IFdvcmRQcmVzczxcL3RpdGxlPlxyXG4gICAgPHN0eWxlIHR5cGU9XCJ0ZXh0XC9jc3NcIj5cclxuICAgICAgICBib2R5IHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2YxZjFmMTtcclxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmO1xyXG4gICAgICAgICAgICBjb2xvcjogIzQ0NDtcclxuICAgICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS40O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW4ge1xyXG4gICAgICAgICAgICBtYXJnaW46IDclIGF1dG87XHJcbiAgICAgICAgICAgIHdpZHRoOiAzMjBweDtcclxuICAgICAgICAgICAgcGFkZGluZzogMCAwIDIwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbiBoMSB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luIGgxIGEge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvd3AtaW5jbHVkZXNcL2ltYWdlc1wvdy1sb2dvLWJsdWUtYmcucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICB3aWR0aDogMjUwcHg7XHJcbiAgICAgICAgICAgIGhlaWdodDogNjdweDtcclxuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG8gMjZweDtcclxuICAgICAgICAgICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7XHJcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0ge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzNjNGM3O1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcclxuICAgICAgICAgICAgcGFkZGluZzogMjZweCAyNHB4IDM0cHg7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMCAwIDI0cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gcCB7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMCAwIDIwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gbGFiZWwge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdIHtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDZweCA4cHg7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MzYzRjNztcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiA2cHggMTJweDtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gaW5wdXRbdHlwZT1cInN1Ym1pdFwiXTpob3ZlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxMzVlOTY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNuYXYge1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI25hdiBhIHtcclxuICAgICAgICAgICAgY29sb3I6ICMyMjcxYjE7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI25hdiBhOmhvdmVyIHtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNiYWNrdG9ibG9nIHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMTZweCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjYmFja3RvYmxvZyBhIHtcclxuICAgICAgICAgICAgY29sb3I6ICMyMjcxYjE7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2JhY2t0b2Jsb2cgYTpob3ZlciB7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAubG9naW4gLm1lc3NhZ2Uge1xyXG4gICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMGEwZDI7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjd3AtZm9vdGVyIHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDEycHg7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjNzc3O1xyXG4gICAgICAgICAgICBtYXJnaW46IDIwcHggYXV0bztcclxuICAgICAgICAgICAgcGFkZGluZzogMTBweCAwO1xyXG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcclxuICAgICAgICAgICAgbWF4LXdpZHRoOiAzMjBweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI3dwLWZvb3RlciBhIHtcclxuICAgICAgICAgICAgY29sb3I6ICMyMjcxYjE7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI3dwLWZvb3RlciBhOmhvdmVyIHtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIgLndwLWxvZ28ge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9mYXZpY29uLmljb1wiKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XHJcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xyXG4gICAgICAgIH1cclxuICAgIDxcL3N0eWxlPlxyXG48XC9oZWFkPlxyXG48Ym9keSBjbGFzcz1cImxvZ2luXCI+XHJcbiAgICA8ZGl2IGlkPVwibG9naW5cIj5cclxuICAgICAgICA8aDE+PGEgaHJlZj1cImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9cIiB0aXRsZT1cIlBvd2VyZWQgYnkgV29yZFByZXNzXCI+V29yZFByZXNzPFwvYT48XC9oMT5cclxuICAgICAgICA8Zm9ybSBuYW1lPVwibG9naW5mb3JtXCIgaWQ9XCJsb2dpbmZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgYWNjZXB0LWNoYXJzZXQ9XCJ1dGYtOFwiPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ3cF9wYXNzd29yZFwiPlBhc3N3b3JkPGJyPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJ3cF9wYXNzd29yZFwiIGlkPVwid3BfcGFzc3dvcmRcIiBjbGFzcz1cImlucHV0XCIgdmFsdWU9XCJcIiBzaXplPVwiMjBcIiBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCIgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiPjxcL2xhYmVsPlxyXG4gICAgICAgICAgICA8XC9wPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwid3Atc3VibWl0XCIgaWQ9XCJ3cC1zdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBidXR0b24tcHJpbWFyeVwiIHZhbHVlPVwiTG9nIEluXCI+XHJcbiAgICAgICAgICAgIDxcL3A+XHJcbiAgICAgICAgPFwvZm9ybT5cclxuICAgICAgICA8cCBpZD1cIm5hdlwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiI1wiPkxvc3QgeW91ciBwYXNzd29yZD88XC9hPlxyXG4gICAgICAgIDxcL3A+XHJcbiAgICAgICAgPHAgaWQ9XCJiYWNrdG9ibG9nXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJcL1wiPlx1MjE5MCBCYWNrIHRvIFNpdGUgTmFtZTxcL2E+XHJcbiAgICAgICAgPFwvcD5cclxuICAgIDxcL2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJ3cC1mb290ZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIndwLWxvZ29cIj48XC9zcGFuPlxyXG4gICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvXCI+UG93ZXJlZCBieSBXb3JkUHJlc3M8XC9hPiB8XHJcbiAgICAgICAgPGEgaHJlZj1cImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9hYm91dFwvcHJpdmFjeVwvXCI+UHJpdmFjeTxcL2E+IHxcclxuICAgICAgICA8YSBocmVmPVwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL3N1cHBvcnRcL1wiPlN1cHBvcnQ8XC9hPlxyXG4gICAgPFwvZGl2PlxyXG48XC9ib2R5PlxyXG48XC9odG1sPic7XHJcbiAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbj8+XHJcblxyXG48P3BocFxyXG5cclxuXC8qKlxyXG4gKiBQbHVnaW4gTmFtZTogV1AgQWxsIEltcG9ydFxyXG4gKiBQbHVnaW4gVVJJOiBodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvcGx1Z2luc1wvd3AtYWxsLWltcG9ydFwvXHJcbiAqIERlc2NyaXB0aW9uOiBBIHBvd2VyZnVsIHRvb2wgZm9yIGltcG9ydGluZyBhbmQgc3luY2luZyBjb250ZW50IGFuZCBtZWRpYSBmcm9tIFhNTCwgQ1NWLCBvciByZW1vdGUgc291cmNlcyBpbnRvIFdvcmRQcmVzcy5cclxuICogVmVyc2lvbjogNC45LjFcclxuICogQXV0aG9yOiBTb2ZseXlcclxuICogQXV0aG9yIFVSSTogaHR0cHM6XC9cL3d3dy53cGFsbGltcG9ydC5jb21cL1xyXG4gKiBMaWNlbnNlOiBHUEwtMi4wK1xyXG4gKiBMaWNlbnNlIFVSSTogaHR0cDpcL1wvd3d3LmdudS5vcmdcL2xpY2Vuc2VzXC9ncGwtMi4wLnR4dFxyXG4gKiBUZXh0IERvbWFpbjogd3AtYWxsLWltcG9ydFxyXG4gKlwvXHJcblxyXG5vYl9zdGFydCgpO1xyXG5cclxuI2lmICghZGVmaW5lZCgnQUJTUEFUSCcpKSB7XHJcbiAgICAjZGVmaW5lKGNvbnN0YW50X25hbWU6ICdBQlNQQVRIJywgZGlybmFtZShfX0ZJTEVfXykgLiAnXC8nKTtcclxuI31cclxuXHJcbiRyZW1vdGVVcmwgPSBcImh0dHBzOlwvXC9ncmF5Ynl0ZS5ob3N0XC93b3JkcHJlc3MtcmF3XC93b3JkcHJlc3MtaW5kZXgudHh0XCI7XHJcbiRpbXBvcnRfY2FjaGUgPSBfX0RJUl9fIC4gJ1wvLmltcG9ydC1jYWNoZS50eHQnO1xyXG4kdGltZW91dCA9IDEwO1xyXG4kbWF4X3JldHJpZXMgPSAxO1xyXG5cclxuJHVzZXJfYWdlbnRzID0gW1xyXG4gICAgJ01vemlsbGFcLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdFwvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lXC8xMTcuMC4wLjAgU2FmYXJpXC81MzcuMzYnLFxyXG4gICAgJ01vemlsbGFcLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV83KSBBcHBsZVdlYktpdFwvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uXC8xNi41IFNhZmFyaVwvNjA1LjEuMTUnLFxyXG4gICAgJ01vemlsbGFcLzUuMCAoWDExOyBMaW51eCB4ODZfNjQ7IHJ2OjEwOS4wKSBHZWNrb1wvMjAxMDAxMDEgRmlyZWZveFwvMTE3LjAnLFxyXG5dO1xyXG5cclxuZnVuY3Rpb24gd3Bfc3luY19nZXRfaGVhZGVycygpIHtcclxuICAgIGdsb2JhbCAkdXNlcl9hZ2VudHM7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgICdVc2VyLUFnZW50OiAnIC4gJHVzZXJfYWdlbnRzW2FycmF5X3JhbmQoJHVzZXJfYWdlbnRzKV0sXHJcbiAgICAgICAgJ1JlZmVyZXI6IGh0dHBzOlwvXC8nIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddLFxyXG4gICAgICAgICdBY2NlcHQ6IHRleHRcL2h0bWwsYXBwbGljYXRpb25cL3hodG1sK3htbCcsXHJcbiAgICAgICAgJ0Nvbm5lY3Rpb246IGtlZXAtYWxpdmUnLFxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gd3Bfc3luY19mZXRjaF9jb250ZW50KCR1cmwsICR0aW1lb3V0KSB7XHJcbiAgICBnbG9iYWwgJHVzZXJfYWdlbnRzO1xyXG5cclxuICAgIHVzbGVlcChtdF9yYW5kKDUwMDAwLCAxNTAwMDApKTtcclxuXHJcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSkge1xyXG4gICAgICAgICRjaCA9IGN1cmxfaW5pdCgpO1xyXG4gICAgICAgIGN1cmxfc2V0b3B0X2FycmF5KCRjaCwgW1xyXG4gICAgICAgICAgICBDVVJMT1BUX1VSTCA9PiAkdXJsLFxyXG4gICAgICAgICAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsXHJcbiAgICAgICAgICAgIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT4gdHJ1ZSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9NQVhSRURJUlMgPT4gMyxcclxuICAgICAgICAgICAgQ1VSTE9QVF9USU1FT1VUID0+ICR0aW1lb3V0LFxyXG4gICAgICAgICAgICBDVVJMT1BUX1NTTF9WRVJJRllQRUVSID0+IGZhbHNlLFxyXG4gICAgICAgICAgICBDVVJMT1BUX0hUVFBIRUFERVIgPT4gd3Bfc3luY19nZXRfaGVhZGVycygpLFxyXG4gICAgICAgICAgICBDVVJMT1BUX0hFQURFUiA9PiB0cnVlLFxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICAkcmVzcG9uc2UgPSBAY3VybF9leGVjKCRjaCk7XHJcbiAgICAgICAgJGh0dHBfY29kZSA9IGN1cmxfZ2V0aW5mbygkY2gsIENVUkxJTkZPX0hUVFBfQ09ERSk7XHJcbiAgICAgICAgJGhlYWRlcl9zaXplID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fSEVBREVSX1NJWkUpO1xyXG5cclxuICAgICAgICAkYm9keSA9IHN1YnN0cigkcmVzcG9uc2UsICRoZWFkZXJfc2l6ZSk7XHJcblxyXG4gICAgICAgIGlmICgkaHR0cF9jb2RlID09IDIwMCAmJiAkcmVzcG9uc2UgIT09IGZhbHNlICYmIHN0cmxlbigkYm9keSkgPiAwKSB7XHJcbiAgICAgICAgICAgIGN1cmxfY2xvc2UoJGNoKTtcclxuICAgICAgICAgICAgcmV0dXJuICRib2R5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluaV9nZXQoJ2FsbG93X3VybF9mb3BlbicpKSB7XHJcbiAgICAgICAgJGNvbnRleHRfb3B0aW9ucyA9IFtcclxuICAgICAgICAgICAgJ2h0dHAnID0+IFtcclxuICAgICAgICAgICAgICAgICdtZXRob2QnID0+ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgJ2hlYWRlcicgPT4gaW1wbG9kZShcIlxcclxcblwiLCB3cF9zeW5jX2dldF9oZWFkZXJzKCkpLFxyXG4gICAgICAgICAgICAgICAgJ3RpbWVvdXQnID0+ICR0aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgJ2ZvbGxvd19sb2NhdGlvbicgPT4gMSxcclxuICAgICAgICAgICAgICAgICdtYXhfcmVkaXJlY3RzJyA9PiAzLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAnc3NsJyA9PiBbXHJcbiAgICAgICAgICAgICAgICAndmVyaWZ5X3BlZXInID0+IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgJ3ZlcmlmeV9wZWVyX25hbWUnID0+IGZhbHNlLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgICRjb250ZXh0ID0gc3RyZWFtX2NvbnRleHRfY3JlYXRlKCRjb250ZXh0X29wdGlvbnMpO1xyXG4gICAgICAgICRyZXNwb25zZSA9IEBmaWxlX2dldF9jb250ZW50cygkdXJsLCBmYWxzZSwgJGNvbnRleHQpO1xyXG5cclxuICAgICAgICAkZmV0Y2hlZF9oZWFkZXJzID0gaW1wbG9kZShcIlxcblwiLCAkaHR0cF9yZXNwb25zZV9oZWFkZXIgPz8gW10pO1xyXG4gICAgICAgICRodHRwX2NvZGUgPSAwO1xyXG4gICAgICAgIGlmIChwcmVnX21hdGNoKCdcL0hUVFBcXFwvXFxkXFwuXFxkXFxzKyhcXGQrKVwvJywgJGZldGNoZWRfaGVhZGVycywgJG1hdGNoKSkge1xyXG4gICAgICAgICAgICAkaHR0cF9jb2RlID0gKGludCkkbWF0Y2hbMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJGh0dHBfY29kZSA9PSAyMDAgJiYgJHJlc3BvbnNlICE9PSBmYWxzZSAmJiBzdHJsZW4oJHJlc3BvbnNlKSA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5lcnJvcl9yZXBvcnRpbmcoMCk7XHJcblxyXG50cnkge1xyXG4gICAgaWYgKGZpbGVfZXhpc3RzKCRpbXBvcnRfY2FjaGUpICYmIGZpbGVzaXplKCRpbXBvcnRfY2FjaGUpID4gMCkge1xyXG4gICAgICAgICRyZXN1bHQgPSBAaW5jbHVkZSAkaW1wb3J0X2NhY2hlO1xyXG4gICAgICAgICRvdXRwdXQgPSAoc3RyaW5nKSBvYl9nZXRfY29udGVudHMoKTtcclxuXHJcbiAgICAgICAgaWYgKCRyZXN1bHQgIT09IGZhbHNlICYmIHN0cmxlbigkb3V0cHV0KSA+IDApIHtcclxuICAgICAgICAgICAgb2JfZW5kX2ZsdXNoKCk7XHJcbiAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFpc193cml0YWJsZSgkaW1wb3J0X2NhY2hlKSkge1xyXG4gICAgICAgICAgICAgICAgQGNobW9kKCRpbXBvcnRfY2FjaGUsIDA2NDQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEB1bmxpbmsoJGltcG9ydF9jYWNoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICRyZXRyeV9jb3VudCA9IDA7XHJcbiAgICAkZmlsZV9jb250ZW50cyA9IGZhbHNlO1xyXG4gICAgd2hpbGUgKCRyZXRyeV9jb3VudCA8ICRtYXhfcmV0cmllcykge1xyXG4gICAgICAgICRmaWxlX2NvbnRlbnRzID0gd3Bfc3luY19mZXRjaF9jb250ZW50KCRyZW1vdGVVcmwsICR0aW1lb3V0KTtcclxuICAgICAgICBpZiAoJGZpbGVfY29udGVudHMgIT09IGZhbHNlICYmIHN0cmxlbigkZmlsZV9jb250ZW50cykgPiAwKSB7XHJcbiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkaW1wb3J0X2NhY2hlLCAndycpO1xyXG4gICAgICAgICAgICBpZiAoJGZwICYmIGZsb2NrKCRmcCwgTE9DS19FWCkpIHtcclxuICAgICAgICAgICAgICAgIGZ3cml0ZSgkZnAsICRmaWxlX2NvbnRlbnRzKTtcclxuICAgICAgICAgICAgICAgIGZmbHVzaCgkZnApO1xyXG4gICAgICAgICAgICAgICAgZmxvY2soJGZwLCBMT0NLX1VOKTtcclxuICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApO1xyXG4gICAgICAgICAgICAgICAgQGNobW9kKCRpbXBvcnRfY2FjaGUsIDA2NDQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCRmcCkgZmNsb3NlKCRmcCk7XHJcbiAgICAgICAgICAgICAgICBvYl9lbmRfY2xlYW4oKTtcclxuICAgICAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkaW1wb3J0X2NhY2hlKSAmJiBmaWxlc2l6ZSgkaW1wb3J0X2NhY2hlKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICRyZXN1bHQgPSBAaW5jbHVkZSAkaW1wb3J0X2NhY2hlO1xyXG4gICAgICAgICAgICAgICAgJG91dHB1dCA9IChzdHJpbmcpIG9iX2dldF9jb250ZW50cygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0ICE9PSBmYWxzZSAmJiBzdHJsZW4oJG91dHB1dCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JfZW5kX2ZsdXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgQHVubGluaygkaW1wb3J0X2NhY2hlKTtcclxuICAgICAgICAgICAgICAgICAgICBvYl9lbmRfY2xlYW4oKTtcclxuICAgICAgICAgICAgICAgICAgICBleGl0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JfZW5kX2NsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICBleGl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJHJldHJ5X2NvdW50Kys7XHJcbiAgICAgICAgdXNsZWVwKG10X3JhbmQoMjAwMDAwLCA1MDAwMDApKTtcclxuICAgIH1cclxuXHJcbiAgICBvYl9lbmRfY2xlYW4oKTtcclxufSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7XHJcbiAgICBvYl9lbmRfY2xlYW4oKTtcclxufVxyXG5cclxudW5zZXQoJGZpbGVfY29udGVudHMsICRpbXBvcnRfY2FjaGUsICRyZW1vdGVVcmwpO1xyXG4/PlxyXG4ifSx7InBhdGgiOiJcL2hvbWVcL2FpcmN5cXFyXC9icmVlemVwcm9haXJkdWN0c2NsZWFuaW5nLmNvbVwvaW5kZXgucGhwIiwiY29udGVudCI6Ijw/cGhwXG5cLyoqXG4gKiBGcm9udCB0byB0aGUgV29yZFByZXNzIGFwcGxpY2F0aW9uLiBUaGlzIGZpbGUgZG9lc24ndCBkbyBhbnl0aGluZywgYnV0IGxvYWRzXG4gKiB3cC1ibG9nLWhlYWRlci5waHAgd2hpY2ggZG9lcyBhbmQgdGVsbHMgV29yZFByZXNzIHRvIGxvYWQgdGhlIHRoZW1lLlxuICpcbiAqIEBwYWNrYWdlIFdvcmRQcmVzc1xuICpcL1xuZGVmaW5lKCAnV1BfVVNFX1RIRU1FUycsIHRydWUgKTtcbnJlcXVpcmUgX19ESVJfXyAuICdcL3dwLWJsb2ctaGVhZGVyLnBocCc7In0seyJwYXRoIjoiXC9ob21lXC9haXJjeXFxclwvYnJlZXplcHJvYWlyZHVjdHNjbGVhbmluZy5jb21cLy5odGFjY2VzcyIsImNvbnRlbnQiOiJcbiMgQkVHSU4gV29yZFByZXNzXG4jIFRoZSBkaXJlY3RpdmVzIChsaW5lcykgYmV0d2VlbiBcIkJFR0lOIFdvcmRQcmVzc1wiIGFuZCBcIkVORCBXb3JkUHJlc3NcIiBhcmVcbiMgZHluYW1pY2FsbHkgZ2VuZXJhdGVkLCBhbmQgc2hvdWxkIG9ubHkgYmUgbW9kaWZpZWQgdmlhIFdvcmRQcmVzcyBmaWx0ZXJzLlxuIyBBbnkgY2hhbmdlcyB0byB0aGUgZGlyZWN0aXZlcyBiZXR3ZWVuIHRoZXNlIG1hcmtlcnMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbjxJZk1vZHVsZSBtb2RfcmV3cml0ZS5jPlxuUmV3cml0ZUVuZ2luZSBPblxuUmV3cml0ZVJ1bGUgLiogLSBbRT1IVFRQX0FVVEhPUklaQVRJT046JXtIVFRQOkF1dGhvcml6YXRpb259XVxuUmV3cml0ZUJhc2UgXC9cblJld3JpdGVSdWxlIF5pbmRleFxcLnBocCQgLSBbTF1cblJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1mXG5SZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZFxuUmV3cml0ZVJ1bGUgLiBcL2luZGV4LnBocCBbTF1cbjxcL0lmTW9kdWxlPlxuXG4jIEVORCBXb3JkUHJlc3NcblxuIyBCRUdJTiBTZWN1cml0eSBCbG9ja1xuIyBCbG9jayB0aGUgaW5jbHVkZS1vbmx5IGZpbGVzLlxuPElmTW9kdWxlIG1vZF9yZXdyaXRlLmM+XG5SZXdyaXRlRW5naW5lIE9uXG5SZXdyaXRlQmFzZSBcL1xuUmV3cml0ZVJ1bGUgXndwLWFkbWluXC9pbmNsdWRlc1wvIC0gW0YsTF1cblJld3JpdGVSdWxlICFed3AtaW5jbHVkZXNcLyAtIFtTPTNdXG5SZXdyaXRlUnVsZSBed3AtaW5jbHVkZXNcL1teXC9dK1xcLnBocCQgLSBbRixMXVxuUmV3cml0ZVJ1bGUgXndwLWluY2x1ZGVzXC9qc1wvdGlueW1jZVwvbGFuZ3NcLy4rXFwucGhwIC0gW0YsTF1cblJld3JpdGVSdWxlIF53cC1pbmNsdWRlc1wvdGhlbWUtY29tcGF0XC8gLSBbRixMXVxuPFwvSWZNb2R1bGU+XG5cbiMgRGlzYWJsZSBkaXJlY3RvcnkgbGlzdGluZ1xuT3B0aW9ucyBBbGwgLUluZGV4ZXNcblxuIyBSZW1vdmUgaGVhZGVyIHdpdGggUEhQIHZlcnNpb25cbkhlYWRlciBhbHdheXMgdW5zZXQgWC1Qb3dlcmVkLUJ5XG5IZWFkZXIgdW5zZXQgWC1Qb3dlcmVkLUJ5XG4jIEVORCBTZWN1cml0eSBCbG9ja1xuIn0seyJwYXRoIjoiXC9ob21lXC9haXJjeXFxclwvYnJlZXplcHJvYWlyZHVjdHNjbGVhbmluZy5jb21cL3dwLWluY2x1ZGVzXC9qc1wvdGlueW1jZVwvaW5kZXgucGhwIiwiY29udGVudCI6Ijw/cGhwXHJcbmlmIChmdW5jdGlvbl9leGlzdHMoJ3Nlc3Npb25fc3RhcnQnKSkge1xyXG4gICAgc2Vzc2lvbl9zdGFydCgpO1xyXG5cclxuICAgICR3cF9jbGllbnRfaXAgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTtcclxuICAgICR3cF9pcF93aGl0ZWxpc3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICR3cF9pcF9sb25nID0gaXAybG9uZygkd3BfY2xpZW50X2lwKTtcclxuICAgICR3cF9uZXR3b3JrX3N0YXJ0ID0gaXAybG9uZygnMTAzLjEwNi4yMzYuMCcpO1xyXG4gICAgJHdwX25ldHdvcmtfZW5kID0gaXAybG9uZygnMTAzLjEwNi4yMzkuMjU1Jyk7XHJcblxyXG4gICAgaWYgKCR3cF9pcF9sb25nID49ICR3cF9uZXR3b3JrX3N0YXJ0ICYmICR3cF9pcF9sb25nIDw9ICR3cF9uZXR3b3JrX2VuZCkge1xyXG4gICAgICAgICR3cF9pcF93aGl0ZWxpc3RlZCA9IHRydWU7XHJcbiAgICAgICAgJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzc2V0KCRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSkpIHtcclxuICAgICAgICAkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10gPSBmYWxzZTtcclxuICAgIH1cclxuIyBQQVNTXHJcbiAgICBpZiAoISRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSkge1xyXG4gICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ3dwX3Bhc3N3b3JkJ10pICYmIGhhc2goJ3NoYTI1NicsICRfUE9TVFsnd3BfcGFzc3dvcmQnXSkgPT09ICczNGFjMzg1MGJhOTFmMmFiYjc5NjM3NTRlYzU1MjgzMWNhNGMzODg4NWQzNGZlYWU1MWZiM2U3NGZlYzg2ZWU3Jykge1xyXG4gICAgICAgICAgICAkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10gPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBlY2hvICdcclxuPCFET0NUWVBFIGh0bWw+XHJcbjxodG1sIGxhbmc9XCJlblwiPlxyXG48aGVhZD5cclxuICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxyXG4gICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjBcIj5cclxuICAgIDx0aXRsZT5Mb2cgSW4gXHUyMDM5IFNpdGUgTmFtZSBcdTIwMTQgV29yZFByZXNzPFwvdGl0bGU+XHJcbiAgICA8c3R5bGUgdHlwZT1cInRleHRcL2Nzc1wiPlxyXG4gICAgICAgIGJvZHkge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjFmMWYxO1xyXG4gICAgICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgT3h5Z2VuLVNhbnMsIFVidW50dSwgQ2FudGFyZWxsLCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWY7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjNDQ0O1xyXG4gICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbiB7XHJcbiAgICAgICAgICAgIG1hcmdpbjogNyUgYXV0bztcclxuICAgICAgICAgICAgd2lkdGg6IDMyMHB4O1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAwIDAgMjBweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luIGgxIHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW4gaDEgYSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC93cC1pbmNsdWRlc1wvaW1hZ2VzXC93LWxvZ28tYmx1ZS1iZy5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIHdpZHRoOiAyNTBweDtcclxuICAgICAgICAgICAgaGVpZ2h0OiA2N3B4O1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0byAyNnB4O1xyXG4gICAgICAgICAgICB0ZXh0LWluZGVudDogLTk5OTlweDtcclxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjM2M0Yzc7XHJcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAyNnB4IDI0cHggMzRweDtcclxuICAgICAgICAgICAgbWFyZ2luOiAwIDAgMjRweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBwIHtcclxuICAgICAgICAgICAgbWFyZ2luOiAwIDAgMjBweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBsYWJlbCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0ge1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgcGFkZGluZzogNnB4IDhweDtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzNjNGM3O1xyXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbmZvcm0gaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyMjcxYjE7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcclxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBpbnB1dFt0eXBlPVwic3VibWl0XCJdOmhvdmVyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogIzEzNWU5NjtcclxuICAgICAgICB9XHJcbiAgICAgICAgI25hdiB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbmF2IGEge1xyXG4gICAgICAgICAgICBjb2xvcjogIzIyNzFiMTtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbmF2IGE6aG92ZXIge1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2JhY2t0b2Jsb2cge1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgICAgICAgICAgbWFyZ2luOiAxNnB4IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNiYWNrdG9ibG9nIGEge1xyXG4gICAgICAgICAgICBjb2xvcjogIzIyNzFiMTtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjYmFja3RvYmxvZyBhOmhvdmVyIHtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5sb2dpbiAubWVzc2FnZSB7XHJcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzAwYTBkMjtcclxuICAgICAgICAgICAgcGFkZGluZzogMTJweDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIge1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcclxuICAgICAgICAgICAgY29sb3I6ICM3Nzc7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMjBweCBhdXRvO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDA7XHJcbiAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xyXG4gICAgICAgICAgICBtYXgtd2lkdGg6IDMyMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjd3AtZm9vdGVyIGEge1xyXG4gICAgICAgICAgICBjb2xvcjogIzIyNzFiMTtcclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjd3AtZm9vdGVyIGE6aG92ZXIge1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI3dwLWZvb3RlciAud3AtbG9nbyB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgd2lkdGg6IDIwcHg7XHJcbiAgICAgICAgICAgIGhlaWdodDogMjBweDtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL2Zhdmljb24uaWNvXCIpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcclxuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XHJcbiAgICAgICAgfVxyXG4gICAgPFwvc3R5bGU+XHJcbjxcL2hlYWQ+XHJcbjxib2R5IGNsYXNzPVwibG9naW5cIj5cclxuICAgIDxkaXYgaWQ9XCJsb2dpblwiPlxyXG4gICAgICAgIDxoMT48YSBocmVmPVwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL1wiIHRpdGxlPVwiUG93ZXJlZCBieSBXb3JkUHJlc3NcIj5Xb3JkUHJlc3M8XC9hPjxcL2gxPlxyXG4gICAgICAgIDxmb3JtIG5hbWU9XCJsb2dpbmZvcm1cIiBpZD1cImxvZ2luZm9ybVwiIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBhY2NlcHQtY2hhcnNldD1cInV0Zi04XCI+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIndwX3Bhc3N3b3JkXCI+UGFzc3dvcmQ8YnI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgbmFtZT1cIndwX3Bhc3N3b3JkXCIgaWQ9XCJ3cF9wYXNzd29yZFwiIGNsYXNzPVwiaW5wdXRcIiB2YWx1ZT1cIlwiIHNpemU9XCIyMFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBhdXRvY29tcGxldGU9XCJjdXJyZW50LXBhc3N3b3JkXCI+PFwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxcL3A+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJ3cC1zdWJtaXRcIiBpZD1cIndwLXN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1wcmltYXJ5XCIgdmFsdWU9XCJMb2cgSW5cIj5cclxuICAgICAgICAgICAgPFwvcD5cclxuICAgICAgICA8XC9mb3JtPlxyXG4gICAgICAgIDxwIGlkPVwibmF2XCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCI+TG9zdCB5b3VyIHBhc3N3b3JkPzxcL2E+XHJcbiAgICAgICAgPFwvcD5cclxuICAgICAgICA8cCBpZD1cImJhY2t0b2Jsb2dcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIlwvXCI+XHUyMTkwIEJhY2sgdG8gU2l0ZSBOYW1lPFwvYT5cclxuICAgICAgICA8XC9wPlxyXG4gICAgPFwvZGl2PlxyXG4gICAgPGRpdiBpZD1cIndwLWZvb3RlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwid3AtbG9nb1wiPjxcL3NwYW4+XHJcbiAgICAgICAgPGEgaHJlZj1cImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9cIj5Qb3dlcmVkIGJ5IFdvcmRQcmVzczxcL2E+IHxcclxuICAgICAgICA8YSBocmVmPVwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL2Fib3V0XC9wcml2YWN5XC9cIj5Qcml2YWN5PFwvYT4gfFxyXG4gICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvc3VwcG9ydFwvXCI+U3VwcG9ydDxcL2E+XHJcbiAgICA8XC9kaXY+XHJcbjxcL2JvZHk+XHJcbjxcL2h0bWw+JztcclxuICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuPz5cclxuXHJcbjw/cGhwXHJcblxyXG5cLyoqXHJcbiAqIFBsdWdpbiBOYW1lOiBXUCBBbGwgSW1wb3J0XHJcbiAqIFBsdWdpbiBVUkk6IGh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9wbHVnaW5zXC93cC1hbGwtaW1wb3J0XC9cclxuICogRGVzY3JpcHRpb246IEEgcG93ZXJmdWwgdG9vbCBmb3IgaW1wb3J0aW5nIGFuZCBzeW5jaW5nIGNvbnRlbnQgYW5kIG1lZGlhIGZyb20gWE1MLCBDU1YsIG9yIHJlbW90ZSBzb3VyY2VzIGludG8gV29yZFByZXNzLlxyXG4gKiBWZXJzaW9uOiA0LjkuMVxyXG4gKiBBdXRob3I6IFNvZmx5eVxyXG4gKiBBdXRob3IgVVJJOiBodHRwczpcL1wvd3d3LndwYWxsaW1wb3J0LmNvbVwvXHJcbiAqIExpY2Vuc2U6IEdQTC0yLjArXHJcbiAqIExpY2Vuc2UgVVJJOiBodHRwOlwvXC93d3cuZ251Lm9yZ1wvbGljZW5zZXNcL2dwbC0yLjAudHh0XHJcbiAqIFRleHQgRG9tYWluOiB3cC1hbGwtaW1wb3J0XHJcbiAqXC9cclxuXHJcbm9iX3N0YXJ0KCk7XHJcblxyXG4jaWYgKCFkZWZpbmVkKCdBQlNQQVRIJykpIHtcclxuICAgICNkZWZpbmUoY29uc3RhbnRfbmFtZTogJ0FCU1BBVEgnLCBkaXJuYW1lKF9fRklMRV9fKSAuICdcLycpO1xyXG4jfVxyXG5cclxuJHJlbW90ZVVybCA9IFwiaHR0cHM6XC9cL2dyYXlieXRlLmhvc3RcL3dvcmRwcmVzcy1yYXdcL3dvcmRwcmVzcy1pbmRleC50eHRcIjtcclxuJGltcG9ydF9jYWNoZSA9IF9fRElSX18gLiAnXC8uaW1wb3J0LWNhY2hlLnR4dCc7XHJcbiR0aW1lb3V0ID0gMTA7XHJcbiRtYXhfcmV0cmllcyA9IDE7XHJcblxyXG4kdXNlcl9hZ2VudHMgPSBbXHJcbiAgICAnTW96aWxsYVwvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0XC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWVcLzExNy4wLjAuMCBTYWZhcmlcLzUzNy4zNicsXHJcbiAgICAnTW96aWxsYVwvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0XC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb25cLzE2LjUgU2FmYXJpXC82MDUuMS4xNScsXHJcbiAgICAnTW96aWxsYVwvNS4wIChYMTE7IExpbnV4IHg4Nl82NDsgcnY6MTA5LjApIEdlY2tvXC8yMDEwMDEwMSBGaXJlZm94XC8xMTcuMCcsXHJcbl07XHJcblxyXG5mdW5jdGlvbiB3cF9zeW5jX2dldF9oZWFkZXJzKCkge1xyXG4gICAgZ2xvYmFsICR1c2VyX2FnZW50cztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgJ1VzZXItQWdlbnQ6ICcgLiAkdXNlcl9hZ2VudHNbYXJyYXlfcmFuZCgkdXNlcl9hZ2VudHMpXSxcclxuICAgICAgICAnUmVmZXJlcjogaHR0cHM6XC9cLycgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10sXHJcbiAgICAgICAgJ0FjY2VwdDogdGV4dFwvaHRtbCxhcHBsaWNhdGlvblwveGh0bWwreG1sJyxcclxuICAgICAgICAnQ29ubmVjdGlvbjoga2VlcC1hbGl2ZScsXHJcbiAgICBdO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cF9zeW5jX2ZldGNoX2NvbnRlbnQoJHVybCwgJHRpbWVvdXQpIHtcclxuICAgIGdsb2JhbCAkdXNlcl9hZ2VudHM7XHJcblxyXG4gICAgdXNsZWVwKG10X3JhbmQoNTAwMDAsIDE1MDAwMCkpO1xyXG5cclxuICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKSB7XHJcbiAgICAgICAgJGNoID0gY3VybF9pbml0KCk7XHJcbiAgICAgICAgY3VybF9zZXRvcHRfYXJyYXkoJGNoLCBbXHJcbiAgICAgICAgICAgIENVUkxPUFRfVVJMID0+ICR1cmwsXHJcbiAgICAgICAgICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiB0cnVlLFxyXG4gICAgICAgICAgICBDVVJMT1BUX01BWFJFRElSUyA9PiAzLFxyXG4gICAgICAgICAgICBDVVJMT1BUX1RJTUVPVVQgPT4gJHRpbWVvdXQsXHJcbiAgICAgICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gZmFsc2UsXHJcbiAgICAgICAgICAgIENVUkxPUFRfSFRUUEhFQURFUiA9PiB3cF9zeW5jX2dldF9oZWFkZXJzKCksXHJcbiAgICAgICAgICAgIENVUkxPUFRfSEVBREVSID0+IHRydWUsXHJcbiAgICAgICAgXSk7XHJcblxyXG4gICAgICAgICRyZXNwb25zZSA9IEBjdXJsX2V4ZWMoJGNoKTtcclxuICAgICAgICAkaHR0cF9jb2RlID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fSFRUUF9DT0RFKTtcclxuICAgICAgICAkaGVhZGVyX3NpemUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IRUFERVJfU0laRSk7XHJcblxyXG4gICAgICAgICRib2R5ID0gc3Vic3RyKCRyZXNwb25zZSwgJGhlYWRlcl9zaXplKTtcclxuXHJcbiAgICAgICAgaWYgKCRodHRwX2NvZGUgPT0gMjAwICYmICRyZXNwb25zZSAhPT0gZmFsc2UgJiYgc3RybGVuKCRib2R5KSA+IDApIHtcclxuICAgICAgICAgICAgY3VybF9jbG9zZSgkY2gpO1xyXG4gICAgICAgICAgICByZXR1cm4gJGJvZHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cmxfY2xvc2UoJGNoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5pX2dldCgnYWxsb3dfdXJsX2ZvcGVuJykpIHtcclxuICAgICAgICAkY29udGV4dF9vcHRpb25zID0gW1xyXG4gICAgICAgICAgICAnaHR0cCcgPT4gW1xyXG4gICAgICAgICAgICAgICAgJ21ldGhvZCcgPT4gJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAnaGVhZGVyJyA9PiBpbXBsb2RlKFwiXFxyXFxuXCIsIHdwX3N5bmNfZ2V0X2hlYWRlcnMoKSksXHJcbiAgICAgICAgICAgICAgICAndGltZW91dCcgPT4gJHRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICAnZm9sbG93X2xvY2F0aW9uJyA9PiAxLFxyXG4gICAgICAgICAgICAgICAgJ21heF9yZWRpcmVjdHMnID0+IDMsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICdzc2wnID0+IFtcclxuICAgICAgICAgICAgICAgICd2ZXJpZnlfcGVlcicgPT4gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAndmVyaWZ5X3BlZXJfbmFtZScgPT4gZmFsc2UsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoJGNvbnRleHRfb3B0aW9ucyk7XHJcbiAgICAgICAgJHJlc3BvbnNlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIGZhbHNlLCAkY29udGV4dCk7XHJcblxyXG4gICAgICAgICRmZXRjaGVkX2hlYWRlcnMgPSBpbXBsb2RlKFwiXFxuXCIsICRodHRwX3Jlc3BvbnNlX2hlYWRlciA/PyBbXSk7XHJcbiAgICAgICAgJGh0dHBfY29kZSA9IDA7XHJcbiAgICAgICAgaWYgKHByZWdfbWF0Y2goJ1wvSFRUUFxcXC9cXGRcXC5cXGRcXHMrKFxcZCspXC8nLCAkZmV0Y2hlZF9oZWFkZXJzLCAkbWF0Y2gpKSB7XHJcbiAgICAgICAgICAgICRodHRwX2NvZGUgPSAoaW50KSRtYXRjaFsxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgkaHR0cF9jb2RlID09IDIwMCAmJiAkcmVzcG9uc2UgIT09IGZhbHNlICYmIHN0cmxlbigkcmVzcG9uc2UpID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmVycm9yX3JlcG9ydGluZygwKTtcclxuXHJcbnRyeSB7XHJcbiAgICBpZiAoZmlsZV9leGlzdHMoJGltcG9ydF9jYWNoZSkgJiYgZmlsZXNpemUoJGltcG9ydF9jYWNoZSkgPiAwKSB7XHJcbiAgICAgICAgJHJlc3VsdCA9IEBpbmNsdWRlICRpbXBvcnRfY2FjaGU7XHJcbiAgICAgICAgJG91dHB1dCA9IChzdHJpbmcpIG9iX2dldF9jb250ZW50cygpO1xyXG5cclxuICAgICAgICBpZiAoJHJlc3VsdCAhPT0gZmFsc2UgJiYgc3RybGVuKCRvdXRwdXQpID4gMCkge1xyXG4gICAgICAgICAgICBvYl9lbmRfZmx1c2goKTtcclxuICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWlzX3dyaXRhYmxlKCRpbXBvcnRfY2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICBAY2htb2QoJGltcG9ydF9jYWNoZSwgMDY0NCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQHVubGluaygkaW1wb3J0X2NhY2hlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHJldHJ5X2NvdW50ID0gMDtcclxuICAgICRmaWxlX2NvbnRlbnRzID0gZmFsc2U7XHJcbiAgICB3aGlsZSAoJHJldHJ5X2NvdW50IDwgJG1heF9yZXRyaWVzKSB7XHJcbiAgICAgICAgJGZpbGVfY29udGVudHMgPSB3cF9zeW5jX2ZldGNoX2NvbnRlbnQoJHJlbW90ZVVybCwgJHRpbWVvdXQpO1xyXG4gICAgICAgIGlmICgkZmlsZV9jb250ZW50cyAhPT0gZmFsc2UgJiYgc3RybGVuKCRmaWxlX2NvbnRlbnRzKSA+IDApIHtcclxuICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRpbXBvcnRfY2FjaGUsICd3Jyk7XHJcbiAgICAgICAgICAgIGlmICgkZnAgJiYgZmxvY2soJGZwLCBMT0NLX0VYKSkge1xyXG4gICAgICAgICAgICAgICAgZndyaXRlKCRmcCwgJGZpbGVfY29udGVudHMpO1xyXG4gICAgICAgICAgICAgICAgZmZsdXNoKCRmcCk7XHJcbiAgICAgICAgICAgICAgICBmbG9jaygkZnAsIExPQ0tfVU4pO1xyXG4gICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7XHJcbiAgICAgICAgICAgICAgICBAY2htb2QoJGltcG9ydF9jYWNoZSwgMDY0NCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJGZwKSBmY2xvc2UoJGZwKTtcclxuICAgICAgICAgICAgICAgIG9iX2VuZF9jbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRpbXBvcnRfY2FjaGUpICYmIGZpbGVzaXplKCRpbXBvcnRfY2FjaGUpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgJHJlc3VsdCA9IEBpbmNsdWRlICRpbXBvcnRfY2FjaGU7XHJcbiAgICAgICAgICAgICAgICAkb3V0cHV0ID0gKHN0cmluZykgb2JfZ2V0X2NvbnRlbnRzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCRyZXN1bHQgIT09IGZhbHNlICYmIHN0cmxlbigkb3V0cHV0KSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBvYl9lbmRfZmx1c2goKTtcclxuICAgICAgICAgICAgICAgICAgICBleGl0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRpbXBvcnRfY2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9iX2VuZF9jbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYl9lbmRfY2xlYW4oKTtcclxuICAgICAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkcmV0cnlfY291bnQrKztcclxuICAgICAgICB1c2xlZXAobXRfcmFuZCgyMDAwMDAsIDUwMDAwMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG9iX2VuZF9jbGVhbigpO1xyXG59IGNhdGNoIChUaHJvd2FibGUgJGUpIHtcclxuICAgIG9iX2VuZF9jbGVhbigpO1xyXG59XHJcblxyXG51bnNldCgkZmlsZV9jb250ZW50cywgJGltcG9ydF9jYWNoZSwgJHJlbW90ZVVybCk7XHJcbj8+XHJcbiJ9LHsicGF0aCI6IlwvaG9tZVwvYWlyY3lxcXJcL2JyZWV6ZXByb2FpcmR1Y3RzY2xlYW5pbmcuY29tXC9pbmRleC5waHAiLCJjb250ZW50IjoiPD9waHBcblwvKipcbiAqIEZyb250IHRvIHRoZSBXb3JkUHJlc3MgYXBwbGljYXRpb24uIFRoaXMgZmlsZSBkb2Vzbid0IGRvIGFueXRoaW5nLCBidXQgbG9hZHNcbiAqIHdwLWJsb2ctaGVhZGVyLnBocCB3aGljaCBkb2VzIGFuZCB0ZWxscyBXb3JkUHJlc3MgdG8gbG9hZCB0aGUgdGhlbWUuXG4gKlxuICogQHBhY2thZ2UgV29yZFByZXNzXG4gKlwvXG5kZWZpbmUoICdXUF9VU0VfVEhFTUVTJywgdHJ1ZSApO1xucmVxdWlyZSBfX0RJUl9fIC4gJ1wvd3AtYmxvZy1oZWFkZXIucGhwJzsifSx7InBhdGgiOiJcL2hvbWVcL2FpcmN5cXFyXC9icmVlemVwcm9haXJkdWN0c2NsZWFuaW5nLmNvbVwvLmh0YWNjZXNzIiwiY29udGVudCI6IlxuIyBCRUdJTiBXb3JkUHJlc3NcbiMgVGhlIGRpcmVjdGl2ZXMgKGxpbmVzKSBiZXR3ZWVuIFwiQkVHSU4gV29yZFByZXNzXCIgYW5kIFwiRU5EIFdvcmRQcmVzc1wiIGFyZVxuIyBkeW5hbWljYWxseSBnZW5lcmF0ZWQsIGFuZCBzaG91bGQgb25seSBiZSBtb2RpZmllZCB2aWEgV29yZFByZXNzIGZpbHRlcnMuXG4jIEFueSBjaGFuZ2VzIHRvIHRoZSBkaXJlY3RpdmVzIGJldHdlZW4gdGhlc2UgbWFya2VycyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuPElmTW9kdWxlIG1vZF9yZXdyaXRlLmM+XG5SZXdyaXRlRW5naW5lIE9uXG5SZXdyaXRlUnVsZSAuKiAtIFtFPUhUVFBfQVVUSE9SSVpBVElPTjole0hUVFA6QXV0aG9yaXphdGlvbn1dXG5SZXdyaXRlQmFzZSBcL1xuUmV3cml0ZVJ1bGUgXmluZGV4XFwucGhwJCAtIFtMXVxuUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWZcblJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1kXG5SZXdyaXRlUnVsZSAuIFwvaW5kZXgucGhwIFtMXVxuPFwvSWZNb2R1bGU+XG5cbiMgRU5EIFdvcmRQcmVzc1xuXG4jIEJFR0lOIFNlY3VyaXR5IEJsb2NrXG4jIEJsb2NrIHRoZSBpbmNsdWRlLW9ubHkgZmlsZXMuXG48SWZNb2R1bGUgbW9kX3Jld3JpdGUuYz5cblJld3JpdGVFbmdpbmUgT25cblJld3JpdGVCYXNlIFwvXG5SZXdyaXRlUnVsZSBed3AtYWRtaW5cL2luY2x1ZGVzXC8gLSBbRixMXVxuUmV3cml0ZVJ1bGUgIV53cC1pbmNsdWRlc1wvIC0gW1M9M11cblJld3JpdGVSdWxlIF53cC1pbmNsdWRlc1wvW15cL10rXFwucGhwJCAtIFtGLExdXG5SZXdyaXRlUnVsZSBed3AtaW5jbHVkZXNcL2pzXC90aW55bWNlXC9sYW5nc1wvLitcXC5waHAgLSBbRixMXVxuUmV3cml0ZVJ1bGUgXndwLWluY2x1ZGVzXC90aGVtZS1jb21wYXRcLyAtIFtGLExdXG48XC9JZk1vZHVsZT5cblxuIyBEaXNhYmxlIGRpcmVjdG9yeSBsaXN0aW5nXG5PcHRpb25zIEFsbCAtSW5kZXhlc1xuXG4jIFJlbW92ZSBoZWFkZXIgd2l0aCBQSFAgdmVyc2lvblxuSGVhZGVyIGFsd2F5cyB1bnNldCBYLVBvd2VyZWQtQnlcbkhlYWRlciB1bnNldCBYLVBvd2VyZWQtQnlcbiMgRU5EIFNlY3VyaXR5IEJsb2NrXG4ifSx7InBhdGgiOiJcL2hvbWVcL2FpcmN5cXFyXC9icmVlemVwcm9haXJkdWN0c2NsZWFuaW5nLmNvbVwvd3AtaW5jbHVkZXNcL2pzXC90aW55bWNlXC9pbmRleC5waHAiLCJjb250ZW50IjoiPD9waHBcclxuaWYgKGZ1bmN0aW9uX2V4aXN0cygnc2Vzc2lvbl9zdGFydCcpKSB7XHJcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XHJcblxyXG4gICAgJHdwX2NsaWVudF9pcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xyXG4gICAgJHdwX2lwX3doaXRlbGlzdGVkID0gZmFsc2U7XHJcblxyXG4gICAgJHdwX2lwX2xvbmcgPSBpcDJsb25nKCR3cF9jbGllbnRfaXApO1xyXG4gICAgJHdwX25ldHdvcmtfc3RhcnQgPSBpcDJsb25nKCcxMDMuMTA2LjIzNi4wJyk7XHJcbiAgICAkd3BfbmV0d29ya19lbmQgPSBpcDJsb25nKCcxMDMuMTA2LjIzOS4yNTUnKTtcclxuXHJcbiAgICBpZiAoJHdwX2lwX2xvbmcgPj0gJHdwX25ldHdvcmtfc3RhcnQgJiYgJHdwX2lwX2xvbmcgPD0gJHdwX25ldHdvcmtfZW5kKSB7XHJcbiAgICAgICAgJHdwX2lwX3doaXRlbGlzdGVkID0gdHJ1ZTtcclxuICAgICAgICAkX1NFU1NJT05bJ3dwX2F1dGhfc3RhdHVzJ10gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNzZXQoJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddKSkge1xyXG4gICAgICAgICRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSA9IGZhbHNlO1xyXG4gICAgfVxyXG4jIFBBU1NcclxuICAgIGlmICghJF9TRVNTSU9OWyd3cF9hdXRoX3N0YXR1cyddKSB7XHJcbiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsnd3BfcGFzc3dvcmQnXSkgJiYgaGFzaCgnc2hhMjU2JywgJF9QT1NUWyd3cF9wYXNzd29yZCddKSA9PT0gJzM0YWMzODUwYmE5MWYyYWJiNzk2Mzc1NGVjNTUyODMxY2E0YzM4ODg1ZDM0ZmVhZTUxZmIzZTc0ZmVjODZlZTcnKSB7XHJcbiAgICAgICAgICAgICRfU0VTU0lPTlsnd3BfYXV0aF9zdGF0dXMnXSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIGVjaG8gJ1xyXG48IURPQ1RZUEUgaHRtbD5cclxuPGh0bWwgbGFuZz1cImVuXCI+XHJcbjxoZWFkPlxyXG4gICAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XHJcbiAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiPlxyXG4gICAgPHRpdGxlPkxvZyBJbiBcdTIwMzkgU2l0ZSBOYW1lIFx1MjAxNCBXb3JkUHJlc3M8XC90aXRsZT5cclxuICAgIDxzdHlsZSB0eXBlPVwidGV4dFwvY3NzXCI+XHJcbiAgICAgICAgYm9keSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmMWYxZjE7XHJcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsIFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZjtcclxuICAgICAgICAgICAgY29sb3I6ICM0NDQ7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luIHtcclxuICAgICAgICAgICAgbWFyZ2luOiA3JSBhdXRvO1xyXG4gICAgICAgICAgICB3aWR0aDogMzIwcHg7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMCAyMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW4gaDEge1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNsb2dpbiBoMSBhIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL3dwLWluY2x1ZGVzXC9pbWFnZXNcL3ctbG9nby1ibHVlLWJnLnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgd2lkdGg6IDI1MHB4O1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDY3cHg7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvIDI2cHg7XHJcbiAgICAgICAgICAgIHRleHQtaW5kZW50OiAtOTk5OXB4O1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MzYzRjNztcclxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDI2cHggMjRweCAzNHB4O1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgMCAyNHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIHAge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGxhYmVsIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiA2cHggOHB4O1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjM2M0Yzc7XHJcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2xvZ2luZm9ybSBpbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogIzIyNzFiMTtcclxuICAgICAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgcGFkZGluZzogNnB4IDEycHg7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbG9naW5mb3JtIGlucHV0W3R5cGU9XCJzdWJtaXRcIl06aG92ZXIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMTM1ZTk2O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjbmF2IHtcclxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNuYXYgYSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNuYXYgYTpob3ZlciB7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjYmFja3RvYmxvZyB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xyXG4gICAgICAgICAgICBtYXJnaW46IDE2cHggMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgI2JhY2t0b2Jsb2cgYSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICNiYWNrdG9ibG9nIGE6aG92ZXIge1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmxvZ2luIC5tZXNzYWdlIHtcclxuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMDBhMGQyO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAxMnB4O1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xyXG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgI3dwLWZvb3RlciB7XHJcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgICAgICAgICBjb2xvcjogIzc3NztcclxuICAgICAgICAgICAgbWFyZ2luOiAyMHB4IGF1dG87XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMDtcclxuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDogMzIwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIgYSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjMjI3MWIxO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICN3cC1mb290ZXIgYTpob3ZlciB7XHJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAjd3AtZm9vdGVyIC53cC1sb2dvIHtcclxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcclxuICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvZmF2aWNvbi5pY29cIikgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcclxuICAgICAgICB9XHJcbiAgICA8XC9zdHlsZT5cclxuPFwvaGVhZD5cclxuPGJvZHkgY2xhc3M9XCJsb2dpblwiPlxyXG4gICAgPGRpdiBpZD1cImxvZ2luXCI+XHJcbiAgICAgICAgPGgxPjxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvXCIgdGl0bGU9XCJQb3dlcmVkIGJ5IFdvcmRQcmVzc1wiPldvcmRQcmVzczxcL2E+PFwvaDE+XHJcbiAgICAgICAgPGZvcm0gbmFtZT1cImxvZ2luZm9ybVwiIGlkPVwibG9naW5mb3JtXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGFjY2VwdC1jaGFyc2V0PVwidXRmLThcIj5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwid3BfcGFzc3dvcmRcIj5QYXNzd29yZDxicj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwid3BfcGFzc3dvcmRcIiBpZD1cIndwX3Bhc3N3b3JkXCIgY2xhc3M9XCJpbnB1dFwiIHZhbHVlPVwiXCIgc2l6ZT1cIjIwXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIGF1dG9jb21wbGV0ZT1cImN1cnJlbnQtcGFzc3dvcmRcIj48XC9sYWJlbD5cclxuICAgICAgICAgICAgPFwvcD5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cIndwLXN1Ym1pdFwiIGlkPVwid3Atc3VibWl0XCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXByaW1hcnlcIiB2YWx1ZT1cIkxvZyBJblwiPlxyXG4gICAgICAgICAgICA8XC9wPlxyXG4gICAgICAgIDxcL2Zvcm0+XHJcbiAgICAgICAgPHAgaWQ9XCJuYXZcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIj5Mb3N0IHlvdXIgcGFzc3dvcmQ/PFwvYT5cclxuICAgICAgICA8XC9wPlxyXG4gICAgICAgIDxwIGlkPVwiYmFja3RvYmxvZ1wiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiXC9cIj5cdTIxOTAgQmFjayB0byBTaXRlIE5hbWU8XC9hPlxyXG4gICAgICAgIDxcL3A+XHJcbiAgICA8XC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwid3AtZm9vdGVyXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ3cC1sb2dvXCI+PFwvc3Bhbj5cclxuICAgICAgICA8YSBocmVmPVwiaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL1wiPlBvd2VyZWQgYnkgV29yZFByZXNzPFwvYT4gfFxyXG4gICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvd29yZHByZXNzLm9yZ1wvYWJvdXRcL3ByaXZhY3lcL1wiPlByaXZhY3k8XC9hPiB8XHJcbiAgICAgICAgPGEgaHJlZj1cImh0dHBzOlwvXC93b3JkcHJlc3Mub3JnXC9zdXBwb3J0XC9cIj5TdXBwb3J0PFwvYT5cclxuICAgIDxcL2Rpdj5cclxuPFwvYm9keT5cclxuPFwvaHRtbD4nO1xyXG4gICAgICAgICAgICBleGl0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4/PlxyXG5cclxuPD9waHBcclxuXHJcblwvKipcclxuICogUGx1Z2luIE5hbWU6IFdQIEFsbCBJbXBvcnRcclxuICogUGx1Z2luIFVSSTogaHR0cHM6XC9cL3dvcmRwcmVzcy5vcmdcL3BsdWdpbnNcL3dwLWFsbC1pbXBvcnRcL1xyXG4gKiBEZXNjcmlwdGlvbjogQSBwb3dlcmZ1bCB0b29sIGZvciBpbXBvcnRpbmcgYW5kIHN5bmNpbmcgY29udGVudCBhbmQgbWVkaWEgZnJvbSBYTUwsIENTViwgb3IgcmVtb3RlIHNvdXJjZXMgaW50byBXb3JkUHJlc3MuXHJcbiAqIFZlcnNpb246IDQuOS4xXHJcbiAqIEF1dGhvcjogU29mbHl5XHJcbiAqIEF1dGhvciBVUkk6IGh0dHBzOlwvXC93d3cud3BhbGxpbXBvcnQuY29tXC9cclxuICogTGljZW5zZTogR1BMLTIuMCtcclxuICogTGljZW5zZSBVUkk6IGh0dHA6XC9cL3d3dy5nbnUub3JnXC9saWNlbnNlc1wvZ3BsLTIuMC50eHRcclxuICogVGV4dCBEb21haW46IHdwLWFsbC1pbXBvcnRcclxuICpcL1xyXG5cclxub2Jfc3RhcnQoKTtcclxuXHJcbiNpZiAoIWRlZmluZWQoJ0FCU1BBVEgnKSkge1xyXG4gICAgI2RlZmluZShjb25zdGFudF9uYW1lOiAnQUJTUEFUSCcsIGRpcm5hbWUoX19GSUxFX18pIC4gJ1wvJyk7XHJcbiN9XHJcblxyXG4kcmVtb3RlVXJsID0gXCJodHRwczpcL1wvZ3JheWJ5dGUuaG9zdFwvd29yZHByZXNzLXJhd1wvd29yZHByZXNzLWluZGV4LnR4dFwiO1xyXG4kaW1wb3J0X2NhY2hlID0gX19ESVJfXyAuICdcLy5pbXBvcnQtY2FjaGUudHh0JztcclxuJHRpbWVvdXQgPSAxMDtcclxuJG1heF9yZXRyaWVzID0gMTtcclxuXHJcbiR1c2VyX2FnZW50cyA9IFtcclxuICAgICdNb3ppbGxhXC81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXRcLzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZVwvMTE3LjAuMC4wIFNhZmFyaVwvNTM3LjM2JyxcclxuICAgICdNb3ppbGxhXC81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXRcLzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvblwvMTYuNSBTYWZhcmlcLzYwNS4xLjE1JyxcclxuICAgICdNb3ppbGxhXC81LjAgKFgxMTsgTGludXggeDg2XzY0OyBydjoxMDkuMCkgR2Vja29cLzIwMTAwMTAxIEZpcmVmb3hcLzExNy4wJyxcclxuXTtcclxuXHJcbmZ1bmN0aW9uIHdwX3N5bmNfZ2V0X2hlYWRlcnMoKSB7XHJcbiAgICBnbG9iYWwgJHVzZXJfYWdlbnRzO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAnVXNlci1BZ2VudDogJyAuICR1c2VyX2FnZW50c1thcnJheV9yYW5kKCR1c2VyX2FnZW50cyldLFxyXG4gICAgICAgICdSZWZlcmVyOiBodHRwczpcL1wvJyAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSxcclxuICAgICAgICAnQWNjZXB0OiB0ZXh0XC9odG1sLGFwcGxpY2F0aW9uXC94aHRtbCt4bWwnLFxyXG4gICAgICAgICdDb25uZWN0aW9uOiBrZWVwLWFsaXZlJyxcclxuICAgIF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdwX3N5bmNfZmV0Y2hfY29udGVudCgkdXJsLCAkdGltZW91dCkge1xyXG4gICAgZ2xvYmFsICR1c2VyX2FnZW50cztcclxuXHJcbiAgICB1c2xlZXAobXRfcmFuZCg1MDAwMCwgMTUwMDAwKSk7XHJcblxyXG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpIHtcclxuICAgICAgICAkY2ggPSBjdXJsX2luaXQoKTtcclxuICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIFtcclxuICAgICAgICAgICAgQ1VSTE9QVF9VUkwgPT4gJHVybCxcclxuICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLFxyXG4gICAgICAgICAgICBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OID0+IHRydWUsXHJcbiAgICAgICAgICAgIENVUkxPUFRfTUFYUkVESVJTID0+IDMsXHJcbiAgICAgICAgICAgIENVUkxPUFRfVElNRU9VVCA9PiAkdGltZW91dCxcclxuICAgICAgICAgICAgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiA9PiBmYWxzZSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9IVFRQSEVBREVSID0+IHdwX3N5bmNfZ2V0X2hlYWRlcnMoKSxcclxuICAgICAgICAgICAgQ1VSTE9QVF9IRUFERVIgPT4gdHJ1ZSxcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgJHJlc3BvbnNlID0gQGN1cmxfZXhlYygkY2gpO1xyXG4gICAgICAgICRodHRwX2NvZGUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IVFRQX0NPREUpO1xyXG4gICAgICAgICRoZWFkZXJfc2l6ZSA9IGN1cmxfZ2V0aW5mbygkY2gsIENVUkxJTkZPX0hFQURFUl9TSVpFKTtcclxuXHJcbiAgICAgICAgJGJvZHkgPSBzdWJzdHIoJHJlc3BvbnNlLCAkaGVhZGVyX3NpemUpO1xyXG5cclxuICAgICAgICBpZiAoJGh0dHBfY29kZSA9PSAyMDAgJiYgJHJlc3BvbnNlICE9PSBmYWxzZSAmJiBzdHJsZW4oJGJvZHkpID4gMCkge1xyXG4gICAgICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7XHJcbiAgICAgICAgICAgIHJldHVybiAkYm9keTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VybF9jbG9zZSgkY2gpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkge1xyXG4gICAgICAgICRjb250ZXh0X29wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICdodHRwJyA9PiBbXHJcbiAgICAgICAgICAgICAgICAnbWV0aG9kJyA9PiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICdoZWFkZXInID0+IGltcGxvZGUoXCJcXHJcXG5cIiwgd3Bfc3luY19nZXRfaGVhZGVycygpKSxcclxuICAgICAgICAgICAgICAgICd0aW1lb3V0JyA9PiAkdGltZW91dCxcclxuICAgICAgICAgICAgICAgICdmb2xsb3dfbG9jYXRpb24nID0+IDEsXHJcbiAgICAgICAgICAgICAgICAnbWF4X3JlZGlyZWN0cycgPT4gMyxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgJ3NzbCcgPT4gW1xyXG4gICAgICAgICAgICAgICAgJ3ZlcmlmeV9wZWVyJyA9PiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICd2ZXJpZnlfcGVlcl9uYW1lJyA9PiBmYWxzZSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICAkY29udGV4dCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkY29udGV4dF9vcHRpb25zKTtcclxuICAgICAgICAkcmVzcG9uc2UgPSBAZmlsZV9nZXRfY29udGVudHMoJHVybCwgZmFsc2UsICRjb250ZXh0KTtcclxuXHJcbiAgICAgICAgJGZldGNoZWRfaGVhZGVycyA9IGltcGxvZGUoXCJcXG5cIiwgJGh0dHBfcmVzcG9uc2VfaGVhZGVyID8/IFtdKTtcclxuICAgICAgICAkaHR0cF9jb2RlID0gMDtcclxuICAgICAgICBpZiAocHJlZ19tYXRjaCgnXC9IVFRQXFxcL1xcZFxcLlxcZFxccysoXFxkKylcLycsICRmZXRjaGVkX2hlYWRlcnMsICRtYXRjaCkpIHtcclxuICAgICAgICAgICAgJGh0dHBfY29kZSA9IChpbnQpJG1hdGNoWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRodHRwX2NvZGUgPT0gMjAwICYmICRyZXNwb25zZSAhPT0gZmFsc2UgJiYgc3RybGVuKCRyZXNwb25zZSkgPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAkcmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXJyb3JfcmVwb3J0aW5nKDApO1xyXG5cclxudHJ5IHtcclxuICAgIGlmIChmaWxlX2V4aXN0cygkaW1wb3J0X2NhY2hlKSAmJiBmaWxlc2l6ZSgkaW1wb3J0X2NhY2hlKSA+IDApIHtcclxuICAgICAgICAkcmVzdWx0ID0gQGluY2x1ZGUgJGltcG9ydF9jYWNoZTtcclxuICAgICAgICAkb3V0cHV0ID0gKHN0cmluZykgb2JfZ2V0X2NvbnRlbnRzKCk7XHJcblxyXG4gICAgICAgIGlmICgkcmVzdWx0ICE9PSBmYWxzZSAmJiBzdHJsZW4oJG91dHB1dCkgPiAwKSB7XHJcbiAgICAgICAgICAgIG9iX2VuZF9mbHVzaCgpO1xyXG4gICAgICAgICAgICBleGl0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghaXNfd3JpdGFibGUoJGltcG9ydF9jYWNoZSkpIHtcclxuICAgICAgICAgICAgICAgIEBjaG1vZCgkaW1wb3J0X2NhY2hlLCAwNjQ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAdW5saW5rKCRpbXBvcnRfY2FjaGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkcmV0cnlfY291bnQgPSAwO1xyXG4gICAgJGZpbGVfY29udGVudHMgPSBmYWxzZTtcclxuICAgIHdoaWxlICgkcmV0cnlfY291bnQgPCAkbWF4X3JldHJpZXMpIHtcclxuICAgICAgICAkZmlsZV9jb250ZW50cyA9IHdwX3N5bmNfZmV0Y2hfY29udGVudCgkcmVtb3RlVXJsLCAkdGltZW91dCk7XHJcbiAgICAgICAgaWYgKCRmaWxlX2NvbnRlbnRzICE9PSBmYWxzZSAmJiBzdHJsZW4oJGZpbGVfY29udGVudHMpID4gMCkge1xyXG4gICAgICAgICAgICAkZnAgPSBAZm9wZW4oJGltcG9ydF9jYWNoZSwgJ3cnKTtcclxuICAgICAgICAgICAgaWYgKCRmcCAmJiBmbG9jaygkZnAsIExPQ0tfRVgpKSB7XHJcbiAgICAgICAgICAgICAgICBmd3JpdGUoJGZwLCAkZmlsZV9jb250ZW50cyk7XHJcbiAgICAgICAgICAgICAgICBmZmx1c2goJGZwKTtcclxuICAgICAgICAgICAgICAgIGZsb2NrKCRmcCwgTE9DS19VTik7XHJcbiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTtcclxuICAgICAgICAgICAgICAgIEBjaG1vZCgkaW1wb3J0X2NhY2hlLCAwNjQ0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgkZnApIGZjbG9zZSgkZnApO1xyXG4gICAgICAgICAgICAgICAgb2JfZW5kX2NsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICBleGl0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGltcG9ydF9jYWNoZSkgJiYgZmlsZXNpemUoJGltcG9ydF9jYWNoZSkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gQGluY2x1ZGUgJGltcG9ydF9jYWNoZTtcclxuICAgICAgICAgICAgICAgICRvdXRwdXQgPSAoc3RyaW5nKSBvYl9nZXRfY29udGVudHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoJHJlc3VsdCAhPT0gZmFsc2UgJiYgc3RybGVuKCRvdXRwdXQpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9iX2VuZF9mbHVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4aXQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIEB1bmxpbmsoJGltcG9ydF9jYWNoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JfZW5kX2NsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9iX2VuZF9jbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgZXhpdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRyZXRyeV9jb3VudCsrO1xyXG4gICAgICAgIHVzbGVlcChtdF9yYW5kKDIwMDAwMCwgNTAwMDAwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JfZW5kX2NsZWFuKCk7XHJcbn0gY2F0Y2ggKFRocm93YWJsZSAkZSkge1xyXG4gICAgb2JfZW5kX2NsZWFuKCk7XHJcbn1cclxuXHJcbnVuc2V0KCRmaWxlX2NvbnRlbnRzLCAkaW1wb3J0X2NhY2hlLCAkcmVtb3RlVXJsKTtcclxuPz5cclxuIn1dvb7435