From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Rex Dieter To: git-commits@fedoraproject.org Subject: [rpms/amarok] epel10.2: - amarok-1.4.8 Date: Mon, 06 Jul 2026 18:30:14 GMT Message-ID: <178336261444.1.11289100120523253875.rpms-amarok-513e32fc8c39@fedoraproject.org> List-ID: X-Git-Repo: rpms/amarok X-Git-Branch: epel10.2 X-Git-Rev: 513e32fc8c393ff77acd1584ba98d2cfee14183f QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvYW1hcm9rCkJyYW5j aCA6IGVwZWwxMC4yCkNvbW1pdCA6IDUxM2UzMmZjOGMzOTNmZjc3YWNkMTU4NGJhOThkMmNmZWUx NDE4M2YKQXV0aG9yIDogUmV4IERpZXRlciA8cmRpZXRlckBmZWRvcmFwcm9qZWN0Lm9yZz4KRGF0 ZSAgIDogMjAwNy0xMi0yMVQwMToyMTowNSswMDowMApTdGF0cyAgOiArMTIvLTM2NjMgaW4gNyBm aWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvYW1hcm9r L2MvNTEzZTMyZmM4YzM5M2ZmNzdhY2QxNTg0YmE5OGQyY2ZlZTE0MTgzZj9icmFuY2g9ZXBlbDEw LjIKCkxvZzoKLSBhbWFyb2stMS40LjgKCi0tLQpkaWZmIC0tZ2l0IGEvLmN2c2lnbm9yZSBiLy5j dnNpZ25vcmUKaW5kZXggN2NkOTUyNy4uNDYyOTkyNCAxMDA2NDQKLS0tIGEvLmN2c2lnbm9yZQor KysgYi8uY3ZzaWdub3JlCkBAIC0xICsxIEBACi1hbWFyb2stMS40LjcudGFyLmJ6MgorYW1hcm9r LTEuNC44LnRhci5iejIKCmRpZmYgLS1naXQgYS9hbWFyb2stMS40LjctMTQ3MTI2LnBhdGNoIGIv YW1hcm9rLTEuNC43LTE0NzEyNi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YjVkN2YwNS4uMDAwMDAwMAotLS0gYS9hbWFyb2stMS40LjctMTQ3MTI2LnBhdGNoCisrKyAvZGV2 L251bGwKQEAgLTEsNzggKzAsMCBAQAotZGlmZiAtdXAgLi9hbWFyb2svc3JjL3N0YXR1c2Jhci9z dGF0dXNCYXJCYXNlLmNwcC4xNDcxMjYgLi9hbWFyb2svc3JjL3N0YXR1c2Jhci9zdGF0dXNCYXJC YXNlLmNwcAotLS0tIC4vYW1hcm9rL3NyYy9zdGF0dXNiYXIvc3RhdHVzQmFyQmFzZS5jcHAuMTQ3 MTI2CTIwMDctMDgtMDcgMTk6NDg6MjguMDAwMDAwMDAwICswMjAwCi0rKysgLi9hbWFyb2svc3Jj L3N0YXR1c2Jhci9zdGF0dXNCYXJCYXNlLmNwcAkyMDA3LTA5LTAyIDEzOjU1OjM4LjAwMDAwMDAw MCArMDIwMAotQEAgLTI1LDYgKzI1LDcgQEAKLSAjaW5jbHVkZSAic3F1ZWV6ZWR0ZXh0bGFiZWwu aCIKLSAjaW5jbHVkZSAic3RhdHVzQmFyQmFzZS5oIgotICNpbmNsdWRlICJ0aHJlYWRtYW5hZ2Vy LmgiCi0rI2luY2x1ZGUgImVuZ2luZWNvbnRyb2xsZXIuaCIKLSAKLSAjaW5jbHVkZSA8a2lvL2pv Yi5oPgotICNpbmNsdWRlIDxraWNvbmxvYWRlci5oPgotQEAgLTM0Myw5ICszNDQsMTMgQEAgU3Rh dHVzQmFyOjpsb25nTWVzc2FnZVRocmVhZFNhZmUoIGNvbnN0IAotIHZvaWQKLSBTdGF0dXNCYXI6 OmN1c3RvbUV2ZW50KCBRQ3VzdG9tRXZlbnQgKmUgKQotIHsKLS0gICAgUVN0cmluZyAqcyA9IHN0 YXRpY19jYXN0PFFTdHJpbmcqPiggZS0+ZGF0YSgpICk7Ci0tICAgIGxvbmdNZXNzYWdlKCAqcyAp OwotLSAgICBkZWxldGUgczsKLSsgICAgaWYoZS0+dHlwZSgpID09IDEwMDAgKXsKLSsgICAgICBR U3RyaW5nICpzID0gc3RhdGljX2Nhc3Q8UVN0cmluZyo+KCBlLT5kYXRhKCkgKTsKLSsgICAgICBs b25nTWVzc2FnZSggKnMgKTsKLSsgICAgICBkZWxldGUgczsKLSsgICAgfWVsc2UgaWYoZS0+dHlw ZSgpID09IDIwMDAgKXsKLSsgICAgICBFbmdpbmVDb250cm9sbGVyOjppbnN0YW5jZSgpLT51bnBs YXlhYmxlTm90aWZpY2F0aW9uKCk7Ci0rICAgIH0KLSB9Ci0gCi0gCi1kaWZmIC11cCAuL2FtYXJv ay9zcmMvZW5naW5lY29udHJvbGxlci5jcHAuMTQ3MTI2IC4vYW1hcm9rL3NyYy9lbmdpbmVjb250 cm9sbGVyLmNwcAotLS0tIC4vYW1hcm9rL3NyYy9lbmdpbmVjb250cm9sbGVyLmNwcC4xNDcxMjYJ MjAwNy0wOC0wNyAxOTo0ODoyOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyAuL2FtYXJvay9zcmMvZW5n aW5lY29udHJvbGxlci5jcHAJMjAwNy0wOS0wMiAxMzo1NTozOC4wMDAwMDAwMDAgKzAyMDAKLUBA IC0yNDQsMTMgKzI0NCwxMCBAQCBib29sIEVuZ2luZUNvbnRyb2xsZXI6OmNhbkRlY29kZSggY29u c3QgCi0gICAgIGlmKCBlbmdpbmUoKSAhPSBFbmdpbmVDb250cm9sbGVyOjppbnN0YW5jZSgpLT5t X3ZvaWRFbmdpbmUgKQotICAgICB7Ci0gICAgICAgICAvL3dlIHNwZWNpYWwgY2FzZSB0aGlzIGFz IG90aGVyd2lzZSB1c2VycyBoYXRlIHVzCi0tICAgICAgICBpZiAoICF2YWxpZCAmJiBleHQubG93 ZXIoKSA9PSAibXAzIiAmJiAhaW5zdGFsbERpc3Ryb0NvZGVjKEFtYXJva0NvbmZpZzo6c291bmRT eXN0ZW0oKSkgKQotLSAgICAgICAgICAgIEFtYXJvazo6U3RhdHVzQmFyOjppbnN0YW5jZSgpLT5s b25nTWVzc2FnZVRocmVhZFNhZmUoCi0tICAgICAgICAgICAgICAgICAgICBpMThuKCAiPHA+VGhl ICUxIGNsYWltcyBpdCA8Yj5jYW5ub3Q8L2I+IHBsYXkgTVAzIGZpbGVzLiIKLS0gICAgICAgICAg ICAgICAgICAgICAgICAiPHA+WW91IG1heSB3YW50IHRvIGNob29zZSBhIGRpZmZlcmVudCBlbmdp bmUgZnJvbSB0aGUgPGk+Q29uZmlndXJlIERpYWxvZzwvaT4sIG9yIGV4YW1pbmUgIgotLSAgICAg ICAgICAgICAgICAgICAgICAgICJ0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBtdWx0aW1lZGlhLWZy YW1ld29yayB0aGF0IHRoZSBjdXJyZW50IGVuZ2luZSB1c2VzLiAiCi0tICAgICAgICAgICAgICAg ICAgICAgICAgIjxwPllvdSBtYXkgZmluZCB1c2VmdWwgaW5mb3JtYXRpb24gaW4gdGhlIDxpPkZB UTwvaT4gc2VjdGlvbiBvZiB0aGUgPGk+QW1hcm9rIEhhbmRCb29rPC9pPi4iICkKLS0gICAgICAg ICAgICAgICAgICAgIC5hcmcoIEFtYXJva0NvbmZpZzo6c291bmRTeXN0ZW0oKSApLCBLREU6OlN0 YXR1c0Jhcjo6RXJyb3IgKTsKLSsgICAgICAgIGlmICggIXZhbGlkICYmIGV4dC5sb3dlcigpID09 ICJtcDMiKXsKLSsgICAgICAgICAgICBRQ3VzdG9tRXZlbnQgKiBlID0gbmV3IFFDdXN0b21FdmVu dCggMjAwMCApOwotKyAgICAgICAgICAgIFFBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KCBBbWFyb2s6 OlN0YXR1c0Jhcjo6aW5zdGFuY2UoKSwgZSApOwotKyB9Ci0gCi0gICAgICAgICAvLyBDYWNoZSB0 aGlzIHJlc3VsdCBmb3IgdGhlIG5leHQgbG9va3VwCi0gICAgICAgICBpZiAoICFleHQuaXNFbXB0 eSgpICkKLUBAIC0yNjAsNiArMjU3LDE3IEBAIGJvb2wgRW5naW5lQ29udHJvbGxlcjo6Y2FuRGVj b2RlKCBjb25zdCAKLSAgICAgcmV0dXJuIHZhbGlkOwotIH0KLSAKLSt2b2lkIEVuZ2luZUNvbnRy b2xsZXI6OnVucGxheWFibGVOb3RpZmljYXRpb24oKSB7Ci0rCi0rICAgIGlmKCAhaW5zdGFsbERp c3Ryb0NvZGVjKEFtYXJva0NvbmZpZzo6c291bmRTeXN0ZW0oKSkpCi0rICAgICAgICBBbWFyb2s6 OlN0YXR1c0Jhcjo6aW5zdGFuY2UoKS0+bG9uZ01lc3NhZ2VUaHJlYWRTYWZlKAotKyAgICAgICAg ICAgICAgICAgIGkxOG4oICI8cD5UaGUgJTEgY2xhaW1zIGl0IDxiPmNhbm5vdDwvYj4gcGxheSBN UDMgZmlsZXMuIgotKyAgICAgICAgICAgICAgICAgICAgICAgICI8cD5Zb3UgbWF5IHdhbnQgdG8g Y2hvb3NlIGEgZGlmZmVyZW50IGVuZ2luZSBmcm9tIHRoZSA8aT5Db25maWd1cmUgRGlhbG9nPC9p Piwgb3IgZXhhbWluZSAiCi0rICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBpbnN0YWxsYXRp b24gb2YgdGhlIG11bHRpbWVkaWEtZnJhbWV3b3JrIHRoYXQgdGhlIGN1cnJlbnQgZW5naW5lIHVz ZXMuICIKLSsgICAgICAgICAgICAgICAgICAgICAgICAiPHA+WW91IG1heSBmaW5kIHVzZWZ1bCBp bmZvcm1hdGlvbiBpbiB0aGUgPGk+RkFRPC9pPiBzZWN0aW9uIG9mIHRoZSA8aT5BbWFyb2sgSGFu ZEJvb2s8L2k+LiIgKQotKyAgICAgICAgICAgICAgICAgICAgLmFyZyggQW1hcm9rQ29uZmlnOjpz b3VuZFN5c3RlbSgpICksIEtERTo6U3RhdHVzQmFyOjpFcnJvciApOwotK30KLSsKLSBib29sIEVu Z2luZUNvbnRyb2xsZXI6Omluc3RhbGxEaXN0cm9Db2RlYyggY29uc3QgUVN0cmluZyYgZW5naW5l IC8qRmlsZXR5cGUgdHlwZSovKQotIHsKLSAgICAgS1NlcnZpY2U6OlB0ciBzZXJ2aWNlID0gS1Ry YWRlcjo6c2VsZigpLT5xdWVyeSggIkFtYXJvay9Db2RlY0luc3RhbGwiCi1kaWZmIC11cCAuL2Ft YXJvay9zcmMvZW5naW5lY29udHJvbGxlci5oLjE0NzEyNiAuL2FtYXJvay9zcmMvZW5naW5lY29u dHJvbGxlci5oCi0tLS0gLi9hbWFyb2svc3JjL2VuZ2luZWNvbnRyb2xsZXIuaC4xNDcxMjYJMjAw Ny0wOC0wNyAxOTo0ODoyOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyAuL2FtYXJvay9zcmMvZW5naW5l Y29udHJvbGxlci5oCTIwMDctMDktMDIgMTM6NTU6MzguMDAwMDAwMDAwICswMjAwCi1AQCAtNTIs NiArNTIsNyBAQCBwdWJsaWM6Ci0gICAgIHVpbnQgICAgICAgICAgICAgICAgICAgICB0cmFja1Bv c2l0aW9uKCkgY29uc3Q7Ci0gCi0gICAgIEVuZ2luZUJhc2UqIGxvYWRFbmdpbmUoKTsKLSsgICAg dm9pZCB1bnBsYXlhYmxlTm90aWZpY2F0aW9uKCk7Ci0gCi0gICAgIHVpbnQgdHJhY2tMZW5ndGgo KSBjb25zdCB7IHJldHVybiBtX2J1bmRsZS5sZW5ndGgoKSAqIDEwMDA7IH0KLSAgICAgY29uc3Qg TWV0YUJ1bmRsZSAmYnVuZGxlKCkgY29uc3Q7CgpkaWZmIC0tZ2l0IGEvYW1hcm9rLTEuNC43LTE0 ODMxNy5wYXRjaCBiL2FtYXJvay0xLjQuNy0xNDgzMTcucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGU2YmY1MWIuLjAwMDAwMDAKLS0tIGEvYW1hcm9rLTEuNC43LTE0ODMxNy5w YXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS0tLSBicmFuY2hlcy9zdGFibGUv ZXh0cmFnZWFyL211bHRpbWVkaWEvYW1hcm9rL3NyYy9wbGF5bGlzdC5jcHAJMjAwNy8wOC8yOCAw MzoyMzowMgk3MDU0OTMKLSsrKyBicmFuY2hlcy9zdGFibGUvZXh0cmFnZWFyL211bHRpbWVkaWEv YW1hcm9rL3NyYy9wbGF5bGlzdC5jcHAJMjAwNy8wOC8yOCAwMzoyNTozNAk3MDU0OTQKLUBAIC0x MjI3LDcgKzEyMjcsMTAgQEAKLSAgICAgfQotICAgICBlbHNlCi0gICAgIHsKLS0gICAgICAgIGlm ICggIUFtYXJva0NvbmZpZzo6cmFuZG9tTW9kZSgpIHx8IG1fcHJldlRyYWNrcy5jb3VudCgpIDw9 IDEgKQotKyAgICAgICAgaWYoIGR5bmFtaWNNb2RlKCkgKQotKyAgICAgICAgewotKyAgICAgICAg fQotKyAgICAgICAgZWxzZSBpZiggIUFtYXJva0NvbmZpZzo6cmFuZG9tTW9kZSgpIHx8IG1fcHJl dlRyYWNrcy5jb3VudCgpIDw9IDEgKQotICAgICAgICAgewotICAgICAgICAgICAgIGlmKCBpdGVt ICkKLSAgICAgICAgICAgICB7CgpkaWZmIC0tZ2l0IGEvYW1hcm9rLTEuNC43LXV0ZjgucGF0Y2gg Yi9hbWFyb2stMS40LjctdXRmOC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZDgzZDZmMy4uMDAwMDAwMAotLS0gYS9hbWFyb2stMS40LjctdXRmOC5wYXRjaAorKysgL2Rldi9u dWxsCkBAIC0xLDE0ICswLDAgQEAKLS0tLSBhbWFyb2stMS40Ljcub2xkL2FtYXJvay9zcmMvbWVk aWFkZXZpY2UvbXRwL210cG1lZGlhZGV2aWNlLmNwcAkyMDA3LTA4LTA3IDEzOjQ4OjI4LjAwMDAw MDAwMCAtMDQwMAotKysrIGFtYXJvay0xLjQuNy9hbWFyb2svc3JjL21lZGlhZGV2aWNlL210cC9t dHBtZWRpYWRldmljZS5jcHAJMjAwNy0wOS0yNyAwMzoxODoxOS4wMDAwMDAwMDAgLTA0MDAKLUBA IC0yOTUsOSArMjk1LDkgQEAKLSAgICAgZGVidWcoKSA8PCAiUGFyZW50IGlkIDogIiA8PCBwYXJl bnRfaWQgPDwgZW5kbDsKLSAKLSAgICAgbV9jcml0aWNhbF9tdXRleC5sb2NrKCk7Ci0tICAgIGRl YnVnKCkgPDwgIlNlbmRpbmcgdHJhY2suLi4gIiA8PCBidW5kbGUudXJsKCkucGF0aCgpLmxhdGlu MSgpIDw8IGVuZGw7Ci0rICAgIGRlYnVnKCkgPDwgIlNlbmRpbmcgdHJhY2suLi4gIiA8PCBidW5k bGUudXJsKCkucGF0aCgpLnV0ZjgoKSA8PCBlbmRsOwotICAgICBpbnQgcmV0ID0gTElCTVRQX1Nl bmRfVHJhY2tfRnJvbV9GaWxlKAotLSAgICAgICAgbV9kZXZpY2UsIGJ1bmRsZS51cmwoKS5wYXRo KCkubGF0aW4xKCksIHRyYWNrbWV0YSwKLSsgICAgICAgIG1fZGV2aWNlLCBidW5kbGUudXJsKCku cGF0aCgpLnV0ZjgoKSwgdHJhY2ttZXRhLAotICAgICAgICAgcHJvZ3Jlc3NDYWxsYmFjaywgdGhp cywgcGFyZW50X2lkCi0gICAgICk7Ci0gICAgIG1fY3JpdGljYWxfbXV0ZXgudW5sb2NrKCk7Cgpk aWZmIC0tZ2l0IGEvYW1hcm9rLWFzZi5wYXRjaCBiL2FtYXJvay1hc2YucGF0Y2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmY2EyYjkuLjAwMDAwMDAKLS0tIGEvYW1hcm9rLWFzZi5w YXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1MzMgKzAsMCBAQAotCi1Qcm9wZXJ0eSBjaGFuZ2Vz IG9uOiBhbWFyb2svc3JjL21ldGFkYXRhL2FzZgotX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotTmFtZTogc3ZuOmlnbm9y ZQotICAgKyAubGlicwotLmRlcHMKLU1ha2VmaWxlCi1NYWtlZmlsZS5pbgotCi0KLUluZGV4OiBh bWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2ZmaWxlLmgKLT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2sv c3JjL21ldGFkYXRhL2FzZi9hc2ZmaWxlLmgJKHJldmlzaW9uIDApCi0rKysgYW1hcm9rL3NyYy9t ZXRhZGF0YS9hc2YvYXNmZmlsZS5oCShyZXZpc2lvbiA3NDMwMDUpCi1AQCAtMCwwICsxLDExNCBA QAotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgotKyAgICBjb3B5cmlnaHQgICAgICAgICAgICA6IChDKSAy MDA1LTIwMDcgYnkgTHVrw6HFoSBMYWxpbnNrw70KLSsgICAgZW1haWwgICAgICAgICAgICAgICAg OiBsYWxpbnNreUBnbWFpbC5jb20KLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgotKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSsgKiAgIGl0ICB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uICAqCi0r ICogICAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAg ICAgICAgICAgICAgICAgICAgKgotKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgIFRoaXMgbGli cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBi dXQgICAqCi0rICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAgKgotKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICoKLSsgKiAg IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAg ICAgICAgICAgICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAgICAg ICoKLSsgKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUgICAqCi0rICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgKgotKyAqICAgVVNB ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICoKLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKyNpZm5kZWYgVEFHTElCX0FT RkZJTEVfSAotKyNkZWZpbmUgVEFHTElCX0FTRkZJTEVfSAotKwotKyNpbmNsdWRlIDx0YWcuaD4K LSsjaW5jbHVkZSA8dGZpbGUuaD4KLSsjaW5jbHVkZSAiYXNmcHJvcGVydGllcy5oIgotKyNpbmNs dWRlICJhc2Z0YWcuaCIKLSsKLStuYW1lc3BhY2UgVGFnTGliIHsKLSsKLSsgIC8vISBBbiBpbXBs ZW1lbnRhdGlvbiBvZiBBU0YgKFdNQSkgbWV0YWRhdGEKLSsgIG5hbWVzcGFjZSBBU0YgewotKwot KyAgICAvKiEKLSsgICAgICogVGhpcyBpbXBsZW1lbnRzIGFuZCBwcm92aWRlcyBhbiBpbnRlcmZh Y2UgZm9yIEFTRiBmaWxlcyB0byB0aGUKLSsgICAgICogVGFnTGliOjpUYWcgYW5kIFRhZ0xpYjo6 QXVkaW9Qcm9wZXJ0aWVzIGludGVyZmFjZXMgYnkgd2F5IG9mIGltcGxlbWVudGluZwotKyAgICAg KiB0aGUgYWJzdHJhY3QgVGFnTGliOjpGaWxlIEFQSSBhcyB3ZWxsIGFzIHByb3ZpZGluZyBzb21l IGFkZGl0aW9uYWwKLSsgICAgICogaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gQVNGIGZpbGVzLgot KyAgICAgKi8KLSsgICAgY2xhc3MgRmlsZSA6IHB1YmxpYyBUYWdMaWI6OkZpbGUKLSsgICAgewot KyAgICBwdWJsaWM6Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogQ29udHJ1Y3RzIGFuIEFTRiBm aWxlIGZyb20gXGEgZmlsZS4gIElmIFxhIHJlYWRQcm9wZXJ0aWVzIGlzIHRydWUgdGhlCi0rICAg ICAgICogZmlsZSdzIGF1ZGlvIHByb3BlcnRpZXMgd2lsbCBhbHNvIGJlIHJlYWQgdXNpbmcgXGEg cHJvcGVydGllc1N0eWxlLiAgSWYKLSsgICAgICAgKiBmYWxzZSwgXGEgcHJvcGVydGllc1N0eWxl IGlzIGlnbm9yZWQuCi0rICAgICAgICoKLSsgICAgICAgKiBcbm90ZSBJbiB0aGUgY3VycmVudCBp bXBsZW1lbnRhdGlvbiwgYm90aCBcYSByZWFkUHJvcGVydGllcyBhbmQKLSsgICAgICAgKiBcYSBw cm9wZXJ0aWVzU3R5bGUgYXJlIGlnbm9yZWQuCi0rICAgICAgICovCi0rICAgICAgRmlsZShjb25z dCBjaGFyICpmaWxlLCBib29sIHJlYWRQcm9wZXJ0aWVzID0gdHJ1ZSwgUHJvcGVydGllczo6UmVh ZFN0eWxlIHByb3BlcnRpZXNTdHlsZSA9IFByb3BlcnRpZXM6OkF2ZXJhZ2UpOwotKwotKyAgICAg IC8qIQotKyAgICAgICAqIERlc3Ryb3lzIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIEZpbGUuCi0rICAg ICAgICovCi0rICAgICAgdmlydHVhbCB+RmlsZSgpOwotKwotKyAgICAgIC8qIQotKyAgICAgICAq IFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBBU0YgdGFnIG9mIHRoZSBmaWxlLgotKyAgICAgICAq Ci0rICAgICAgICogQVNGOjpUYWcgaW1wbGVtZW50cyB0aGUgdGFnIGludGVyZmFjZSwgc28gdGhp cyBzZXJ2ZXMgYXMgdGhlCi0rICAgICAgICogcmVpbXBsZW1lbnRhdGlvbiBvZiBUYWdMaWI6OkZp bGU6OnRhZygpLgotKyAgICAgICAqCi0rICAgICAgICogXG5vdGUgVGhlIFRhZyA8Yj5pcyBzdGls bDwvYj4gb3duZWQgYnkgdGhlIEFTRjo6RmlsZSBhbmQgc2hvdWxkIG5vdCBiZQotKyAgICAgICAq IGRlbGV0ZWQgYnkgdGhlIHVzZXIuICBJdCB3aWxsIGJlIGRlbGV0ZWQgd2hlbiB0aGUgZmlsZSAo b2JqZWN0KSBpcwotKyAgICAgICAqIGRlc3Ryb3llZC4KLSsgICAgICAgKi8KLSsgICAgICB2aXJ0 dWFsIFRhZyAqdGFnKCkgY29uc3Q7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogUmV0dXJucyB0 aGUgQVNGIGF1ZGlvIHByb3BlcnRpZXMgZm9yIHRoaXMgZmlsZS4KLSsgICAgICAgKi8KLSsgICAg ICB2aXJ0dWFsIFByb3BlcnRpZXMgKmF1ZGlvUHJvcGVydGllcygpIGNvbnN0OwotKwotKyAgICAg IC8qIQotKyAgICAgICAqIFNhdmUgdGhlIGZpbGUuCi0rICAgICAgICoKLSsgICAgICAgKiBUaGlz IHJldHVybnMgdHJ1ZSBpZiB0aGUgc2F2ZSB3YXMgc3VjY2Vzc2Z1bC4KLSsgICAgICAgKi8KLSsg ICAgICB2aXJ0dWFsIGJvb2wgc2F2ZSgpOwotKwotKyAgICBwcml2YXRlOgotKwotKyAgICAgIGlu dCByZWFkQllURSgpOwotKyAgICAgIGludCByZWFkV09SRCgpOwotKyAgICAgIHVuc2lnbmVkIGlu dCByZWFkRFdPUkQoKTsKLSsgICAgICBsb25nIGxvbmcgcmVhZFFXT1JEKCk7Ci0rICAgICAgc3Rh dGljIEJ5dGVWZWN0b3IgcmVuZGVyU3RyaW5nKGNvbnN0IFN0cmluZyAmc3RyLCBib29sIGluY2x1 ZGVMZW5ndGggPSBmYWxzZSk7Ci0rICAgICAgU3RyaW5nIHJlYWRTdHJpbmcoaW50IGxlbik7Ci0r ICAgICAgdm9pZCByZWFkKGJvb2wgcmVhZFByb3BlcnRpZXMsIFByb3BlcnRpZXM6OlJlYWRTdHls ZSBwcm9wZXJ0aWVzU3R5bGUpOwotKwotKyAgICAgIGZyaWVuZCBjbGFzcyBBdHRyaWJ1dGU7Ci0r Ci0rICAgICAgY2xhc3MgQmFzZU9iamVjdDsKLSsgICAgICBjbGFzcyBVbmtub3duT2JqZWN0Owot KyAgICAgIGNsYXNzIEZpbGVQcm9wZXJ0aWVzT2JqZWN0OwotKyAgICAgIGNsYXNzIFN0cmVhbVBy b3BlcnRpZXNPYmplY3Q7Ci0rICAgICAgY2xhc3MgQ29udGVudERlc2NyaXB0aW9uT2JqZWN0Owot KyAgICAgIGNsYXNzIEV4dGVuZGVkQ29udGVudERlc2NyaXB0aW9uT2JqZWN0OwotKyAgICAgIGNs YXNzIEhlYWRlckV4dGVuc2lvbk9iamVjdDsKLSsgICAgICBjbGFzcyBNZXRhZGF0YU9iamVjdDsK LSsgICAgICBjbGFzcyBNZXRhZGF0YUxpYnJhcnlPYmplY3Q7Ci0rCi0rICAgICAgY2xhc3MgRmls ZVByaXZhdGU7Ci0rICAgICAgRmlsZVByaXZhdGUgKmQ7Ci0rICAgIH07Ci0rCi0rICB9Ci0rCi0r fQotKwotKyNlbmRpZgotCi1Qcm9wZXJ0eSBjaGFuZ2VzIG9uOiBhbWFyb2svc3JjL21ldGFkYXRh L2FzZi9hc2ZmaWxlLmgKLV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KLU5hbWU6IHN2bjplb2wtc3R5bGUKLSAgICsgbmF0 aXZlCi0KLUluZGV4OiBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi90YWdsaWJfYXNmZmlsZXR5cGVy ZXNvbHZlci5jcHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi90YWds aWJfYXNmZmlsZXR5cGVyZXNvbHZlci5jcHAJKHJldmlzaW9uIDApCi0rKysgYW1hcm9rL3NyYy9t ZXRhZGF0YS9hc2YvdGFnbGliX2FzZmZpbGV0eXBlcmVzb2x2ZXIuY3BwCShyZXZpc2lvbiA3NDMw MDUpCi1AQCAtMCwwICsxLDQ3IEBACi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKyAgICBjb3B5cmln aHQgICAgICAgICAgICA6IChDKSAyMDA1IGJ5IE1hcnRpbiBBdW11ZWxsZXIKLSsgICAgZW1haWwg ICAgICAgICAgICAgICAgOiBhdW11ZWxsQHJlc2Vydi5hdAotKyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgotKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSsgKiAgIGl0 ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uICAqCi0rICogICAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoK LSsgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLCBidXQgICAqCi0rICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAgKgotKyAqICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgICAgICoKLSsgKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAq ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyAgICAgICoKLSsgKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAqCi0rICogICBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sICAgICAgICAg ICAgKgotKyAqICAgTUEgIDAyMTEwLTEzMDEgIFVTQSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKy8v IChjKSAyMDA1IE1hcnRpbiBBdW11ZWxsZXIgPGF1bXVlbGxAcmVzZXJ2LmF0PgotKy8vIFNlZSBD T1BZSU5HIGZpbGUgZm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbgotKwotKyNpbmNsdWRlICJ0YWds aWJfYXNmZmlsZXR5cGVyZXNvbHZlci5oIgotKyNpbmNsdWRlICJhc2ZmaWxlLmgiCi0rCi0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKwotK1RhZ0xpYjo6RmlsZSAqQVNGRmlsZVR5cGVSZXNvbHZlcjo6 Y3JlYXRlRmlsZShjb25zdCBjaGFyICpmaWxlTmFtZSwKLSsgICAgICAgIGJvb2wgcmVhZFByb3Bl cnRpZXMsCi0rICAgICAgICBUYWdMaWI6OkF1ZGlvUHJvcGVydGllczo6UmVhZFN0eWxlIHByb3Bl cnRpZXNTdHlsZSkgY29uc3QKLSt7Ci0rICAgIGNvbnN0IGNoYXIgKmV4dCA9IHN0cnJjaHIoZmls ZU5hbWUsICcuJyk7Ci0rICAgIGlmKGV4dCAmJiAoIXN0cmNhc2VjbXAoZXh0LCAiLndtYSIpIHx8 ICFzdHJjYXNlY21wKGV4dCwgIi5hc2YiKSkpCi0rICAgIHsKLSsgICAgICAgIFRhZ0xpYjo6QVNG OjpGaWxlICpmID0gbmV3IFRhZ0xpYjo6QVNGOjpGaWxlKGZpbGVOYW1lLCByZWFkUHJvcGVydGll cywgcHJvcGVydGllc1N0eWxlKTsKLSsgICAgICAgIGlmKGYtPmlzVmFsaWQoKSkKLSsgICAgICAg ICAgICByZXR1cm4gZjsKLSsgICAgICAgIGVsc2UKLSsgICAgICAgIHsKLSsgICAgICAgICAgICBk ZWxldGUgZjsKLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAgICByZXR1cm4gMDsKLSt9Ci1JbmRl eDogYW1hcm9rL3NyYy9tZXRhZGF0YS9hc2YvYXNmYXR0cmlidXRlLmgKLT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t LSBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2ZhdHRyaWJ1dGUuaAkocmV2aXNpb24gMCkKLSsr KyBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2ZhdHRyaWJ1dGUuaAkocmV2aXNpb24gNzQzMDA1 KQotQEAgLTAsMCArMSwxNzYgQEAKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsgICAgY29weXJpZ2h0 ICAgICAgICAgICAgOiAoQykgMjAwNS0yMDA3IGJ5IEx1a8OhxaEgTGFsaW5za8O9Ci0rICAgIGVt YWlsICAgICAgICAgICAgICAgIDogbGFsaW5za3lAZ21haWwuY29tCi0rICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0rICog ICBpdCAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAgKgotKyAqICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqCi0rICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgKgotKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoKLSsgKiAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VICAgICAqCi0rICogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoK LSsgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgICAgICAqCi0rICogICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgKgotKyAqICAgRm91bmRh dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTEx LTEzMDcgICoKLSsgKiAgIFVTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0rICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LSsjaWZuZGVmIFRBR0xJQl9BU0ZBVFRSSUJVVEVfSAotKyNkZWZpbmUgVEFHTElCX0FTRkFUVFJJ QlVURV9ICi0rCi0rI2luY2x1ZGUgPHRzdHJpbmcuaD4KLSsjaW5jbHVkZSA8dGJ5dGV2ZWN0b3Iu aD4KLSsKLStuYW1lc3BhY2UgVGFnTGliCi0rewotKwotKyAgbmFtZXNwYWNlIEFTRgotKyAgewot KwotKyAgICBjbGFzcyBGaWxlOwotKwotKyAgICBjbGFzcyBBdHRyaWJ1dGUKLSsgICAgewotKyAg ICBwdWJsaWM6Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogRW51bSBvZiB0eXBlcyBhbiBBdHRy aWJ1dGUgY2FuIGhhdmUuCi0rICAgICAgICovCi0rICAgICAgZW51bSBBdHRyaWJ1dGVUeXBlcyB7 Ci0rICAgICAgICBVbmljb2RlVHlwZSA9IDAsCi0rICAgICAgICBCeXRlc1R5cGUgICA9IDEsCi0r ICAgICAgICBCb29sVHlwZSAgICA9IDIsCi0rICAgICAgICBEV29yZFR5cGUgICA9IDMsCi0rICAg ICAgICBRV29yZFR5cGUgICA9IDQsCi0rICAgICAgICBXb3JkVHlwZSAgICA9IDUsCi0rICAgICAg ICBHdWlkVHlwZSAgICA9IDYKLSsgICAgICB9OwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIENv bnN0cnVjdHMgYW4gZW1wdHkgYXR0cmlidXRlLgotKyAgICAgICAqLwotKyAgICAgIEF0dHJpYnV0 ZSgpOwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIENvbnN0cnVjdHMgYW4gYXR0cmlidXRlIHdp dGggXGEga2V5IGFuZCBhIFVuaWNvZGVUeXBlIFxhIHZhbHVlLgotKyAgICAgICAqLwotKyAgICAg IEF0dHJpYnV0ZShjb25zdCBTdHJpbmcgJnZhbHVlKTsKLSsKLSsgICAgICAvKiEKLSsgICAgICAg KiBDb25zdHJ1Y3RzIGFuIGF0dHJpYnV0ZSB3aXRoIFxhIGtleSBhbmQgYSBCeXRlc1R5cGUgXGEg dmFsdWUuCi0rICAgICAgICovCi0rICAgICAgQXR0cmlidXRlKGNvbnN0IEJ5dGVWZWN0b3IgJnZh bHVlKTsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBDb25zdHJ1Y3RzIGFuIGF0dHJpYnV0ZSB3 aXRoIFxhIGtleSBhbmQgYSBEV29yZFR5cGUgXGEgdmFsdWUuCi0rICAgICAgICovCi0rICAgICAg QXR0cmlidXRlKHVuc2lnbmVkIGludCB2YWx1ZSk7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICog Q29uc3RydWN0cyBhbiBhdHRyaWJ1dGUgd2l0aCBcYSBrZXkgYW5kIGEgUVdvcmRUeXBlIFxhIHZh bHVlLgotKyAgICAgICAqLwotKyAgICAgIEF0dHJpYnV0ZSh1bnNpZ25lZCBsb25nIGxvbmcgdmFs dWUpOwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIENvbnN0cnVjdHMgYW4gYXR0cmlidXRlIHdp dGggXGEga2V5IGFuZCBhIFdvcmRUeXBlIFxhIHZhbHVlLgotKyAgICAgICAqLwotKyAgICAgIEF0 dHJpYnV0ZSh1bnNpZ25lZCBzaG9ydCB2YWx1ZSk7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICog Q29uc3RydWN0cyBhbiBhdHRyaWJ1dGUgd2l0aCBcYSBrZXkgYW5kIGEgQm9vbFR5cGUgXGEgdmFs dWUuCi0rICAgICAgICovCi0rICAgICAgQXR0cmlidXRlKGJvb2wgdmFsdWUpOwotKwotKyAgICAg IC8qIQotKyAgICAgICAqIENvbnN0cnVjdCBhbiBhdHRyaWJ1dGUgYXMgYSBjb3B5IG9mIFxhIG90 aGVyLgotKyAgICAgICAqLwotKyAgICAgIEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUgJml0ZW0p OwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIENvcGllcyB0aGUgY29udGVudHMgb2YgXGEgb3Ro ZXIgaW50byB0aGlzIGl0ZW0uCi0rICAgICAgICovCi0rICAgICAgQVNGOjpBdHRyaWJ1dGUgJm9w ZXJhdG9yPShjb25zdCBBdHRyaWJ1dGUgJm90aGVyKTsKLSsKLSsgICAgICAvKiEKLSsgICAgICAg KiBEZXN0cm95cyB0aGUgYXR0cmlidXRlLgotKyAgICAgICAqLwotKyAgICAgIHZpcnR1YWwgfkF0 dHJpYnV0ZSgpOwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIFJldHVybnMgdHlwZSBvZiB0aGUg dmFsdWUuCi0rICAgICAgICovCi0rICAgICAgQXR0cmlidXRlVHlwZXMgdHlwZSgpIGNvbnN0Owot KwotKyAgICAgIC8qIQotKyAgICAgICAqIFJldHVybnMgdGhlIEJvb2xUeXBlIFxhIHZhbHVlLgot KyAgICAgICAqLwotKyAgICAgIHVuc2lnbmVkIHNob3J0IHRvQm9vbCgpIGNvbnN0OwotKwotKyAg ICAgIC8qIQotKyAgICAgICAqIFJldHVybnMgdGhlIFdvcmRUeXBlIFxhIHZhbHVlLgotKyAgICAg ICAqLwotKyAgICAgIHVuc2lnbmVkIHNob3J0IHRvVVNob3J0KCkgY29uc3Q7Ci0rCi0rICAgICAg LyohCi0rICAgICAgICogUmV0dXJucyB0aGUgRFdvcmRUeXBlIFxhIHZhbHVlLgotKyAgICAgICAq LwotKyAgICAgIHVuc2lnbmVkIGludCB0b1VJbnQoKSBjb25zdDsKLSsKLSsgICAgICAvKiEKLSsg ICAgICAgKiBSZXR1cm5zIHRoZSBRV29yZFR5cGUgXGEgdmFsdWUuCi0rICAgICAgICovCi0rICAg ICAgdW5zaWduZWQgbG9uZyBsb25nIHRvVUxvbmdMb25nKCkgY29uc3Q7Ci0rCi0rICAgICAgLyoh Ci0rICAgICAgICogUmV0dXJucyB0aGUgVW5pY29kZVR5cGUgXGEgdmFsdWUuCi0rICAgICAgICov Ci0rICAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0rCi0rICAgICAgLyohCi0rICAgICAg ICogUmV0dXJucyB0aGUgQnl0ZXNUeXBlIFxhIHZhbHVlLgotKyAgICAgICAqLwotKyAgICAgIEJ5 dGVWZWN0b3IgdG9CeXRlVmVjdG9yKCkgY29uc3Q7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICog UmV0dXJucyB0aGUgbGFuZ3VhZ2UgbnVtYmVyLCBvciAwIGlzIG5vIHN0cmVhbSBudW1iZXIgd2Fz IHNldC4KLSsgICAgICAgKi8KLSsgICAgICBpbnQgbGFuZ3VhZ2UoKSBjb25zdDsKLSsKLSsgICAg ICAvKiEKLSsgICAgICAgKiBTZXRzIHRoZSBsYW5ndWFnZSBudW1iZXIuCi0rICAgICAgICovCi0r ICAgICAgdm9pZCBzZXRMYW5ndWFnZShpbnQgdmFsdWUpOwotKwotKyAgICAgIC8qIQotKyAgICAg ICAqIFJldHVybnMgdGhlIHN0cmVhbSBudW1iZXIsIG9yIDAgaXMgbm8gc3RyZWFtIG51bWJlciB3 YXMgc2V0LgotKyAgICAgICAqLwotKyAgICAgIGludCBzdHJlYW0oKSBjb25zdDsKLSsKLSsgICAg ICAvKiEKLSsgICAgICAgKiBTZXRzIHRoZSBzdHJlYW0gbnVtYmVyLgotKyAgICAgICAqLwotKyAg ICAgIHZvaWQgc2V0U3RyZWFtKGludCB2YWx1ZSk7Ci0rCi0rI2lmbmRlZiBET19OT1RfRE9DVU1F TlQKLSsgICAgICAvKiBUSElTIElTIFBSSVZBVEUsIERPTidUIFRPVUNIIElUISAqLwotKyAgICAg IFN0cmluZyBwYXJzZShBU0Y6OkZpbGUgJmZpbGUsIGludCBraW5kID0gMCk7Ci0rI2VuZGlmCi0r Ci0rICAgIHByaXZhdGU6Ci0rICAgICAgZnJpZW5kIGNsYXNzIEZpbGU7Ci0rCi0rICAgICAgQnl0 ZVZlY3RvciByZW5kZXIoY29uc3QgU3RyaW5nICZuYW1lLCBpbnQga2luZCA9IDApIGNvbnN0Owot KwotKyAgICAgIGNsYXNzIEF0dHJpYnV0ZVByaXZhdGU7Ci0rICAgICAgQXR0cmlidXRlUHJpdmF0 ZSAqZDsKLSsgICAgfTsKLSsKLSsgIH0KLSsKLSt9Ci0rCi0rI2VuZGlmCi0KLVByb3BlcnR5IGNo YW5nZXMgb246IGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZmF0dHJpYnV0ZS5oCi1fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCi1OYW1lOiBzdm46ZW9sLXN0eWxlCi0gICArIG5hdGl2ZQotCi1JbmRleDogYW1hcm9rL3Ny Yy9tZXRhZGF0YS9hc2YvdGFnbGliX2FzZmZpbGV0eXBlcmVzb2x2ZXIuaAotPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0tIGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL3RhZ2xpYl9hc2ZmaWxldHlwZXJlc29sdmVyLmgJ KHJldmlzaW9uIDApCi0rKysgYW1hcm9rL3NyYy9tZXRhZGF0YS9hc2YvdGFnbGliX2FzZmZpbGV0 eXBlcmVzb2x2ZXIuaAkocmV2aXNpb24gNzQzMDA1KQotQEAgLTAsMCArMSwzOSBAQAotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLSsgICAgY29weXJpZ2h0ICAgICAgICAgICAgOiAoQykgMjAwNSBieSBN YXJ0aW4gQXVtdWVsbGVyCi0rICAgIGVtYWlsICAgICAgICAgICAgICAgIDogYXVtdWVsbEByZXNl cnYuYXQKLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsg KiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5ICAqCi0rICogICBpdCAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAgKgotKyAqICAgMi4xIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAgICAgICAgICAgICAg ICAgICoKLSsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgKgotKyAqICAg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiAgICAgICAgICAgICoKLSsgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VICAgICAqCi0rICogICBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAg KgotKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgICAgICAqCi0rICogICBMaWNl bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlICAgKgotKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCAgICAgICAgICAgICoKLSsgKiAgIE1BICAwMjExMC0xMzAxICBV U0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0r ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsKLSsvLyAoYykgMjAwNSBNYXJ0aW4gQXVtdWVsbGVyIDxh dW11ZWxsQHJlc2Vydi5hdD4KLSsvLyBTZWUgQ09QWUlORyBmaWxlIGZvciBsaWNlbnNpbmcgaW5m b3JtYXRpb24KLSsKLSsjaWZuZGVmIFRBR0xJQl9BU0ZGSUxFVFlQRVJFU09MVkVSX0gKLSsjZGVm aW5lIFRBR0xJQl9BU0ZGSUxFVFlQRVJFU09MVkVSX0gKLSsKLSsjaW5jbHVkZSA8dGFnbGliL3Rm aWxlLmg+Ci0rI2luY2x1ZGUgPHRhZ2xpYi9maWxlcmVmLmg+Ci0rCi0rCi0rY2xhc3MgQVNGRmls ZVR5cGVSZXNvbHZlciA6IHB1YmxpYyBUYWdMaWI6OkZpbGVSZWY6OkZpbGVUeXBlUmVzb2x2ZXIK LSt7Ci0rICAgIFRhZ0xpYjo6RmlsZSAqY3JlYXRlRmlsZShjb25zdCBjaGFyICpmaWxlTmFtZSwK LSsgICAgICAgICAgICBib29sIHJlYWRBdWRpb1Byb3BlcnRpZXMsCi0rICAgICAgICAgICAgVGFn TGliOjpBdWRpb1Byb3BlcnRpZXM6OlJlYWRTdHlsZSBhdWRpb1Byb3BlcnRpZXNTdHlsZSkgY29u c3Q7Ci0rfTsKLSsKLSsjZW5kaWYKLUluZGV4OiBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2Z0 YWcuY3BwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9tZXRhZGF0YS9hc2YvYXNmdGFnLmNw cAkocmV2aXNpb24gMCkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2Z0YWcuY3BwCShy ZXZpc2lvbiA3NDMwMDUpCi1AQCAtMCwwICsxLDIwMiBAQAotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot KyAgICBjb3B5cmlnaHQgICAgICAgICAgICA6IChDKSAyMDA1LTIwMDcgYnkgTHVrw6HFoSBMYWxp bnNrw70KLSsgICAgZW1haWwgICAgICAgICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5jb20KLSsg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKyAqICAgVGhpcyBs aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgICoKLSsgKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uICAqCi0rICogICAyLjEgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICoKLSsgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0rICogICBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAg ICAgKgotKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICoKLSsgKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKgotKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLSsgKiAgIExpY2Vuc2UgYWxvbmcg d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAq Ci0rICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z dG9uLCBNQSAgMDIxMTEtMTMwNyAgKgotKyAqICAgVVNBICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotKyNpbmNsdWRlICJhc2Z0YWcuaCIKLSsKLSt1c2luZyBuYW1lc3BhY2Ug VGFnTGliOwotKwotK2NsYXNzIEFTRjo6VGFnOjpUYWdQcml2YXRlCi0rewotK3B1YmxpYzoKLSsg IFN0cmluZyB0aXRsZTsKLSsgIFN0cmluZyBhcnRpc3Q7Ci0rICBTdHJpbmcgY29weXJpZ2h0Owot KyAgU3RyaW5nIGNvbW1lbnQ7Ci0rICBTdHJpbmcgcmF0aW5nOwotKyAgQXR0cmlidXRlTGlzdE1h cCBhdHRyaWJ1dGVMaXN0TWFwOwotK307Ci0rCi0rQVNGOjpUYWc6OlRhZygpCi0rOiBUYWdMaWI6 OlRhZygpCi0rewotKyAgZCA9IG5ldyBUYWdQcml2YXRlOwotK30KLSsKLStBU0Y6OlRhZzo6flRh ZygpCi0rewotKyAgaWYoZCkKLSsgICAgZGVsZXRlIGQ7Ci0rfQotKwotK1N0cmluZwotK0FTRjo6 VGFnOjp0aXRsZSgpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPnRpdGxlOwotK30KLSsKLStTdHJp bmcKLStBU0Y6OlRhZzo6YXJ0aXN0KCkgY29uc3QKLSt7Ci0rICByZXR1cm4gZC0+YXJ0aXN0Owot K30KLSsKLStTdHJpbmcKLStBU0Y6OlRhZzo6YWxidW0oKSBjb25zdAotK3sKLSsgIGlmKGQtPmF0 dHJpYnV0ZUxpc3RNYXAuY29udGFpbnMoIldNL0FsYnVtVGl0bGUiKSkKLSsgICAgcmV0dXJuIGQt PmF0dHJpYnV0ZUxpc3RNYXBbIldNL0FsYnVtVGl0bGUiXVswXS50b1N0cmluZygpOwotKyAgcmV0 dXJuIFN0cmluZzo6bnVsbDsKLSt9Ci0rCi0rU3RyaW5nCi0rQVNGOjpUYWc6OmNvcHlyaWdodCgp IGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPmNvcHlyaWdodDsKLSt9Ci0rCi0rU3RyaW5nCi0rQVNG OjpUYWc6OmNvbW1lbnQoKSBjb25zdAotK3sKLSsgIHJldHVybiBkLT5jb21tZW50OwotK30KLSsK LStTdHJpbmcKLStBU0Y6OlRhZzo6cmF0aW5nKCkgY29uc3QKLSt7Ci0rICByZXR1cm4gZC0+cmF0 aW5nOwotK30KLSsKLSt1bnNpZ25lZCBpbnQKLStBU0Y6OlRhZzo6eWVhcigpIGNvbnN0Ci0rewot KyAgaWYoZC0+YXR0cmlidXRlTGlzdE1hcC5jb250YWlucygiV00vWWVhciIpKQotKyAgICByZXR1 cm4gZC0+YXR0cmlidXRlTGlzdE1hcFsiV00vWWVhciJdWzBdLnRvU3RyaW5nKCkudG9JbnQoKTsK LSsgIHJldHVybiAwOwotK30KLSsKLSt1bnNpZ25lZCBpbnQKLStBU0Y6OlRhZzo6dHJhY2soKSBj b25zdAotK3sKLSsgIGlmKGQtPmF0dHJpYnV0ZUxpc3RNYXAuY29udGFpbnMoIldNL1RyYWNrTnVt YmVyIikpCi0rICAgIHJldHVybiBkLT5hdHRyaWJ1dGVMaXN0TWFwWyJXTS9UcmFja051bWJlciJd WzBdLnRvU3RyaW5nKCkudG9JbnQoKTsKLSsgIGlmKGQtPmF0dHJpYnV0ZUxpc3RNYXAuY29udGFp bnMoIldNL1RyYWNrIikpCi0rICAgIHJldHVybiBkLT5hdHRyaWJ1dGVMaXN0TWFwWyJXTS9UcmFj ayJdWzBdLnRvVUludCgpOwotKyAgcmV0dXJuIDA7Ci0rfQotKwotK1N0cmluZwotK0FTRjo6VGFn OjpnZW5yZSgpIGNvbnN0Ci0rewotKyAgaWYoZC0+YXR0cmlidXRlTGlzdE1hcC5jb250YWlucygi V00vR2VucmUiKSkKLSsgICAgcmV0dXJuIGQtPmF0dHJpYnV0ZUxpc3RNYXBbIldNL0dlbnJlIl1b MF0udG9TdHJpbmcoKTsKLSsgIHJldHVybiBTdHJpbmc6Om51bGw7Ci0rfQotKwotK3ZvaWQKLStB U0Y6OlRhZzo6c2V0VGl0bGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLSt7Ci0rICBkLT50aXRsZSA9 IHZhbHVlOwotK30KLSsKLSt2b2lkCi0rQVNGOjpUYWc6OnNldEFydGlzdChjb25zdCBTdHJpbmcg JnZhbHVlKQotK3sKLSsgIGQtPmFydGlzdCA9IHZhbHVlOwotK30KLSsKLSt2b2lkCi0rQVNGOjpU YWc6OnNldENvcHlyaWdodChjb25zdCBTdHJpbmcgJnZhbHVlKQotK3sKLSsgIGQtPmNvcHlyaWdo dCA9IHZhbHVlOwotK30KLSsKLSt2b2lkCi0rQVNGOjpUYWc6OnNldENvbW1lbnQoY29uc3QgU3Ry aW5nICZ2YWx1ZSkKLSt7Ci0rICBkLT5jb21tZW50ID0gdmFsdWU7Ci0rfQotKwotK3ZvaWQKLStB U0Y6OlRhZzo6c2V0UmF0aW5nKGNvbnN0IFN0cmluZyAmdmFsdWUpCi0rewotKyAgZC0+cmF0aW5n ID0gdmFsdWU7Ci0rfQotKwotK3ZvaWQKLStBU0Y6OlRhZzo6c2V0QWxidW0oY29uc3QgU3RyaW5n ICZ2YWx1ZSkKLSt7Ci0rICBzZXRBdHRyaWJ1dGUoIldNL0FsYnVtVGl0bGUiLCB2YWx1ZSk7Ci0r fQotKwotK3ZvaWQKLStBU0Y6OlRhZzo6c2V0R2VucmUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLSt7 Ci0rICBzZXRBdHRyaWJ1dGUoIldNL0dlbnJlIiwgdmFsdWUpOwotK30KLSsKLSt2b2lkCi0rQVNG OjpUYWc6OnNldFllYXIodWludCB2YWx1ZSkKLSt7Ci0rICBzZXRBdHRyaWJ1dGUoIldNL1llYXIi LCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwotK30KLSsKLSt2b2lkCi0rQVNGOjpUYWc6OnNldFRy YWNrKHVpbnQgdmFsdWUpCi0rewotKyAgc2V0QXR0cmlidXRlKCJXTS9UcmFja051bWJlciIsIFN0 cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci0rfQotKwotK0FTRjo6QXR0cmlidXRlTGlzdE1hcCYKLStB U0Y6OlRhZzo6YXR0cmlidXRlTGlzdE1hcCgpCi0rewotKyAgcmV0dXJuIGQtPmF0dHJpYnV0ZUxp c3RNYXA7Ci0rfQotKwotK3ZvaWQgQVNGOjpUYWc6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nICZr ZXkpCi0rewotKyAgQXR0cmlidXRlTGlzdE1hcDo6SXRlcmF0b3IgaXQgPSBkLT5hdHRyaWJ1dGVM aXN0TWFwLmZpbmQoa2V5KTsKLSsgIGlmKGl0ICE9IGQtPmF0dHJpYnV0ZUxpc3RNYXAuZW5kKCkp Ci0rICAgIGQtPmF0dHJpYnV0ZUxpc3RNYXAuZXJhc2UoaXQpOwotK30KLSsKLSt2b2lkIEFTRjo6 VGFnOjpzZXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nICZuYW1lLCBjb25zdCBBdHRyaWJ1dGUgJmF0 dHJpYnV0ZSkKLSt7Ci0rICBBdHRyaWJ1dGVMaXN0IHZhbHVlOwotKyAgdmFsdWUuYXBwZW5kKGF0 dHJpYnV0ZSk7Ci0rICBkLT5hdHRyaWJ1dGVMaXN0TWFwLmluc2VydChuYW1lLCB2YWx1ZSk7Ci0r fQotKwotK3ZvaWQgQVNGOjpUYWc6OmFkZEF0dHJpYnV0ZShjb25zdCBTdHJpbmcgJm5hbWUsIGNv bnN0IEF0dHJpYnV0ZSAmYXR0cmlidXRlKQotK3sKLSsgIGlmKGQtPmF0dHJpYnV0ZUxpc3RNYXAu Y29udGFpbnMobmFtZSkpIHsKLSsgICAgZC0+YXR0cmlidXRlTGlzdE1hcFtuYW1lXS5hcHBlbmQo YXR0cmlidXRlKTsKLSsgIH0KLSsgIGVsc2UgewotKyAgICBzZXRBdHRyaWJ1dGUobmFtZSwgYXR0 cmlidXRlKTsKLSsgIH0KLSt9Ci0rCi0rYm9vbCBBU0Y6OlRhZzo6aXNFbXB0eSgpIGNvbnN0IHsK LSsgIHJldHVybiBUYWdMaWI6OlRhZzo6aXNFbXB0eSgpICYmCi0rICAgICAgICAgY29weXJpZ2h0 KCkuaXNFbXB0eSgpICYmCi0rICAgICAgICAgcmF0aW5nKCkuaXNFbXB0eSgpICYmCi0rICAgICAg ICAgZC0+YXR0cmlidXRlTGlzdE1hcC5pc0VtcHR5KCk7Ci0rfQotSW5kZXg6IGFtYXJvay9zcmMv bWV0YWRhdGEvYXNmL2FzZnByb3BlcnRpZXMuY3BwCi09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYW1hcm9rL3Ny Yy9tZXRhZGF0YS9hc2YvYXNmcHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDApCi0rKysgYW1hcm9r L3NyYy9tZXRhZGF0YS9hc2YvYXNmcHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDc0MzAwNSkKLUBA IC0wLDAgKzEsOTUgQEAKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsgICAgY29weXJpZ2h0ICAgICAg ICAgICAgOiAoQykgMjAwNS0yMDA3IGJ5IEx1a8OhxaEgTGFsaW5za8O9Ci0rICAgIGVtYWlsICAg ICAgICAgICAgICAgIDogbGFsaW5za3lAZ21haWwuY29tCi0rICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKLSsgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0rICogICBpdCAg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAgKgotKyAqICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0r ICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0ICAgKgotKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoKLSsgKiAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V ICAgICAqCi0rICogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLiAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgICAgICAqCi0rICogICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgKgotKyAqICAgRm91bmRhdGlvbiwg SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcg ICoKLSsgKiAgIFVTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqCi0rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsjaW5j bHVkZSA8dHN0cmluZy5oPgotKyNpbmNsdWRlICJhc2Zwcm9wZXJ0aWVzLmgiCi0rCi0rdXNpbmcg bmFtZXNwYWNlIFRhZ0xpYjsKLSsKLStjbGFzcyBBU0Y6OlByb3BlcnRpZXM6OlByb3BlcnRpZXNQ cml2YXRlCi0rewotK3B1YmxpYzoKLSsgIFByb3BlcnRpZXNQcml2YXRlKCk6IGxlbmd0aCgwKSwg Yml0cmF0ZSgwKSwgc2FtcGxlUmF0ZSgwKSwgY2hhbm5lbHMoMCkge30KLSsgIGludCBsZW5ndGg7 Ci0rICBpbnQgYml0cmF0ZTsKLSsgIGludCBzYW1wbGVSYXRlOwotKyAgaW50IGNoYW5uZWxzOwot K307Ci0rCi0rLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSsvLyBwdWJsaWMgbWVtYmVycwotKy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0rCi0rQVNGOjpQcm9wZXJ0aWVzOjpQcm9wZXJ0aWVzKCkg OiBBdWRpb1Byb3BlcnRpZXMoQXVkaW9Qcm9wZXJ0aWVzOjpBdmVyYWdlKQotK3sKLSsgIGQgPSBu ZXcgUHJvcGVydGllc1ByaXZhdGU7Ci0rfQotKwotK0FTRjo6UHJvcGVydGllczo6flByb3BlcnRp ZXMoKQotK3sKLSsgIGlmKGQpCi0rICAgIGRlbGV0ZSBkOyAgCi0rfQotKwotK2ludCBBU0Y6OlBy b3BlcnRpZXM6Omxlbmd0aCgpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPmxlbmd0aDsKLSt9Ci0r Ci0raW50IEFTRjo6UHJvcGVydGllczo6Yml0cmF0ZSgpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQt PmJpdHJhdGU7Ci0rfQotKwotK2ludCBBU0Y6OlByb3BlcnRpZXM6OnNhbXBsZVJhdGUoKSBjb25z dAotK3sKLSsgIHJldHVybiBkLT5zYW1wbGVSYXRlOwotK30KLSsKLStpbnQgQVNGOjpQcm9wZXJ0 aWVzOjpjaGFubmVscygpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPmNoYW5uZWxzOwotK30gCi0r Ci0rLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSsvLyBwcml2YXRlIG1lbWJlcnMKLSsvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLwotKwotK3ZvaWQgQVNGOjpQcm9wZXJ0aWVzOjpzZXRMZW5ndGgoaW50 IGxlbmd0aCkKLSt7Ci0rICBkLT5sZW5ndGggPSBsZW5ndGg7Ci0rfQotKwotK3ZvaWQgQVNGOjpQ cm9wZXJ0aWVzOjpzZXRCaXRyYXRlKGludCBsZW5ndGgpCi0rewotKyAgZC0+Yml0cmF0ZSA9IGxl bmd0aDsKLSt9Ci0rCi0rdm9pZCBBU0Y6OlByb3BlcnRpZXM6OnNldFNhbXBsZVJhdGUoaW50IGxl bmd0aCkKLSt7Ci0rICBkLT5zYW1wbGVSYXRlID0gbGVuZ3RoOwotK30KLSsKLSt2b2lkIEFTRjo6 UHJvcGVydGllczo6c2V0Q2hhbm5lbHMoaW50IGxlbmd0aCkKLSt7Ci0rICBkLT5jaGFubmVscyA9 IGxlbmd0aDsKLSt9Ci0rCi0KLVByb3BlcnR5IGNoYW5nZXMgb246IGFtYXJvay9zcmMvbWV0YWRh dGEvYXNmL2FzZnByb3BlcnRpZXMuY3BwCi1fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi1OYW1lOiBzdm46ZW9sLXN0eWxl Ci0gICArIG5hdGl2ZQotCi1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS9hc2YvTWFrZWZpbGUu YW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9NYWtlZmlsZS5hbQko cmV2aXNpb24gMCkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9NYWtlZmlsZS5hbQkocmV2 aXNpb24gNzQzMDA1KQotQEAgLTAsMCArMSwyMCBAQAotK1NVQkRJUlMgPQotKwotK0lOQ0xVREVT ICAgICAgICAgICA9ICQoYWxsX2luY2x1ZGVzKSAkKHRhZ2xpYl9pbmNsdWRlcykKLStNRVRBU09V UkNFUyAgICAgICAgPSBBVVRPCi0rbGlidGFnYXNmX2xhX0xERkxBR1MgID0gJChhbGxfbGlicmFy aWVzKQotK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYnRhZ2FzZi5sYQotKwotK2xpYnRhZ2FzZl9s YV9TT1VSQ0VTID0gIFwKLSsgICAgICAgICAgICAgICAgICAgICBhc2ZhdHRyaWJ1dGUuY3BwIFwK LSsgICAgICAgICAgICAgICAgICAgICBhc2Zwcm9wZXJ0aWVzLmNwcCBcCi0rICAgICAgICAgICAg ICAgICAgICAgYXNmdGFnLmNwcCBcCi0rICAgICAgICAgICAgICAgICAgICAgYXNmZmlsZS5jcHAg XAotKyAgICAgICAgICAgICAgICAgICAgIHRhZ2xpYl9hc2ZmaWxldHlwZXJlc29sdmVyLmNwcAot KwotK25vaW5zdF9IRUFERVJTID0gXAotKyAgICAgICAgICAgICAgICAgICAgIGFzZmF0dHJpYnV0 ZS5oIFwKLSsgICAgICAgICAgICAgICAgICAgICBhc2Zwcm9wZXJ0aWVzLmggXAotKyAgICAgICAg ICAgICAgICAgICAgIGFzZnRhZy5oIFwKLSsgICAgICAgICAgICAgICAgICAgICBhc2ZmaWxlLmgg XAotKyAgICAgICAgICAgICAgICAgICAgIHRhZ2xpYl9hc2ZmaWxldHlwZXJlc29sdmVyLmgKLUlu ZGV4OiBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2ZmaWxlLmNwcAotPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0t IGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZmZpbGUuY3BwCShyZXZpc2lvbiAwKQotKysrIGFt YXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZmZpbGUuY3BwCShyZXZpc2lvbiA3NDMwMDUpCi1AQCAt MCwwICsxLDU0NyBAQAotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKyAgICBjb3B5cmlnaHQgICAgICAg ICAgICA6IChDKSAyMDA1LTIwMDcgYnkgTHVrw6HFoSBMYWxpbnNrw70KLSsgICAgZW1haWwgICAg ICAgICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5jb20KLSsgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgotKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSsgKiAgIGl0ICB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uICAqCi0rICogICAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsg KiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLCBidXQgICAqCi0rICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAgKgotKyAqICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUg ICAgICoKLSsgKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYyAgICAgICoKLSsgKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAqCi0rICogICBGb3VuZGF0aW9uLCBJ bmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAg KgotKyAqICAgVVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICoKLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKyNpbmNs dWRlIDx0Ynl0ZXZlY3Rvcmxpc3QuaD4KLSsjaW5jbHVkZSA8dHN0cmluZy5oPgotKyNpbmNsdWRl ICJhc2ZmaWxlLmgiCi0rI2luY2x1ZGUgImFzZnRhZy5oIgotKyNpbmNsdWRlICJhc2Zwcm9wZXJ0 aWVzLmgiCi0rCi0rdXNpbmcgbmFtZXNwYWNlIFRhZ0xpYjsKLSsKLStjbGFzcyBBU0Y6OkZpbGU6 OkZpbGVQcml2YXRlCi0rewotK3B1YmxpYzoKLSsgIEZpbGVQcml2YXRlKCk6Ci0rICAgIHNpemUo MCksCi0rICAgIHRhZygwKSwKLSsgICAgcHJvcGVydGllcygwKSwKLSsgICAgY29udGVudERlc2Ny aXB0aW9uT2JqZWN0KDApLAotKyAgICBleHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbk9iamVjdCgw KSwKLSsgICAgaGVhZGVyRXh0ZW5zaW9uT2JqZWN0KDApLAotKyAgICBtZXRhZGF0YU9iamVjdCgw KSwKLSsgICAgbWV0YWRhdGFMaWJyYXJ5T2JqZWN0KDApIHt9Ci0rICB1bnNpZ25lZCBsb25nIGxv bmcgc2l6ZTsKLSsgIEFTRjo6VGFnICp0YWc7Ci0rICBBU0Y6OlByb3BlcnRpZXMgKnByb3BlcnRp ZXM7Ci0rICBMaXN0PEFTRjo6RmlsZTo6QmFzZU9iamVjdCAqPiBvYmplY3RzOwotKyAgQVNGOjpG aWxlOjpDb250ZW50RGVzY3JpcHRpb25PYmplY3QgKmNvbnRlbnREZXNjcmlwdGlvbk9iamVjdDsK LSsgIEFTRjo6RmlsZTo6RXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25PYmplY3QgKmV4dGVuZGVk Q29udGVudERlc2NyaXB0aW9uT2JqZWN0OwotKyAgQVNGOjpGaWxlOjpIZWFkZXJFeHRlbnNpb25P YmplY3QgKmhlYWRlckV4dGVuc2lvbk9iamVjdDsKLSsgIEFTRjo6RmlsZTo6TWV0YWRhdGFPYmpl Y3QgKm1ldGFkYXRhT2JqZWN0OwotKyAgQVNGOjpGaWxlOjpNZXRhZGF0YUxpYnJhcnlPYmplY3Qg Km1ldGFkYXRhTGlicmFyeU9iamVjdDsKLSt9OwotKwotK3N0YXRpYyBCeXRlVmVjdG9yIGhlYWRl ckd1aWQoIlx4MzBceDI2XHhCMlx4NzVceDhFXHg2Nlx4Q0ZceDExXHhBNlx4RDlceDAwXHhBQVx4 MDBceDYyXHhDRVx4NkMiLCAxNik7Ci0rc3RhdGljIEJ5dGVWZWN0b3IgZmlsZVByb3BlcnRpZXNH dWlkKCJceEExXHhEQ1x4QUJceDhDXHg0N1x4QTlceENGXHgxMVx4OEVceEU0XHgwMFx4QzBceDBD XHgyMFx4NTNceDY1IiwgMTYpOwotK3N0YXRpYyBCeXRlVmVjdG9yIHN0cmVhbVByb3BlcnRpZXNH dWlkKCJceDkxXHgwN1x4RENceEI3XHhCN1x4QTlceENGXHgxMVx4OEVceEU2XHgwMFx4QzBceDBD XHgyMFx4NTNceDY1IiwgMTYpOwotK3N0YXRpYyBCeXRlVmVjdG9yIGNvbnRlbnREZXNjcmlwdGlv bkd1aWQoIlx4MzNceDI2XHhCMlx4NzVceDhFXHg2Nlx4Q0ZceDExXHhBNlx4RDlceDAwXHhBQVx4 MDBceDYyXHhDRVx4NkMiLCAxNik7Ci0rc3RhdGljIEJ5dGVWZWN0b3IgZXh0ZW5kZWRDb250ZW50 RGVzY3JpcHRpb25HdWlkKCJceDQwXHhBNFx4RDBceEQyXHgwN1x4RTNceEQyXHgxMVx4OTdceEYw XHgwMFx4QTBceEM5XHg1RVx4QThceDUwIiwgMTYpOwotK3N0YXRpYyBCeXRlVmVjdG9yIGhlYWRl ckV4dGVuc2lvbkd1aWQoIlx4YjVceDAzXHhiZl8uXHhhOVx4Y2ZceDExXHg4ZVx4ZTNceDAwXHhj MFx4MGMgU2UiLCAxNik7Ci0rc3RhdGljIEJ5dGVWZWN0b3IgbWV0YWRhdGFHdWlkKCJceEVBXHhD Qlx4RjhceEM1XHhBRlt3SFwyMDRnXHhBQVwyMTREXHhGQUxceENBIiwgMTYpOwotK3N0YXRpYyBC eXRlVmVjdG9yIG1ldGFkYXRhTGlicmFyeUd1aWQoIlwyMjRcMDM0I0RcMjMwXDIyNFwzMjFJXDI0 MUFceDFkXHgxM05FcFQiLCAxNik7Ci0rCi0rY2xhc3MgQVNGOjpGaWxlOjpCYXNlT2JqZWN0Ci0r ewotK3B1YmxpYzoKLSsgIEJ5dGVWZWN0b3IgZGF0YTsKLSsgIHZpcnR1YWwgfkJhc2VPYmplY3Qo KSB7fQotKyAgdmlydHVhbCBCeXRlVmVjdG9yIGd1aWQoKSA9IDA7Ci0rICB2aXJ0dWFsIHZvaWQg cGFyc2UoQVNGOjpGaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0rICB2aXJ0dWFsIEJ5 dGVWZWN0b3IgcmVuZGVyKEFTRjo6RmlsZSAqZmlsZSk7Ci0rfTsKLSsKLStjbGFzcyBBU0Y6OkZp bGU6OlVua25vd25PYmplY3QgOiBwdWJsaWMgQVNGOjpGaWxlOjpCYXNlT2JqZWN0Ci0rewotKyAg Qnl0ZVZlY3RvciBteUd1aWQ7Ci0rcHVibGljOgotKyAgVW5rbm93bk9iamVjdChjb25zdCBCeXRl VmVjdG9yICZndWlkKTsKLSsgIEJ5dGVWZWN0b3IgZ3VpZCgpOwotK307Ci0rCi0rY2xhc3MgQVNG OjpGaWxlOjpGaWxlUHJvcGVydGllc09iamVjdCA6IHB1YmxpYyBBU0Y6OkZpbGU6OkJhc2VPYmpl Y3QKLSt7Ci0rcHVibGljOgotKyAgQnl0ZVZlY3RvciBndWlkKCk7Ci0rICB2b2lkIHBhcnNlKEFT Rjo6RmlsZSAqZmlsZSwgdWludCBzaXplKTsKLSt9OwotKwotK2NsYXNzIEFTRjo6RmlsZTo6U3Ry ZWFtUHJvcGVydGllc09iamVjdCA6IHB1YmxpYyBBU0Y6OkZpbGU6OkJhc2VPYmplY3QKLSt7Ci0r cHVibGljOgotKyAgQnl0ZVZlY3RvciBndWlkKCk7Ci0rICB2b2lkIHBhcnNlKEFTRjo6RmlsZSAq ZmlsZSwgdWludCBzaXplKTsKLSt9OwotKwotK2NsYXNzIEFTRjo6RmlsZTo6Q29udGVudERlc2Ny aXB0aW9uT2JqZWN0IDogcHVibGljIEFTRjo6RmlsZTo6QmFzZU9iamVjdAotK3sKLStwdWJsaWM6 Ci0rICBCeXRlVmVjdG9yIGd1aWQoKTsKLSsgIHZvaWQgcGFyc2UoQVNGOjpGaWxlICpmaWxlLCB1 aW50IHNpemUpOwotKyAgQnl0ZVZlY3RvciByZW5kZXIoQVNGOjpGaWxlICpmaWxlKTsKLSt9Owot KwotK2NsYXNzIEFTRjo6RmlsZTo6RXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25PYmplY3QgOiBw dWJsaWMgQVNGOjpGaWxlOjpCYXNlT2JqZWN0Ci0rewotK3B1YmxpYzoKLSsgIEJ5dGVWZWN0b3JM aXN0IGF0dHJpYnV0ZURhdGE7Ci0rICBCeXRlVmVjdG9yIGd1aWQoKTsKLSsgIHZvaWQgcGFyc2Uo QVNGOjpGaWxlICpmaWxlLCB1aW50IHNpemUpOwotKyAgQnl0ZVZlY3RvciByZW5kZXIoQVNGOjpG aWxlICpmaWxlKTsKLSt9OwotKwotK2NsYXNzIEFTRjo6RmlsZTo6TWV0YWRhdGFPYmplY3QgOiBw dWJsaWMgQVNGOjpGaWxlOjpCYXNlT2JqZWN0Ci0rewotK3B1YmxpYzoKLSsgIEJ5dGVWZWN0b3JM aXN0IGF0dHJpYnV0ZURhdGE7Ci0rICBCeXRlVmVjdG9yIGd1aWQoKTsKLSsgIHZvaWQgcGFyc2Uo QVNGOjpGaWxlICpmaWxlLCB1aW50IHNpemUpOwotKyAgQnl0ZVZlY3RvciByZW5kZXIoQVNGOjpG aWxlICpmaWxlKTsKLSt9OwotKwotK2NsYXNzIEFTRjo6RmlsZTo6TWV0YWRhdGFMaWJyYXJ5T2Jq ZWN0IDogcHVibGljIEFTRjo6RmlsZTo6QmFzZU9iamVjdAotK3sKLStwdWJsaWM6Ci0rICBCeXRl VmVjdG9yTGlzdCBhdHRyaWJ1dGVEYXRhOwotKyAgQnl0ZVZlY3RvciBndWlkKCk7Ci0rICB2b2lk IHBhcnNlKEFTRjo6RmlsZSAqZmlsZSwgdWludCBzaXplKTsKLSsgIEJ5dGVWZWN0b3IgcmVuZGVy KEFTRjo6RmlsZSAqZmlsZSk7Ci0rfTsKLSsKLStjbGFzcyBBU0Y6OkZpbGU6OkhlYWRlckV4dGVu c2lvbk9iamVjdCA6IHB1YmxpYyBBU0Y6OkZpbGU6OkJhc2VPYmplY3QKLSt7Ci0rcHVibGljOgot KyAgTGlzdDxBU0Y6OkZpbGU6OkJhc2VPYmplY3QgKj4gb2JqZWN0czsKLSsgIEJ5dGVWZWN0b3Ig Z3VpZCgpOwotKyAgdm9pZCBwYXJzZShBU0Y6OkZpbGUgKmZpbGUsIHVpbnQgc2l6ZSk7Ci0rICBC eXRlVmVjdG9yIHJlbmRlcihBU0Y6OkZpbGUgKmZpbGUpOwotK307Ci0rCi0rdm9pZAotK0FTRjo6 RmlsZTo6QmFzZU9iamVjdDo6cGFyc2UoQVNGOjpGaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2l6 ZSkKLSt7Ci0rICBkYXRhID0gZmlsZS0+cmVhZEJsb2NrKHNpemUgLSAyNCk7Ci0rfQotKwotK0J5 dGVWZWN0b3IKLStBU0Y6OkZpbGU6OkJhc2VPYmplY3Q6OnJlbmRlcihBU0Y6OkZpbGUgKiAvKmZp bGUqLykKLSt7Ci0rICByZXR1cm4gZ3VpZCgpICsgQnl0ZVZlY3Rvcjo6ZnJvbUxvbmdMb25nKGRh dGEuc2l6ZSgpICsgMjQsIGZhbHNlKSArIGRhdGE7Ci0rfQotKwotK0FTRjo6RmlsZTo6VW5rbm93 bk9iamVjdDo6VW5rbm93bk9iamVjdChjb25zdCBCeXRlVmVjdG9yICZndWlkKSA6IG15R3VpZChn dWlkKQotK3sKLSt9Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6RmlsZTo6VW5rbm93bk9iamVjdDo6 Z3VpZCgpCi0rewotKyAgcmV0dXJuIG15R3VpZDsKLSt9Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6 RmlsZTo6RmlsZVByb3BlcnRpZXNPYmplY3Q6Omd1aWQoKQotK3sKLSsgIHJldHVybiBmaWxlUHJv cGVydGllc0d1aWQ7Ci0rfQotKwotK3ZvaWQKLStBU0Y6OkZpbGU6OkZpbGVQcm9wZXJ0aWVzT2Jq ZWN0OjpwYXJzZShBU0Y6OkZpbGUgKmZpbGUsIHVpbnQgc2l6ZSkKLSt7Ci0rICBCYXNlT2JqZWN0 OjpwYXJzZShmaWxlLCBzaXplKTsKLSsgIGZpbGUtPmQtPnByb3BlcnRpZXMtPnNldExlbmd0aCgo aW50KShkYXRhLm1pZCg0MCwgOCkudG9Mb25nTG9uZyhmYWxzZSkgLyAxMDAwMDAwMEwgLSBkYXRh Lm1pZCg1NiwgOCkudG9Mb25nTG9uZyhmYWxzZSkgLyAxMDAwTCkpOwotK30KLSsKLStCeXRlVmVj dG9yCi0rQVNGOjpGaWxlOjpTdHJlYW1Qcm9wZXJ0aWVzT2JqZWN0OjpndWlkKCkKLSt7Ci0rICBy ZXR1cm4gc3RyZWFtUHJvcGVydGllc0d1aWQ7Ci0rfQotKwotK3ZvaWQKLStBU0Y6OkZpbGU6OlN0 cmVhbVByb3BlcnRpZXNPYmplY3Q6OnBhcnNlKEFTRjo6RmlsZSAqZmlsZSwgdWludCBzaXplKQot K3sKLSsgIEJhc2VPYmplY3Q6OnBhcnNlKGZpbGUsIHNpemUpOwotKyAgZmlsZS0+ZC0+cHJvcGVy dGllcy0+c2V0Q2hhbm5lbHMoZGF0YS5taWQoNTYsIDIpLnRvU2hvcnQoZmFsc2UpKTsKLSsgIGZp bGUtPmQtPnByb3BlcnRpZXMtPnNldFNhbXBsZVJhdGUoZGF0YS5taWQoNTgsIDQpLnRvVUludChm YWxzZSkpOwotKyAgZmlsZS0+ZC0+cHJvcGVydGllcy0+c2V0Qml0cmF0ZShkYXRhLm1pZCg2Miwg NCkudG9VSW50KGZhbHNlKSAqIDggLyAxMDAwKTsKLSt9Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6 RmlsZTo6Q29udGVudERlc2NyaXB0aW9uT2JqZWN0OjpndWlkKCkKLSt7Ci0rICByZXR1cm4gY29u dGVudERlc2NyaXB0aW9uR3VpZDsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6RmlsZTo6Q29udGVudERl c2NyaXB0aW9uT2JqZWN0OjpwYXJzZShBU0Y6OkZpbGUgKmZpbGUsIHVpbnQgLypzaXplKi8pCi0r ewotKyAgZmlsZS0+ZC0+Y29udGVudERlc2NyaXB0aW9uT2JqZWN0ID0gdGhpczsKLSsgIGludCB0 aXRsZUxlbmd0aCA9IGZpbGUtPnJlYWRXT1JEKCk7Ci0rICBpbnQgYXJ0aXN0TGVuZ3RoID0gZmls ZS0+cmVhZFdPUkQoKTsKLSsgIGludCBjb3B5cmlnaHRMZW5ndGggPSBmaWxlLT5yZWFkV09SRCgp OwotKyAgaW50IGNvbW1lbnRMZW5ndGggPSBmaWxlLT5yZWFkV09SRCgpOwotKyAgaW50IHJhdGlu Z0xlbmd0aCA9IGZpbGUtPnJlYWRXT1JEKCk7Ci0rICBmaWxlLT5kLT50YWctPnNldFRpdGxlKGZp bGUtPnJlYWRTdHJpbmcodGl0bGVMZW5ndGgpKTsKLSsgIGZpbGUtPmQtPnRhZy0+c2V0QXJ0aXN0 KGZpbGUtPnJlYWRTdHJpbmcoYXJ0aXN0TGVuZ3RoKSk7Ci0rICBmaWxlLT5kLT50YWctPnNldENv cHlyaWdodChmaWxlLT5yZWFkU3RyaW5nKGNvcHlyaWdodExlbmd0aCkpOwotKyAgZmlsZS0+ZC0+ dGFnLT5zZXRDb21tZW50KGZpbGUtPnJlYWRTdHJpbmcoY29tbWVudExlbmd0aCkpOwotKyAgZmls ZS0+ZC0+dGFnLT5zZXRSYXRpbmcoZmlsZS0+cmVhZFN0cmluZyhyYXRpbmdMZW5ndGgpKTsKLSt9 Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6RmlsZTo6Q29udGVudERlc2NyaXB0aW9uT2JqZWN0Ojpy ZW5kZXIoQVNGOjpGaWxlICpmaWxlKQotK3sKLSsgIEJ5dGVWZWN0b3IgdjEgPSBmaWxlLT5yZW5k ZXJTdHJpbmcoZmlsZS0+ZC0+dGFnLT50aXRsZSgpKTsKLSsgIEJ5dGVWZWN0b3IgdjIgPSBmaWxl LT5yZW5kZXJTdHJpbmcoZmlsZS0+ZC0+dGFnLT5hcnRpc3QoKSk7Ci0rICBCeXRlVmVjdG9yIHYz ID0gZmlsZS0+cmVuZGVyU3RyaW5nKGZpbGUtPmQtPnRhZy0+Y29weXJpZ2h0KCkpOwotKyAgQnl0 ZVZlY3RvciB2NCA9IGZpbGUtPnJlbmRlclN0cmluZyhmaWxlLT5kLT50YWctPmNvbW1lbnQoKSk7 Ci0rICBCeXRlVmVjdG9yIHY1ID0gZmlsZS0+cmVuZGVyU3RyaW5nKGZpbGUtPmQtPnRhZy0+cmF0 aW5nKCkpOwotKyAgZGF0YS5jbGVhcigpOwotKyAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rvcjo6ZnJv bVNob3J0KHYxLnNpemUoKSwgZmFsc2UpKTsKLSsgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZy b21TaG9ydCh2Mi5zaXplKCksIGZhbHNlKSk7Ci0rICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpm cm9tU2hvcnQodjMuc2l6ZSgpLCBmYWxzZSkpOwotKyAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rvcjo6 ZnJvbVNob3J0KHY0LnNpemUoKSwgZmFsc2UpKTsKLSsgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6 OmZyb21TaG9ydCh2NS5zaXplKCksIGZhbHNlKSk7Ci0rICBkYXRhLmFwcGVuZCh2MSk7Ci0rICBk YXRhLmFwcGVuZCh2Mik7Ci0rICBkYXRhLmFwcGVuZCh2Myk7Ci0rICBkYXRhLmFwcGVuZCh2NCk7 Ci0rICBkYXRhLmFwcGVuZCh2NSk7Ci0rICByZXR1cm4gQmFzZU9iamVjdDo6cmVuZGVyKGZpbGUp OwotK30KLSsKLStCeXRlVmVjdG9yCi0rQVNGOjpGaWxlOjpFeHRlbmRlZENvbnRlbnREZXNjcmlw dGlvbk9iamVjdDo6Z3VpZCgpCi0rewotKyAgcmV0dXJuIGV4dGVuZGVkQ29udGVudERlc2NyaXB0 aW9uR3VpZDsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6RmlsZTo6RXh0ZW5kZWRDb250ZW50RGVzY3Jp cHRpb25PYmplY3Q6OnBhcnNlKEFTRjo6RmlsZSAqZmlsZSwgdWludCAvKnNpemUqLykKLSt7Ci0r ICBmaWxlLT5kLT5leHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbk9iamVjdCA9IHRoaXM7Ci0rICBp bnQgY291bnQgPSBmaWxlLT5yZWFkV09SRCgpOwotKyAgd2hpbGUoY291bnQtLSkgewotKyAgICBB U0Y6OkF0dHJpYnV0ZSBhdHRyaWJ1dGU7Ci0rICAgIFN0cmluZyBuYW1lID0gYXR0cmlidXRlLnBh cnNlKCpmaWxlKTsKLSsgICAgZmlsZS0+ZC0+dGFnLT5hZGRBdHRyaWJ1dGUobmFtZSwgYXR0cmli dXRlKTsKLSsgIH0KLSt9Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6RmlsZTo6RXh0ZW5kZWRDb250 ZW50RGVzY3JpcHRpb25PYmplY3Q6OnJlbmRlcihBU0Y6OkZpbGUgKmZpbGUpCi0rewotKyAgZGF0 YS5jbGVhcigpOwotKyAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rvcjo6ZnJvbVNob3J0KGF0dHJpYnV0 ZURhdGEuc2l6ZSgpLCBmYWxzZSkpOwotKyAgZGF0YS5hcHBlbmQoYXR0cmlidXRlRGF0YS50b0J5 dGVWZWN0b3IoQnl0ZVZlY3Rvcjo6bnVsbCkpOwotKyAgcmV0dXJuIEJhc2VPYmplY3Q6OnJlbmRl cihmaWxlKTsKLSt9Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6RmlsZTo6TWV0YWRhdGFPYmplY3Q6 Omd1aWQoKQotK3sKLSsgIHJldHVybiBtZXRhZGF0YUd1aWQ7Ci0rfQotKwotK3ZvaWQKLStBU0Y6 OkZpbGU6Ok1ldGFkYXRhT2JqZWN0OjpwYXJzZShBU0Y6OkZpbGUgKmZpbGUsIHVpbnQgLypzaXpl Ki8pCi0rewotKyAgZmlsZS0+ZC0+bWV0YWRhdGFPYmplY3QgPSB0aGlzOwotKyAgaW50IGNvdW50 ID0gZmlsZS0+cmVhZFdPUkQoKTsKLSsgIHdoaWxlKGNvdW50LS0pIHsKLSsgICAgQVNGOjpBdHRy aWJ1dGUgYXR0cmlidXRlOwotKyAgICBTdHJpbmcgbmFtZSA9IGF0dHJpYnV0ZS5wYXJzZSgqZmls ZSwgMSk7Ci0rICAgIGZpbGUtPmQtPnRhZy0+YWRkQXR0cmlidXRlKG5hbWUsIGF0dHJpYnV0ZSk7 Ci0rICB9Ci0rfQotKwotK0J5dGVWZWN0b3IKLStBU0Y6OkZpbGU6Ok1ldGFkYXRhT2JqZWN0Ojpy ZW5kZXIoQVNGOjpGaWxlICpmaWxlKQotK3sKLSsgIGRhdGEuY2xlYXIoKTsKLSsgIGRhdGEuYXBw ZW5kKEJ5dGVWZWN0b3I6OmZyb21TaG9ydChhdHRyaWJ1dGVEYXRhLnNpemUoKSwgZmFsc2UpKTsK LSsgIGRhdGEuYXBwZW5kKGF0dHJpYnV0ZURhdGEudG9CeXRlVmVjdG9yKEJ5dGVWZWN0b3I6Om51 bGwpKTsKLSsgIHJldHVybiBCYXNlT2JqZWN0OjpyZW5kZXIoZmlsZSk7Ci0rfQotKwotK0J5dGVW ZWN0b3IKLStBU0Y6OkZpbGU6Ok1ldGFkYXRhTGlicmFyeU9iamVjdDo6Z3VpZCgpCi0rewotKyAg cmV0dXJuIG1ldGFkYXRhTGlicmFyeUd1aWQ7Ci0rfQotKwotK3ZvaWQKLStBU0Y6OkZpbGU6Ok1l dGFkYXRhTGlicmFyeU9iamVjdDo6cGFyc2UoQVNGOjpGaWxlICpmaWxlLCB1aW50IC8qc2l6ZSov KQotK3sKLSsgIGZpbGUtPmQtPm1ldGFkYXRhTGlicmFyeU9iamVjdCA9IHRoaXM7Ci0rICBpbnQg Y291bnQgPSBmaWxlLT5yZWFkV09SRCgpOwotKyAgd2hpbGUoY291bnQtLSkgewotKyAgICBBU0Y6 OkF0dHJpYnV0ZSBhdHRyaWJ1dGU7Ci0rICAgIFN0cmluZyBuYW1lID0gYXR0cmlidXRlLnBhcnNl KCpmaWxlLCAyKTsKLSsgICAgZmlsZS0+ZC0+dGFnLT5hZGRBdHRyaWJ1dGUobmFtZSwgYXR0cmli dXRlKTsKLSsgIH0KLSt9Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6RmlsZTo6TWV0YWRhdGFMaWJy YXJ5T2JqZWN0OjpyZW5kZXIoQVNGOjpGaWxlICpmaWxlKQotK3sKLSsgIGRhdGEuY2xlYXIoKTsK LSsgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZyb21TaG9ydChhdHRyaWJ1dGVEYXRhLnNpemUo KSwgZmFsc2UpKTsKLSsgIGRhdGEuYXBwZW5kKGF0dHJpYnV0ZURhdGEudG9CeXRlVmVjdG9yKEJ5 dGVWZWN0b3I6Om51bGwpKTsKLSsgIHJldHVybiBCYXNlT2JqZWN0OjpyZW5kZXIoZmlsZSk7Ci0r fQotKwotK0J5dGVWZWN0b3IKLStBU0Y6OkZpbGU6OkhlYWRlckV4dGVuc2lvbk9iamVjdDo6Z3Vp ZCgpCi0rewotKyAgcmV0dXJuIGhlYWRlckV4dGVuc2lvbkd1aWQ7Ci0rfQotKwotK3ZvaWQKLStB U0Y6OkZpbGU6OkhlYWRlckV4dGVuc2lvbk9iamVjdDo6cGFyc2UoQVNGOjpGaWxlICpmaWxlLCB1 aW50IC8qc2l6ZSovKQotK3sKLSsgIGZpbGUtPmQtPmhlYWRlckV4dGVuc2lvbk9iamVjdCA9IHRo aXM7Ci0rICBmaWxlLT5zZWVrKDE4LCBGaWxlOjpDdXJyZW50KTsKLSsgIGxvbmcgbG9uZyBkYXRh U2l6ZSA9IGZpbGUtPnJlYWREV09SRCgpOwotKyAgbG9uZyBsb25nIGRhdGFQb3MgPSAwOwotKyAg d2hpbGUoZGF0YVBvcyA8IGRhdGFTaXplKSB7Ci0rICAgIEJ5dGVWZWN0b3IgZ3VpZCA9IGZpbGUt PnJlYWRCbG9jaygxNik7Ci0rICAgIGxvbmcgbG9uZyBzaXplID0gZmlsZS0+cmVhZFFXT1JEKCk7 Ci0rICAgIEJhc2VPYmplY3QgKm9iajsKLSsgICAgaWYoZ3VpZCA9PSBtZXRhZGF0YUd1aWQpIHsK LSsgICAgICBvYmogPSBuZXcgTWV0YWRhdGFPYmplY3QoKTsKLSsgICAgfQotKyAgICBlbHNlIGlm KGd1aWQgPT0gbWV0YWRhdGFMaWJyYXJ5R3VpZCkgewotKyAgICAgIG9iaiA9IG5ldyBNZXRhZGF0 YUxpYnJhcnlPYmplY3QoKTsKLSsgICAgfQotKyAgICBlbHNlIHsKLSsgICAgICBvYmogPSBuZXcg VW5rbm93bk9iamVjdChndWlkKTsKLSsgICAgfQotKyAgICBvYmotPnBhcnNlKGZpbGUsIHNpemUp OwotKyAgICBvYmplY3RzLmFwcGVuZChvYmopOwotKyAgICBkYXRhUG9zICs9IHNpemU7Ci0rICB9 Ci0rfQotKwotK0J5dGVWZWN0b3IKLStBU0Y6OkZpbGU6OkhlYWRlckV4dGVuc2lvbk9iamVjdDo6 cmVuZGVyKEFTRjo6RmlsZSAqZmlsZSkKLSt7Ci0rICBkYXRhLmNsZWFyKCk7Ci0rICBmb3IodW5z aWduZWQgaW50IGkgPSAwOyBpIDwgb2JqZWN0cy5zaXplKCk7IGkrKykgewotKyAgICBkYXRhLmFw cGVuZChvYmplY3RzW2ldLT5yZW5kZXIoZmlsZSkpOwotKyAgfQotKyAgZGF0YSA9IEJ5dGVWZWN0 b3IoIlx4MTFceEQyXHhEM1x4QUJceEJBXHhBOVx4Y2ZceDExXHg4RVx4RTZceDAwXHhDMFx4MENc eDIwXHg1M1x4NjVceDA2XHgwMCIsIDE4KSArIEJ5dGVWZWN0b3I6OmZyb21VSW50KGRhdGEuc2l6 ZSgpLCBmYWxzZSkgKyBkYXRhOwotKyAgcmV0dXJuIEJhc2VPYmplY3Q6OnJlbmRlcihmaWxlKTsK LSt9Ci0rCi0rLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSsvLyBwdWJsaWMgbWVtYmVycwotKy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0rCi0rQVNGOjpGaWxlOjpGaWxlKGNvbnN0IGNoYXIgKmZp bGUsIGJvb2wgcmVhZFByb3BlcnRpZXMsIFByb3BlcnRpZXM6OlJlYWRTdHlsZSBwcm9wZXJ0aWVz U3R5bGUpIAotKyAgOiBUYWdMaWI6OkZpbGUoZmlsZSkKLSt7Ci0rICBkID0gbmV3IEZpbGVQcml2 YXRlOwotKyAgcmVhZChyZWFkUHJvcGVydGllcywgcHJvcGVydGllc1N0eWxlKTsKLSt9Ci0rCi0r QVNGOjpGaWxlOjp+RmlsZSgpCi0rewotKyAgZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGQt Pm9iamVjdHMuc2l6ZSgpOyBpKyspIHsKLSsgICAgZGVsZXRlIGQtPm9iamVjdHNbaV07Ci0rICB9 Ci0rICBpZihkLT50YWcpIHsKLSsgICAgZGVsZXRlIGQtPnRhZzsKLSsgIH0KLSsgIGlmKGQtPnBy b3BlcnRpZXMpIHsKLSsgICAgZGVsZXRlIGQtPnByb3BlcnRpZXM7Ci0rICB9Ci0rICBkZWxldGUg ZDsKLSt9Ci0rCi0rQVNGOjpUYWcgKkFTRjo6RmlsZTo6dGFnKCkgY29uc3QKLSt7Ci0rICByZXR1 cm4gZC0+dGFnOwotK30KLSsKLStBU0Y6OlByb3BlcnRpZXMgKkFTRjo6RmlsZTo6YXVkaW9Qcm9w ZXJ0aWVzKCkgY29uc3QKLSt7Ci0rICByZXR1cm4gZC0+cHJvcGVydGllczsKLSt9Ci0rCi0rdm9p ZCBBU0Y6OkZpbGU6OnJlYWQoYm9vbCAvKnJlYWRQcm9wZXJ0aWVzKi8sIFByb3BlcnRpZXM6OlJl YWRTdHlsZSAvKnByb3BlcnRpZXNTdHlsZSovKQotK3sKLSsgIGlmKCFpc1ZhbGlkKCkpCi0rICAg IHJldHVybjsKLSsKLSsgIEJ5dGVWZWN0b3IgZ3VpZCA9IHJlYWRCbG9jaygxNik7Ci0rICBpZihn dWlkICE9IGhlYWRlckd1aWQpIHsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgZC0+dGFnID0g bmV3IEFTRjo6VGFnKCk7Ci0rICBkLT5wcm9wZXJ0aWVzID0gbmV3IEFTRjo6UHJvcGVydGllcygp OwotKwotKyAgZC0+c2l6ZSA9IHJlYWRRV09SRCgpOwotKyAgaW50IG51bU9iamVjdHMgPSByZWFk RFdPUkQoKTsKLSsgIHNlZWsoMiwgQ3VycmVudCk7Ci0rCi0rICBmb3IoaW50IGkgPSAwOyBpIDwg bnVtT2JqZWN0czsgaSsrKSB7Ci0rICAgIEJ5dGVWZWN0b3IgZ3VpZCA9IHJlYWRCbG9jaygxNik7 Ci0rICAgIGxvbmcgc2l6ZSA9IChsb25nKXJlYWRRV09SRCgpOwotKyAgICBCYXNlT2JqZWN0ICpv Ymo7Ci0rICAgIGlmKGd1aWQgPT0gZmlsZVByb3BlcnRpZXNHdWlkKSB7Ci0rICAgICAgb2JqID0g bmV3IEZpbGVQcm9wZXJ0aWVzT2JqZWN0KCk7Ci0rICAgIH0KLSsgICAgZWxzZSBpZihndWlkID09 IHN0cmVhbVByb3BlcnRpZXNHdWlkKSB7Ci0rICAgICAgb2JqID0gbmV3IFN0cmVhbVByb3BlcnRp ZXNPYmplY3QoKTsKLSsgICAgfQotKyAgICBlbHNlIGlmKGd1aWQgPT0gY29udGVudERlc2NyaXB0 aW9uR3VpZCkgewotKyAgICAgIG9iaiA9IG5ldyBDb250ZW50RGVzY3JpcHRpb25PYmplY3QoKTsK LSsgICAgfQotKyAgICBlbHNlIGlmKGd1aWQgPT0gZXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25H dWlkKSB7Ci0rICAgICAgb2JqID0gbmV3IEV4dGVuZGVkQ29udGVudERlc2NyaXB0aW9uT2JqZWN0 KCk7Ci0rICAgIH0KLSsgICAgZWxzZSBpZihndWlkID09IGhlYWRlckV4dGVuc2lvbkd1aWQpIHsK LSsgICAgICBvYmogPSBuZXcgSGVhZGVyRXh0ZW5zaW9uT2JqZWN0KCk7Ci0rICAgIH0KLSsgICAg ZWxzZSB7Ci0rICAgICAgb2JqID0gbmV3IFVua25vd25PYmplY3QoZ3VpZCk7Ci0rICAgIH0KLSsg ICAgb2JqLT5wYXJzZSh0aGlzLCBzaXplKTsKLSsgICAgZC0+b2JqZWN0cy5hcHBlbmQob2JqKTsK LSsgIH0KLSt9Ci0rCi0rYm9vbCBBU0Y6OkZpbGU6OnNhdmUoKQotK3sKLSsgIGlmKHJlYWRPbmx5 KCkpIHsKLSsgICAgcmV0dXJuIGZhbHNlOwotKyAgfQotKwotKyAgaWYoIWQtPmNvbnRlbnREZXNj cmlwdGlvbk9iamVjdCkgewotKyAgICBkLT5jb250ZW50RGVzY3JpcHRpb25PYmplY3QgPSBuZXcg Q29udGVudERlc2NyaXB0aW9uT2JqZWN0KCk7Ci0rICAgIGQtPm9iamVjdHMuYXBwZW5kKGQtPmNv bnRlbnREZXNjcmlwdGlvbk9iamVjdCk7Ci0rICB9Ci0rICBpZighZC0+ZXh0ZW5kZWRDb250ZW50 RGVzY3JpcHRpb25PYmplY3QpIHsKLSsgICAgZC0+ZXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25P YmplY3QgPSBuZXcgRXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25PYmplY3QoKTsKLSsgICAgZC0+ b2JqZWN0cy5hcHBlbmQoZC0+ZXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25PYmplY3QpOwotKyAg fQotKyAgaWYoIWQtPmhlYWRlckV4dGVuc2lvbk9iamVjdCkgewotKyAgICBkLT5oZWFkZXJFeHRl bnNpb25PYmplY3QgPSBuZXcgSGVhZGVyRXh0ZW5zaW9uT2JqZWN0KCk7Ci0rICAgIGQtPm9iamVj dHMuYXBwZW5kKGQtPmhlYWRlckV4dGVuc2lvbk9iamVjdCk7Ci0rICB9Ci0rICBpZighZC0+bWV0 YWRhdGFPYmplY3QpIHsKLSsgICAgZC0+bWV0YWRhdGFPYmplY3QgPSBuZXcgTWV0YWRhdGFPYmpl Y3QoKTsKLSsgICAgZC0+aGVhZGVyRXh0ZW5zaW9uT2JqZWN0LT5vYmplY3RzLmFwcGVuZChkLT5t ZXRhZGF0YU9iamVjdCk7Ci0rICB9Ci0rICBpZighZC0+bWV0YWRhdGFMaWJyYXJ5T2JqZWN0KSB7 Ci0rICAgIGQtPm1ldGFkYXRhTGlicmFyeU9iamVjdCA9IG5ldyBNZXRhZGF0YUxpYnJhcnlPYmpl Y3QoKTsKLSsgICAgZC0+aGVhZGVyRXh0ZW5zaW9uT2JqZWN0LT5vYmplY3RzLmFwcGVuZChkLT5t ZXRhZGF0YUxpYnJhcnlPYmplY3QpOwotKyAgfQotKwotKyAgQVNGOjpBdHRyaWJ1dGVMaXN0TWFw OjpDb25zdEl0ZXJhdG9yIGl0ID0gZC0+dGFnLT5hdHRyaWJ1dGVMaXN0TWFwKCkuYmVnaW4oKTsK LSsgIGZvcig7IGl0ICE9IGQtPnRhZy0+YXR0cmlidXRlTGlzdE1hcCgpLmVuZCgpOyBpdCsrKSB7 Ci0rICAgIGNvbnN0IFN0cmluZyAmbmFtZSA9IGl0LT5maXJzdDsKLSsgICAgY29uc3QgQXR0cmli dXRlTGlzdCAmYXR0cmlidXRlcyA9IGl0LT5zZWNvbmQ7Ci0rICAgIGJvb2wgaW5FeHRlbmRlZENv bnRlbnREZXNjcmlwdGlvbk9iamVjdCA9IGZhbHNlOwotKyAgICBib29sIGluTWV0YWRhdGFPYmpl Y3QgPSBmYWxzZTsKLSsgICAgZm9yKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGF0dHJpYnV0ZXMu c2l6ZSgpOyBqKyspIHsKLSsgICAgICBjb25zdCBBdHRyaWJ1dGUgJmF0dHJpYnV0ZSA9IGF0dHJp YnV0ZXNbal07Ci0rICAgICAgaWYoIWluRXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25PYmplY3Qg JiYgYXR0cmlidXRlLmxhbmd1YWdlKCkgPT0gMCAmJiBhdHRyaWJ1dGUuc3RyZWFtKCkgPT0gMCkg ewotKyAgICAgICAgZC0+ZXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25PYmplY3QtPmF0dHJpYnV0 ZURhdGEuYXBwZW5kKGF0dHJpYnV0ZS5yZW5kZXIobmFtZSkpOwotKyAgICAgICAgaW5FeHRlbmRl ZENvbnRlbnREZXNjcmlwdGlvbk9iamVjdCA9IHRydWU7Ci0rICAgICAgfQotKyAgICAgIGVsc2Ug aWYoIWluTWV0YWRhdGFPYmplY3QgJiYgYXR0cmlidXRlLmxhbmd1YWdlKCkgPT0gMCAmJiBhdHRy aWJ1dGUuc3RyZWFtKCkgIT0gMCkgewotKyAgICAgICAgZC0+bWV0YWRhdGFPYmplY3QtPmF0dHJp YnV0ZURhdGEuYXBwZW5kKGF0dHJpYnV0ZS5yZW5kZXIobmFtZSwgMSkpOwotKyAgICAgICAgaW5N ZXRhZGF0YU9iamVjdCA9IHRydWU7Ci0rICAgICAgfQotKyAgICAgIGVsc2UgewotKyAgICAgICAg ZC0+bWV0YWRhdGFMaWJyYXJ5T2JqZWN0LT5hdHRyaWJ1dGVEYXRhLmFwcGVuZChhdHRyaWJ1dGUu cmVuZGVyKG5hbWUsIDIpKTsKLSsgICAgICB9Ci0rICAgIH0KLSsgIH0KLSsKLSsgIEJ5dGVWZWN0 b3IgZGF0YTsKLSsgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBkLT5vYmplY3RzLnNpemUo KTsgaSsrKSB7Ci0rICAgIGRhdGEuYXBwZW5kKGQtPm9iamVjdHNbaV0tPnJlbmRlcih0aGlzKSk7 Ci0rICB9Ci0rICBkYXRhID0gaGVhZGVyR3VpZCArIEJ5dGVWZWN0b3I6OmZyb21Mb25nTG9uZyhk YXRhLnNpemUoKSArIDMwLCBmYWxzZSkgKyBCeXRlVmVjdG9yOjpmcm9tVUludChkLT5vYmplY3Rz LnNpemUoKSwgZmFsc2UpICsgQnl0ZVZlY3RvcigiXHgwMVx4MDIiLCAyKSArIGRhdGE7Ci0rICBp bnNlcnQoZGF0YSwgMCwgZC0+c2l6ZSk7Ci0rCi0rICByZXR1cm4gdHJ1ZTsKLSt9Ci0rCi0rLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLSsvLyBwcm90ZWN0ZWQgbWVtYmVycwotKy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vCi0rCi0raW50IEFTRjo6RmlsZTo6cmVhZEJZVEUoKQotK3sKLSsgIEJ5dGVW ZWN0b3IgdiA9IHJlYWRCbG9jaygxKTsKLSsgIHJldHVybiB2WzBdOwotK30KLSsKLStpbnQgQVNG OjpGaWxlOjpyZWFkV09SRCgpCi0rewotKyAgQnl0ZVZlY3RvciB2ID0gcmVhZEJsb2NrKDIpOwot KyAgcmV0dXJuIHYudG9TaG9ydChmYWxzZSk7Ci0rfQotKwotK3Vuc2lnbmVkIGludCBBU0Y6OkZp bGU6OnJlYWREV09SRCgpCi0rewotKyAgQnl0ZVZlY3RvciB2ID0gcmVhZEJsb2NrKDQpOwotKyAg cmV0dXJuIHYudG9VSW50KGZhbHNlKTsKLSt9Ci0rCi0rbG9uZyBsb25nIEFTRjo6RmlsZTo6cmVh ZFFXT1JEKCkKLSt7Ci0rICBCeXRlVmVjdG9yIHYgPSByZWFkQmxvY2soOCk7Ci0rICByZXR1cm4g di50b0xvbmdMb25nKGZhbHNlKTsKLSt9Ci0rCi0rU3RyaW5nCi0rQVNGOjpGaWxlOjpyZWFkU3Ry aW5nKGludCBsZW5ndGgpCi0rewotKyAgQnl0ZVZlY3RvciBkYXRhID0gcmVhZEJsb2NrKGxlbmd0 aCk7Ci0rICB1bnNpZ25lZCBpbnQgc2l6ZSA9IGRhdGEuc2l6ZSgpOwotKyAgd2hpbGUgKHNpemUg Pj0gMikgewotKyAgICBpZihkYXRhW3NpemUgLSAxXSAhPSAnXDAnIHx8IGRhdGFbc2l6ZSAtIDJd ICE9ICdcMCcpIHsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBzaXplIC09IDI7Ci0rICB9 Ci0rICBpZihzaXplICE9IGRhdGEuc2l6ZSgpKSB7Ci0rICAgIGRhdGEucmVzaXplKHNpemUpOwot KyAgfQotKyAgcmV0dXJuIFN0cmluZyhkYXRhLCBTdHJpbmc6OlVURjE2TEUpOwotK30KLSsKLStC eXRlVmVjdG9yCi0rQVNGOjpGaWxlOjpyZW5kZXJTdHJpbmcoY29uc3QgU3RyaW5nICZzdHIsIGJv b2wgaW5jbHVkZUxlbmd0aCkKLSt7Ci0rICBCeXRlVmVjdG9yIGRhdGEgPSBzdHIuZGF0YShTdHJp bmc6OlVURjE2TEUpICsgQnl0ZVZlY3Rvcjo6ZnJvbVNob3J0KDAsIGZhbHNlKTsKLSsgIGlmKGlu Y2x1ZGVMZW5ndGgpIHsKLSsgICAgZGF0YSA9IEJ5dGVWZWN0b3I6OmZyb21TaG9ydChkYXRhLnNp emUoKSwgZmFsc2UpICsgZGF0YTsKLSsgIH0KLSsgIHJldHVybiBkYXRhOwotK30KLQotUHJvcGVy dHkgY2hhbmdlcyBvbjogYW1hcm9rL3NyYy9tZXRhZGF0YS9hc2YvYXNmZmlsZS5jcHAKLV9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KLU5hbWU6IHN2bjplb2wtc3R5bGUKLSAgICsgbmF0aXZlCi0KLUluZGV4OiBhbWFyb2sv c3JjL21ldGFkYXRhL2FzZi9hc2Z0YWcuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGFtYXJvay9zcmMvbWV0 YWRhdGEvYXNmL2FzZnRhZy5oCShyZXZpc2lvbiAwKQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEv YXNmL2FzZnRhZy5oCShyZXZpc2lvbiA3NDMwMDUpCi1AQCAtMCwwICsxLDE4MSBAQAotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgotKyAgICBjb3B5cmlnaHQgICAgICAgICAgICA6IChDKSAyMDA1LTIwMDcg YnkgTHVrw6HFoSBMYWxpbnNrw70KLSsgICAgZW1haWwgICAgICAgICAgICAgICAgOiBsYWxpbnNr eUBnbWFpbC5jb20KLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgotKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSsgKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uICAqCi0rICogICAyLjEg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAg ICAgICAgICAgKgotKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgIFRoaXMgbGlicmFyeSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0r ICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mICAgICAgICAgICAgKgotKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICoKLSsgKiAgIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAg ICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLSsgKiAg IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUgICAqCi0rICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Us IFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgKgotKyAqICAgVVNBICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoKLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKyNpZm5kZWYgVEFHTElCX0FTRlRBR19ICi0r I2RlZmluZSBUQUdMSUJfQVNGVEFHX0gKLSsKLSsjaW5jbHVkZSA8dGFnLmg+Ci0rI2luY2x1ZGUg PHRsaXN0Lmg+Ci0rI2luY2x1ZGUgPHRtYXAuaD4KLSsjaW5jbHVkZSAiYXNmYXR0cmlidXRlLmgi Ci0rCi0rbmFtZXNwYWNlIFRhZ0xpYiB7Ci0rCi0rICBuYW1lc3BhY2UgQVNGIHsKLSsKLSsgICAg dHlwZWRlZiBMaXN0PEF0dHJpYnV0ZT4gQXR0cmlidXRlTGlzdDsKLSsgICAgdHlwZWRlZiBNYXA8 U3RyaW5nLCBBdHRyaWJ1dGVMaXN0PiBBdHRyaWJ1dGVMaXN0TWFwOwotKwotKyAgICBjbGFzcyBU YWcgOiBwdWJsaWMgVGFnTGliOjpUYWcgewotKwotKyAgICAgIGZyaWVuZCBjbGFzcyBGaWxlOwot KwotKyAgICBwdWJsaWM6Ci0rCi0rICAgICAgVGFnKCk7Ci0rCi0rICAgICAgdmlydHVhbCB+VGFn KCk7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogUmV0dXJucyB0aGUgdHJhY2sgbmFtZS4KLSsg ICAgICAgKi8KLSsgICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OwotKwotKyAgICAg IC8qIQotKyAgICAgICAqIFJldHVybnMgdGhlIGFydGlzdCBuYW1lLgotKyAgICAgICAqLwotKyAg ICAgIHZpcnR1YWwgU3RyaW5nIGFydGlzdCgpIGNvbnN0OwotKwotKyAgICAgIC8qIQotKyAgICAg ICAqIFJldHVybnMgdGhlIGFsYnVtIG5hbWU7IGlmIG5vIGFsYnVtIG5hbWUgaXMgcHJlc2VudCBp biB0aGUgdGFnCi0rICAgICAgICogU3RyaW5nOjpudWxsIHdpbGwgYmUgcmV0dXJuZWQuCi0rICAg ICAgICovCi0rICAgICAgdmlydHVhbCBTdHJpbmcgYWxidW0oKSBjb25zdDsKLSsKLSsgICAgICAv KiEKLSsgICAgICAgKiBSZXR1cm5zIHRoZSB0cmFjayBjb21tZW50LgotKyAgICAgICAqLwotKyAg ICAgIHZpcnR1YWwgU3RyaW5nIGNvbW1lbnQoKSBjb25zdDsKLSsKLSsgICAgICAvKiEKLSsgICAg ICAgKiBSZXR1cm5zIHRoZSBnZW5yZSBuYW1lOyBpZiBubyBnZW5yZSBpcyBwcmVzZW50IGluIHRo ZSB0YWcgU3RyaW5nOjpudWxsCi0rICAgICAgICogd2lsbCBiZSByZXR1cm5lZC4KLSsgICAgICAg Ki8KLSsgICAgICB2aXJ0dWFsIFN0cmluZyBnZW5yZSgpIGNvbnN0OwotKwotKyAgICAgIC8qIQot KyAgICAgICAqIFJldHVybnMgdGhlIHJhdGluZy4KLSsgICAgICAgKi8KLSsgICAgICB2aXJ0dWFs IFN0cmluZyByYXRpbmcoKSBjb25zdDsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBSZXR1cm5z IHRoZSBnZW5yZSBuYW1lOyBpZiBubyBnZW5yZSBpcyBwcmVzZW50IGluIHRoZSB0YWcgU3RyaW5n OjpudWxsCi0rICAgICAgICogd2lsbCBiZSByZXR1cm5lZC4KLSsgICAgICAgKi8KLSsgICAgICB2 aXJ0dWFsIFN0cmluZyBjb3B5cmlnaHQoKSBjb25zdDsKLSsKLSsgICAgICAvKiEKLSsgICAgICAg KiBSZXR1cm5zIHRoZSB5ZWFyOyBpZiB0aGVyZSBpcyBubyB5ZWFyIHNldCwgdGhpcyB3aWxsIHJl dHVybiAwLgotKyAgICAgICAqLwotKyAgICAgIHZpcnR1YWwgdWludCB5ZWFyKCkgY29uc3Q7Ci0r Ci0rICAgICAgLyohCi0rICAgICAgICogUmV0dXJucyB0aGUgdHJhY2sgbnVtYmVyOyBpZiB0aGVy ZSBpcyBubyB0cmFjayBudW1iZXIgc2V0LCB0aGlzIHdpbGwKLSsgICAgICAgKiByZXR1cm4gMC4K LSsgICAgICAgKi8KLSsgICAgICB2aXJ0dWFsIHVpbnQgdHJhY2soKSBjb25zdDsKLSsKLSsgICAg ICAvKiEKLSsgICAgICAgKiBTZXRzIHRoZSB0aXRsZSB0byBcYSBzLgotKyAgICAgICAqLwotKyAg ICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcgJnMpOwotKwotKyAgICAgIC8q IQotKyAgICAgICAqIFNldHMgdGhlIGFydGlzdCB0byBcYSBzLgotKyAgICAgICAqLwotKyAgICAg IHZpcnR1YWwgdm9pZCBzZXRBcnRpc3QoY29uc3QgU3RyaW5nICZzKTsKLSsKLSsgICAgICAvKiEK LSsgICAgICAgKiBTZXRzIHRoZSBhbGJ1bSB0byBcYSBzLiAgSWYgXGEgcyBpcyBTdHJpbmc6Om51 bGwgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUKLSsgICAgICAgKiBjbGVhcmVkLgotKyAgICAgICAq LwotKyAgICAgIHZpcnR1YWwgdm9pZCBzZXRBbGJ1bShjb25zdCBTdHJpbmcgJnMpOwotKwotKyAg ICAgIC8qIQotKyAgICAgICAqIFNldHMgdGhlIGNvbW1lbnQgdG8gXGEgcy4KLSsgICAgICAgKi8K LSsgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29tbWVudChjb25zdCBTdHJpbmcgJnMpOwotKwotKyAg ICAgIC8qIQotKyAgICAgICAqIFNldHMgdGhlIHJhdGluZyB0byBcYSBzLiAKLSsgICAgICAgKi8K LSsgICAgICB2aXJ0dWFsIHZvaWQgc2V0UmF0aW5nKGNvbnN0IFN0cmluZyAmcyk7Ci0rCi0rICAg ICAgLyohCi0rICAgICAgICogU2V0cyB0aGUgY29weXJpZ2h0IHRvIFxhIHMuIAotKyAgICAgICAq LwotKyAgICAgIHZpcnR1YWwgdm9pZCBzZXRDb3B5cmlnaHQoY29uc3QgU3RyaW5nICZzKTsKLSsK LSsgICAgICAvKiEKLSsgICAgICAgKiBTZXRzIHRoZSBnZW5yZSB0byBcYSBzLiAKLSsgICAgICAg Ki8KLSsgICAgICB2aXJ0dWFsIHZvaWQgc2V0R2VucmUoY29uc3QgU3RyaW5nICZzKTsKLSsKLSsg ICAgICAvKiEKLSsgICAgICAgKiBTZXRzIHRoZSB5ZWFyIHRvIFxhIGkuICBJZiBcYSBzIGlzIDAg dGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgY2xlYXJlZC4KLSsgICAgICAgKi8KLSsgICAgICB2aXJ0 dWFsIHZvaWQgc2V0WWVhcih1aW50IGkpOwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIFNldHMg dGhlIHRyYWNrIHRvIFxhIGkuICBJZiBcYSBzIGlzIDAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUg Y2xlYXJlZC4KLSsgICAgICAgKi8KLSsgICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhY2sodWludCBp KTsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRhZyBkb2Vz IG5vdCBjb250YWluIGFueSBkYXRhLiAgVGhpcyBzaG91bGQgYmUKLSsgICAgICAgKiByZWltcGxl bWVudGVkIGluIHN1YmNsYXNzZXMgdGhhdCBwcm92aWRlIG1vcmUgdGhhbiB0aGUgYmFzaWMgdGFn Z2luZwotKyAgICAgICAqIGFiaWxpdGllcyBpbiB0aGlzIGNsYXNzLgotKyAgICAgICAqLwotKyAg ICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Ci0rCi0rICAgICAgLyohCi0rICAgICAg ICogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaXRlbSBsaXN0IG1hcC4gIFRoaXMgaXMgYW4g QXR0cmlidXRlTGlzdE1hcCBvZgotKyAgICAgICAqIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIHRh Zy4KLSsgICAgICAgKgotKyAgICAgICAqIFRoaXMgaXMgdGhlIG1vc3QgcG93ZXJmdWxsIHN0cnVj dHVyZSBmb3IgYWNjZXNzaW5nIHRoZSBpdGVtcyBvZiB0aGUgdGFnLgotKyAgICAgICAqLwotKyAg ICAgIEF0dHJpYnV0ZUxpc3RNYXAgJmF0dHJpYnV0ZUxpc3RNYXAoKTsKLSsKLSsgICAgICAvKiEK LSsgICAgICAgKiBSZW1vdmVzIHRoZSBcYSBrZXkgYXR0cmlidXRlIGZyb20gdGhlIHRhZwotKyAg ICAgICAqLwotKyAgICAgIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcgJm5hbWUpOwotKwot KyAgICAgIC8qIQotKyAgICAgICAqIFNldHMgdGhlIFxhIGtleSBhdHRyaWJ1dGUgdG8gdGhlIHZh bHVlIG9mIFxhIGF0dHJpYnV0ZS4gSWYgYW4gYXR0cmlidXRlCi0rICAgICAgICogd2l0aCB0aGUg XGEga2V5IGlzIGFscmVhZHkgcHJlc2VudCwgaXQgd2lsbCBiZSByZXBsYWNlZC4KLSsgICAgICAg Ki8KLSsgICAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcgJm5hbWUsIGNvbnN0IEF0 dHJpYnV0ZSAmYXR0cmlidXRlKTsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBTZXRzIHRoZSBc YSBrZXkgYXR0cmlidXRlIHRvIHRoZSB2YWx1ZSBvZiBcYSBhdHRyaWJ1dGUuIElmIGFuIGF0dHJp YnV0ZQotKyAgICAgICAqIHdpdGggdGhlIFxhIGtleSBpcyBhbHJlYWR5IHByZXNlbnQsIGl0IHdp bGwgYmUgYWRkZWQgdG8gdGhlIGxpc3QuCi0rICAgICAgICovCi0rICAgICAgdm9pZCBhZGRBdHRy aWJ1dGUoY29uc3QgU3RyaW5nICZuYW1lLCBjb25zdCBBdHRyaWJ1dGUgJmF0dHJpYnV0ZSk7Ci0r Ci0rICAgIHByaXZhdGU6Ci0rCi0rICAgICAgY2xhc3MgVGFnUHJpdmF0ZTsKLSsgICAgICBUYWdQ cml2YXRlICpkOwotKyAgICB9OwotKyAgfQotK30KLSsjZW5kaWYKLUluZGV4OiBhbWFyb2svc3Jj L21ldGFkYXRhL2FzZi9hc2Zwcm9wZXJ0aWVzLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3Jj L21ldGFkYXRhL2FzZi9hc2Zwcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDApCi0rKysgYW1hcm9rL3Ny Yy9tZXRhZGF0YS9hc2YvYXNmcHJvcGVydGllcy5oCShyZXZpc2lvbiA3NDMwMDUpCi1AQCAtMCww ICsxLDY5IEBACi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rICAgIGNvcHlyaWdodCAgICAgICAgICAg IDogKEMpIDIwMDUtMjAwNyBieSBMdWvDocWhIExhbGluc2vDvQotKyAgICBlbWFpbCAgICAgICAg ICAgICAgICA6IGxhbGluc2t5QGdtYWlsLmNvbQotKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCi0rICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotKyAqICAgaXQgIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gICoKLSsgKiAgIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4gICAgICAgICAgICAgICAgICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAg VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCAgICoKLSsgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAqCi0rICogICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSAgICAg KgotKyAqICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4g ICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljICAgICAgKgotKyAqICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICoKLSsgKiAgIEZvdW5kYXRpb24sIEluYy4s IDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICAqCi0r ICogICBVU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKgotKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rI2lmbmRlZiBU QUdMSUJfQVNGUFJPUEVSVElFU19ICi0rI2RlZmluZSBUQUdMSUJfQVNGUFJPUEVSVElFU19ICi0r Ci0rI2luY2x1ZGUgPGF1ZGlvcHJvcGVydGllcy5oPgotKyNpbmNsdWRlIDx0c3RyaW5nLmg+Ci0r Ci0rbmFtZXNwYWNlIFRhZ0xpYiB7Ci0rCi0rICBuYW1lc3BhY2UgQVNGIHsKLSsKLSsgICAgLy8h IEFuIGltcGxlbWVudGF0aW9uIG9mIEFTRiBhdWRpbyBwcm9wZXJ0aWVzCi0rICAgIGNsYXNzIFBy b3BlcnRpZXMgOiBwdWJsaWMgQXVkaW9Qcm9wZXJ0aWVzCi0rICAgIHsKLSsgICAgcHVibGljOgot KwotKyAgICAgIC8qIQotKyAgICAgICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBU0Y6OlByb3Bl cnRpZXMuCi0rICAgICAgICovCi0rICAgICAgUHJvcGVydGllcygpOwotKwotKyAgICAgIC8qIQot KyAgICAgICAqIERlc3Ryb3lzIHRoaXMgQVNGOjpQcm9wZXJ0aWVzIGluc3RhbmNlLgotKyAgICAg ICAqLwotKyAgICAgIHZpcnR1YWwgflByb3BlcnRpZXMoKTsKLSsKLSsgICAgICAvLyBSZWltcGxl bWVudGF0aW9ucy4KLSsgICAgICB2aXJ0dWFsIGludCBsZW5ndGgoKSBjb25zdDsKLSsgICAgICB2 aXJ0dWFsIGludCBiaXRyYXRlKCkgY29uc3Q7Ci0rICAgICAgdmlydHVhbCBpbnQgc2FtcGxlUmF0 ZSgpIGNvbnN0OwotKyAgICAgIHZpcnR1YWwgaW50IGNoYW5uZWxzKCkgY29uc3Q7Ci0rCi0rI2lm bmRlZiBET19OT1RfRE9DVU1FTlQKLSsgICAgICB2b2lkIHNldExlbmd0aChpbnQgdmFsdWUpOwot KyAgICAgIHZvaWQgc2V0Qml0cmF0ZShpbnQgdmFsdWUpOwotKyAgICAgIHZvaWQgc2V0U2FtcGxl UmF0ZShpbnQgdmFsdWUpOwotKyAgICAgIHZvaWQgc2V0Q2hhbm5lbHMoaW50IHZhbHVlKTsKLSsj ZW5kaWYKLSsKLSsgICAgcHJpdmF0ZToKLSsgICAgICBjbGFzcyBQcm9wZXJ0aWVzUHJpdmF0ZTsK LSsgICAgICBQcm9wZXJ0aWVzUHJpdmF0ZSAqZDsKLSsgICAgfTsKLSsKLSsgIH0KLSsKLSt9Ci0r Ci0rI2VuZGlmIAotCi1Qcm9wZXJ0eSBjaGFuZ2VzIG9uOiBhbWFyb2svc3JjL21ldGFkYXRhL2Fz Zi9hc2Zwcm9wZXJ0aWVzLmgKLV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLU5hbWU6IHN2bjplb2wtc3R5bGUKLSAgICsg bmF0aXZlCi0KLUluZGV4OiBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2ZhdHRyaWJ1dGUuY3Bw Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9tZXRhZGF0YS9hc2YvYXNmYXR0cmlidXRlLmNw cAkocmV2aXNpb24gMCkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2ZhdHRyaWJ1dGUu Y3BwCShyZXZpc2lvbiA3NDMwMDUpCi1AQCAtMCwwICsxLDMwNCBAQAotKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgotKyAgICBjb3B5cmlnaHQgICAgICAgICAgICA6IChDKSAyMDA1LTIwMDcgYnkgTHVrw6HF oSBMYWxpbnNrw70KLSsgICAgZW1haWwgICAgICAgICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5j b20KLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKyAqICAg VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgICoKLSsgKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uICAqCi0rICogICAyLjEgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAg KgotKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0rICogICBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAg ICAgICAgICAgKgotKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICoKLSsgKiAgIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0r ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKgotKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLSsgKiAgIExpY2Vuc2Ug YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUgICAqCi0rICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMz MCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgKgotKyAqICAgVVNBICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotKyNpbmNsdWRlIDx0YWdsaWIuaD4KLSsjaW5jbHVkZSAiYXNm YXR0cmlidXRlLmgiCi0rI2luY2x1ZGUgImFzZmZpbGUuaCIKLSsKLSt1c2luZyBuYW1lc3BhY2Ug VGFnTGliOwotKwotK2NsYXNzIEFTRjo6QXR0cmlidXRlOjpBdHRyaWJ1dGVQcml2YXRlIDogcHVi bGljIFJlZkNvdW50ZXIKLSt7Ci0rcHVibGljOgotKyAgQXR0cmlidXRlUHJpdmF0ZSgpCi0rICAg IDogc3RyZWFtKDApLAotKyAgICAgIGxhbmd1YWdlKDApIHt9Ci0rICBBdHRyaWJ1dGVUeXBlcyB0 eXBlOwotKyAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotKyAgQnl0ZVZlY3RvciBieXRlVmVjdG9yVmFs dWU7Ci0rICB1bmlvbiB7Ci0rICAgIHVuc2lnbmVkIGludCBpbnRWYWx1ZTsKLSsgICAgdW5zaWdu ZWQgc2hvcnQgc2hvcnRWYWx1ZTsKLSsgICAgdW5zaWduZWQgbG9uZyBsb25nIGxvbmdMb25nVmFs dWU7Ci0rICAgIGJvb2wgYm9vbFZhbHVlOwotKyAgfTsKLSsgIGludCBzdHJlYW07Ci0rICBpbnQg bGFuZ3VhZ2U7Ci0rfTsKLSsKLSsvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotKy8vIHB1YmxpYyBt ZW1iZXJzCi0rLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSsKLStBU0Y6OkF0dHJpYnV0ZTo6QXR0 cmlidXRlKCkKLSt7Ci0rICBkID0gbmV3IEF0dHJpYnV0ZVByaXZhdGU7Ci0rICBkLT50eXBlID0g VW5pY29kZVR5cGU7Ci0rfQotKwotK0FTRjo6QXR0cmlidXRlOjpBdHRyaWJ1dGUoY29uc3QgQVNG OjpBdHRyaWJ1dGUgJm90aGVyKQotKyAgOiBkKG90aGVyLmQpCi0rewotKyAgZC0+cmVmKCk7Ci0r fQotKwotK0FTRjo6QXR0cmlidXRlICYKLStBU0Y6OkF0dHJpYnV0ZTo6b3BlcmF0b3I9KGNvbnN0 IEFTRjo6QXR0cmlidXRlICZvdGhlcikKLSt7Ci0rICBpZihkLT5kZXJlZigpKQotKyAgICBkZWxl dGUgZDsKLSsgIGQgPSBvdGhlci5kOwotKyAgZC0+cmVmKCk7Ci0rICByZXR1cm4gKnRoaXM7Ci0r fQotKwotK0FTRjo6QXR0cmlidXRlOjp+QXR0cmlidXRlKCkKLSt7Ci0rICBpZihkLT5kZXJlZigp KQotKyAgICBkZWxldGUgZDsKLSt9Ci0rCi0rQVNGOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZShjb25z dCBTdHJpbmcgJnZhbHVlKQotK3sKLSsgIGQgPSBuZXcgQXR0cmlidXRlUHJpdmF0ZTsKLSsgIGQt PnR5cGUgPSBVbmljb2RlVHlwZTsKLSsgIGQtPnN0cmluZ1ZhbHVlID0gdmFsdWU7Ci0rfQotKwot K0FTRjo6QXR0cmlidXRlOjpBdHRyaWJ1dGUoY29uc3QgQnl0ZVZlY3RvciAmdmFsdWUpCi0rewot KyAgZCA9IG5ldyBBdHRyaWJ1dGVQcml2YXRlOwotKyAgZC0+dHlwZSA9IEJ5dGVzVHlwZTsKLSsg IGQtPmJ5dGVWZWN0b3JWYWx1ZSA9IHZhbHVlOwotK30KLSsKLStBU0Y6OkF0dHJpYnV0ZTo6QXR0 cmlidXRlKHVuc2lnbmVkIGludCB2YWx1ZSkKLSt7Ci0rICBkID0gbmV3IEF0dHJpYnV0ZVByaXZh dGU7Ci0rICBkLT50eXBlID0gRFdvcmRUeXBlOwotKyAgZC0+aW50VmFsdWUgPSB2YWx1ZTsKLSt9 Ci0rCi0rQVNGOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZSh1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUp Ci0rewotKyAgZCA9IG5ldyBBdHRyaWJ1dGVQcml2YXRlOwotKyAgZC0+dHlwZSA9IFFXb3JkVHlw ZTsKLSsgIGQtPmxvbmdMb25nVmFsdWUgPSB2YWx1ZTsKLSt9Ci0rCi0rQVNGOjpBdHRyaWJ1dGU6 OkF0dHJpYnV0ZSh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKLSt7Ci0rICBkID0gbmV3IEF0dHJpYnV0 ZVByaXZhdGU7Ci0rICBkLT50eXBlID0gV29yZFR5cGU7Ci0rICBkLT5zaG9ydFZhbHVlID0gdmFs dWU7Ci0rfQotKwotK0FTRjo6QXR0cmlidXRlOjpBdHRyaWJ1dGUoYm9vbCB2YWx1ZSkKLSt7Ci0r ICBkID0gbmV3IEF0dHJpYnV0ZVByaXZhdGU7Ci0rICBkLT50eXBlID0gQm9vbFR5cGU7Ci0rICBk LT5ib29sVmFsdWUgPSB2YWx1ZTsKLSt9Ci0rCi0rQVNGOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZVR5 cGVzCi0rQVNGOjpBdHRyaWJ1dGU6OnR5cGUoKSBjb25zdAotK3sKLSsgIHJldHVybiBkLT50eXBl OwotK30KLSsKLStTdHJpbmcKLStBU0Y6OkF0dHJpYnV0ZTo6dG9TdHJpbmcoKSBjb25zdAotK3sK LSsgIHJldHVybiBkLT5zdHJpbmdWYWx1ZTsKLSt9Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6QXR0 cmlidXRlOjp0b0J5dGVWZWN0b3IoKSBjb25zdAotK3sKLSsgIHJldHVybiBkLT5ieXRlVmVjdG9y VmFsdWU7Ci0rfQotKwotK3Vuc2lnbmVkIHNob3J0Ci0rQVNGOjpBdHRyaWJ1dGU6OnRvQm9vbCgp IGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPnNob3J0VmFsdWU7Ci0rfQotKwotK3Vuc2lnbmVkIHNo b3J0Ci0rQVNGOjpBdHRyaWJ1dGU6OnRvVVNob3J0KCkgY29uc3QKLSt7Ci0rICByZXR1cm4gZC0+ c2hvcnRWYWx1ZTsKLSt9Ci0rCi0rdW5zaWduZWQgaW50Ci0rQVNGOjpBdHRyaWJ1dGU6OnRvVUlu dCgpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPmludFZhbHVlOwotK30KLSsKLSt1bnNpZ25lZCBs b25nIGxvbmcKLStBU0Y6OkF0dHJpYnV0ZTo6dG9VTG9uZ0xvbmcoKSBjb25zdAotK3sKLSsgIHJl dHVybiBkLT5sb25nTG9uZ1ZhbHVlOwotK30KLSsKLStTdHJpbmcKLStBU0Y6OkF0dHJpYnV0ZTo6 cGFyc2UoQVNGOjpGaWxlICZmLCBpbnQga2luZCkKLSt7Ci0rICBpbnQgc2l6ZSwgbmFtZUxlbmd0 aDsKLSsgIFN0cmluZyBuYW1lOwotKwotKyAgLy8gZXh0ZW5kZWQgY29udGVudCBkZXNjcmlwdG9y Ci0rICBpZihraW5kID09IDApIHsKLSsgICAgbmFtZUxlbmd0aCA9IGYucmVhZFdPUkQoKTsKLSsg ICAgbmFtZSA9IGYucmVhZFN0cmluZyhuYW1lTGVuZ3RoKTsKLSsgICAgZC0+dHlwZSA9IEFTRjo6 QXR0cmlidXRlOjpBdHRyaWJ1dGVUeXBlcyhmLnJlYWRXT1JEKCkpOwotKyAgICBzaXplID0gZi5y ZWFkV09SRCgpOwotKyAgfQotKyAgLy8gbWV0YWRhdGEgJiBtZXRhZGF0YSBsaWJyYXJ5Ci0rICBl bHNlIHsKLSsgICAgaW50IHRlbXAgPSBmLnJlYWRXT1JEKCk7Ci0rICAgIC8vIG1ldGFkYXRhIGxp YnJhcnkKLSsgICAgaWYoa2luZCA9PSAyKSB7Ci0rICAgICAgZC0+bGFuZ3VhZ2UgPSB0ZW1wOwot KyAgICB9Ci0rICAgIGQtPnN0cmVhbSA9IGYucmVhZFdPUkQoKTsKLSsgICAgbmFtZUxlbmd0aCA9 IGYucmVhZFdPUkQoKTsKLSsgICAgZC0+dHlwZSA9IEFTRjo6QXR0cmlidXRlOjpBdHRyaWJ1dGVU eXBlcyhmLnJlYWRXT1JEKCkpOwotKyAgICBzaXplID0gZi5yZWFkRFdPUkQoKTsKLSsgICAgbmFt ZSA9IGYucmVhZFN0cmluZyhuYW1lTGVuZ3RoKTsKLSsgIH0KLSsKLSsgIHN3aXRjaChkLT50eXBl KSB7Ci0rICBjYXNlIFdvcmRUeXBlOgotKyAgICBkLT5zaG9ydFZhbHVlID0gZi5yZWFkV09SRCgp OwotKyAgICBicmVhazsKLSsKLSsgIGNhc2UgQm9vbFR5cGU6Ci0rICAgIGlmKGtpbmQgPT0gMCkg ewotKyAgICAgIGQtPmJvb2xWYWx1ZSA9IGYucmVhZERXT1JEKCkgPT0gMTsKLSsgICAgfQotKyAg ICBlbHNlIHsKLSsgICAgICBkLT5ib29sVmFsdWUgPSBmLnJlYWRXT1JEKCkgPT0gMTsKLSsgICAg fQotKyAgICBicmVhazsKLSsKLSsgIGNhc2UgRFdvcmRUeXBlOgotKyAgICBkLT5pbnRWYWx1ZSA9 IGYucmVhZERXT1JEKCk7Ci0rICAgIGJyZWFrOwotKwotKyAgY2FzZSBRV29yZFR5cGU6Ci0rICAg IGQtPmxvbmdMb25nVmFsdWUgPSBmLnJlYWRRV09SRCgpOwotKyAgICBicmVhazsKLSsKLSsgIGNh c2UgVW5pY29kZVR5cGU6Ci0rICAgIGQtPnN0cmluZ1ZhbHVlID0gZi5yZWFkU3RyaW5nKHNpemUp OwotKyAgICBicmVhazsKLSsKLSsgIGNhc2UgQnl0ZXNUeXBlOgotKyAgY2FzZSBHdWlkVHlwZToK LSsgICAgZC0+Ynl0ZVZlY3RvclZhbHVlID0gZi5yZWFkQmxvY2soc2l6ZSk7Ci0rICAgIGJyZWFr OwotKyAgfQotKwotKyAgcmV0dXJuIG5hbWU7Ci0rfQotKwotK0J5dGVWZWN0b3IKLStBU0Y6OkF0 dHJpYnV0ZTo6cmVuZGVyKGNvbnN0IFN0cmluZyAmbmFtZSwgaW50IGtpbmQpIGNvbnN0Ci0rewot KyAgQnl0ZVZlY3RvciBkYXRhOwotKwotKyAgc3dpdGNoIChkLT50eXBlKSB7Ci0rICBjYXNlIFdv cmRUeXBlOgotKyAgICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tU2hvcnQoZC0+c2hvcnRW YWx1ZSwgZmFsc2UpKTsKLSsgICAgYnJlYWs7Ci0rCi0rICBjYXNlIEJvb2xUeXBlOgotKyAgICBp ZihraW5kID09IDApIHsKLSsgICAgICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tVUludChk LT5ib29sVmFsdWUgPyAxIDogMCwgZmFsc2UpKTsKLSsgICAgfQotKyAgICBlbHNlIHsKLSsgICAg ICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tU2hvcnQoZC0+Ym9vbFZhbHVlID8gMSA6IDAs IGZhbHNlKSk7Ci0rICAgIH0KLSsgICAgYnJlYWs7Ci0rCi0rICBjYXNlIERXb3JkVHlwZToKLSsg ICAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rvcjo6ZnJvbVVJbnQoZC0+aW50VmFsdWUsIGZhbHNlKSk7 Ci0rICAgIGJyZWFrOwotKwotKyAgY2FzZSBRV29yZFR5cGU6Ci0rICAgIGRhdGEuYXBwZW5kKEJ5 dGVWZWN0b3I6OmZyb21Mb25nTG9uZyhkLT5sb25nTG9uZ1ZhbHVlLCBmYWxzZSkpOwotKyAgICBi cmVhazsKLSsKLSsgIGNhc2UgVW5pY29kZVR5cGU6Ci0rICAgIGRhdGEuYXBwZW5kKEZpbGU6OnJl bmRlclN0cmluZyhkLT5zdHJpbmdWYWx1ZSkpOwotKyAgICBicmVhazsKLSsKLSsgIGNhc2UgQnl0 ZXNUeXBlOgotKyAgY2FzZSBHdWlkVHlwZToKLSsgICAgZGF0YS5hcHBlbmQoZC0+Ynl0ZVZlY3Rv clZhbHVlKTsKLSsgICAgYnJlYWs7Ci0rICB9Ci0rCi0rICBpZihraW5kID09IDApIHsKLSsgICAg ZGF0YSA9IEZpbGU6OnJlbmRlclN0cmluZyhuYW1lLCB0cnVlKSArCi0rICAgICAgICAgICBCeXRl VmVjdG9yOjpmcm9tU2hvcnQoKGludClkLT50eXBlLCBmYWxzZSkgKwotKyAgICAgICAgICAgQnl0 ZVZlY3Rvcjo6ZnJvbVNob3J0KGRhdGEuc2l6ZSgpLCBmYWxzZSkgKwotKyAgICAgICAgICAgZGF0 YTsKLSsgIH0KLSsgIGVsc2UgewotKyAgICBCeXRlVmVjdG9yIG5hbWVEYXRhID0gRmlsZTo6cmVu ZGVyU3RyaW5nKG5hbWUpOwotKyAgICBkYXRhID0gQnl0ZVZlY3Rvcjo6ZnJvbVNob3J0KGtpbmQg PT0gMiA/IGQtPmxhbmd1YWdlIDogMCwgZmFsc2UpICsKLSsgICAgICAgICAgIEJ5dGVWZWN0b3I6 OmZyb21TaG9ydChkLT5zdHJlYW0sIGZhbHNlKSArCi0rICAgICAgICAgICBCeXRlVmVjdG9yOjpm cm9tU2hvcnQobmFtZURhdGEuc2l6ZSgpLCBmYWxzZSkgKwotKyAgICAgICAgICAgQnl0ZVZlY3Rv cjo6ZnJvbVNob3J0KChpbnQpZC0+dHlwZSwgZmFsc2UpICsKLSsgICAgICAgICAgIEJ5dGVWZWN0 b3I6OmZyb21VSW50KGRhdGEuc2l6ZSgpLCBmYWxzZSkgKwotKyAgICAgICAgICAgbmFtZURhdGEg KwotKyAgICAgICAgICAgZGF0YTsKLSsgIH0KLSsKLSsgIHJldHVybiBkYXRhOwotK30KLSsKLStp bnQKLStBU0Y6OkF0dHJpYnV0ZTo6bGFuZ3VhZ2UoKSBjb25zdAotK3sKLSsgIHJldHVybiBkLT5s YW5ndWFnZTsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6QXR0cmlidXRlOjpzZXRMYW5ndWFnZShpbnQg dmFsdWUpCi0rewotKyAgZC0+bGFuZ3VhZ2UgPSB2YWx1ZTsKLSt9Ci0rCi0raW50Ci0rQVNGOjpB dHRyaWJ1dGU6OnN0cmVhbSgpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPnN0cmVhbTsKLSt9Ci0r Ci0rdm9pZAotK0FTRjo6QXR0cmlidXRlOjpzZXRTdHJlYW0oaW50IHZhbHVlKQotK3sKLSsgIGQt PnN0cmVhbSA9IHZhbHVlOwotK30KLQotUHJvcGVydHkgY2hhbmdlcyBvbjogYW1hcm9rL3NyYy9t ZXRhZGF0YS9hc2YvYXNmYXR0cmlidXRlLmNwcAotX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotTmFtZTogc3ZuOmVvbC1z dHlsZQotICAgKyBuYXRpdmUKLQotSW5kZXg6IGFtYXJvay9zcmMvbWV0YWRhdGEvbXA0L21wNGZp bGUuY3BwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9tZXRhZGF0YS9tcDQvbXA0ZmlsZS5j cHAJKHJldmlzaW9uIDcwNTIzMSkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL21wNC9tcDRmaWxl LmNwcAkod29ya2luZyBjb3B5KQotQEAgLTE1NiwxMCArMTU2LDcgQEAKLSAgICAgfQotICNlbmRp ZgotIAotLSAgICBpZighTVA0Q2xvc2UoaGFuZGxlKSkKLS0gICAgewotLSAgICAgICAgZnByaW50 ZihzdGRlcnIsICJjbG9zZSBmYWlsZWRcbiIpOwotLSAgICB9Ci0rICAgIE1QNENsb3NlKGhhbmRs ZSk7Ci0gCi0gICAgIG1wNGZpbGUgPSBNUDRSZWFkKG5hbWUoKSk7Ci0gICAgIGlmKG1wNGZpbGUg PT0gTVA0X0lOVkFMSURfRklMRV9IQU5ETEUpCi1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS93 bWEvdGFnbGliX3dtYWZpbGV0eXBlcmVzb2x2ZXIuaAotPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGFtYXJvay9z cmMvbWV0YWRhdGEvd21hL3RhZ2xpYl93bWFmaWxldHlwZXJlc29sdmVyLmgJKHJldmlzaW9uIDcw NTIzMSkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS90YWdsaWJfd21hZmlsZXR5cGVyZXNv bHZlci5oCSh3b3JraW5nIGNvcHkpCi1AQCAtMSwzOSArMCwwIEBACi0tLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgotLSAgICBjb3B5cmlnaHQgICAgICAgICAgICA6IChDKSAyMDA1IGJ5IE1hcnRpbiBBdW11 ZWxsZXIKLS0gICAgZW1haWwgICAgICAgICAgICAgICAgOiBhdW11ZWxsQHJlc2Vydi5hdAotLSAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0tCi0tLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLSAqICAgVGhpcyBs aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgICoKLS0gKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uICAqCi0tICogICAyLjEgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotLSAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICoKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0tICogICBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAg ICAgKgotLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICoKLS0gKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0tICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKgotLSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLS0gKiAgIExpY2Vuc2UgYWxvbmcg d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAq Ci0tICogICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sICAgICAgICAgICAgKgotLSAqICAgTUEgIDAyMTEwLTEzMDEgIFVTQSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotLQotLS8vIChjKSAyMDA1IE1hcnRpbiBBdW11ZWxsZXIgPGF1bXVlbGxAcmVz ZXJ2LmF0PgotLS8vIFNlZSBDT1BZSU5HIGZpbGUgZm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbgot LQotLSNpZm5kZWYgVEFHTElCX1dNQUZJTEVUWVBFUkVTT0xWRVJfSAotLSNkZWZpbmUgVEFHTElC X1dNQUZJTEVUWVBFUkVTT0xWRVJfSAotLQotLSNpbmNsdWRlIDx0YWdsaWIvdGZpbGUuaD4KLS0j aW5jbHVkZSA8dGFnbGliL2ZpbGVyZWYuaD4KLS0KLS0KLS1jbGFzcyBXTUFGaWxlVHlwZVJlc29s dmVyIDogcHVibGljIFRhZ0xpYjo6RmlsZVJlZjo6RmlsZVR5cGVSZXNvbHZlcgotLXsKLS0gICAg VGFnTGliOjpGaWxlICpjcmVhdGVGaWxlKGNvbnN0IGNoYXIgKmZpbGVOYW1lLAotLSAgICAgICAg ICAgIGJvb2wgcmVhZEF1ZGlvUHJvcGVydGllcywKLS0gICAgICAgICAgICBUYWdMaWI6OkF1ZGlv UHJvcGVydGllczo6UmVhZFN0eWxlIGF1ZGlvUHJvcGVydGllc1N0eWxlKSBjb25zdDsKLS19Owot LQotLSNlbmRpZgotSW5kZXg6IGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3dtYXRhZy5jcHAKLT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWF0YWcuY3BwCShyZXZpc2lv biA3MDUyMzEpCi0rKysgYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hdGFnLmNwcAkod29ya2lu ZyBjb3B5KQotQEAgLTEsMjEwICswLDAgQEAKLS0vKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICAgIGNv cHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUgYnkgTHVrYXMgTGFsaW5za3kKLS0gICAgZW1h aWwgICAgICAgICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5jb20KLS0gKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotLQotLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0tICog ICBpdCAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAgKgotLSAqICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqCi0tICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgKgotLSAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoKLS0gKiAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VICAgICAqCi0tICogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoK LS0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgICAgICAqCi0tICogICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgKgotLSAqICAgRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCAgICAg ICAgICAgICoKLS0gKiAgIE1BICAwMjExMC0xMzAxICBVU0EgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0tICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS0K LS0jaW5jbHVkZSA8d21hdGFnLmg+Ci0tCi0tdXNpbmcgbmFtZXNwYWNlIFRhZ0xpYjsKLS0KLS1j bGFzcyBXTUE6OlRhZzo6VGFnUHJpdmF0ZQotLXsKLS1wdWJsaWM6Ci0tICBTdHJpbmcgdGl0bGU7 Ci0tICBTdHJpbmcgYXJ0aXN0OwotLSAgU3RyaW5nIGNvcHlyaWdodDsKLS0gIFN0cmluZyBjb21t ZW50OwotLSAgU3RyaW5nIHJhdGluZzsKLS0gIEF0dHJpYnV0ZU1hcCBhdHRyaWJ1dGVNYXA7Ci0t fTsKLS0KLS1XTUE6OlRhZzo6VGFnKCkKLS06IFRhZ0xpYjo6VGFnKCkKLS17Ci0tICBkID0gbmV3 IFRhZ1ByaXZhdGU7Ci0tfQotLQotLVdNQTo6VGFnOjp+VGFnKCkKLS17Ci0tICBpZihkKQotLSAg ICBkZWxldGUgZDsgIAotLX0KLS0KLS1TdHJpbmcKLS1XTUE6OlRhZzo6dGl0bGUoKSBjb25zdAot LXsKLS0gIHJldHVybiBkLT50aXRsZTsgIAotLX0KLS0KLS1TdHJpbmcKLS1XTUE6OlRhZzo6YXJ0 aXN0KCkgY29uc3QKLS17Ci0tICByZXR1cm4gZC0+YXJ0aXN0OyAgCi0tfQotLQotLVN0cmluZwot LVdNQTo6VGFnOjphbGJ1bSgpIGNvbnN0Ci0tewotLSAgaWYoZC0+YXR0cmlidXRlTWFwLmNvbnRh aW5zKCJXTS9BbGJ1bVRpdGxlIikpCi0tICAgIHJldHVybiBkLT5hdHRyaWJ1dGVNYXBbIldNL0Fs YnVtVGl0bGUiXS50b1N0cmluZygpOwotLSAgcmV0dXJuIFN0cmluZzo6bnVsbDsKLS19Ci0tCi0t U3RyaW5nCi0tV01BOjpUYWc6OmNvcHlyaWdodCgpIGNvbnN0Ci0tewotLSAgcmV0dXJuIGQtPmNv cHlyaWdodDsKLS19Ci0tCi0tU3RyaW5nCi0tV01BOjpUYWc6OmNvbW1lbnQoKSBjb25zdAotLXsK LS0gIHJldHVybiBkLT5jb21tZW50OwotLX0KLS0KLS1TdHJpbmcKLS1XTUE6OlRhZzo6cmF0aW5n KCkgY29uc3QKLS17Ci0tICByZXR1cm4gZC0+cmF0aW5nOwotLX0KLS0KLS11bnNpZ25lZCBpbnQK LS1XTUE6OlRhZzo6eWVhcigpIGNvbnN0Ci0tewotLSAgaWYoZC0+YXR0cmlidXRlTWFwLmNvbnRh aW5zKCJXTS9ZZWFyIikpCi0tICAgIHJldHVybiBkLT5hdHRyaWJ1dGVNYXBbIldNL1llYXIiXS50 b0ludCgpOwotLSAgcmV0dXJuIDA7Ci0tfQotLQotLXVuc2lnbmVkIGludAotLVdNQTo6VGFnOjp0 cmFjaygpIGNvbnN0Ci0tewotLSAgaWYoZC0+YXR0cmlidXRlTWFwLmNvbnRhaW5zKCJXTS9UcmFj a051bWJlciIpKQotLSAgICByZXR1cm4gZC0+YXR0cmlidXRlTWFwWyJXTS9UcmFja051bWJlciJd LnRvSW50KCk7Ci0tICBpZihkLT5hdHRyaWJ1dGVNYXAuY29udGFpbnMoIldNL1RyYWNrIikpCi0t ICAgIHJldHVybiBkLT5hdHRyaWJ1dGVNYXBbIldNL1RyYWNrIl0udG9JbnQoKTsKLS0gIHJldHVy biAwOwotLX0KLS0KLS1TdHJpbmcKLS1XTUE6OlRhZzo6Z2VucmUoKSBjb25zdAotLXsKLS0gIGlm KGQtPmF0dHJpYnV0ZU1hcC5jb250YWlucygiV00vR2VucmUiKSkKLS0gICAgcmV0dXJuIGQtPmF0 dHJpYnV0ZU1hcFsiV00vR2VucmUiXS50b1N0cmluZygpOwotLSAgcmV0dXJuIFN0cmluZzo6bnVs bDsKLS19Ci0tCi0tdm9pZCAKLS1XTUE6OlRhZzo6c2V0VGl0bGUoY29uc3QgU3RyaW5nICZ2YWx1 ZSkKLS17Ci0tICBkLT50aXRsZSA9IHZhbHVlOwotLX0KLS0KLS12b2lkIAotLVdNQTo6VGFnOjpz ZXRBcnRpc3QoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLS17Ci0tICBkLT5hcnRpc3QgPSB2YWx1ZTsg IAotLX0KLS0KLS12b2lkIAotLVdNQTo6VGFnOjpzZXRDb3B5cmlnaHQoY29uc3QgU3RyaW5nICZ2 YWx1ZSkKLS17Ci0tICBkLT5jb3B5cmlnaHQgPSB2YWx1ZTsgIAotLX0KLS0KLS12b2lkIAotLVdN QTo6VGFnOjpzZXRDb21tZW50KGNvbnN0IFN0cmluZyAmdmFsdWUpCi0tewotLSAgZC0+Y29tbWVu dCA9IHZhbHVlOwotLX0KLS0KLS12b2lkIAotLVdNQTo6VGFnOjpzZXRSYXRpbmcoY29uc3QgU3Ry aW5nICZ2YWx1ZSkKLS17Ci0tICBkLT5yYXRpbmcgPSB2YWx1ZTsKLS19Ci0tCi0tdm9pZCAKLS1X TUE6OlRhZzo6c2V0QWxidW0oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLS17Ci0tICBzZXRBdHRyaWJ1 dGUoIldNL0FsYnVtVGl0bGUiLCB2YWx1ZSk7Ci0tfQotLQotLXZvaWQgCi0tV01BOjpUYWc6OnNl dEdlbnJlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi0tewotLSAgc2V0QXR0cmlidXRlKCJXTS9HZW5y ZSIsIHZhbHVlKTsKLS19Ci0tCi0tdm9pZCAKLS1XTUE6OlRhZzo6c2V0WWVhcih1aW50IHZhbHVl KQotLXsKLS0gIHNldEF0dHJpYnV0ZSgiV00vWWVhciIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7 Ci0tfQotLQotLXZvaWQgCi0tV01BOjpUYWc6OnNldFRyYWNrKHVpbnQgdmFsdWUpCi0tewotLSAg c2V0QXR0cmlidXRlKCJXTS9UcmFja051bWJlciIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci0t fQotLQotLWNvbnN0IFdNQTo6QXR0cmlidXRlTWFwJiBXTUE6OlRhZzo6YXR0cmlidXRlTWFwKCkg Y29uc3QKLS17Ci0tICByZXR1cm4gZC0+YXR0cmlidXRlTWFwOwotLX0KLS0KLS12b2lkIFdNQTo6 VGFnOjpyZW1vdmVJdGVtKGNvbnN0IEJ5dGVWZWN0b3IgJmtleSkKLS17Ci0tICBBdHRyaWJ1dGVN YXA6Okl0ZXJhdG9yIGl0ID0gZC0+YXR0cmlidXRlTWFwLmZpbmQoa2V5KTsKLS0gIGlmKGl0ICE9 IGQtPmF0dHJpYnV0ZU1hcC5lbmQoKSkKLS0gICAgZC0+YXR0cmlidXRlTWFwLmVyYXNlKGl0KTsK LS19IAotLQotLXZvaWQgV01BOjpUYWc6OnNldEF0dHJpYnV0ZShjb25zdCBCeXRlVmVjdG9yICZr ZXksIGNvbnN0IFN0cmluZyAmdmFsdWUpCi0tewotLSAgc2V0QXR0cmlidXRlKGtleSwgV01BOjpB dHRyaWJ1dGUoa2V5LCB2YWx1ZSkpOwotLX0KLS0KLS12b2lkIFdNQTo6VGFnOjpzZXRBdHRyaWJ1 dGUoY29uc3QgQnl0ZVZlY3RvciAma2V5LCBjb25zdCBBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLS17 Ci0tICByZW1vdmVJdGVtKGtleSk7Ci0tICBkLT5hdHRyaWJ1dGVNYXAuaW5zZXJ0KGtleSwgYXR0 cmlidXRlKTsKLS19Ci0tCi0tYm9vbCBXTUE6OlRhZzo6aXNFbXB0eSgpIGNvbnN0IHsKLS0gIHJl dHVybiBUYWdMaWI6OlRhZzo6aXNFbXB0eSgpICYmCi0tICAgICAgICAgY29weXJpZ2h0KCkuaXNF bXB0eSgpICYmCi0tICAgICAgICAgcmF0aW5nKCkuaXNFbXB0eSgpICYmCi0tICAgICAgICAgZC0+ YXR0cmlidXRlTWFwLmlzRW1wdHkoKTsKLS19Ci0tCi0tdm9pZCBXTUE6OlRhZzo6ZHVwbGljYXRl KGNvbnN0IFRhZyAqc291cmNlLCBUYWcgKnRhcmdldCwgYm9vbCBvdmVyd3JpdGUpIHsKLS0gIFRh Z0xpYjo6VGFnOjpkdXBsaWNhdGUoc291cmNlLCB0YXJnZXQsIG92ZXJ3cml0ZSk7Ci0tICBpZihv dmVyd3JpdGUpIHsKLS0gICAgdGFyZ2V0LT5zZXRDb3B5cmlnaHQoc291cmNlLT5jb3B5cmlnaHQo KSk7Ci0tICAgIHRhcmdldC0+c2V0UmF0aW5nKHNvdXJjZS0+cmF0aW5nKCkpOwotLSAgfQotLSAg ZWxzZSB7Ci0tICAgIGlmICh0YXJnZXQtPmNvcHlyaWdodCgpLmlzRW1wdHkoKSkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLSAgICAgIHRhcmdldC0+c2V0Q29w eXJpZ2h0KHNvdXJjZS0+Y29weXJpZ2h0KCkpOwotLSAgICBpZiAodGFyZ2V0LT5yYXRpbmcoKS5p c0VtcHR5KCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0g ICAgICB0YXJnZXQtPnNldFJhdGluZyhzb3VyY2UtPnJhdGluZygpKTsKLS0gIH0KLS19Ci0tCi1J bmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hcHJvcGVydGllcy5jcHAKLT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWFwcm9wZXJ0aWVzLmNwcAkocmV2aXNp b24gNzA1MjMxKQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3dtYXByb3BlcnRpZXMuY3Bw CSh3b3JraW5nIGNvcHkpCi1AQCAtMSw4MyArMCwwIEBACi0tLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot LSAgICBjb3B5cmlnaHQgICAgICAgICAgICA6IChDKSAyMDA1IGJ5IEx1a2FzIExhbGluc2t5Ci0t ICAgIGVtYWlsICAgICAgICAgICAgICAgIDogbGFsaW5za3lAZ21haWwuY29tCi0tICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLS0KLS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICogICBUaGlzIGxpYnJhcnkg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAg KgotLSAqICAgaXQgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gICoKLS0gKiAgIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAqCi0tICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKgotLSAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICoKLS0gKiAgIFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAqCi0t ICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVSAgICAgKgotLSAqICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqCi0tICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljICAgICAgKgotLSAqICAgTGljZW5zZSBhbG9uZyB3aXRoIHRo aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICoKLS0gKiAg IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv biwgICAgICAgICAgICAqCi0tICogICBNQSAgMDIxMTAtMTMwMSAgVVNBICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0tCi0tI2luY2x1ZGUgPHRzdHJpbmcuaD4KLS0jaW5jbHVkZSA8d21hcHJvcGVydGllcy5o PgotLSAgCi0tdXNpbmcgbmFtZXNwYWNlIFRhZ0xpYjsKLS0KLS1jbGFzcyBXTUE6OlByb3BlcnRp ZXM6OlByb3BlcnRpZXNQcml2YXRlCi0tewotLXB1YmxpYzoKLS0gIFByb3BlcnRpZXNQcml2YXRl KCk6IGxlbmd0aCgwKSwgYml0cmF0ZSgwKSwgc2FtcGxlUmF0ZSgwKSwgY2hhbm5lbHMoMCkge30K LS0gIGludCBsZW5ndGg7Ci0tICBpbnQgYml0cmF0ZTsKLS0gIGludCBzYW1wbGVSYXRlOwotLSAg aW50IGNoYW5uZWxzOwotLX07Ci0tCi0tLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS0vLyBwdWJs aWMgbWVtYmVycwotLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0tCi0tV01BOjpQcm9wZXJ0aWVz OjpQcm9wZXJ0aWVzKCkgOiBBdWRpb1Byb3BlcnRpZXMoQXVkaW9Qcm9wZXJ0aWVzOjpBdmVyYWdl KQotLXsKLS0gIGQgPSBuZXcgUHJvcGVydGllc1ByaXZhdGU7Ci0tfQotLQotLVdNQTo6UHJvcGVy dGllczo6flByb3BlcnRpZXMoKQotLXsKLS0gIGlmKGQpCi0tICAgIGRlbGV0ZSBkOyAgCi0tfQot LQotLWludCBXTUE6OlByb3BlcnRpZXM6Omxlbmd0aCgpIGNvbnN0Ci0tewotLSAgcmV0dXJuIGQt Pmxlbmd0aDsKLS19Ci0tCi0taW50IFdNQTo6UHJvcGVydGllczo6Yml0cmF0ZSgpIGNvbnN0Ci0t ewotLSAgcmV0dXJuIGQtPmJpdHJhdGU7Ci0tfQotLQotLWludCBXTUE6OlByb3BlcnRpZXM6OnNh bXBsZVJhdGUoKSBjb25zdAotLXsKLS0gIHJldHVybiBkLT5zYW1wbGVSYXRlOwotLX0KLS0KLS1p bnQgV01BOjpQcm9wZXJ0aWVzOjpjaGFubmVscygpIGNvbnN0Ci0tewotLSAgcmV0dXJuIGQtPmNo YW5uZWxzOwotLX0gCi0tCi0tLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS0vLyBwcml2YXRlIG1l bWJlcnMKLS0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLQotLXZvaWQgV01BOjpQcm9wZXJ0aWVz OjpzZXQoaW50IGxlbmd0aCwgaW50IGJpdHJhdGUsIGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5l bHMpCi0tewotLSAgZC0+bGVuZ3RoID0gbGVuZ3RoOwotLSAgZC0+Yml0cmF0ZSA9IGJpdHJhdGU7 Ci0tICBkLT5zYW1wbGVSYXRlID0gc2FtcGxlUmF0ZTsKLS0gIGQtPmNoYW5uZWxzID0gY2hhbm5l bHM7Ci0tfQotLQotSW5kZXg6IGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3dtYWZpbGUuY3BwCi09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hZmlsZS5jcHAJKHJldmlz aW9uIDcwNTIzMSkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWFmaWxlLmNwcAkod29y a2luZyBjb3B5KQotQEAgLTEsMzg4ICswLDAgQEAKLS0vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICAg IGNvcHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUgYnkgTHVrYXMgTGFsaW5za3kKLS0gICAg ZW1haWwgICAgICAgICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5jb20KLS0gKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotLQotLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0t ICogICBpdCAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAgKgotLSAqICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqCi0tICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgKgotLSAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoKLS0gKiAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VICAgICAqCi0tICogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoKLS0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgICAgICAqCi0tICogICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgKgotLSAqICAgRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCAg ICAgICAgICAgICoKLS0gKiAgIE1BICAwMjExMC0xMzAxICBVU0EgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0tICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LS0KLS0jaW5jbHVkZSA8dHN0cmluZy5oPgotLSNpbmNsdWRlIDx3bWFmaWxlLmg+Ci0tI2luY2x1 ZGUgPHdtYXRhZy5oPgotLSNpbmNsdWRlIDx3bWFwcm9wZXJ0aWVzLmg+Ci0tCi0tI2luY2x1ZGUg PHN0cmluZy5oPgotLQotLXVzaW5nIG5hbWVzcGFjZSBUYWdMaWI7Ci0tCi0tY2xhc3MgV01BOjpG aWxlOjpGaWxlUHJpdmF0ZQotLXsKLS1wdWJsaWM6Ci0tICBGaWxlUHJpdmF0ZSgpOiBzaXplKDAp LCBvZmZzZXQxKDApLCBvZmZzZXQyKDApLCBzaXplMSgwKSwgc2l6ZTIoMCksCi0tICAgIG51bU9i amVjdHMoMCksIHRhZygwKSwgcHJvcGVydGllcygwKSB7fQotLSAgdW5zaWduZWQgbG9uZyBsb25n IHNpemU7Ci0tICB1bnNpZ25lZCBsb25nIG9mZnNldDEsIG9mZnNldDIsIHNpemUxLCBzaXplMiwg bnVtT2JqZWN0czsKLS0gIFdNQTo6VGFnICp0YWc7IAotLSAgV01BOjpQcm9wZXJ0aWVzICpwcm9w ZXJ0aWVzOyAKLS19OwotLQotLS8vIEdVSURzCi0tCi0tc3RydWN0IFdNQTo6R1VJRCAKLS17Ci0t ICBXTUE6OkRXT1JEIHYxOwotLSAgV01BOjpXT1JEIHYyOwotLSAgV01BOjpXT1JEIHYzOwotLSAg V01BOjpCWVRFIHY0WzhdOwotLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdVSUQgJmcpIGNvbnN0 IHsgcmV0dXJuIG1lbWNtcCh0aGlzLCAmZywgc2l6ZW9mKFdNQTo6R1VJRCkpID09IDA7IH0KLS0g IGJvb2wgb3BlcmF0b3IhPShjb25zdCBHVUlEICZnKSBjb25zdCB7IHJldHVybiBtZW1jbXAodGhp cywgJmcsIHNpemVvZihXTUE6OkdVSUQpKSAhPSAwOyB9Ci0tICBzdGF0aWMgR1VJRCBoZWFkZXI7 Ci0tICBzdGF0aWMgR1VJRCBmaWxlUHJvcGVydGllczsKLS0gIHN0YXRpYyBHVUlEIHN0cmVhbVBy b3BlcnRpZXM7Ci0tICBzdGF0aWMgR1VJRCBjb250ZW50RGVzY3JpcHRpb247Ci0tICBzdGF0aWMg R1VJRCBleHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbjsKLS0gIHN0YXRpYyBHVUlEIGF1ZGlvTWVk aWE7Ci0tfTsgCi0tCi0tV01BOjpHVUlEIFdNQTo6R1VJRDo6aGVhZGVyID0gewotLSAgMHg3NUIy MjYzMCwgMHg2NjhFLCAweDExQ0YsIHsgMHhBNiwgMHhEOSwgMHgwMCwgMHhBQSwgMHgwMCwgMHg2 MiwgMHhDRSwgMHg2QyB9Ci0tfTsgCi0tCi0tV01BOjpHVUlEIFdNQTo6R1VJRDo6ZmlsZVByb3Bl cnRpZXMgPSB7Ci0tICAweDhDQUJEQ0ExLCAweEE5NDcsIDB4MTFDRiwgeyAweDhFLCAweEU0LCAw eDAwLCAweEMwLCAweDBDLCAweDIwLCAweDUzLCAweDY1IH0sCi0tfTsgCi0tCi0tV01BOjpHVUlE IFdNQTo6R1VJRDo6c3RyZWFtUHJvcGVydGllcyA9IHsKLS0gIDB4QjdEQzA3OTEsIDB4QTlCNywg MHgxMUNGLCB7IDB4OEUsIDB4RTYsIDB4MDAsIDB4QzAsIDB4MEMsIDB4MjAsIDB4NTMsIDB4NjUg fSwKLS19OwotLQotLVdNQTo6R1VJRCBXTUE6OkdVSUQ6OmNvbnRlbnREZXNjcmlwdGlvbiA9IHsK LS0gIDB4NzViMjI2MzMsIDB4NjY4ZSwgMHgxMWNmLCB7IDB4YTYsIDB4ZDksIDB4MDAsIDB4YWEs IDB4MDAsIDB4NjIsIDB4Y2UsIDB4NmMgfSwKLS19OyAKLS0KLS1XTUE6OkdVSUQgV01BOjpHVUlE OjpleHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbiA9IHsKLS0gIDB4RDJEMEE0NDAsIDB4RTMwNywg MHgxMUQyLCB7IDB4OTcsIDB4RjAsIDB4MDAsIDB4QTAsIDB4QzksIDB4NUUsIDB4QTgsIDB4NTAg fSwKLS19OyAKLS0KLS1XTUE6OkdVSUQgV01BOjpHVUlEOjphdWRpb01lZGlhID0gewotLSAgMHhG ODY5OUU0MCwgMHg1QjRELCAweDExQ0YsIHsgMHhBOCwgMHhGRCwgMHgwMCwgMHg4MCwgMHg1Riwg MHg1QywgMHg0NCwgMHgyQiB9LAotLX07IAotLQotLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0t Ly8gcHVibGljIG1lbWJlcnMKLS0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLQotLVdNQTo6Rmls ZTo6RmlsZShjb25zdCBjaGFyICpmaWxlLCBib29sIHJlYWRQcm9wZXJ0aWVzLCBQcm9wZXJ0aWVz OjpSZWFkU3R5bGUgcHJvcGVydGllc1N0eWxlKSAKLS0gIDogVGFnTGliOjpGaWxlKGZpbGUpCi0t ewotLSAgZCA9IG5ldyBGaWxlUHJpdmF0ZTsKLS0gIHJlYWQocmVhZFByb3BlcnRpZXMsIHByb3Bl cnRpZXNTdHlsZSk7Ci0tfQotLQotLVdNQTo6RmlsZTo6fkZpbGUoKQotLXsKLS0gIGlmKGQpIHsK LS0gICAgaWYgKGQtPnRhZykgCi0tICAgICAgZGVsZXRlIGQtPnRhZzsKLS0gICAgaWYgKGQtPnBy b3BlcnRpZXMpIAotLSAgICAgIGRlbGV0ZSBkLT5wcm9wZXJ0aWVzOwotLSAgICBkZWxldGUgZDsg ICAKLS0gIH0KLS19Ci0tCi0tVGFnTGliOjpUYWcgKldNQTo6RmlsZTo6dGFnKCkgY29uc3QKLS17 Ci0tICByZXR1cm4gZC0+dGFnOwotLX0gCi0tCi0tV01BOjpUYWcgKldNQTo6RmlsZTo6V01BVGFn KCkgY29uc3QKLS17Ci0tICByZXR1cm4gZC0+dGFnOwotLX0gCi0tCi0tV01BOjpQcm9wZXJ0aWVz ICpXTUE6OkZpbGU6OmF1ZGlvUHJvcGVydGllcygpIGNvbnN0Ci0tewotLSAgcmV0dXJuIGQtPnBy b3BlcnRpZXM7Ci0tfSAKLS0KLS12b2lkIFdNQTo6RmlsZTo6cmVhZChib29sIHJlYWRQcm9wZXJ0 aWVzLCBQcm9wZXJ0aWVzOjpSZWFkU3R5bGUgLyogcHJvcGVydGllc1N0eWxlICovKQotLXsKLS0g IFdNQTo6R1VJRCBndWlkOwotLQotLSAgcmVhZEdVSUQoZ3VpZCk7Ci0tICBpZihndWlkICE9IEdV SUQ6OmhlYWRlcikgewotLSAgICByZXR1cm47Ci0tICB9Ci0tCi0tICBpbnQgbGVuZ3RoID0gMDsK LS0gIGludCBiaXRyYXRlID0gMDsKLS0gIGludCBzYW1wbGVSYXRlID0gMDsKLS0gIGludCBjaGFu bmVscyA9IDA7Ci0tICAKLS0gIGQtPnRhZyA9IG5ldyBXTUE6OlRhZygpOwotLSAgaWYoIWQtPnRh ZykKLS0gICAgcmV0dXJuOwotLSAgCi0tICBkLT5zaXplID0gcmVhZFFXT1JEKCk7Ci0tICBkLT5u dW1PYmplY3RzID0gcmVhZERXT1JEKCk7IAotLSAgc2VlaygyLCBDdXJyZW50KTsKLS0gICAgCi0t ICBmb3IoaW50IGkgPSAwOyBpIDwgKGludClkLT5udW1PYmplY3RzOyBpKyspIHsKLS0KLS0gICAg cmVhZEdVSUQoZ3VpZCk7Ci0tICAgIGxvbmcgb2JqZWN0U2l6ZSA9IChsb25nKXJlYWRRV09SRCgp OwotLSAgICAgIAotLSAgICBpZihyZWFkUHJvcGVydGllcyAmJiBndWlkID09IEdVSUQ6OmZpbGVQ cm9wZXJ0aWVzKSB7Ci0tCi0tICAgICAgc2VlaygxNis4KzgrOCwgQ3VycmVudCk7Ci0tICAgICAg bGVuZ3RoID0gKGludCkocmVhZFFXT1JEKCkgLyAxMDAwMDAwMEwpOwotLSAgICAgIHNlZWsoOCs4 KzQrNCs0KzQsIEN1cnJlbnQpOwotLSAgICAgIAotLSAgICB9Ci0tCi0tICAgIGVsc2UgaWYocmVh ZFByb3BlcnRpZXMgJiYgZ3VpZCA9PSBHVUlEOjpzdHJlYW1Qcm9wZXJ0aWVzKSB7Ci0tICAgICAg Ci0tICAgICAgbG9uZyBwb3MgPSB0ZWxsKCk7Ci0tICAgICAgICAKLS0gICAgICByZWFkR1VJRChn dWlkKTsKLS0gICAgICBpZihndWlkICE9IEdVSUQ6OmF1ZGlvTWVkaWEpIHsKLS0gICAgICAgIHJl dHVybjsgCi0tICAgICAgfQotLSAgICAgICAgCi0tICAgICAgc2VlaygxNis4KzQrNCsyKzQrMiwg Q3VycmVudCk7Ci0tICAgICAgY2hhbm5lbHMgPSByZWFkV09SRCgpOwotLSAgICAgIHNhbXBsZVJh dGUgPSByZWFkRFdPUkQoKTsKLS0gICAgICBiaXRyYXRlID0gcmVhZERXT1JEKCkgKiA4IC8gMTAw MDsKLS0gICAgICAgIAotLSAgICAgIHNlZWsocG9zICsgKGxvbmcpb2JqZWN0U2l6ZSAtIDI0KTsK LS0gICAgfQotLSAgICAgIAotLSAgICBlbHNlIGlmKGd1aWQgPT0gR1VJRDo6ZXh0ZW5kZWRDb250 ZW50RGVzY3JpcHRpb24pIHsKLS0KLS0gICAgICBkLT5vZmZzZXQyID0gdGVsbCgpIC0gMTYgLSA4 OwotLSAgICAgIGQtPnNpemUyID0gKGxvbmcpb2JqZWN0U2l6ZTsKLS0KLS0gICAgICBpbnQgbnVt RGVzY3JpcHRvcnMgPSByZWFkV09SRCgpOwotLSAgICAgICAgCi0tICAgICAgZm9yKGludCBqID0g MDsgaiA8IG51bURlc2NyaXB0b3JzOyBqKyspIHsKLS0gICAgICAgIFdNQTo6QXR0cmlidXRlIGF0 dHIoKnRoaXMpOwotLSAgICAgICAgZC0+dGFnLT5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lKCkudG9D U3RyaW5nKGZhbHNlKSwgYXR0cik7Ci0tICAgICAgfQotLSAgICAgIAotLSAgICB9Ci0tICAgICAg Ci0tICAgIGVsc2UgaWYoZ3VpZCA9PSBHVUlEOjpjb250ZW50RGVzY3JpcHRpb24pIHsKLS0KLS0g ICAgICBkLT5vZmZzZXQxID0gdGVsbCgpIC0gMTYgLSA4OwotLSAgICAgIGQtPnNpemUxID0gKGxv bmcpb2JqZWN0U2l6ZTsKLS0KLS0gICAgICBpbnQgdGl0bGVMZW5ndGggPSByZWFkV09SRCgpOwot LSAgICAgIGludCBhcnRpc3RMZW5ndGggPSByZWFkV09SRCgpOwotLSAgICAgIGludCBjb3B5cmln aHRMZW5ndGggPSByZWFkV09SRCgpOwotLSAgICAgIGludCBjb21tZW50TGVuZ3RoID0gcmVhZFdP UkQoKTsKLS0gICAgICBpbnQgcmF0aW5nTGVuZ3RoID0gcmVhZFdPUkQoKTsKLS0KLS0gICAgICBT dHJpbmcgdmFsdWU7Ci0tICAgICAgCi0tICAgICAgcmVhZFN0cmluZyh0aXRsZUxlbmd0aCwgdmFs dWUpOwotLSAgICAgIGQtPnRhZy0+c2V0VGl0bGUodmFsdWUpOwotLSAgICAgIAotLSAgICAgIHJl YWRTdHJpbmcoYXJ0aXN0TGVuZ3RoLCB2YWx1ZSk7Ci0tICAgICAgZC0+dGFnLT5zZXRBcnRpc3Qo dmFsdWUpOwotLSAgICAgIAotLSAgICAgIHJlYWRTdHJpbmcoY29weXJpZ2h0TGVuZ3RoLCB2YWx1 ZSk7Ci0tICAgICAgZC0+dGFnLT5zZXRDb3B5cmlnaHQodmFsdWUpOwotLSAgICAgIAotLSAgICAg IHJlYWRTdHJpbmcoY29tbWVudExlbmd0aCwgdmFsdWUpOwotLSAgICAgIGQtPnRhZy0+c2V0Q29t bWVudCh2YWx1ZSk7Ci0tICAgICAgCi0tICAgICAgcmVhZFN0cmluZyhyYXRpbmdMZW5ndGgsIHZh bHVlKTsKLS0gICAgICBkLT50YWctPnNldFJhdGluZyh2YWx1ZSk7Ci0tICAgIH0KLS0gICAgICAK LS0gICAgZWxzZSB7Ci0tICAgICAgc2VlaygobG9uZylvYmplY3RTaXplIC0gMjQsIEN1cnJlbnQp OwotLSAgICB9Ci0tICAgIAotLSAgfQotLSAgCi0tICBpZihyZWFkUHJvcGVydGllcykgewotLSAg ICBkLT5wcm9wZXJ0aWVzID0gbmV3IFdNQTo6UHJvcGVydGllcygpOwotLSAgICBpZihkLT5wcm9w ZXJ0aWVzKSAKLS0gICAgICBkLT5wcm9wZXJ0aWVzLT5zZXQobGVuZ3RoLCBiaXRyYXRlLCBzYW1w bGVSYXRlLCBjaGFubmVscyk7Ci0tICB9Ci0tICAKLS19Ci0tCi0tYm9vbCBXTUE6OkZpbGU6OnNh dmUoKQotLXsKLS0gIGlmKHJlYWRPbmx5KCkpIHsKLS0gICAgcmV0dXJuIGZhbHNlOwotLSAgfQot LQotLSAgaWYoZC0+b2Zmc2V0MSA9PSAwKSB7Ci0tICAgIGQtPm9mZnNldDEgPSAxNiArIDggKyA0 ICsgMjsKLS0gICAgZC0+bnVtT2JqZWN0cysrOwotLSAgfQotLQotLSAgaWYoZC0+b2Zmc2V0MiA9 PSAwKSB7Ci0tICAgIGQtPm9mZnNldDIgPSAxNiArIDggKyA0ICsgMjsKLS0gICAgZC0+bnVtT2Jq ZWN0cysrOwotLSAgfQotLQotLSAgQnl0ZVZlY3RvciBjaHVuazEgPSByZW5kZXJDb250ZW50RGVz Y3JpcHRpb24oKTsKLS0gIEJ5dGVWZWN0b3IgY2h1bmsyID0gcmVuZGVyRXh0ZW5kZWRDb250ZW50 RGVzY3JpcHRpb24oKTsKLS0KLS0gIGlmKGQtPm9mZnNldDEgPiBkLT5vZmZzZXQyKSB7Ci0tICAg IGluc2VydChjaHVuazEsIGQtPm9mZnNldDEsIGQtPnNpemUxKTsKLS0gICAgaW5zZXJ0KGNodW5r MiwgZC0+b2Zmc2V0MiwgZC0+c2l6ZTIpOwotLSAgfQotLSAgZWxzZSB7Ci0tICAgIGluc2VydChj aHVuazIsIGQtPm9mZnNldDIsIGQtPnNpemUyKTsKLS0gICAgaW5zZXJ0KGNodW5rMSwgZC0+b2Zm c2V0MSwgZC0+c2l6ZTEpOwotLSAgfQotLQotLSAgaW5zZXJ0KEJ5dGVWZWN0b3I6OmZyb21Mb25n TG9uZyhkLT5zaXplICsgCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQp KGNodW5rMS5zaXplKCkgLSBkLT5zaXplMSkgKyAKLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGludCkoY2h1bmsyLnNpemUoKSAtIGQtPnNpemUyKSwgZmFsc2UpICsKLS0gICAg ICAgICBCeXRlVmVjdG9yOjpmcm9tVUludChkLT5udW1PYmplY3RzLCBmYWxzZSksIDE2LCA4ICsg NCk7Ci0tCi0tICByZXR1cm4gdHJ1ZTsKLS19Ci0tCi0tLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K LS0vLyBwcm90ZWN0ZWQgbWVtYmVycwotLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0tCi0taW50 IFdNQTo6RmlsZTo6cmVhZEJZVEUoKQotLXsKLS0gIEJ5dGVWZWN0b3IgdiA9IHJlYWRCbG9jaygx KTsKLS0gIHJldHVybiB2WzBdOwotLX0KLS0KLS1pbnQgV01BOjpGaWxlOjpyZWFkV09SRCgpCi0t ewotLSAgQnl0ZVZlY3RvciB2ID0gcmVhZEJsb2NrKDIpOwotLSAgcmV0dXJuIHYudG9TaG9ydChm YWxzZSk7Ci0tfQotLQotLXVuc2lnbmVkIGludCBXTUE6OkZpbGU6OnJlYWREV09SRCgpCi0tewot LSAgQnl0ZVZlY3RvciB2ID0gcmVhZEJsb2NrKDQpOwotLSAgcmV0dXJuIHYudG9VSW50KGZhbHNl KTsKLS19Ci0tCi0tbG9uZyBsb25nIFdNQTo6RmlsZTo6cmVhZFFXT1JEKCkKLS17Ci0tICBCeXRl VmVjdG9yIHYgPSByZWFkQmxvY2soOCk7Ci0tICByZXR1cm4gdi50b0xvbmdMb25nKGZhbHNlKTsK LS19Ci0tCi0tdm9pZCBXTUE6OkZpbGU6OnJlYWRHVUlEKEdVSUQgJmcpCi0tewotLSAgZy52MSA9 IHJlYWREV09SRCgpOwotLSAgZy52MiA9IHJlYWRXT1JEKCk7Ci0tICBnLnYzID0gcmVhZFdPUkQo KTsKLS0gIGZvcihpbnQgaSA9IDA7IGkgPCA4OyBpKyspCi0tICAgIGcudjRbaV0gPSByZWFkQllU RSgpOyAKLS19Ci0tCi0tdm9pZCBXTUE6OkZpbGU6OnJlYWRTdHJpbmcoaW50IGxlbiwgU3RyaW5n ICZzKQotLXsKLS0gIEJ5dGVWZWN0b3IgdiA9IHJlYWRCbG9jayhsZW4pOwotLSAgaWYobGVuIDwg MiB8fCB2W2xlbi0xXSAhPSAwIHx8IHZbbGVuLTJdICE9IDApCi0tICAgIHYuYXBwZW5kKEJ5dGVW ZWN0b3I6OmZyb21TaG9ydCgwKSk7Ci0tICBzID0gU3RyaW5nKHYsIFN0cmluZzo6VVRGMTZMRSk7 Ci0tfQotLQotLUJ5dGVWZWN0b3IgV01BOjpGaWxlOjpyZW5kZXJDb250ZW50RGVzY3JpcHRpb24o KQotLXsKLS0gIFN0cmluZyBzOyAgICAKLS0gICAgCi0tICBzID0gZC0+dGFnLT50aXRsZSgpOyAg Ci0tICBCeXRlVmVjdG9yIHYxID0gcy5kYXRhKFN0cmluZzo6VVRGMTZMRSk7Ci0tICBpZihzLnNp emUoKSkgewotLSAgICB2MS5hcHBlbmQoKGNoYXIpMCk7Ci0tICAgIHYxLmFwcGVuZCgoY2hhcikw KTsKLS0gIH0KLS0gIAotLSAgcyA9IGQtPnRhZy0+YXJ0aXN0KCk7ICAKLS0gIEJ5dGVWZWN0b3Ig djIgPSBzLmRhdGEoU3RyaW5nOjpVVEYxNkxFKTsKLS0gIGlmKHMuc2l6ZSgpKSB7Ci0tICAgIHYy LmFwcGVuZCgoY2hhcikwKTsKLS0gICAgdjIuYXBwZW5kKChjaGFyKTApOwotLSAgfQotLSAgCi0t ICBzID0gZC0+dGFnLT5jb3B5cmlnaHQoKTsgIAotLSAgQnl0ZVZlY3RvciB2MyA9IHMuZGF0YShT dHJpbmc6OlVURjE2TEUpOwotLSAgaWYocy5zaXplKCkpIHsKLS0gICAgdjMuYXBwZW5kKChjaGFy KTApOwotLSAgICB2My5hcHBlbmQoKGNoYXIpMCk7Ci0tICB9IAotLSAgCi0tICBzID0gZC0+dGFn LT5jb21tZW50KCk7ICAKLS0gIEJ5dGVWZWN0b3IgdjQgPSBzLmRhdGEoU3RyaW5nOjpVVEYxNkxF KTsKLS0gIGlmKHMuc2l6ZSgpKSB7Ci0tICAgIHY0LmFwcGVuZCgoY2hhcikwKTsKLS0gICAgdjQu YXBwZW5kKChjaGFyKTApOwotLSAgfQotLSAgCi0tICBzID0gZC0+dGFnLT5yYXRpbmcoKTsgIAot LSAgQnl0ZVZlY3RvciB2NSA9IHMuZGF0YShTdHJpbmc6OlVURjE2TEUpOwotLSAgaWYocy5zaXpl KCkpIHsKLS0gICAgdjUuYXBwZW5kKChjaGFyKTApOwotLSAgICB2NS5hcHBlbmQoKGNoYXIpMCk7 Ci0tICB9Ci0tCi0tICBCeXRlVmVjdG9yIGRhdGE7Ci0tCi0tICBkYXRhLmFwcGVuZChCeXRlVmVj dG9yOjpmcm9tU2hvcnQodjEuc2l6ZSgpLCBmYWxzZSkpOwotLSAgZGF0YS5hcHBlbmQoQnl0ZVZl Y3Rvcjo6ZnJvbVNob3J0KHYyLnNpemUoKSwgZmFsc2UpKTsKLS0gIGRhdGEuYXBwZW5kKEJ5dGVW ZWN0b3I6OmZyb21TaG9ydCh2My5zaXplKCksIGZhbHNlKSk7Ci0tICBkYXRhLmFwcGVuZChCeXRl VmVjdG9yOjpmcm9tU2hvcnQodjQuc2l6ZSgpLCBmYWxzZSkpOwotLSAgZGF0YS5hcHBlbmQoQnl0 ZVZlY3Rvcjo6ZnJvbVNob3J0KHY1LnNpemUoKSwgZmFsc2UpKTsKLS0KLS0gIGRhdGEuYXBwZW5k KHYxKTsKLS0gIGRhdGEuYXBwZW5kKHYyKTsKLS0gIGRhdGEuYXBwZW5kKHYzKTsKLS0gIGRhdGEu YXBwZW5kKHY0KTsKLS0gIGRhdGEuYXBwZW5kKHY1KTsKLS0KLS0gIGRhdGEgPSBCeXRlVmVjdG9y KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPigmR1VJRDo6Y29udGVudERlc2NyaXB0aW9u KSwgc2l6ZW9mKEdVSUQpKQotLSAgICArIEJ5dGVWZWN0b3I6OmZyb21Mb25nTG9uZyhkYXRhLnNp emUoKSArIDE2ICsgOCwgZmFsc2UpCi0tICAgICsgZGF0YTsKLS0KLS0gIHJldHVybiBkYXRhOwot LX0KLS0KLS1CeXRlVmVjdG9yIFdNQTo6RmlsZTo6cmVuZGVyRXh0ZW5kZWRDb250ZW50RGVzY3Jp cHRpb24oKQotLXsKLS0gIEJ5dGVWZWN0b3IgZGF0YTsKLS0KLS0gIGRhdGEuYXBwZW5kKEJ5dGVW ZWN0b3I6OmZyb21TaG9ydChkLT50YWctPmF0dHJpYnV0ZU1hcCgpLnNpemUoKSwgZmFsc2UpKTsK LS0gIAotLSAgV01BOjpBdHRyaWJ1dGVNYXA6OkNvbnN0SXRlcmF0b3IgaXQgPSBkLT50YWctPmF0 dHJpYnV0ZU1hcCgpLmJlZ2luKCk7Ci0tICBmb3IoOyBpdCAhPSBkLT50YWctPmF0dHJpYnV0ZU1h cCgpLmVuZCgpOyBpdCsrKSAKLS0gICAgZGF0YS5hcHBlbmQoaXQtPnNlY29uZC5yZW5kZXIoKSk7 Ci0tICAKLS0gIGRhdGEgPSBCeXRlVmVjdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAq PigmR1VJRDo6ZXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb24pLCBzaXplb2YoR1VJRCkpCi0tICAg ICsgQnl0ZVZlY3Rvcjo6ZnJvbUxvbmdMb25nKGRhdGEuc2l6ZSgpICsgMTYgKyA4LCBmYWxzZSkK LS0gICAgKyBkYXRhOwotLQotLSAgcmV0dXJuIGRhdGE7Ci0tfQotLQotLQotSW5kZXg6IGFtYXJv ay9zcmMvbWV0YWRhdGEvd21hL3dtYXRhZy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9t ZXRhZGF0YS93bWEvd21hdGFnLmgJKHJldmlzaW9uIDcwNTIzMSkKLSsrKyBhbWFyb2svc3JjL21l dGFkYXRhL3dtYS93bWF0YWcuaAkod29ya2luZyBjb3B5KQotQEAgLTEsMTg4ICswLDAgQEAKLS0v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCi0tICAgIGNvcHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUg YnkgTHVrYXMgTGFsaW5za3kKLS0gICAgZW1haWwgICAgICAgICAgICAgICAgOiBsYWxpbnNreUBn bWFpbC5jb20KLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLQotLS8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK LS0gKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0tICogICBpdCAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAgKgotLSAqICAgMi4xIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAgICAgICAgICAg ICAgICAgICoKLS0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0tICogICBUaGlzIGxpYnJhcnkgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgKgotLSAq ICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZiAgICAgICAgICAgICoKLS0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VICAgICAqCi0tICogICBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAg ICAgKgotLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgICAgICAqCi0tICogICBM aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlICAgKgotLSAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCAgICAgICAgICAgICoKLS0gKiAgIE1BICAwMjExMC0xMzAx ICBVU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq Ci0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLS0KLS0jaWZuZGVmIFRBR0xJQl9XTUFUQUdfSAotLSNk ZWZpbmUgVEFHTElCX1dNQVRBR19ICi0tCi0tI2luY2x1ZGUgPHRtYXAuaD4KLS0jaW5jbHVkZSA8 dGFnLmg+Ci0tI2luY2x1ZGUgIndtYWZpbGUuaCIKLS0jaW5jbHVkZSAid21hYXR0cmlidXRlLmgi Ci0tCi0tbmFtZXNwYWNlIFRhZ0xpYiB7Ci0tCi0tICBuYW1lc3BhY2UgV01BIHsKLS0gIAotLSAg ICB0eXBlZGVmIE1hcDxjb25zdCBCeXRlVmVjdG9yLCBBdHRyaWJ1dGU+IEF0dHJpYnV0ZU1hcDsK LS0gICAgICAKLS0gICAgY2xhc3MgVGFnIDogcHVibGljIFRhZ0xpYjo6VGFnIHsKLS0gICAgCi0t ICAgICAgZnJpZW5kIGNsYXNzIEZpbGU7Ci0tICAgICAgCi0tICAgIHB1YmxpYzoKLS0gICAgCi0t ICAgICAgVGFnKCk7Ci0tCi0tICAgICAgdmlydHVhbCB+VGFnKCk7Ci0tCi0tICAgICAgLyohCi0t ICAgICAgICogUmV0dXJucyB0aGUgdHJhY2sgbmFtZS4KLS0gICAgICAgKi8KLS0gICAgICB2aXJ0 dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFJldHVy bnMgdGhlIGFydGlzdCBuYW1lLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgU3RyaW5nIGFy dGlzdCgpIGNvbnN0OwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFJldHVybnMgdGhlIGFsYnVt IG5hbWU7IGlmIG5vIGFsYnVtIG5hbWUgaXMgcHJlc2VudCBpbiB0aGUgdGFnCi0tICAgICAgICog U3RyaW5nOjpudWxsIHdpbGwgYmUgcmV0dXJuZWQuCi0tICAgICAgICovCi0tICAgICAgdmlydHVh bCBTdHJpbmcgYWxidW0oKSBjb25zdDsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5z IHRoZSB0cmFjayBjb21tZW50LgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgU3RyaW5nIGNv bW1lbnQoKSBjb25zdDsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5zIHRoZSBnZW5y ZSBuYW1lOyBpZiBubyBnZW5yZSBpcyBwcmVzZW50IGluIHRoZSB0YWcgU3RyaW5nOjpudWxsCi0t ICAgICAgICogd2lsbCBiZSByZXR1cm5lZC4KLS0gICAgICAgKi8KLS0gICAgICB2aXJ0dWFsIFN0 cmluZyBnZW5yZSgpIGNvbnN0OwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFJldHVybnMgdGhl IHJhdGluZy4KLS0gICAgICAgKi8KLS0gICAgICB2aXJ0dWFsIFN0cmluZyByYXRpbmcoKSBjb25z dDsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5zIHRoZSBnZW5yZSBuYW1lOyBpZiBu byBnZW5yZSBpcyBwcmVzZW50IGluIHRoZSB0YWcgU3RyaW5nOjpudWxsCi0tICAgICAgICogd2ls bCBiZSByZXR1cm5lZC4KLS0gICAgICAgKi8KLS0gICAgICB2aXJ0dWFsIFN0cmluZyBjb3B5cmln aHQoKSBjb25zdDsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5zIHRoZSB5ZWFyOyBp ZiB0aGVyZSBpcyBubyB5ZWFyIHNldCwgdGhpcyB3aWxsIHJldHVybiAwLgotLSAgICAgICAqLwot LSAgICAgIHZpcnR1YWwgdWludCB5ZWFyKCkgY29uc3Q7Ci0tCi0tICAgICAgLyohCi0tICAgICAg ICogUmV0dXJucyB0aGUgdHJhY2sgbnVtYmVyOyBpZiB0aGVyZSBpcyBubyB0cmFjayBudW1iZXIg c2V0LCB0aGlzIHdpbGwKLS0gICAgICAgKiByZXR1cm4gMC4KLS0gICAgICAgKi8KLS0gICAgICB2 aXJ0dWFsIHVpbnQgdHJhY2soKSBjb25zdDsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBTZXRz IHRoZSB0aXRsZSB0byBcYSBzLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgdm9pZCBzZXRU aXRsZShjb25zdCBTdHJpbmcgJnMpOwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFNldHMgdGhl IGFydGlzdCB0byBcYSBzLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgdm9pZCBzZXRBcnRp c3QoY29uc3QgU3RyaW5nICZzKTsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBTZXRzIHRoZSBh bGJ1bSB0byBcYSBzLiAgSWYgXGEgcyBpcyBTdHJpbmc6Om51bGwgdGhlbiB0aGlzIHZhbHVlIHdp bGwgYmUKLS0gICAgICAgKiBjbGVhcmVkLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgdm9p ZCBzZXRBbGJ1bShjb25zdCBTdHJpbmcgJnMpOwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFNl dHMgdGhlIGNvbW1lbnQgdG8gXGEgcy4KLS0gICAgICAgKi8KLS0gICAgICB2aXJ0dWFsIHZvaWQg c2V0Q29tbWVudChjb25zdCBTdHJpbmcgJnMpOwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFNl dHMgdGhlIHJhdGluZyB0byBcYSBzLiAKLS0gICAgICAgKi8KLS0gICAgICB2aXJ0dWFsIHZvaWQg c2V0UmF0aW5nKGNvbnN0IFN0cmluZyAmcyk7Ci0tCi0tICAgICAgLyohCi0tICAgICAgICogU2V0 cyB0aGUgY29weXJpZ2h0IHRvIFxhIHMuIAotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgdm9p ZCBzZXRDb3B5cmlnaHQoY29uc3QgU3RyaW5nICZzKTsKLS0KLS0gICAgICAvKiEKLS0gICAgICAg KiBTZXRzIHRoZSBnZW5yZSB0byBcYSBzLiAKLS0gICAgICAgKi8KLS0gICAgICB2aXJ0dWFsIHZv aWQgc2V0R2VucmUoY29uc3QgU3RyaW5nICZzKTsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBT ZXRzIHRoZSB5ZWFyIHRvIFxhIGkuICBJZiBcYSBzIGlzIDAgdGhlbiB0aGlzIHZhbHVlIHdpbGwg YmUgY2xlYXJlZC4KLS0gICAgICAgKi8KLS0gICAgICB2aXJ0dWFsIHZvaWQgc2V0WWVhcih1aW50 IGkpOwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFNldHMgdGhlIHRyYWNrIHRvIFxhIGkuICBJ ZiBcYSBzIGlzIDAgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgY2xlYXJlZC4KLS0gICAgICAgKi8K LS0gICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhY2sodWludCBpKTsKLS0KLS0gICAgICAvKiEKLS0g ICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRhZyBkb2VzIG5vdCBjb250YWluIGFueSBkYXRh LiAgVGhpcyBzaG91bGQgYmUKLS0gICAgICAgKiByZWltcGxlbWVudGVkIGluIHN1YmNsYXNzZXMg dGhhdCBwcm92aWRlIG1vcmUgdGhhbiB0aGUgYmFzaWMgdGFnZ2luZwotLSAgICAgICAqIGFiaWxp dGllcyBpbiB0aGlzIGNsYXNzLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgYm9vbCBpc0Vt cHR5KCkgY29uc3Q7Ci0tCi0tICAgICAgLyohCi0tICAgICAgICogQ29waWVzIHRoZSBnZW5lcmlj IGRhdGEgZnJvbSBvbmUgdGFnIHRvIGFub3RoZXIuCi0tICAgICAgICoKLS0gICAgICAgKiBJZiBc YSBvdmVyd3JpdGUgaXMgdHJ1ZSB0aGVuIHRoZSB2YWx1ZXMgd2lsbCBiZSB1bmNvbmRpdGlvbmFs bHkgY29waWVkLgotLSAgICAgICAqIElmIGZhbHNlIG9ubHkgZW1wdHkgdmFsdWVzIHdpbGwgYmUg b3ZlcndyaXR0ZW4uCi0tICAgICAgICovCi0tICAgICAgc3RhdGljIHZvaWQgZHVwbGljYXRlKGNv bnN0IFRhZyAqc291cmNlLCBUYWcgKnRhcmdldCwgYm9vbCBvdmVyd3JpdGUgPSB0cnVlKTsKLS0K LS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpdGVtIGxp c3QgbWFwLiAgVGhpcyBpcyBhbiBJdGVtTGlzdE1hcCBvZgotLSAgICAgICAqIGFsbCBvZiB0aGUg aXRlbXMgaW4gdGhlIHRhZy4KLS0gICAgICAgKgotLSAgICAgICAqIFRoaXMgaXMgdGhlIG1vc3Qg cG93ZXJmdWxsIHN0cnVjdHVyZSBmb3IgYWNjZXNzaW5nIHRoZSBpdGVtcyBvZiB0aGUgdGFnLgot LSAgICAgICAqCi0tICAgICAgICogXHdhcm5pbmcgWW91IHNob3VsZCBub3QgbW9kaWZ5IHRoaXMg ZGF0YSBzdHJ1Y3R1cmUgZGlyZWN0bHksIGluc3RlYWQKLS0gICAgICAgKiB1c2Ugc2V0SXRlbSgp IGFuZCByZW1vdmVJdGVtKCkuCi0tICAgICAgICovIAotLSAgICAgICBjb25zdCBBdHRyaWJ1dGVN YXAgJmF0dHJpYnV0ZU1hcCgpIGNvbnN0OwotLSAgICAgIAotLSAgICAgIC8qIQotLSAgICAgICAq IFJlbW92ZXMgdGhlIFxhIGtleSBhdHRyaWJ1dGUgZnJvbSB0aGUgdGFnCi0tICAgICAgICovCi0t ICAgICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IEJ5dGVWZWN0b3IgJmtleSk7ICAgICAgIAotLSAg ICAgIAotLSAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IEJ5dGVWZWN0b3IgJmtleSwgY29u c3QgU3RyaW5nICZ2YWx1ZSk7Ci0tICAgICAgCi0tICAgICAgLyohCi0tICAgICAgICogU2V0cyB0 aGUgXGEga2V5IGF0dHJpYnV0ZSB0byB0aGUgdmFsdWUgb2YgXGEgYXR0cmlidXRlLiBJZiBhbiBh dHRyaWJ1dGUKLS0gICAgICAgKiB3aXRoIHRoZSBcYSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50LCBp dCB3aWxsIGJlIHJlcGxhY2VkLgotLSAgICAgICAqLwotLSAgICAgIHZvaWQgc2V0QXR0cmlidXRl KGNvbnN0IEJ5dGVWZWN0b3IgJmtleSwgY29uc3QgQXR0cmlidXRlICZhdHRyaWJ1dGUpOwotLQot LSAgICBwcml2YXRlOgotLSAgICAgIAotLSAgICAgIGNsYXNzIFRhZ1ByaXZhdGU7Ci0tICAgICAg VGFnUHJpdmF0ZSAqZDsKLS0gICAgICAKLS0gICAgfTsKLS0gIH0KLS19Ci0tI2VuZGlmCi1JbmRl eDogYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hcHJvcGVydGllcy5oCi09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LS0gYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hcHJvcGVydGllcy5oCShyZXZpc2lvbiA3MDUy MzEpCi0rKysgYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hcHJvcGVydGllcy5oCSh3b3JraW5n IGNvcHkpCi1AQCAtMSw3MSArMCwwIEBACi0tLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLSAgICBjb3B5 cmlnaHQgICAgICAgICAgICA6IChDKSAyMDA1IGJ5IEx1a2FzIExhbGluc2t5Ci0tICAgIGVtYWls ICAgICAgICAgICAgICAgIDogbGFsaW5za3lAZ21haWwuY29tCi0tICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLS0KLS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotLSAqICAg aXQgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gICoKLS0gKiAgIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAqCi0tICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KgotLSAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsIGJ1dCAgICoKLS0gKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAqCi0tICogICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVSAgICAgKgotLSAqICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0t ICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljICAgICAgKgotLSAqICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICoKLS0gKiAgIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgICAgICAg ICAgICAqCi0tICogICBNQSAgMDIxMTAtMTMwMSAgVVNBICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0tCi0t I2lmbmRlZiBUQUdMSUJfV01BUFJPUEVSVElFU19ICi0tI2RlZmluZSBUQUdMSUJfV01BUFJPUEVS VElFU19ICi0tCi0tI2luY2x1ZGUgPGF1ZGlvcHJvcGVydGllcy5oPgotLSNpbmNsdWRlIDx0c3Ry aW5nLmg+Ci0tCi0tbmFtZXNwYWNlIFRhZ0xpYiB7Ci0tICAgIAotLSAgbmFtZXNwYWNlIFdNQSB7 Ci0tICAgICAgICAKLS0gICAgY2xhc3MgRmlsZTsgIAotLSAgICAgIAotLSAgICBjbGFzcyBQcm9w ZXJ0aWVzIDogcHVibGljIEF1ZGlvUHJvcGVydGllcwotLSAgICB7Ci0tICAgICAgICAKLS0gICAg ICBmcmllbmQgY2xhc3MgV01BOjpGaWxlOwotLSAgICAgIAotLSAgICBwdWJsaWM6Ci0tICAgIAot LSAgICAgIC8qIQotLSAgICAgICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBXTUE6OlByb3BlcnRp ZXMuCi0tICAgICAgICovCi0tICAgICAgUHJvcGVydGllcygpOwotLSAgICAgIAotLSAgICAgIC8q IQotLSAgICAgICAqIERlc3Ryb3lzIHRoaXMgV01BOjpQcm9wZXJ0aWVzIGluc3RhbmNlLgotLSAg ICAgICAqLwotLSAgICAgIHZpcnR1YWwgflByb3BlcnRpZXMoKTsKLS0KLS0gICAgICAvLyBSZWlt cGxlbWVudGF0aW9ucy4KLS0KLS0gICAgICB2aXJ0dWFsIGludCBsZW5ndGgoKSBjb25zdDsKLS0g ICAgICB2aXJ0dWFsIGludCBiaXRyYXRlKCkgY29uc3Q7Ci0tICAgICAgdmlydHVhbCBpbnQgc2Ft cGxlUmF0ZSgpIGNvbnN0OwotLSAgICAgIHZpcnR1YWwgaW50IGNoYW5uZWxzKCkgY29uc3Q7Ci0t Ci0tICAgICAgcHJpdmF0ZToKLS0gICAgCi0tICAgICAgY2xhc3MgUHJvcGVydGllc1ByaXZhdGU7 Ci0tICAgICAgUHJvcGVydGllc1ByaXZhdGUgKmQ7Ci0tICAgICAgCi0tICAgICAgdm9pZCBzZXQo aW50IGxlbmd0aCwgaW50IGJpdHJhdGUsIGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMpOwot LSAgICAgIAotLSAgICB9OwotLQotLSAgfQotLQotLX0KLS0KLS0jZW5kaWYgCi1JbmRleDogYW1h cm9rL3NyYy9tZXRhZGF0YS93bWEvTWFrZWZpbGUuYW0KLT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2sv c3JjL21ldGFkYXRhL3dtYS9NYWtlZmlsZS5hbQkocmV2aXNpb24gNzA1MjMxKQotKysrIGFtYXJv ay9zcmMvbWV0YWRhdGEvd21hL01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCi1AQCAtMSwyMCAr MCwwIEBACi0tU1VCRElSUyA9Ci0tCi0tSU5DTFVERVMgICAgICAgICAgID0gJChhbGxfaW5jbHVk ZXMpICQodGFnbGliX2luY2x1ZGVzKQotLU1FVEFTT1VSQ0VTICAgICAgICA9IEFVVE8KLS1saWJ0 YWd3bWFfbGFfTERGTEFHUyAgPSAkKGFsbF9saWJyYXJpZXMpCi0tbm9pbnN0X0xUTElCUkFSSUVT ID0gbGlidGFnd21hLmxhCi0tCi0tbGlidGFnd21hX2xhX1NPVVJDRVMgPSAgXAotLSAgICAgICAg ICAgICAgICAgICAgIHdtYWF0dHJpYnV0ZS5jcHAgXAotLSAgICAgICAgICAgICAgICAgICAgIHdt YXByb3BlcnRpZXMuY3BwIFwKLS0gICAgICAgICAgICAgICAgICAgICB3bWF0YWcuY3BwIFwKLS0g ICAgICAgICAgICAgICAgICAgICB3bWFmaWxlLmNwcCBcCi0tICAgICAgICAgICAgICAgICAgICAg dGFnbGliX3dtYWZpbGV0eXBlcmVzb2x2ZXIuY3BwCi0tCi0tbm9pbnN0X0hFQURFUlMgPSBcCi0t ICAgICAgICAgICAgICAgICAgICAgd21hYXR0cmlidXRlLmggXAotLSAgICAgICAgICAgICAgICAg ICAgIHdtYXByb3BlcnRpZXMuaCBcCi0tICAgICAgICAgICAgICAgICAgICAgd21hdGFnLmggXAot LSAgICAgICAgICAgICAgICAgICAgIHdtYWZpbGUuaCBcCi0tICAgICAgICAgICAgICAgICAgICAg dGFnbGliX3dtYWZpbGV0eXBlcmVzb2x2ZXIuaAotSW5kZXg6IGFtYXJvay9zcmMvbWV0YWRhdGEv d21hL3dtYWF0dHJpYnV0ZS5jcHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRh L3dtYS93bWFhdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiA3MDUyMzEpCi0rKysgYW1hcm9rL3NyYy9t ZXRhZGF0YS93bWEvd21hYXR0cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQotQEAgLTEsMjMxICsw LDAgQEAKLS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICAgIGNvcHlyaWdodCAgICAgICAgICAgIDog KEMpIDIwMDUgYnkgTHVrYXMgTGFsaW5za3kKLS0gICAgZW1haWwgICAgICAgICAgICAgICAgOiBs YWxpbnNreUBnbWFpbC5jb20KLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLQotLS8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0tICogICBpdCAgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAgKgotLSAq ICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAg ICAgICAgICAgICAgICAgICoKLS0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0tICogICBUaGlzIGxpYnJh cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0 ICAgKgotLSAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoKLS0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VICAgICAqCi0tICogICBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAg ICAgICAgICAgICAgKgotLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgICAgICAq Ci0tICogICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlICAgKgotLSAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCAgICAgICAgICAgICoKLS0gKiAgIE1BICAw MjExMC0xMzAxICBVU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqCi0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS0KLS0jaW5jbHVkZSA8d21hYXR0cmli dXRlLmg+Ci0tI2luY2x1ZGUgPHdtYWZpbGUuaD4KLS0KLS11c2luZyBuYW1lc3BhY2UgVGFnTGli OwotLQotLWNsYXNzIFdNQTo6QXR0cmlidXRlOjpBdHRyaWJ1dGVQcml2YXRlCi0tewotLXB1Ymxp YzoKLS0gIEF0dHJpYnV0ZVR5cGVzIHR5cGU7ICAgIAotLSAgU3RyaW5nIG5hbWU7Ci0tICBTdHJp bmcgdmFsdWVfc3RyaW5nOwotLSAgQnl0ZVZlY3RvciB2YWx1ZV9ieXRlczsKLS0gIHVuaW9uIHsK LS0gICAgaW50IHZhbHVlX2ludDsKLS0gICAgbG9uZyBsb25nIHZhbHVlX2xvbmdsb25nOwotLSAg fTsKLS19OwotLQotLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0tLy8gcHVibGljIG1lbWJlcnMK LS0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLQotLVdNQTo6QXR0cmlidXRlOjpBdHRyaWJ1dGUo KQotLXsKLS0gIGQgPSBuZXcgQXR0cmlidXRlUHJpdmF0ZTsKLS0gIGQtPm5hbWUgPSBTdHJpbmc6 Om51bGw7Ci0tICBkLT50eXBlID0gVW5pY29kZVR5cGU7Ci0tfQotLQotLVdNQTo6QXR0cmlidXRl OjpBdHRyaWJ1dGUoV01BOjpGaWxlICZmaWxlKQotLXsKLS0gIGQgPSBuZXcgQXR0cmlidXRlUHJp dmF0ZTsKLS0gIHBhcnNlKGZpbGUpOwotLX0KLS0KLS1XTUE6OkF0dHJpYnV0ZTo6QXR0cmlidXRl KGNvbnN0IFN0cmluZyAmbmFtZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKLS17Ci0tICBkID0gbmV3 IEF0dHJpYnV0ZVByaXZhdGU7Ci0tICBkLT5uYW1lID0gbmFtZTsKLS0gIGQtPnR5cGUgPSBVbmlj b2RlVHlwZTsKLS0gIGQtPnZhbHVlX3N0cmluZyA9IHZhbHVlOwotLX0KLS0KLS1XTUE6OkF0dHJp YnV0ZTo6QXR0cmlidXRlKGNvbnN0IFN0cmluZyAmbmFtZSwgY29uc3QgQnl0ZVZlY3RvciAmdmFs dWUpCi0tewotLSAgZCA9IG5ldyBBdHRyaWJ1dGVQcml2YXRlOwotLSAgZC0+bmFtZSA9IG5hbWU7 Ci0tICBkLT50eXBlID0gQnl0ZXNUeXBlOwotLSAgZC0+dmFsdWVfYnl0ZXMgPSB2YWx1ZTsKLS19 Ci0tCi0tV01BOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZShjb25zdCBTdHJpbmcgJm5hbWUsIHVuc2ln bmVkIGludCB2YWx1ZSkKLS17Ci0tICBkID0gbmV3IEF0dHJpYnV0ZVByaXZhdGU7Ci0tICBkLT5u YW1lID0gbmFtZTsKLS0gIGQtPnR5cGUgPSBEV29yZFR5cGU7Ci0tICBkLT52YWx1ZV9pbnQgPSB2 YWx1ZTsKLS19Ci0tCi0tV01BOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZShjb25zdCBTdHJpbmcgJm5h bWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSkKLS17Ci0tICBkID0gbmV3IEF0dHJpYnV0ZVBy aXZhdGU7Ci0tICBkLT5uYW1lID0gbmFtZTsKLS0gIGQtPnR5cGUgPSBRV29yZFR5cGU7Ci0tICBk LT52YWx1ZV9sb25nbG9uZyA9IHZhbHVlOwotLX0KLS0KLS1XTUE6OkF0dHJpYnV0ZTo6QXR0cmli dXRlKGNvbnN0IFN0cmluZyAmbmFtZSwgdW5zaWduZWQgc2hvcnQgdmFsdWUpCi0tewotLSAgZCA9 IG5ldyBBdHRyaWJ1dGVQcml2YXRlOwotLSAgZC0+bmFtZSA9IG5hbWU7Ci0tICBkLT50eXBlID0g V29yZFR5cGU7Ci0tICBkLT52YWx1ZV9pbnQgPSB2YWx1ZTsKLS19Ci0tCi0tV01BOjpBdHRyaWJ1 dGU6OkF0dHJpYnV0ZShjb25zdCBTdHJpbmcgJm5hbWUsIGJvb2wgdmFsdWUpCi0tewotLSAgZCA9 IG5ldyBBdHRyaWJ1dGVQcml2YXRlOwotLSAgZC0+bmFtZSA9IG5hbWU7Ci0tICBkLT50eXBlID0g Qm9vbFR5cGU7Ci0tICBkLT52YWx1ZV9pbnQgPSB2YWx1ZTsKLS19Ci0tCi0tV01BOjpBdHRyaWJ1 dGU6OkF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUgJmF0dHIpCi0tewotLSAgZCA9IG5ldyBBdHRy aWJ1dGVQcml2YXRlKCphdHRyLmQpOwotLX0gCi0tCi0tV01BOjpBdHRyaWJ1dGU6On5BdHRyaWJ1 dGUoKQotLXsKLS0gIGlmKGQpIAotLSAgICBkZWxldGUgZDsKLS19Ci0tCi0tU3RyaW5nIFdNQTo6 QXR0cmlidXRlOjpuYW1lKCkgY29uc3QKLS17Ci0tICByZXR1cm4gZC0+bmFtZTsKLS19Ci0tCi0t V01BOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZVR5cGVzIFdNQTo6QXR0cmlidXRlOjp0eXBlKCkgY29u c3QKLS17Ci0tICByZXR1cm4gZC0+dHlwZTsKLS19Ci0tCi0tU3RyaW5nIFdNQTo6QXR0cmlidXRl Ojp0b1N0cmluZygpIGNvbnN0Ci0tewotLSAgcmV0dXJuIGQtPnZhbHVlX3N0cmluZzsKLS19Ci0t Ci0tQnl0ZVZlY3RvciBXTUE6OkF0dHJpYnV0ZTo6dG9CeXRlVmVjdG9yKCkgY29uc3QKLS17Ci0t ICByZXR1cm4gZC0+dmFsdWVfYnl0ZXM7Ci0tfQotLQotLWludCBXTUE6OkF0dHJpYnV0ZTo6dG9J bnQoKSBjb25zdAotLXsKLS0gIGlmIChkLT50eXBlID09IFVuaWNvZGVUeXBlKQotLSAgICByZXR1 cm4gZC0+dmFsdWVfc3RyaW5nLnRvSW50KCk7Ci0tICBlbHNlCi0tICAgIHJldHVybiBkLT52YWx1 ZV9pbnQ7Ci0tfQotLQotLWxvbmcgbG9uZyBXTUE6OkF0dHJpYnV0ZTo6dG9Mb25nTG9uZygpIGNv bnN0Ci0tewotLSAgcmV0dXJuIGQtPnZhbHVlX2xvbmdsb25nOwotLX0KLS0KLS1ib29sIFdNQTo6 QXR0cmlidXRlOjpwYXJzZShXTUE6OkZpbGUgJmYpCi0tewotLSAgaW50IHNpemUgPSBmLnJlYWRX T1JEKCk7Ci0tICBmLnJlYWRTdHJpbmcoc2l6ZSwgZC0+bmFtZSk7Ci0tICAKLS0gIGQtPnR5cGUg PSAoV01BOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZVR5cGVzKWYucmVhZFdPUkQoKTsKLS0gIHNpemUg PSBmLnJlYWRXT1JEKCk7Ci0tCi0tICBzd2l0Y2goZC0+dHlwZSkgewotLSAgY2FzZSBXb3JkVHlw ZToKLS0gICAgZC0+dmFsdWVfaW50ID0gZi5yZWFkV09SRCgpOwotLSAgICBicmVhazsKLS0gICAg Ci0tICBjYXNlIEJvb2xUeXBlOgotLSAgY2FzZSBEV29yZFR5cGU6Ci0tICAgIGQtPnZhbHVlX2lu dCA9IGYucmVhZERXT1JEKCk7Ci0tICAgIGJyZWFrOwotLSAgICAKLS0gIGNhc2UgUVdvcmRUeXBl OiAgCi0tICAgIGQtPnZhbHVlX2xvbmdsb25nID0gZi5yZWFkUVdPUkQoKTsKLS0gICAgYnJlYWs7 Ci0tICAgIAotLSAgY2FzZSBVbmljb2RlVHlwZTogIAotLSAgICBmLnJlYWRTdHJpbmcoc2l6ZSwg ZC0+dmFsdWVfc3RyaW5nKTsKLS0gICAgYnJlYWs7Ci0tICAgIAotLSAgY2FzZSBCeXRlc1R5cGU6 ICAKLS0gICAgZC0+dmFsdWVfYnl0ZXMgPSBmLnJlYWRCbG9jayhzaXplKTsKLS0gICAgYnJlYWs7 Ci0tICAgIAotLSAgZGVmYXVsdDoKLS0gICAgcmV0dXJuIGZhbHNlOyAKLS0gIH0KLS0gIAotLSAg cmV0dXJuIHRydWU7Ci0tfQotLQotLUJ5dGVWZWN0b3IgV01BOjpBdHRyaWJ1dGU6OnJlbmRlcigp IGNvbnN0Ci0tewotLSAgQnl0ZVZlY3RvciBkYXRhOwotLQotLSAgQnl0ZVZlY3RvciB2ID0gZC0+ bmFtZS5kYXRhKFN0cmluZzo6VVRGMTZMRSk7Ci0tICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpm cm9tU2hvcnQodi5zaXplKCkgKyAyLCBmYWxzZSkpOwotLSAgZGF0YS5hcHBlbmQodiArIEJ5dGVW ZWN0b3I6OmZyb21TaG9ydCgwLCBmYWxzZSkpOwotLSAgCi0tICBkYXRhLmFwcGVuZChCeXRlVmVj dG9yOjpmcm9tU2hvcnQoKGludClkLT50eXBlLCBmYWxzZSkpOwotLSAgICAKLS0gIHN3aXRjaCAo ZC0+dHlwZSkgewotLSAgY2FzZSBXb3JkVHlwZToKLS0gICAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rv cjo6ZnJvbVNob3J0KDIsIGZhbHNlKSk7Ci0tICAgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZy b21TaG9ydChkLT52YWx1ZV9pbnQsIGZhbHNlKSk7Ci0tICAgIGJyZWFrOwotLSAgICAgIAotLSAg Y2FzZSBCb29sVHlwZToKLS0gIGNhc2UgRFdvcmRUeXBlOgotLSAgICBkYXRhLmFwcGVuZChCeXRl VmVjdG9yOjpmcm9tU2hvcnQoNCwgZmFsc2UpKTsKLS0gICAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rv cjo6ZnJvbVVJbnQoZC0+dmFsdWVfaW50LCBmYWxzZSkpOwotLSAgICBicmVhazsKLS0gICAgICAK LS0gIGNhc2UgUVdvcmRUeXBlOgotLSAgICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tU2hv cnQoOCwgZmFsc2UpKTsKLS0gICAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rvcjo6ZnJvbUxvbmdMb25n KGQtPnZhbHVlX2xvbmdsb25nLCBmYWxzZSkpOwotLSAgICBicmVhazsKLS0gICAgICAKLS0gIGNh c2UgVW5pY29kZVR5cGU6Ci0tICAgIHYgPSBkLT52YWx1ZV9zdHJpbmcuZGF0YShTdHJpbmc6OlVU RjE2TEUpOwotLSAgICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tU2hvcnQodi5zaXplKCkg KyAyLCBmYWxzZSkpOwotLSAgICBkYXRhLmFwcGVuZCh2ICsgQnl0ZVZlY3Rvcjo6ZnJvbVNob3J0 KDAsIGZhbHNlKSk7Ci0tICAgIGJyZWFrOwotLSAgICAKLS0gIGNhc2UgQnl0ZXNUeXBlOgotLSAg ICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tU2hvcnQoZC0+dmFsdWVfYnl0ZXMuc2l6ZSgp LCBmYWxzZSkpOwotLSAgICBkYXRhLmFwcGVuZChkLT52YWx1ZV9ieXRlcyk7Ci0tICAgIGJyZWFr OwotLSAgICAKLS0gIGRlZmF1bHQ6ICAKLS0gICAgcmV0dXJuIEJ5dGVWZWN0b3I6Om51bGw7IAot LSAgfQotLSAgCi0tICByZXR1cm4gZGF0YTsKLS19Ci0tCi0tCi1JbmRleDogYW1hcm9rL3NyYy9t ZXRhZGF0YS93bWEvd21hZmlsZS5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9tZXRhZGF0 YS93bWEvd21hZmlsZS5oCShyZXZpc2lvbiA3MDUyMzEpCi0rKysgYW1hcm9rL3NyYy9tZXRhZGF0 YS93bWEvd21hZmlsZS5oCSh3b3JraW5nIGNvcHkpCi1AQCAtMSwxMDAgKzAsMCBAQAotLS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLS0gICAgY29weXJpZ2h0ICAgICAgICAgICAgOiAoQykgMjAwNSBieSBM dWthcyBMYWxpbnNreQotLSAgICBlbWFpbCAgICAgICAgICAgICAgICA6IGxhbGluc2t5QGdtYWls LmNvbQotLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0tCi0tLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLSAq ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgICoKLS0gKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uICAqCi0tICogICAyLjEgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAg ICAgKgotLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0tICogICBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m ICAgICAgICAgICAgKgotLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICoKLS0gKiAgIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAq Ci0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLS0gKiAgIExpY2Vu c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUgICAqCi0tICogICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sICAgICAgICAgICAgKgotLSAqICAgTUEgIDAyMTEwLTEzMDEgIFVT QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0g KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotLQotLSNpZm5kZWYgVEFHTElCX1dNQUZJTEVfSAotLSNkZWZp bmUgVEFHTElCX1dNQUZJTEVfSAotLQotLSNpbmNsdWRlIDx0ZmlsZS5oPgotLSNpbmNsdWRlIDx0 YWcuaD4KLS0jaW5jbHVkZSAid21hcHJvcGVydGllcy5oIgotLSNpbmNsdWRlICJ3bWF0YWcuaCIK LS0KLS1uYW1lc3BhY2UgVGFnTGliIHsKLS0KLS0gIG5hbWVzcGFjZSBXTUEgewotLSAgCi0tICAg IHN0cnVjdCBHVUlEOwotLSAgICAKLS0gICAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJZVEU7Ci0t ICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgV09SRDsKLS0gICAgdHlwZWRlZiB1bnNpZ25lZCBp bnQgRFdPUkQ7Ci0tICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFFXT1JEOwotLSAgICAK LS0gICAgY2xhc3MgRmlsZSA6IHB1YmxpYyBUYWdMaWI6OkZpbGUKLS0gICAgewotLSAgICAgICAg Ci0tICAgICAgZnJpZW5kIGNsYXNzIEF0dHJpYnV0ZTsKLS0KLS0gICAgcHVibGljOgotLQotLSAg ICAgIEZpbGUoY29uc3QgY2hhciAqZmlsZSwgYm9vbCByZWFkUHJvcGVydGllcyA9IHRydWUsIFBy b3BlcnRpZXM6OlJlYWRTdHlsZSBwcm9wZXJ0aWVzU3R5bGUgPSBQcm9wZXJ0aWVzOjpBdmVyYWdl KTsKLS0gICAgICAKLS0gICAgICB2aXJ0dWFsIH5GaWxlKCk7Ci0tICAgIAotLSAgICAgIC8qIQot LSAgICAgICAqIFJldHVybnMgdGhlIFRhZ0xpYjo6VGFnIGZvciB0aGlzIGZpbGUuIAotLSAgICAg ICAqLwotLSAgICAgIHZpcnR1YWwgVGFnTGliOjpUYWcgKnRhZygpIGNvbnN0OwotLQotLSAgICAg IC8qIQotLSAgICAgICAqIFJldHVybnMgdGhlIFdNQTo6VGFnIGZvciB0aGlzIGZpbGUuIAotLSAg ICAgICAqLwotLSAgICAgIHZpcnR1YWwgVGFnICpXTUFUYWcoKSBjb25zdDsKLS0KLS0gICAgICAv KiEKLS0gICAgICAgKiBSZXR1cm5zIHRoZSBXTUE6OlByb3BlcnRpZXMgZm9yIHRoaXMgZmlsZS4g Ci0tICAgICAgICovCi0tICAgICAgdmlydHVhbCBQcm9wZXJ0aWVzICphdWRpb1Byb3BlcnRpZXMo KSBjb25zdDsKLS0KLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBTYXZlIHRoZSBmaWxlLiAKLS0g ICAgICAgKgotLSAgICAgICAqIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBzYXZlIHdhcyBzdWNj ZXNzZnVsLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgYm9vbCBzYXZlKCk7Ci0tICAgIAot LSAgICBwcm90ZWN0ZWQ6Ci0tCi0tICAgICAgaW50IHJlYWRCWVRFKCk7Ci0tICAgICAgaW50IHJl YWRXT1JEKCk7Ci0tICAgICAgdW5zaWduZWQgaW50IHJlYWREV09SRCgpOwotLSAgICAgIGxvbmcg bG9uZyByZWFkUVdPUkQoKTsKLS0gICAgICB2b2lkIHJlYWRHVUlEKEdVSUQgJmcpOwotLSAgICAg IHZvaWQgcmVhZFN0cmluZyhpbnQgbGVuLCBTdHJpbmcgJnMpOwotLQotLSAgICAgIEJ5dGVWZWN0 b3IgcmVuZGVyQ29udGVudERlc2NyaXB0aW9uKCk7Ci0tICAgICAgQnl0ZVZlY3RvciByZW5kZXJF eHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbigpOwotLSAgICAgIAotLSAgICAgIHZvaWQgcmVhZChi b29sIHJlYWRQcm9wZXJ0aWVzLCBQcm9wZXJ0aWVzOjpSZWFkU3R5bGUgcHJvcGVydGllc1N0eWxl KTsKLS0KLS0gICAgcHJpdmF0ZToKLS0gICAgICAKLS0gICAgICBjbGFzcyBGaWxlUHJpdmF0ZTsK LS0gICAgICBGaWxlUHJpdmF0ZSAqZDsKLS0gICAgICAKLS0gICAgfTsKLS0gIAotLSAgfQotLQot LX0gIAotLQotLSNlbmRpZgotSW5kZXg6IGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3RhZ2xpYl93 bWFmaWxldHlwZXJlc29sdmVyLmNwcAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGFtYXJvay9zcmMvbWV0YWRh dGEvd21hL3RhZ2xpYl93bWFmaWxldHlwZXJlc29sdmVyLmNwcAkocmV2aXNpb24gNzA1MjMxKQot KysrIGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3RhZ2xpYl93bWFmaWxldHlwZXJlc29sdmVyLmNw cAkod29ya2luZyBjb3B5KQotQEAgLTEsNDcgKzAsMCBAQAotLS8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK LS0gICAgY29weXJpZ2h0ICAgICAgICAgICAgOiAoQykgMjAwNSBieSBNYXJ0aW4gQXVtdWVsbGVy Ci0tICAgIGVtYWlsICAgICAgICAgICAgICAgIDogYXVtdWVsbEByZXNlcnYuYXQKLS0gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwotLQotLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS0gKiAgIFRoaXMgbGlicmFy eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 ICAqCi0tICogICBpdCAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAgKgotLSAqICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqCi0tICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgKgotLSAqICAgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoK LS0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VICAgICAqCi0tICogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICoKLS0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgICAgICAqCi0tICogICBMaWNlbnNlIGFsb25nIHdpdGgg dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgKgotLSAq ICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCAgICAgICAgICAgICoKLS0gKiAgIE1BICAwMjExMC0xMzAxICBVU0EgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0tICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLS0KLS0vLyAoYykgMjAwNSBNYXJ0aW4gQXVtdWVsbGVyIDxhdW11ZWxsQHJlc2Vydi5h dD4KLS0vLyBTZWUgQ09QWUlORyBmaWxlIGZvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24KLS0KLS0j aW5jbHVkZSAidGFnbGliX3dtYWZpbGV0eXBlcmVzb2x2ZXIuaCIKLS0jaW5jbHVkZSAid21hZmls ZS5oIgotLQotLSNpbmNsdWRlIDxzdHJpbmcuaD4KLS0KLS1UYWdMaWI6OkZpbGUgKldNQUZpbGVU eXBlUmVzb2x2ZXI6OmNyZWF0ZUZpbGUoY29uc3QgY2hhciAqZmlsZU5hbWUsCi0tICAgICAgICBi b29sIHJlYWRQcm9wZXJ0aWVzLAotLSAgICAgICAgVGFnTGliOjpBdWRpb1Byb3BlcnRpZXM6OlJl YWRTdHlsZSBwcm9wZXJ0aWVzU3R5bGUpIGNvbnN0Ci0tewotLSAgICBjb25zdCBjaGFyICpleHQg PSBzdHJyY2hyKGZpbGVOYW1lLCAnLicpOwotLSAgICBpZihleHQgJiYgKCFzdHJjYXNlY21wKGV4 dCwgIi53bWEiKSB8fCAhc3RyY2FzZWNtcChleHQsICIuYXNmIikpKQotLSAgICB7Ci0tICAgICAg ICBUYWdMaWI6OldNQTo6RmlsZSAqZiA9IG5ldyBUYWdMaWI6OldNQTo6RmlsZShmaWxlTmFtZSwg cmVhZFByb3BlcnRpZXMsIHByb3BlcnRpZXNTdHlsZSk7Ci0tICAgICAgICBpZihmLT5pc1ZhbGlk KCkpCi0tICAgICAgICAgICAgcmV0dXJuIGY7Ci0tICAgICAgICBlbHNlCi0tICAgICAgICB7Ci0t ICAgICAgICAgICAgZGVsZXRlIGY7Ci0tICAgICAgICB9Ci0tICAgIH0KLS0KLS0gICAgcmV0dXJu IDA7Ci0tfQotSW5kZXg6IGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3dtYWF0dHJpYnV0ZS5oCi09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hYXR0cmlidXRlLmgJKHJl dmlzaW9uIDcwNTIzMSkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWFhdHRyaWJ1dGUu aAkod29ya2luZyBjb3B5KQotQEAgLTEsMTI1ICswLDAgQEAKLS0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ci0tICAgIGNvcHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUgYnkgTHVrYXMgTGFsaW5za3kK LS0gICAgZW1haWwgICAgICAgICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5jb20KLS0gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwotLQotLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS0gKiAgIFRoaXMgbGlicmFy eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 ICAqCi0tICogICBpdCAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAgKgotLSAqICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqCi0tICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgKgotLSAqICAgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoK LS0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VICAgICAqCi0tICogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICoKLS0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgICAgICAqCi0tICogICBMaWNlbnNlIGFsb25nIHdpdGgg dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgKgotLSAq ICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCAgICAgICAgICAgICoKLS0gKiAgIE1BICAwMjExMC0xMzAxICBVU0EgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0tICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLS0KLS0jaWZuZGVmIFRBR0xJQl9XTUFBVFRSSUJVVEVfSAotLSNkZWZpbmUgVEFHTElC X1dNQUFUVFJJQlVURV9ICi0tCi0tI2luY2x1ZGUgPHRzdHJpbmcuaD4KLS0jaW5jbHVkZSA8dGJ5 dGV2ZWN0b3IuaD4KLS0KLS1uYW1lc3BhY2UgVGFnTGliIHsKLS0KLS0gIG5hbWVzcGFjZSBXTUEg ewotLSAKLS0gICAgY2xhc3MgRmlsZTsgIAotLSAgICAgIAotLSAgICBjbGFzcyBBdHRyaWJ1dGUg ewotLQotLSAgICAgIGZyaWVuZCBjbGFzcyBGaWxlOyAgCi0tICAgICAgICAKLS0gICAgcHVibGlj OgotLQotLSAgICAgIC8qIQotLSAgICAgICAqIEVudW0gb2YgdHlwZXMgYW4gQXR0cmlidXRlIGNh biBoYXZlLgotLSAgICAgICAqLwotLSAgICAgIGVudW0gQXR0cmlidXRlVHlwZXMgewotLSAgICAg ICAgVW5pY29kZVR5cGUgPSAwLAotLSAgICAgICAgQnl0ZXNUeXBlICAgPSAxLAotLSAgICAgICAg Qm9vbFR5cGUgICAgPSAyLAotLSAgICAgICAgRFdvcmRUeXBlICAgPSAzLAotLSAgICAgICAgUVdv cmRUeXBlICAgPSA0LAotLSAgICAgICAgV29yZFR5cGUgICAgPSA1Ci0tICAgICAgfTsKLS0KLS0g ICAgICAvKiEKLS0gICAgICAgKiBDb25zdHJ1Y3RzIGFuIGVtcHR5IGF0dHJpYnV0ZS4KLS0gICAg ICAgKi8gICAgICAgCi0tICAgICAgQXR0cmlidXRlKCk7Ci0tICAgICAgCi0tICAgICAgLyohCi0t ICAgICAgICogQ29uc3RydWN0cyBhbiBhdHRyaWJ1dGUgd2l0aCBcYSBrZXkgYW5kIFxhIHZhbHVl LgotLSAgICAgICAqLyAgICAgICAKLS0gICAgICBBdHRyaWJ1dGUoY29uc3QgU3RyaW5nICZrZXks IGNvbnN0IFN0cmluZyAmdmFsdWUpOwotLSAgICAgIEF0dHJpYnV0ZShjb25zdCBTdHJpbmcgJmtl eSwgY29uc3QgQnl0ZVZlY3RvciAmdmFsdWUpOwotLSAgICAgIEF0dHJpYnV0ZShjb25zdCBTdHJp bmcgJmtleSwgdW5zaWduZWQgaW50IHZhbHVlKTsKLS0gICAgICBBdHRyaWJ1dGUoY29uc3QgU3Ry aW5nICZrZXksIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSk7Ci0tICAgICAgQXR0cmlidXRlKGNv bnN0IFN0cmluZyAma2V5LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSk7Ci0tICAgICAgQXR0cmlidXRl KGNvbnN0IFN0cmluZyAma2V5LCBib29sIHZhbHVlKTsKLS0gICAgICAKLS0gICAgICAvKiEKLS0g ICAgICAgKiBDb25zdHJ1Y3QgYW4gYXR0cmlidXRlIGFzIGEgY29weSBvZiBcYSBpdGVtLgotLSAg ICAgICAqLwotLSAgICAgIEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUgJml0ZW0pOyAgICAgICAK LS0gICAgICAKLS0gICAgICAvKiEKLS0gICAgICAgKiBEZXN0cm95cyB0aGUgYXR0cmlidXRlLgot LSAgICAgICAqLyAKLS0gICAgICB2aXJ0dWFsIH5BdHRyaWJ1dGUoKTsKLS0KLS0gICAgICAvKiEK LS0gICAgICAgKiBSZXR1cm5zIHRoZSBuYW1lLgotLSAgICAgICAqLwotLSAgICAgIFN0cmluZyBu YW1lKCkgY29uc3Q7Ci0tICAgICAgCi0tICAgICAgLyohCi0tICAgICAgICogUmV0dXJucyB0eXBl IG9mIHRoZSB2YWx1ZS4KLS0gICAgICAgKi8KLS0gICAgICBBdHRyaWJ1dGVUeXBlcyB0eXBlKCkg Y29uc3Q7Ci0tICAgICAgCi0tICAgICAgLyohCi0tICAgICAgICogUmV0dXJucyB0aGUgdmFsdWUg YXMgYSBTdHJpbmcuCi0tICAgICAgICovCi0tICAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7 Ci0tICAgICAgCi0tICAgICAgLyohCi0tICAgICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSBC eXRlVmVjdG9yLgotLSAgICAgICAqLwotLSAgICAgIEJ5dGVWZWN0b3IgdG9CeXRlVmVjdG9yKCkg Y29uc3Q7Ci0tICAgICAgCi0tICAgICAgLyohCi0tICAgICAgICogUmV0dXJucyB0aGUgdmFsdWUg YXMgYW4gaW50ZWdlci4KLS0gICAgICAgKi8KLS0gICAgICBpbnQgdG9JbnQoKSBjb25zdDsKLS0g ICAgICAKLS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGxvbmcg bG9uZy4KLS0gICAgICAgKi8KLS0gICAgICBsb25nIGxvbmcgdG9Mb25nTG9uZygpIGNvbnN0Owot LSAgICAgIAotLSAgICAgIEJ5dGVWZWN0b3IgcmVuZGVyKCkgY29uc3Q7Ci0tICAgICAgCi0tICAg IHByb3RlY3RlZDoKLS0gICAgCi0tICAgICAgQXR0cmlidXRlKFdNQTo6RmlsZSAmZmlsZSk7Ci0t ICAgICAgYm9vbCBwYXJzZShXTUE6OkZpbGUgJmZpbGUpOwotLSAgICAgIAotLSAgICBwcml2YXRl OgotLSAgICAgIAotLSAgICAgIGNsYXNzIEF0dHJpYnV0ZVByaXZhdGU7Ci0tICAgICAgQXR0cmli dXRlUHJpdmF0ZSAqZDsKLS0gICAgCi0tICAgIH07Ci0tICAKLS0gIH0KLS0gIAotLX0KLS0KLS0j ZW5kaWYKLQotUHJvcGVydHkgY2hhbmdlcyBvbjogYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEKLV9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KLU5hbWU6IHN2bjppZ25vcmUKLSAgIC0gLmxpYnMKLS5kZXBzCi1NYWtlZmlsZQot TWFrZWZpbGUuaW4KLQotCi1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS90cGx1Z2lucy5jcHAK LT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL3RwbHVnaW5zLmNwcAkocmV2aXNp b24gNzA1MjMxKQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEvdHBsdWdpbnMuY3BwCSh3b3JraW5n IGNvcHkpCi1AQCAtNDIsOCArNDIsOCBAQAotICNpbmNsdWRlICJ3YXZwYWNrL3d2ZmlsZS5oIgot ICNpbmNsdWRlICJzcGVleC90YWdsaWJfc3BlZXhmaWxldHlwZXJlc29sdmVyLmgiCi0gI2luY2x1 ZGUgInNwZWV4L3NwZWV4ZmlsZS5oIgotLSNpbmNsdWRlICJ3bWEvdGFnbGliX3dtYWZpbGV0eXBl cmVzb2x2ZXIuaCIKLS0jaW5jbHVkZSAid21hL3dtYWZpbGUuaCIKLSsjaW5jbHVkZSAiYXNmL3Rh Z2xpYl9hc2ZmaWxldHlwZXJlc29sdmVyLmgiCi0rI2luY2x1ZGUgImFzZi9hc2ZmaWxlLmgiCi0g I2luY2x1ZGUgInJtZmYvdGFnbGliX3JlYWxtZWRpYWZpbGV0eXBlcmVzb2x2ZXIuaCIKLSAjaW5j bHVkZSAicm1mZi90YWdsaWJfcmVhbG1lZGlhZmlsZS5oIgotICNpbmNsdWRlICJhdWRpYmxlL3Rh Z2xpYl9hdWRpYmxlZmlsZXR5cGVyZXNvbHZlci5oIgotQEAgLTk1LDcgKzk1LDcgQEAKLSAgICAg ICAgICAgICB8fCBtaW1ldHlwZS0+aXMoICJ2aWRlby94LW1zdmlkZW8iICkKLSAgICAgICAgICAg ICB8fCBtaW1ldHlwZS0+aXMoICJ2aWRlby94LW1zLXdtdiIgKSApCi0gICAgIHsKLS0gICAgICAg IHJldHVybiBuZXcgVGFnTGliOjpXTUE6OkZpbGUoZmlsZU5hbWUsIHJlYWRQcm9wZXJ0aWVzLCBw cm9wZXJ0aWVzU3R5bGUpOwotKyAgICAgICAgcmV0dXJuIG5ldyBUYWdMaWI6OkFTRjo6RmlsZShm aWxlTmFtZSwgcmVhZFByb3BlcnRpZXMsIHByb3BlcnRpZXNTdHlsZSk7Ci0gICAgIH0KLSAgICAg ZWxzZSBpZiggbWltZXR5cGUtPmlzKCAiYXVkaW8vdm5kLnJuLXJlYWxhdWRpbyIgKQotICAgICAg ICAgICAgIHx8IG1pbWV0eXBlLT5pcyggImF1ZGlvL3gtcG4tcmVhbGF1ZGlvIiApCi1AQCAtMTMw LDcgKzEzMCw3IEBACi0gewotICAgICAvL1RhZ0xpYjo6RmlsZVJlZjo6YWRkRmlsZVR5cGVSZXNv bHZlcihuZXcgTWltZVR5cGVGaWxlVHlwZVJlc29sdmVyKTsKLSAgICAgVGFnTGliOjpGaWxlUmVm OjphZGRGaWxlVHlwZVJlc29sdmVyKG5ldyBNUDRGaWxlVHlwZVJlc29sdmVyKTsKLS0gICAgVGFn TGliOjpGaWxlUmVmOjphZGRGaWxlVHlwZVJlc29sdmVyKG5ldyBXTUFGaWxlVHlwZVJlc29sdmVy KTsKLSsgICAgVGFnTGliOjpGaWxlUmVmOjphZGRGaWxlVHlwZVJlc29sdmVyKG5ldyBBU0ZGaWxl VHlwZVJlc29sdmVyKTsKLSAgICAgVGFnTGliOjpGaWxlUmVmOjphZGRGaWxlVHlwZVJlc29sdmVy KG5ldyBSZWFsTWVkaWFGaWxlVHlwZVJlc29sdmVyKTsKLSAgICAgVGFnTGliOjpGaWxlUmVmOjph ZGRGaWxlVHlwZVJlc29sdmVyKG5ldyBBdWRpYmxlRmlsZVR5cGVSZXNvbHZlcik7Ci0gICAgIFRh Z0xpYjo6RmlsZVJlZjo6YWRkRmlsZVR5cGVSZXNvbHZlcihuZXcgQUFDRmlsZVR5cGVSZXNvbHZl cik7Ci1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS9NYWtlZmlsZS5hbQotPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0tIGFtYXJvay9zcmMvbWV0YWRhdGEvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDcwNTIzMSkKLSsr KyBhbWFyb2svc3JjL21ldGFkYXRhL01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCi1AQCAtNiw3 ICs2LDcgQEAKLSBNUDRfTERBREQgPSBtNGEvbGlidGFnbTRhLmxhCi0gZW5kaWYKLSAKLS1TVUJE SVJTID0gc3BlZXggd2F2cGFjayB0cnVlYXVkaW8gd21hIGF1ZGlibGUgcm1mZiAkKE1QNF9TVUJE SVIpIGFhYyB3YXYKLStTVUJESVJTID0gc3BlZXggd2F2cGFjayB0cnVlYXVkaW8gYXNmIGF1ZGli bGUgcm1mZiAkKE1QNF9TVUJESVIpIGFhYyB3YXYKLSAKLSAKLSBJTkNMVURFUyAgICAgICAgICAg PSAtSSQodG9wX3NyY2RpcikvYW1hcm9rL3NyYyAkKGFsbF9pbmNsdWRlcykgJCh0YWdsaWJfaW5j bHVkZXMpCi1AQCAtMjQsNyArMjQsNyBAQAotICAgICAgICAgICAgICAgICAgICAgIHNwZWV4L2xp YnRhZ3NwZWV4LmxhIFwKLSAgICAgICAgICAgICAgICAgICAgICB0cnVlYXVkaW8vbGlidGFndHJ1 ZWF1ZGlvLmxhIFwKLSAgICAgICAgICAgICAgICAgICAgICB3YXZwYWNrL2xpYnRhZ3dhdnBhY2su bGEgXAotLSAgICAgICAgICAgICAgICAgICAgIHdtYS9saWJ0YWd3bWEubGEgXAotKyAgICAgICAg ICAgICAgICAgICAgIGFzZi9saWJ0YWdhc2YubGEgXAotICAgICAgICAgICAgICAgICAgICAgIHdh di9saWJ0YWd3YXYubGEgXAotICAgICAgICAgICAgICAgICAgICAgIHJtZmYvbGlidGFncmVhbG1l ZGlhLmxhIFwKLSAgICAgICAgICAgICAgICAgICAgICAkKE1QNF9MREFERCkgXAoKZGlmZiAtLWdp dCBhL2FtYXJvay5zcGVjIGIvYW1hcm9rLnNwZWMKaW5kZXggMjhlMTE1MS4uNjNmNjU3NSAxMDA2 NDQKLS0tIGEvYW1hcm9rLnNwZWMKKysrIGIvYW1hcm9rLnNwZWMKQEAgLTUsOCArNSw4IEBACiAK IE5hbWU6ICAgICAgIGFtYXJvawogU3VtbWFyeTogICAgTWVkaWEgcGxheWVyCi1WZXJzaW9uOiAg ICAxLjQuNwotUmVsZWFzZTogICAgMTQlez9kaXN0fQorVmVyc2lvbjogICAgMS40LjgKK1JlbGVh c2U6ICAgIDElez9kaXN0fQogCiBHcm91cDogCSAgICBBcHBsaWNhdGlvbnMvTXVsdGltZWRpYQog TGljZW5zZTogICAgR1BMdjIrCkBAIC0xNCwyMSArMTQsMTIgQEAgVXJsOiAgICAgICAgaHR0cDov L2FtYXJvay5rZGUub3JnCiAjIGh0dHA6Ly9kb3dubG9hZC5rZGUub3JnL2Rvd25sb2FkLnBocD91 cmw9c3RhYmxlL2FtYXJvay8xLjQuMy9zcmMKICNTb3VyY2UwOiAgICBodHRwOi8vbWlycm9ycy5p c2Mub3JnL3B1Yi9rZGUvc3RhYmxlL2FtYXJvay8le3ZlcnNpb259L3NyYy9hbWFyb2stJXt2ZXJz aW9ufS50YXIuYnoyCiBTb3VyY2UwOiAgICBmdHA6Ly9mdHAua2RlLm9yZy9wdWIva2RlL3N0YWJs ZS9hbWFyb2svJXt2ZXJzaW9ufS9zcmMvYW1hcm9rLSV7dmVyc2lvbn0udGFyLmJ6MgotIyBLREUg YnVnIDE0NzEyNjogYW1hcm9rIGZyZWV6ZXMgd2hlbiB0cnlpbmcgdG8gcGxheSBtcDMgZmlsZXMg d2l0aG91dCBtcDMgc3VwcG9ydAotUGF0Y2gwOiAgICAgYW1hcm9rLTEuNC43LTE0NzEyNi5wYXRj aAotIyBGZWRvcmEgYnVnIDI0Mjg2MjogQW1hcm9rIGRvZXNuJ3Qgc3VwcG9ydCB0cmFuc2ZlciBv ZiBVbmljb2RlIGZpbGVuYW1lcyB0byBNVFAgZGV2aWNlcwotUGF0Y2gxOiAgICAgYW1hcm9rLTEu NC43LXV0ZjgucGF0Y2gKK0J1aWxkUm9vdDogICAgICAle190bXBwYXRofS8le25hbWV9LSV7dmVy c2lvbn0tJXtyZWxlYXNlfS1yb290LSUoJXtfX2lkX3V9IC1uKQorCiAjIFVzZSB4ZGctb3BlbiB0 byBzdGFydCB0aGUgc2VsZWN0ZWQgYnJvd3NlcgogUGF0Y2gyOiAgICAgYW1hcm9rLTEuNC43LXhk Zy5wYXRjaAotIyBodHRwOi8vYnVncy5rZGUub3JnLzE0ODMxNyAtIGR5bmFtaWMgbW9kZSBmbG9v ZHMgcGxheWxpc3QgLi4uCi0jIGh0dHA6Ly93ZWJzdm4ua2RlLm9yZy9icmFuY2hlcy9zdGFibGUv ZXh0cmFnZWFyL211bHRpbWVkaWEvYW1hcm9rL3NyYy9wbGF5bGlzdC5jcHA/cjE9NzA1NDk0JnIy PTcwNTQ5MyZwYXRocmV2PTcwNTQ5NCZ2aWV3PXBhdGNoCi1QYXRjaDM6ICAgICBhbWFyb2stMS40 LjctMTQ4MzE3LnBhdGNoIAotIyBmaXggYXNmL3dtYSBzdXBwb3J0ICh3aXRoIHJlY2VudCB0YWds aWIpCi0jIHN2biBkaWZmIGFtYXJvay9zcmMvbWV0YWRhdGEgLS1yZXZpc2lvbiA3MDUyMzEKLVBh dGNoNDogICAgIGFtYXJvay1hc2YucGF0Y2gKLUJ1aWxkUm9vdDogICAgICAle190bXBwYXRofS8l e25hbWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfS1yb290LSUoJXtfX2lkX3V9IC1uKQogCi1CdWls ZFJlcXVpcmVzOiAgYXV0b21ha2UgbGlidG9vbAorI0J1aWxkUmVxdWlyZXM6ICBhdXRvbWFrZSBs aWJ0b29sCiBCdWlsZFJlcXVpcmVzOiAgYWxzYS1saWItZGV2ZWwKIEJ1aWxkUmVxdWlyZXM6ICBk ZXNrdG9wLWZpbGUtdXRpbHMKIEJ1aWxkUmVxdWlyZXM6ICBlc291bmQtZGV2ZWwKQEAgLTEwOCwy MCArOTksMTQgQEAgdXNlIGFueSBvZiB4bW1zJyB2aXN1YWxpc2F0aW9uIHBsdWdpbnMgd2l0aCBB bWFyb2suCiAlcHJlcAogJXNldHVwIC1xIAogCi0lcGF0Y2gwIC1wMCAtYiAuMTQ3MTI2Ci0lcGF0 Y2gxIC1wMSAtYiAudXRmOAogJXBhdGNoMiAtcDEgLWIgLnhkZwotJXBhdGNoMyAtcDQgLWIgLjE0 ODMxNwotJXBhdGNoNCAtcDAgLWIgLmFzZgotCi0jIGZvciBwYXRjaDQKLW1ha2UgLWYgYWRtaW4v TWFrZWZpbGUuY29tbW9uIAogCiAKICVidWlsZAogdW5zZXQgUVRESVIgJiYgLiAle19zeXNjb25m ZGlyfS9wcm9maWxlLmQvcXQuc2gKKwogJWNvbmZpZ3VyZSBcCi0gICAgIC0tZGlzYWJsZS1kZWJ1 ZyBcCisgICAgIC0tZGlzYWJsZS1kZWJ1ZyAtLWRpc2FibGUtd2FybmluZ3MgXAogICAgICAtLWRp c2FibGUtcnBhdGggXAogICAgICAtLWVuYWJsZS1teXNxbCBcCiAgICAgIC0tZW5hYmxlLXBvc3Rn cmVzcWwgXApAQCAtMjY3LDYgKzI1Miw5IEBAIHJtIC1mciAkUlBNX0JVSUxEX1JPT1QKIAogCiAl Y2hhbmdlbG9nCisqIFRodSBEZWMgMjAgMjAwNyBSZXggRGlldGVyIDxyZGlldGVyW0FUXWZlZG9y YXByb2plY3Qub3JnPiAxLjQuOC0xCistIGFtYXJvay0xLjQuOAorCiAqIEZyaSBEZWMgMDcgMjAw NyBBbGV4IExhbmNhc3RlciA8YWxleGxhbltBVF1mZWRvcmFwcm9qZWN0Lm9yZz4gMS40LjctMTQK IC0gUmVidWlsZCBmb3IgbmV3IG9wZW5zc2wKIAoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3Vy Y2VzCmluZGV4IDQyM2I1NTkuLmFiM2VlMDIgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291 cmNlcwpAQCAtMSArMSBAQAotZjEyOTllMTQyZGE4YTY5YmMzY2ZmNWQ1ODVlMzhkNDMgIGFtYXJv ay0xLjQuNy50YXIuYnoyCis3ZjY1YzRhOGYzZjBmZjkwNDJhNWI1ZGQyMWIzNmNjOCAgYW1hcm9r LTEuNC44LnRhci5iejIK